From: Josselin Date: 2007-06-29T15:15:02+09:00 Subject: Re: Dynamic sort_by criteria, making it DRY... thanks Robert ! On 2007-06-28 23:18:36 +0200, Josselin said: > On 2007-06-28 13:58:47 +0200, Robert Klemme said: > >> On 28.06.2007 13:41, Josselin wrote: >>> 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 ! >> >> 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... 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 # thanks for your complementary solution... ;-)) joss