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
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
• 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
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
. 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
/ : 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
" 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
/ 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
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
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
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
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
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
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
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
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
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