Module: Euston::EventHandler::ClassMethods

Defined in:
lib/euston/event_handler.rb

Instance Method Summary collapse

Instance Method Details

#subscribes(type, version = 1, opts = {}, &consumer) ⇒ Object



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