class SequelMapper::GraphLoader
Attributes
datasets[R]
mappings[R]
object_load_pipeline[R]
Public Class Methods
new(datasets:, mappings:, object_load_pipeline:)
click to toggle source
# File lib/sequel_mapper/graph_loader.rb, line 3 def initialize(datasets:, mappings:, object_load_pipeline:) @datasets = datasets @mappings = mappings @object_load_pipeline = object_load_pipeline end
Public Instance Methods
call(mapping_name, record, eager_data = {})
click to toggle source
# File lib/sequel_mapper/graph_loader.rb, line 11 def call(mapping_name, record, eager_data = {}) mapping = mappings.fetch(mapping_name) load_record(mapping, record, eager_data) end
Private Instance Methods
load_associations(mapping, record, eager_data)
click to toggle source
# File lib/sequel_mapper/graph_loader.rb, line 25 def load_associations(mapping, record, eager_data) mapping.associations.map { |name, association| data_superset = eager_data.fetch([mapping.name, name]) { datasets[mappings.fetch(association.mapping_name).namespace] } [ name, association.build_proxy( record: record, data_superset: data_superset, loader: ->(associated_record, join_records = []) { join_records.map { |jr| join_mapping = mappings.fetch(association.join_mapping_name) object_load_pipeline.call(join_mapping, jr) } call(association.mapping_name, associated_record, eager_data) }, ) ] } end
load_record(mapping, record, eager_data)
click to toggle source
# File lib/sequel_mapper/graph_loader.rb, line 19 def load_record(mapping, record, eager_data) associations = load_associations(mapping, record, eager_data) object_load_pipeline.call(mapping, record, Hash[associations]) end