hicknhack-software/rails-disco

View on GitHub
active_domain/lib/active_domain/command_processor.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'drb/drb'

module ActiveDomain
  module CommandProcessor
    extend ActiveSupport::Concern
    include DRb::DRbUndumped

    module ClassMethods
      protected

      def process(clazz, method_name = nil, &block)
        method_name ||= "process#{clazz.name.split('::').last}"
        define_method(method_name, &block)
        CommandRoutes.route clazz, self, method_name
      end
    end

    protected

    def event(event)
      store event
      publish event
      invoke event
      event.store_infos[:id]
    end

    private

    def invoke(event)
      ProjectionRegistry.invoke event
    end

    def store(event)
      EventRepository.store event
    end

    def publish(event)
      ActiveEvent::EventServer.publish event
    end
  end
end