module Mappable::Mapping
Defines what fields to map
Public Class Methods
create(base_module, name, options = {}, &block)
click to toggle source
# File lib/mappable/mapping.rb, line 70 def self.create(base_module, name, options = {}, &block) options[:class_name] ||= ::Mappable::Utils.classify_name(name.to_s) + 'Mapping' kls = Class.new(options[:base_class] || Object) kls = base_module.const_set(options[:class_name], kls) kls.send(:include, ::Mappable::Mapping) kls.class_eval(&block) if block kls end
default_mapping_options(src, dest)
click to toggle source
# File lib/mappable/mapping.rb, line 11 def self.default_mapping_options(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)
click to toggle source
# File lib/mappable/mapping.rb, line 6 def self.included(base) base.extend InheritanceHelper::Methods base.extend ClassMethods end
Public Instance Methods
call_method(model, method)
click to toggle source
# 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)
click to toggle source
# File lib/mappable/mapping.rb, line 43 def map(src_model, dest_model) self.class.mappings.each do |_, options| next if skip?(src_model, dest_model, options) dest_model.public_send(options[:dest_setter], src_model.public_send(options[:src_getter])) end dest_model end
skip?(src_model, dest_model, options)
click to toggle source
# File lib/mappable/mapping.rb, line 52 def skip?(src_model, dest_model, options) return true if options[:if] && !call_method(dest_model, options[:if]) return true if options[:unless] && call_method(dest_model, options[:unless]) false end