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

Skinny Controllers in Rails: What About Filtering and Sorting

Skinny Controllers in Rails: What About Filtering and Sorting

Kenneth Geerts

April 07, 2016
Tweet

Other Decks in Programming

Transcript

  1. c l a s s S u b s c

    r i p t i o n s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r l o a d _ a n d _ a u t h o r i z e _ r e s o u r c e c h e c k _ a u t h o r i z a t i o n h e l p e r _ m e t h o d : s o r t _ d i r e c t i o n , : s o r t _ c o l u m n d e f i n d e x i f s e a r c h _ p a r a m s . e m p t y ? @ s u b s c r i p t i o n s = @ s u b s c r i p t i o n s . o r d e r ( " # { s o r t _ c o l u m n } # { s o r t _ d i r e c t i o n } " ) . p a g i n a t e ( : p a g e = > p a r a m s . f e t c h ( : p a g e , 1 ) , : p e r _ p a g e = > p a r a m s . f e t c h ( : p e r _ p a g e , 1 0 ) ) . d e c o r a t e e l s e q u e r y , q u e r y _ p a r a m s = b u i l d _ q u e r y @ s u b s c r i p t i o n s = @ s u b s c r i p t i o n s . w h e r e ( q u e r y , q u e r y _ p a r a m s ) . o r d e r ( " # { s o r t _ c o l u m n } # { s o r t _ d i r e c t i o n } " ) .
  2. FAILS THE S IN SOLID REPETITION HARD TO TEST MISUNDERSTANDING

    OF ACTIVERECORD RELATIONS HARDCODED SQL VISIBILITY OF ACTIONS MAGIC NUMBERS
  3. DOUBLE AUTHORIZATION CHECKS l o a d _ a n

    d _ a u t h o r i z e _ r e s o u r c e c h e c k _ a u t h o r i z a t i o n
  4. SHARING OF THE HELPER METHODS h e l p e

    r _ m e t h o d : s o r t _ d i r e c t i o n , : s o r t _ c o l u m n p r i v a t e d e f s o r t _ c o l u m n % w ( n a m e c u s t o m e r _ n u m b e r p r e f e r r e d _ c h a n n e l ) . i n c l u d e ? ( p a r a m s [ : s o r t ] ) ? p a r a m s [ : s o r t ] : ' n a m e ' e n d d e f s o r t _ d i r e c t i o n % w ( a s c d e s c ) . i n c l u d e ? ( p a r a m s [ : d i r e c t i o n ] ) ? p a r a m s [ : d i r e c t i o n ] : ' a s c ' e n d
  5. d e f i n d e x i f

    s e a r c h _ p a r a m s . e m p t y ? @ s u b s c r i p t i o n s = @ s u b s c r i p t i o n s . o r d e r ( " # { s o r t _ c o l u m n } # { s o r t _ d i r e c t i o n } " ) . p a g i n a t e ( : p a g e = > p a r a m s . f e t c h ( : p a g e , 1 ) , : p e r _ p a g e = > p a r a m s . f e t c h ( : p e r _ p a g e , 1 0 ) ) . d e c o r a t e e l s e q u e r y , q u e r y _ p a r a m s = b u i l d _ q u e r y @ s u b s c r i p t i o n s = @ s u b s c r i p t i o n s . w h e r e ( q u e r y , q u e r y _ p a r a m s ) . o r d e r ( " # { s o r t _ c o l u m n } # { s o r t _ d i r e c t i o n } " ) . p a g i n a t e ( : p a g e = > p a r a m s . f e t c h ( : p a g e , 1 ) , : p e r _ p a g e = > p a r a m s . f e t c h ( : p e r _ p a g e , 1 0 ) ) . d e c o r a t e e n d e n d
  6. d e f s e a r c h _

    p a r a m s p = p a r a m s . p e r m i t ( : n a m e , : c u s t o m e r _ n u m b e r , : p r e f e r r e d _ c h a n n e l , : e m a i l , : u n i q u e _ e n t e r p r i s e _ n u m b e r , : s t a t u s ) p . d e l e t e _ i f { | k , v | v . b l a n k ? & & v ! = f a l s e } p e n d
  7. d e f b u i l d _ q

    u e r y q = [ ] p = { } i f ! s e a r c h _ p a r a m s [ : n a m e ] . b l a n k ? q < < ' n a m e i l i k e : n a m e ' p [ : n a m e ] = " % # { s e a r c h _ p a r a m s [ : n a m e ] } % " e n d # . . . i f ! s e a r c h _ p a r a m s [ : s t a t u s ] . b l a n k ? q < < ' s t a t u s = : s t a t u s ' p [ : s t a t u s ] = s e a r c h _ p a r a m s [ : s t a t u s ] e n d [ q . j o i n ( ' A N D ' ) , p ] e n d
  8. c l a s s S u b s c

    r i p t i o n < A c t i v e R e c o r d : : B a s e # I n s e r t d o m a i n l o g i c h e r e e n d
  9. s c o p e ( n a m e

    , s c o p e _ o p t i o n s = { } ) , p u b l i c Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query […].
  10. s c o p e : p r e f

    e r r e d _ c h a n n e l , - > ( p r e f e r r e d _ c h a n n e l ) { w h e r e ( p r e f e r r e d _ c h a n n e l : p r e f e r r e d _ c h a n n e l ) }
  11. s c o p e : n a m e

    , - > ( n a m e ) { w h e r e ( ' n a m e I L I K E ? ' , " % # { n a m e } % " ) }
  12. s c o p e : s t a t

    u s , - > ( s t a t u s ) { w h e r e ( s t a t u s : s t a t u s ) }
  13. d e f f o r _ p a r

    a m s ( p a r a m s ) r e s u l t s = s e l f . w h e r e ( n i l ) s o r t = p a r a m s . d e l e t e ( : s o r t ) d i r e c t i o n = p a r a m s . d e l e t e ( : d i r e c t i o n ) d i r e c t i o n = ' A S C ' u n l e s s d i r e c t i o n = = ' D E S C ' r e s u l t s = r e s u l t s . r e o r d e r ( " # { s o r t } # { d i r e c t i o n } " ) i f s o r t r e s u l t s = r e s u l t s . n a m e ( p a r a m s [ : n a m e ] ) i f p a r a m s [ : n a m e ] . p r e s e n t ? r e s u l t s = r e s u l t s . s t a t u s ( p a r a m s [ : s t a t u s ] ) i f p a r a m s [ : s t a t u s ] . p r e s e n t ? # r e p e a t f o r a l l t h e f i l t e r s r e s u l t s e n d
  14. c l a s s S u b s c

    r i p t i o n < A c t i v e R e c o r d : : B a s e d e f a u l t _ s c o p e { f o r _ p a r a m s ( s o r t : ' c u s t o m e r _ n a m e ' ) } s c o p e : c u s t o m e r _ n a m e , - > ( c u s t o m e r _ n a m e ) { . . . } s c o p e : c u s t o m e r _ n u m b e r , - > ( c u s t o m e r _ n u m b e r ) { . . . } s c o p e : p r e f e r r e d _ c h a n n e l , - > ( p r e f e r r e d _ c h a n n e l ) { . . . } s c o p e : e m a i l , - > ( e m a i l ) { . . . } s c o p e : u n i q u e _ e n t e r p r i s e _ n u m b e r , - > ( u n i q u e _ e n t e r p r i s e _ n u m b e r ) { . . . } s c o p e : s t a t u s , - > ( s t a t u s ) { . . . } d e f f o r _ p a r a m s ( p a r a m s ) # . . . e n d e n d
  15. c l a s s S u b s c

    r i p t i o n s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r l o a d _ a n d _ a u t h o r i z e _ r e s o u r c e d e f i n d e x @ s u b s c r i p t i o n s = @ s u b s c r i p t i o n s . f o r _ p a r a m s ( i n d e x _ p a r a m s ) e n d p r i v a t e d e f i n d e x _ p a r a m s p a r a m s . p e r m i t ( : n a m e , : c u s t o m e r _ n u m b e r , : p r e f e r r e d _ c h a n n e l , : e m a i l , : s t a t u s , : s o r t , : d i r e c t i o n , : p a g e , : p e r _ p a g e ) e n d e n d