hi again, all.
I have the following plugin included in my active record model.
What i’d like to do, is define a method inside class_eval which returns
the options has that was passed into it via the acts_as_item :foo=>:bar
in my model.
What i’m finding odd is that the self.foo method can access the config
hash when printing it, but not when i try to return it.
puts “OK FOO: #{config[:asset_root]}” - outputs ok, whereas the return
config raises a method or variable not found error.
Any ideas?
best,
paul.
module ClassMethods
def acts_as_item(options = {})
include InstanceMethods
config = {:asset_root=>"SOMEPATH"}
config.update(options) if options.is_a?(Hash)
class_eval <<-EOE
def self.foo
puts "OK FOO: #{config[:asset_root]}"
return config
end
EOE
end
end
On Feb 25, 6:28 pm, Paul PH [email protected] wrote:
hi again, all.
I have the following plugin included in my active record model.
What i’d like to do, is define a method inside class_eval which returns
the options has that was passed into it via the acts_as_item :foo=>:bar
in my model.
What i’m finding odd is that the self.foo method can access the config
hash when printing it, but not when i try to return it.
Two very different things are happening: with the puts config is being
resolved just before class_eval is called: the string is interpolated
and the result passed to class_eval.
The return statement on the other hand is evaluated much later - when
the foo method is actually called. config is no longer in scope and so
you get an error.
Fred
Frederick C. wrote:
On Feb 25, 6:28�pm, Paul PH [email protected] wrote:
hi again, all.
I have the following plugin included in my active record model.
What i’d like to do, is define a method inside class_eval which returns
the options has that was passed into it via the acts_as_item :foo=>:bar
in my model.
What i’m finding odd is that the self.foo method can access the config
hash when printing it, but not when i try to return it.
Two very different things are happening: with the puts config is being
resolved just before class_eval is called: the string is interpolated
and the result passed to class_eval.
The return statement on the other hand is evaluated much later - when
the foo method is actually called. config is no longer in scope and so
you get an error.
Fred
Ah, I see - thanks Fred.
I understand the variable is resolved earlier to do the string
interpolation. I do find it odd that it is put into scope for that, but
not for returning it.
Thanks, again.
Paul.