Dynamic sort_by criteria, making it DRY...

J

Josselin

I am presently using a sort_by on my array

=> buddies = user_buddies.sort_by {|item| item.last_seen_at}

I would like to be able to do the same , based on a variable
@criteria set to the item key to be used

@criteria = 'last_seen_at' @criteria = 'display_name' ......

=> buddies = user_buddies.sort_by {|item| item.<@criteria> }

what could be the best way to do it ?

Depending upon another variable @reverse_order = true or false, I would
like to perform or not teh reverse! action

=> buddies = user_buddies.sort_by {|item| item.last_seen_at}.reverse!

I believe it should be

=> buddies = @reverse_order ? user_buddies.sort_by {|item|
item.<@criteria> } : user_buddies.sort_by {|item| item.<@criteria>
}.reverse!

thanks for your enlightment !

joss
 
J

Josselin

buddies = user_buddies.sort_by {|it| it.send @criteria}
buddies.reverse! if @reverse_order

Kind regards

robert

Thanks Robert cannot be dryest.... I am so ashame of my solution that
I don't want to publish my code...
 
J

Josselin

Thanks Robert cannot be dryest.... I am so ashame of my solution that
I don't want to publish my code...

btw , where should I write the 'downcase' method for strings

I tried to write it into the @criteria (@criteria = 'display_name.downcase' )
which seems to be the right place..

but I got an error
undefined method `display_name.downcase' for #<User:0x34bc34c>

thanks for your complementary solution... ;-))

joss
 
R

Robert Klemme

btw , where should I write the 'downcase' method for strings

I tried to write it into the @criteria (@criteria =
'display_name.downcase' )
which seems to be the right place..

but I got an error
undefined method `display_name.downcase' for #<User:0x34bc34c>

thanks for your complementary solution... ;-))

joss

buddies = user_buddies.sort_by {|it| it.send(@criteria).downcase}

But this works only if you know that all criteria are strings.

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,060
Latest member
BuyKetozenseACV

Latest Threads

Top