Sha256: 22b09d12f54c2788bcaca120cce12265500c7eca6f253a3fcb1aa41d5966f5df
Contents?: true
Size: 1.66 KB
Versions: 3
Compression:
Stored size: 1.66 KB
Contents
require 'rom/relation_registry' module ROM class Finalize class FinalizeRelations # Build relation registry of specified descendant classes # # This is used by the setup # # @param [Hash] gateways # @param [Array] relation_classes a list of relation descendants # # @api private def initialize(gateways, relation_classes) @gateways = gateways @relation_classes = relation_classes end # @return [Hash] # # @api private def run! RelationRegistry.new do |registry, relations| @relation_classes.each do |klass| relation = build_relation(klass, registry) key = relation.name.to_sym if registry.key?(key) raise RelationAlreadyDefinedError, "Relation with `register_as #{key.inspect}` registered more " \ "than once" end relations[key] = relation end relations.each_value do |relation| relation.class.finalize(registry, relation) end end end # @return [ROM::Relation] # # @api private def build_relation(klass, registry) # TODO: raise a meaningful error here and add spec covering the case # where klass' gateway points to non-existant repo gateway = @gateways.fetch(klass.gateway) ds_proc = klass.dataset_proc || -> _ { self } klass.schema.finalize!(gateway) if klass.schema dataset = gateway.dataset(klass.dataset).instance_exec(klass, &ds_proc) klass.new(dataset, __registry__: registry) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rom-2.0.2 | lib/rom/setup/finalize/finalize_relations.rb |
rom-2.0.1 | lib/rom/setup/finalize/finalize_relations.rb |
rom-2.0.0 | lib/rom/setup/finalize/finalize_relations.rb |