Module: AMA::Entity::Mapper::Mixin::HandlerSupport
- Included in:
- Type, Type::Attribute
- Defined in:
- lib/ama-entity-mapper/mixin/handler_support.rb
Overview
This module provides Type and Attribute classes with shortcut handler :name, :method method to register handlers
Class Method Summary collapse
- .declare_handler_block_setter(klass, handler_key, method) ⇒ Object
- .declare_handler_getter(klass, handler_key, handler_class) ⇒ Object
- .declare_handler_method(klass) ⇒ Object
- .declare_handler_setter(klass, handler_key, handler_class) ⇒ Object
- .declare_namespace_method(klass) ⇒ Object
- .included(klass) ⇒ Object
Class Method Details
.declare_handler_block_setter(klass, handler_key, method) ⇒ Object
56 57 58 59 60 61 62 63 |
# 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) ⇒ Object
35 36 37 38 39 40 41 42 |
# 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) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# 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) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 |
# 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) ⇒ Object
18 19 20 21 22 |
# 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) ⇒ Object
13 14 15 16 |
# File 'lib/ama-entity-mapper/mixin/handler_support.rb', line 13 def included(klass) declare_namespace_method(klass) declare_handler_method(klass) end |