38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/wamp/client/event.rb', line 38
def create_event(events, attribute: nil, setter: nil, trigger: nil)
attribute ||= :event
setter ||= :on
trigger ||= :trigger
callback_name = "#{attribute}_callbacks"
event_list_name = "#{attribute}_list"
attr_accessor callback_name
define_method event_list_name do
events
end
define_method setter do |event, &handler|
unless self.send(event_list_name).include?(event)
raise RuntimeError, "unknown #{setter}(event) '#{event}'"
end
callback = self.send(callback_name) || {}
callback[event] = handler
self.send("#{callback_name}=", callback)
end
define_method trigger do |event, *args|
handler = (self.send(callback_name) || {})[event]
if handler != nil
handler.call(*args)
end
end
end
|