Module: Mappable::Mapping
- Defined in:
- lib/mappable/mapping.rb
Overview
Defines what fields to map
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
- .create(base_module, name, options = {}, &block) ⇒ Object
- .default_mapping_options(src, dest) ⇒ Object
- .included(base) ⇒ Object
Instance Method Summary collapse
- #call_method(model, method) ⇒ Object
- #map(src_model, dest_model) ⇒ Object
- #skip?(src_model, dest_model, options) ⇒ Boolean
Class Method Details
.create(base_module, name, options = {}, &block) ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/mappable/mapping.rb', line 70 def self.create(base_module, name, = {}, &block) [:class_name] ||= ::Mappable::Utils.classify_name(name.to_s) + 'Mapping' kls = Class.new([:base_class] || Object) kls = base_module.const_set([:class_name], kls) kls.send(:include, ::Mappable::Mapping) kls.class_eval(&block) if block kls end |
.default_mapping_options(src, dest) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/mappable/mapping.rb', line 11 def self.(src, dest) { src: src.to_sym, src_getter: src.to_s.freeze, src_setter: "#{src}=", dest: dest.to_sym, dest_getter: dest.to_s.freeze, dest_setter: "#{dest}=" } end |
.included(base) ⇒ Object
6 7 8 9 |
# File 'lib/mappable/mapping.rb', line 6 def self.included(base) base.extend InheritanceHelper::Methods base.extend ClassMethods end |
Instance Method Details
#call_method(model, method) ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/mappable/mapping.rb', line 59 def call_method(model, method) case method when Symbol model.public_send(method) when Proc model.instance_eval(&method) else raise("wrong type, failed to call method #{method}") end end |
#map(src_model, dest_model) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/mappable/mapping.rb', line 43 def map(src_model, dest_model) self.class.mappings.each do |_, | next if skip?(src_model, dest_model, ) dest_model.public_send([:dest_setter], src_model.public_send([:src_getter])) end dest_model end |
#skip?(src_model, dest_model, options) ⇒ Boolean
52 53 54 55 56 57 |
# File 'lib/mappable/mapping.rb', line 52 def skip?(src_model, dest_model, ) return true if [:if] && !call_method(dest_model, [:if]) return true if [:unless] && call_method(dest_model, [:unless]) false end |