Sha256: 3a256884a994574c368e1de04935f61e9fefe8b33217f7e776b17ef6c1fcb884
Contents?: true
Size: 1.22 KB
Versions: 3
Compression:
Stored size: 1.22 KB
Contents
module ROM # @api private class Mapper attr_reader :header, :model class Basic < Mapper attr_reader :mapping def initialize(header, model) super @mapping = header.mapping end def load(tuple, mapping = self.mapping) model.new(Hash[call(tuple, mapping)]) end def call(tuple, mapping = self.mapping) tuple.map { |key, value| [mapping[key], value] } end end class Recursive < Basic def call(tuple, mapping = self.mapping) tuple.map do |key, value| case value when Hash then [key, Hash[call(value, mapping[key])]] when Array then [key, value.map { |v| Hash[call(v, mapping[key])] }] else [mapping[key], value] end end end end def self.build(header, model) klass = if header.any? { |attribute| attribute.embedded? } Recursive elsif header.any? { |attribute| attribute.aliased? } Basic else self end klass.new(header, model) end def initialize(header, model) @header = header @model = model end def load(tuple) model.new(tuple) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rom-0.4.0 | lib/rom/mapper.rb |
rom-0.3.1 | lib/rom/mapper.rb |
rom-0.3.0 | lib/rom/mapper.rb |