11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/euston/event_handler.rb', line 11
def subscribes type, version = 1, opts = {}, &consumer
if self.include? Euston::AggregateRoot
o = { :id => :id }.merge opts
self.class.send :define_method, id_from_event_method_name(type, version) do |event|
if o[:id].respond_to? :call
o[:id].call event
else
event[o[:id]]
end
end
end
method_name = event_handler_method_name type, version
define_method method_name, &consumer
new_method = instance_method method_name
define_method method_name do |*args|
new_method.bind(self).call *args
end
end
|