class Flatter::Mapper::Factory

Constants

NoTargetError

Attributes

name[R]
options[R]

Public Class Methods

new(name, **options) click to toggle source
# File lib/flatter/mapper/factory.rb, line 13
def initialize(name, **options)
  @name, @options = name.to_s, options
end

Public Instance Methods

create(*) click to toggle source
# File lib/flatter/mapper/factory.rb, line 36
def create(*)
  mapper_class.new.tap{ |mapper| mapper.factory = self }
end
default_mapper_class_name() click to toggle source
# File lib/flatter/mapper/factory.rb, line 32
def default_mapper_class_name
  "#{name.camelize}Mapper"
end
fetch_target_from(mapper) click to toggle source
# File lib/flatter/mapper/factory.rb, line 49
def fetch_target_from(mapper)
  default_target_from(mapper)
end
mapper_class() click to toggle source
# File lib/flatter/mapper/factory.rb, line 17
def mapper_class
  options[:mapper_class] || default_mapper_class
end
mapper_class_name() click to toggle source
# File lib/flatter/mapper/factory.rb, line 28
def mapper_class_name
  options[:mapper_class_name] || modulize(default_mapper_class_name)
end

Private Instance Methods

default_mapper_class() click to toggle source
# File lib/flatter/mapper/factory.rb, line 21
def default_mapper_class
  mapper_class_name.constantize
rescue NameError => e
  Flatter.default_mapper_class or raise e
end
default_target_from(mapper) click to toggle source
# File lib/flatter/mapper/factory.rb, line 53
def default_target_from(mapper)
  if mapper.target.respond_to?(name)
    mapper.target.public_send(name)
  else
    fail NoTargetError, "Unable to implicitly fetch target for '#{name}' from #{mapper}"
  end
end
modulize(class_name) click to toggle source
# File lib/flatter/mapper/factory.rb, line 40
def modulize(class_name)
  if i = options[:mounter_name].rindex('::')
    "#{options[:mounter_name][0...i]}::#{class_name}"
  else
    class_name
  end
end