Sha256: cd31c569a10459fdd2c2f9e9e0e228cda040dc64adfc419afaaa041805a8415f

Contents?: true

Size: 920 Bytes

Versions: 9

Compression:

Stored size: 920 Bytes

Contents

module Euston
  module EventHandler
    extend ActiveSupport::Concern
    include Euston::EventHandlerPrivateMethodNames

    included do
      attr_accessor :log unless public_method_defined? :log=
    end

    module ClassMethods
      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
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
euston-1.2.8 lib/euston/event_handler.rb
euston-1.2.8-java lib/euston/event_handler.rb
euston-1.2.7-java lib/euston/event_handler.rb
euston-1.2.7 lib/euston/event_handler.rb
euston-1.2.6 lib/euston/event_handler.rb
euston-1.2.5-java lib/euston/event_handler.rb
euston-1.2.5 lib/euston/event_handler.rb
euston-1.2.4-java lib/euston/event_handler.rb
euston-1.2.4 lib/euston/event_handler.rb