module EntityProjection

Public Class Methods

included(cls) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 2
def self.included(cls)
  cls.class_exec do
    include Initializer
    include Virtual
    include Log::Dependency

    extend Build
    extend Call
    extend Info
    extend ApplyMacro
    extend EventRegistry
    extend Register
    extend EntityNameMacro

    virtual :configure

    initializer :entity
  end
end

Public Instance Methods

apply_event(event) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 134
def apply_event(event)
  logger.trace(tag: :apply) { "Applying event (Event class: #{event.class.name})" }
  logger.trace(tags: [:data, :message]) { event.pretty_inspect }

  handler = self.class.handler(event)

  unless handler.nil?
    public_send(handler, event)
  else
    if respond_to?(:apply)
      apply(event)
    end
  end

  logger.info(tag: :apply) { "Applied event (Event class: #{event.class.name})" }
  logger.trace(tags: [:data, :message]) { event.pretty_inspect }

  event
end
apply_event_data(event_data) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 154
def apply_event_data(event_data)
  logger.trace(tag: :apply) { "Applying event data (Type: #{event_data.type})" }
  logger.trace(tags: [:data, :message_data]) { event_data.pretty_inspect }

  res = nil

  handler = self.class.handler(event_data)

  unless handler.nil?
    event_name = Messaging::Message::Info.canonize_name(event_data.type)
    event_class = self.class.event_registry.get(event_name)
    res = Messaging::Message::Import.(event_data, event_class)
    public_send(handler, res)
  else
    if respond_to?(:apply)
      res = apply(event_data)
    end
  end

  logger.info(tag: :apply) { "Applied event data (Type: #{event_data.type})" }
  logger.info(tags: [:data, :message_data]) { event_data.pretty_inspect }

  res
end
call(event_or_event_data) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 126
def call(event_or_event_data)
  if event_or_event_data.is_a?(Messaging::Message)
    apply_event(event_or_event_data)
  else
    apply_event_data(event_or_event_data)
  end
end