module AMA::Entity::Mapper::Mixin::HandlerSupport
This module provides Type
and Attribute classes with shortcut handler :name, :method method to register handlers
Public Class Methods
declare_handler_block_setter(klass, handler_key, method)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 56 def declare_handler_block_setter(klass, handler_key, method) klass.instance_eval do include Mixin::Reflection define_method("#{handler_key}_block") do |&block| send("#{handler_key}=", method_object(method, &block)) end end end
declare_handler_getter(klass, handler_key, handler_class)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 35 def declare_handler_getter(klass, handler_key, handler_class) instance = handler_class::INSTANCE klass.instance_eval do define_method(handler_key) do instance_variable_get("@#{handler_key}") || instance end end end
declare_handler_method(klass)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 24 def declare_handler_method(klass) processor = self klass.define_singleton_method(:handler) do |key, method| handler_name = key.capitalize handler_class = @handler_namespace.const_get(handler_name) processor.declare_handler_getter(klass, key, handler_class) processor.declare_handler_setter(klass, key, handler_class) processor.declare_handler_block_setter(klass, key, method) end end
declare_handler_setter(klass, handler_key, handler_class)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 44 def declare_handler_setter(klass, handler_key, handler_class) klass.instance_eval do define_method("#{handler_key}=") do |handler| unless handler.class == handler_class handler = handler_class.wrap(handler) end instance_variable_set("@#{handler_key}", handler) self end end end
declare_namespace_method(klass)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 18 def declare_namespace_method(klass) klass.define_singleton_method(:handler_namespace) do |namespace| @handler_namespace = namespace end end
included(klass)
click to toggle source
# File lib/ama-entity-mapper/mixin/handler_support.rb, line 13 def included(klass) declare_namespace_method(klass) declare_handler_method(klass) end