class ROM::Mapper
Mapper
is a simple object that uses transformers to load relations
@private
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 65 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 53 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 78 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 34 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 43 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 70 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 96 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 89 def model header.model end