Class: ROM::Mapper
- Inherits:
-
Object
- Object
- ROM::Mapper
- Extended by:
- Support::InheritanceHook
- Includes:
- DSL
- Defined in:
- lib/rom/mapper.rb,
lib/rom/mapper/dsl.rb,
lib/rom/mapper/header.rb,
lib/rom/mapper/version.rb,
lib/rom/mapper/model_dsl.rb,
lib/rom/mapper/attribute_dsl.rb
Overview
Mapper is a simple object that uses transformers to load relations
Defined Under Namespace
Modules: DSL, ModelDSL Classes: AttributeDSL, Header
Constant Summary collapse
- VERSION =
'0.2.0'.freeze
Instance Attribute Summary collapse
-
#header ⇒ Header
readonly
private
Header that was used to build the transformers.
-
#transformers ⇒ Object
readonly
private
Transformers object built by a processor.
Class Method Summary collapse
-
.build(header = self.header, processor = :transproc) ⇒ Mapper
private
Build a mapper using provided processor type.
-
.headers(header) ⇒ Array<Header>
private
Prepares an array of headers for a potentially multistep mapper.
-
.processors ⇒ Hash
private
Registered processors.
-
.register_processor(processor) ⇒ Hash
private
Register a processor class.
- .registry(descendants) ⇒ Object private
Instance Method Summary collapse
-
#call(relation) ⇒ Object
private
Process a relation using the transformers.
-
#initialize(transformers, header) ⇒ Mapper
constructor
private
A new instance of Mapper.
-
#model ⇒ Class
private
Optional model that is instantiated by a mapper.
Methods included from DSL
Constructor Details
#initialize(transformers, header) ⇒ Mapper
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Mapper.
79 80 81 82 |
# File 'lib/rom/mapper.rb', line 79 def initialize(transformers, header) @transformers = Array(transformers) @header = header end |
Instance Attribute Details
#header ⇒ Header (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns header that was used to build the transformers.
29 30 31 |
# File 'lib/rom/mapper.rb', line 29 def header @header end |
#transformers ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns transformers object built by a processor.
24 25 26 |
# File 'lib/rom/mapper.rb', line 24 def transformers @transformers end |
Class Method Details
.build(header = self.header, processor = :transproc) ⇒ Mapper
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Build a mapper using provided processor type
64 65 66 67 68 |
# File 'lib/rom/mapper.rb', line 64 def self.build(header = self.header, processor = :transproc) processor = Mapper.processors.fetch(processor) transformers = headers(header).map(&processor.method(:build)) new(transformers, header) end |
.headers(header) ⇒ Array<Header>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Prepares an array of headers for a potentially multistep mapper
53 54 55 56 57 |
# 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 |
.processors ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns registered processors.
34 35 36 |
# File 'lib/rom/mapper.rb', line 34 def self.processors @_processors ||= {} end |
.register_processor(processor) ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Register a processor class
43 44 45 46 |
# 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) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
71 72 73 74 75 76 |
# File 'lib/rom/mapper.rb', line 71 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 |
Instance Method Details
#call(relation) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Process a relation using the transformers
94 95 96 |
# File 'lib/rom/mapper.rb', line 94 def call(relation) transformers.reduce(relation.to_a) { |a, e| e.call(a) } end |
#model ⇒ Class
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns optional model that is instantiated by a mapper.
87 88 89 |
# File 'lib/rom/mapper.rb', line 87 def model header.model end |