module EntityProjection::ApplyMacro

Public Instance Methods

apply(event_class, &blk)
Alias for: apply_macro
apply_macro(event_class, &blk) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 69
def apply_macro(event_class, &blk)
  define_apply_method(event_class, &blk)
  event_registry.register(event_class)
end
Also aliased as: apply
define_apply_method(event_class, &blk) click to toggle source
# File lib/entity_projection/entity_projection.rb, line 75
def define_apply_method(event_class, &blk)
  apply_method_name = handler_name(event_class)

  if blk.nil?
    error_msg = "Handler for #{event_class.name} is not correctly defined. It must have a block."
    logger.error { error_msg }
    raise Error, error_msg
  end

  send(:define_method, apply_method_name, &blk)

  apply_method = instance_method(apply_method_name)

  unless apply_method.arity == 1
    error_msg = "Handler for #{event_class.name} is not correctly defined. It can only have a single parameter."
    logger.error { error_msg }
    raise Error, error_msg
  end

  apply_method_name
end
logger() click to toggle source
# File lib/entity_projection/entity_projection.rb, line 65
def logger
  @logger ||= Log.get(self)
end