From: Sebastian Date: 2006-12-12T09:50:10+09:00 Subject: Re: Inserting surrounding scope into singelton method definition Wonderful! For some reason the 2-argument notation in your example didn't work for me, but with a Proc as the method definition body all is dandy. I had tried class_eval before but ignorantly used it on the array instance instead, which of course doesnt work. So, thanks very much for your help. Here's the final code: returning find(:all, :order => "#{sort_by_term} #{sort_order_term}") do |results| (class << results; self; end).class_eval do define_method(:sorted_by?) { sort_by_term } define_method(:sort_order?) { sort_order_term } end end On 2006-12-11 18:02:34 -0600, dblack@wobblini.net said: > Hi -- > > On Tue, 12 Dec 2006, Sebastia wrote: > >> I have a sorted array (in this case, an ActiveRecord result set) that i >> want to give awareness of its sorting state. I defined a singelton >> method on the array but i can't figure out how to insert a value from >> the surrounding scope. Below is the best i could come up with, but it >> seems quite horrid (and using plain eval would be even worse i >> suppose). I seem to remember that there was a better way... Anybody? >> >> Thanks, >> Sebastian >> >> sort_term = "label" >> results = User.find(:all, :order => sort_term) >> >> class << results >> def sorted_by? >> @sorted_by_term >> end >> end >> >> results.instance_variable_set("@sorted_by_term",sort_term) > > To get through the barrier of the class and def scopes, you can use > class_eval and define_method: > > (class << results; self; end).class_eval do > define_method(:sorted_by?, sort_term) > end > > or something along those lines. > > > David