Dynamic sort_by criteria, making it DRY

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

On 28.06.2007 13:41, Josselin wrote:

item.<@criteria> } : user_buddies.sort_by {|item| item.<@criteria>
}.reverse!

thanks for your enlightment !

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

Kind regards

robert

On 2007-06-28 13:58:47 +0200, Robert K. [email protected]
said:

=> buddies = user_buddies.sort_by {|item| item.<@criteria> }
=> buddies = @reverse_order ? user_buddies.sort_by {|item|
robert
Thanks Robert cannot be dryest… I am so ashame of my solution that
I don’t want to publish my code…

On 29.06.2007 08:12, Josselin wrote:

I would like to be able to do the same , based on a variable

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

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

On 2007-06-28 23:18:36 +0200, Josselin [email protected] said:

@criteria = ‘last_seen_at’ @criteria = ‘display_name’ …
I believe it should be
Kind regards

robert

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