Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Five Gems - Coimbra.rb

Five Gems - Coimbra.rb

Talk given at the 2nd edition of Coimbra.rb about five gems I find useful.

Avatar for Guilherme Simões

Guilherme Simões

December 13, 2013

Other Decks in Programming

Transcript

  1. jquery-rails-cdn # a p p / v i e w

    s / l a y o u t s / a p p l i c a t i o n . h t m l . e r b < % = j a v a s c r i p t _ i n c l u d e _ t a g " / / a j a x . g o o g l e a p i s . c o m / j q u e r y . m i n . j s " % > < % = j a v a s c r i p t _ i n c l u d e _ t a g " a p p l i c a t i o n " % > 4
  2. jquery-rails-cdn # a p p / v i e w

    s / l a y o u t s / a p p l i c a t i o n . h t m l . e r b < % = j q u e r y _ i n c l u d e _ t a g : g o o g l e % > < % = j a v a s c r i p t _ i n c l u d e _ t a g " a p p l i c a t i o n " % > 5
  3. jquery-rails-cdn • Supports multiple CDNs (Google, Microsoft, jQuery.com, CloudFlare, Yandex).

    • Automatically detects jQuery version via jquery-rails gem. • Automatically fallbacks to jQuery bundled with jquery-rails when: • You're on a development environment, so that you can work offline. • The CDN is down or unreachable. 6
  4. http_accept_language r e q u e s t . e

    n v [ " H T T P _ A C C E P T _ L A N G U A G E " ] # = > e n - G B , e n ; q = 0 . 8 , e n - U S ; q = 0 . 6 , p t - P T ; q = 0 . 4 , p t ; q = 0 . 2 h t t p _ a c c e p t _ l a n g u a g e . u s e r _ p r e f e r r e d _ l a n g u a g e s # = > [ " e n - G B " , " e n " , " e n - U S " , " p t - P T " , " p t " ] a v a i l a b l e = I 1 8 n . a v a i l a b l e _ l o c a l e s # = > [ : e n , : p t ] h t t p _ a c c e p t _ l a n g u a g e . p r e f e r r e d _ l a n g u a g e _ f r o m ( a v a i l a b l e ) # = > " e n " 8
  5. fastimage Finds the size or type of an image given

    its URL by fetching as little as needed. 9
  6. fastimage F a s t I m a g e

    . s i z e ( " h t t p : / / f a k e . u r l / f u n n y . g i f " ) # = > [ 3 0 0 , 5 0 ] # w i d t h , h e i g h t F a s t I m a g e . t y p e ( " h t t p : / / f a k e . u r l / p n g - i m a g e - w i t h - n o - e x t e n s i o n " ) # = > : p n g F a s t I m a g e . s i z e ( " h t t p : / / f a k e . u r l / l a r g e - i m a g e - t h a t - c a u s e s - D O S . j p g " , r a i s e _ o n _ f a i l u r e : t r u e , t i m e o u t : 0 . 5 ) # = > F a s t I m a g e : : I m a g e F e t c h F a i l u r e : F a s t I m a g e : : I m a g e F e t c h F a i l u r e 10
  7. fastimage • Supports multiple image types (GIF, JPEG, PNG, TIFF,

    BMP). • Follows up to 4 HTTP redirects to get the image. • Works with local files. 11
  8. omniauth Provides a standardized interface to many different authentication providers

    such as Facebook and OpenID. Also supports a traditional strategy using username and password. 12
  9. omniauth u s e O m n i A u

    t h : : B u i l d e r d o p r o v i d e r : g i t h u b , " G I T H U B _ K E Y " , " G I T H U B _ S E C R E T " e n d 13
  10. omniauth # s o m e _ v i e

    w . h t m l . e r b < % = l i n k _ t o " L o g i n w i t h G i t H u b " , " / a u t h / g i t h u b " % > 14
  11. omniauth g e t " / a u t h

    / : p r o v i d e r / c a l l b a c k " d o o m n i a u t h = e n v [ " o m n i a u t h . a u t h " ] r a i s e o m n i a u t h . t o _ y a m l e n d 15
  12. omniauth p r o v i d e r :

    " g i t h u b " u i d : " 5 3 1 1 6 8 " i n f o : n i c k n a m e : " G u i l h e r m e S i m o e s " e m a i l : " g u i l h e r m e . r d e m s @ g m a i l . c o m " n a m e : " G u i l h e r m e S i m õ e s " i m a g e : " h t t p s : / / s e c u r e . g r a v a t a r . c o m / a v a t a r / 4 8 0 f e c 4 e c 9 b f 2 0 7 c 7 3 9 b 4 b d 3 8 e a 9 8 a e u r l s : G i t H u b : " h t t p s : / / g i t h u b . c o m / G u i l h e r m e S i m o e s " e x t r a : 16
  13. omniauth g e t " / a u t h

    / f a i l u r e " d o f l a s h [ : n o t i c e ] = p a r a m s [ : m e s s a g e ] r e d i r e c t _ t o " / y o u - s u c k - f o r - n o t - l o g g i n g - i n - w i t h - G i t H u b " e n d 17
  14. figaro $ r a i l s g e n

    e r a t e f i g a r o : i n s t a l l # C r e a t e s a Y A M L c o n f i g f i l e a n d a d d s i t t o . g i t i g n o r e 19
  15. figaro # c o n f i g / a

    p p l i c a t i o n . y m l H E L L O : " w o r l d " d e v e l o p m e n t : H E L L O : " d e v e l o p e r s " p r o d u c t i o n : H E L L O : " u s e r s " 20
  16. figaro # c o n f i g / e

    n v i r o n m e n t s / d e v e l o p m e n t . r b c o n f i g . a c t i o n _ m a i l e r . d e f a u l t _ u r l _ o p t i o n s = { h o s t : " l o c a l h o s t : 3 0 0 0 " } # c o n f i g / e n v i r o n m e n t s / p r o d u c t i o n . r b c o n f i g . a c t i o n _ m a i l e r . d e f a u l t _ u r l _ o p t i o n s = { h o s t : " e x a m p l e . c o m " } 21
  17. figaro # c o n f i g / a

    p p l i c a t i o n . r b c o n f i g . a c t i o n _ m a i l e r . d e f a u l t _ u r l _ o p t i o n s = { h o s t : E N V [ " M A I L E R _ H O S T " ] } 22
  18. figaro # c o n f i g / e

    n v i r o n m e n t s / p r o d u c t i o n . r b c o n f i g . a c t i o n _ m a i l e r . s m t p _ s e t t i n g s = { u s e r _ n a m e : E N V [ " E M A I L _ U S E R _ N A M E " ] , p a s s w o r d : E N V [ " E M A I L _ P A S S W O R D " ] } 23
  19. figaro # c o n f i g / a

    p p l i c a t i o n . y m l M A I L E R _ H O S T : " l o c a l h o s t : 3 0 0 0 " p r o d u c t i o n : M A I L E R _ H O S T : " e x a m p l e . c o m " E M A I L _ P A S S W O R D : " s u p e r - d i f f i c u l t - p a s s w o r d " E M A I L _ U S E R _ N A M E : " a d m i n " 24
  20. figaro # c o n f i g / i

    n i t i a l i z e r s / o m n i a u t h . r b R a i l s . a p p l i c a t i o n . c o n f i g . m i d d l e w a r e . u s e O m n i A u t h : : B u i l d e r d o p r o v i d e r : f a c e b o o k , E N V [ " F A C E B O O K _ K E Y " ] , E N V [ " F A C E B O O K _ S E C R E T " ] p r o v i d e r : g o o g l e _ o a u t h 2 , E N V [ " G O O G L E _ K E Y " ] , E N V [ " G O O G L E _ S E C R E T " ] p r o v i d e r : t w i t t e r , E N V [ " T W I T T E R _ K E Y " ] , E N V [ " T W I T T E R _ S E C R E T " ] e n d 25
  21. figaro # c o n f i g / i

    n i t i a l i z e r s / s e c r e t _ t o k e n . r b Y o u r A p p : : A p p l i c a t i o n . c o n f i g . s e c r e t _ t o k e n = E N V [ " S E C R E T _ T O K E N " ] 26
  22. figaro $ h e r o k u c o

    n f i g : s e t S 3 _ K E Y = t o t a l l y r a n d o m s t r i n g $ h e r o k u c o n f i g : s e t S 3 _ S E C R E T = c l a s s i f i e d $ h e r o k u c o n f i g : s e t P U S H E R _ K E Y = n o p e n o p e n o p e n o p e n o p e $ h e r o k u c o n f i g : s e t P U S H E R _ S E C R E T = t o p s e c r e t $ h e r o k u c o n f i g : s e t P U S H E R _ A P P _ I D = i m o u t o f f u n n y i d e a s . . . 27
  23. figaro $ r a k e f i g a

    r o : h e r o k u # O n e c o m m a n d t o p u s h E N V v a r i a b l e s t o H e r o k u 28
  24. figaro alternatives • dotenv (used by capistrano) • heroku-config (used

    by foreman) • ... but why pick another gem when Figaro has such a cute mascot? 29
  25. Other Resources • The Protocol-relative URL • CDNs fail, but

    your scripts don't have to - fallback from CDN to local jQuery • Localizing Logically for a Global Marketplace • Social Login Buttons Aren’t Worth It • Rails Environment Variables 31