class ROM::Mapper

Mapper is a simple object that uses transformers to load relations

@private

Constants

VERSION

Attributes

header[R]

@return [Header] header that was used to build the transformers

@api private

transformers[R]

@return [Object] transformers object built by a processor

@api private

Public Class Methods

build(header = self.header, processor = :transproc) click to toggle source

Build a mapper using provided processor type

@return [Mapper]

@api private

# File lib/rom/mapper.rb, line 63
def self.build(header = self.header, processor = :transproc)
  new(header, processor)
end
headers(header) click to toggle source

Prepares an array of headers for a potentially multistep mapper

@return [Array<Header>]

@api private

# File lib/rom/mapper.rb, line 52
def self.headers(header)
  return [header] if steps.empty?
  return steps.map(&:header) if attributes.empty?
  raise(MapperMisconfiguredError, "cannot mix outer attributes and steps")
end
new(header, processor = :transproc) click to toggle source

@api private

# File lib/rom/mapper.rb, line 76
def initialize(header, processor = :transproc)
  processor = Mapper.processors.fetch(processor)
  @transformers = self.class.headers(header).map do |hdr|
    processor.build(self, hdr)
  end
  @header = header
end
processors() click to toggle source

@return [Hash] registered processors

@api private

# File lib/rom/mapper.rb, line 33
def self.processors
  @_processors ||= {}
end
register_processor(processor) click to toggle source

Register a processor class

@return [Hash]

@api private

# File lib/rom/mapper.rb, line 42
def self.register_processor(processor)
  name = processor.name.split('::').last.downcase.to_sym
  processors.update(name => processor)
end
registry(descendants) click to toggle source

@api private

# File lib/rom/mapper.rb, line 68
def self.registry(descendants)
  descendants.each_with_object({}) do |klass, h|
    name = klass.register_as || klass.relation
    (h[klass.base_relation] ||= {})[name] = klass.build
  end
end

Public Instance Methods

call(relation) click to toggle source

Process a relation using the transformers

@api private

# File lib/rom/mapper.rb, line 94
def call(relation)
  transformers.reduce(relation.to_a) { |a, e| e.call(a) }
end
model() click to toggle source

@return [Class] optional model that is instantiated by a mapper

@api private

# File lib/rom/mapper.rb, line 87
def model
  header.model
end