Hi all.
I tried some strange kind of things.
class DomNode
attr_accessor :handler
def event_handler=(str)
@handler = eval(str)
end
def on_event(*arg); @handler[*arg] end
end
#usage
node.event_handler = ‘self[“some-attr”] = “some-value”’
node.send_some_event
assert_equal “some-value”, self[“some-attr”]
OK. Then.
class DomNode
def clone
other = DomNode.new
#some initializing, copying of attributes, etc.
other.handler = @handler #HERE is the problem!
end
end
#show the problem:
node.event_handler = ‘self[“some-attr”] = “some-value”’
cloned = node.clone
cloned.send_some_event
assert_equal “some-value”, self[“some-attr”] #failed!
Event handler has been evaluated in context of original node; so “self”
is
pointing to original node, not to cloned. So, I need method to “rebind”
proc
to clone, but only if it “binded” to self. How it can be done?
For some reason, I can’t do
def on_event(*arg)
self.instance_eval(&@handler)
end
What can be done instead this?
Thanks.
V.