Class: LunaPark::Mappers::Codirectional
- Defined in:
- lib/luna_park/mappers/codirectional.rb,
lib/luna_park/mappers/codirectional/copyists/slice.rb,
lib/luna_park/mappers/codirectional/copyists/nested.rb
Overview
DSL for describe Nested Schema translation: entity attributes to database row and vice-versa
Direct Known Subclasses
Defined Under Namespace
Modules: Copyists
Class Method Summary collapse
- .attr(attr, row: attr, mapper: nil, array: nil) ⇒ Object
- .attrs(*common_keys) ⇒ Object
- .from_row(input) ⇒ Object
-
.map(*common_keys, attr: nil, row: nil) ⇒ Object
Describe translation between two schemas: attr and table.
- .to_row(input) ⇒ Object
Methods inherited from Simple
Class Method Details
.attr(attr, row: attr, mapper: nil, array: nil) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/luna_park/mappers/codirectional.rb', line 58 def attr(attr, row: attr, mapper: nil, array: nil) attr_path = to_path(attr) row_path = to_path(row) if attr_path == row_path && !attr_path.is_a?(Array) slice_copyist.add_key(attr_path) else nested_copyists << Copyists::Nested.new( attrs_path: attr_path, row_path: row_path, mapper: mapper, map_array: array ) end end |
.attrs(*common_keys) ⇒ Object
76 77 78 |
# File 'lib/luna_park/mappers/codirectional.rb', line 76 def attrs(*common_keys) common_keys.each { |common_key| attr common_key } end |
.from_row(input) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/luna_park/mappers/codirectional.rb', line 80 def from_row(input) row = input.to_h {}.tap do |attrs| slice_copyist.from_row(row: row, attrs: attrs) nested_copyists.each { |copyist| copyist.from_row(row: row, attrs: attrs) } end end |
.map(*common_keys, attr: nil, row: nil) ⇒ Object
Describe translation between two schemas: attr and table
46 47 48 49 50 |
# File 'lib/luna_park/mappers/codirectional.rb', line 46 def map(*common_keys, attr: nil, row: nil) attrs(*common_keys) if common_keys.any? self.attr attr, row: row if attr end |
.to_row(input) ⇒ Object
88 89 90 91 92 93 94 |
# File 'lib/luna_park/mappers/codirectional.rb', line 88 def to_row(input) attrs = input.to_h {}.tap do |row| slice_copyist.to_row(row: row, attrs: attrs) nested_copyists.each { |copyist| copyist.to_row(row: row, attrs: attrs) } end end |