Sha256: 9fa496928cc41a82dc8cca03187422e0777297bf3e6ef9ece035e12b98de906e

Contents?: true

Size: 1.84 KB

Versions: 9

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

require 'rom/registry'
require 'rom/command_compiler'
require 'rom/command_registry'

module ROM
  class Finalize
    class FinalizeCommands
      attr_reader :notifications

      # Build command registry hash for provided relations
      #
      # @param [RelationRegistry] relations registry
      # @param [Hash] gateways
      # @param [Array] command_classes a list of command subclasses
      #
      # @api private
      def initialize(relations, gateways, command_classes, notifications)
        @relations = relations
        @gateways = gateways
        @command_classes = command_classes
        @notifications = notifications
      end

      # @return [Hash]
      #
      # @api private
      def run!
        commands = @command_classes.map do |klass|
          relation = @relations[klass.relation]
          gateway = @gateways[relation.gateway]

          notifications.trigger(
            'configuration.commands.class.before_build',
            command: klass, gateway: gateway, dataset: relation.dataset, adapter: relation.adapter
          )

          klass.extend_for_relation(relation) if klass.restrictable

          klass.build(relation)
        end

        registry = Registry.new
        compiler = CommandCompiler.new(@gateways, @relations, registry, notifications)

        @relations.each do |(name, relation)|
          rel_commands = commands.select { |c| c.relation.name == relation.name }

          rel_commands.each do |command|
            identifier = command.class.register_as || command.class.default_name
            relation.commands.elements[identifier] = command
          end

          relation.commands.set_compiler(compiler)
          relation.commands.set_mappers(relation.mappers)

          registry.elements[name] = relation.commands
        end

        registry
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
rom-core-5.3.2 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.3.1 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.3.0 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.6 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.5 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.4 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.3 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.2 lib/rom/setup/finalize/finalize_commands.rb
rom-core-5.2.1 lib/rom/setup/finalize/finalize_commands.rb