module MapDemTings::ClassMethods

Public Instance Methods

define_mapping_methods(opts) click to toggle source

Example:

define_mapping_methods(method_mapper: :mapper2,

 value_mapper:  :mapper1,
 inputs: %w( atlas_id )
)
# File lib/map-dem-tings.rb, line 19
def define_mapping_methods(opts)
  method_mapper_sym = opts[:method_mapper]
  value_mapper_sym = opts[:value_mapper]
  inputs = opts[:inputs]

  method_mapper = send(method_mapper_sym)

  inputs.each do |input_name|
    define_method(method_mapper.map(input_name)) do
      send(value_mapper_sym).map(input_name)
    end
  end
end
define_method_mapper(name, &block) click to toggle source
# File lib/map-dem-tings.rb, line 33
    def define_method_mapper(name, &block)
      iv_name = "@@#{name}"

      block_source_only = block.source.gsub("define_method_mapper(#{name.inspect})", '')

      method_source = <<-end_src
        def self.#{name}
          #{iv_name} ||= MapDemTings::InputMapper.new #{block_source_only}
        end
      end_src

      class_eval(method_source)
    end
define_value_mapper(name, &block) click to toggle source
# File lib/map-dem-tings.rb, line 47
    def define_value_mapper(name, &block)
      iv_name = "@#{name}"

      block_source_only = block.source.gsub("define_value_mapper(#{name.inspect})", '')

      method_source = <<-end_src
        def #{name}
          #{iv_name} ||= MapDemTings::InputMapper.new #{block_source_only}
        end
      end_src

      class_eval(method_source)
    end