Sha256: a35b93e0aa3706828a61ba5c92fd26cb6e0d9a0d4efd6d54907f306ef0f5ac91

Contents?: true

Size: 1.5 KB

Versions: 3

Compression:

Stored size: 1.5 KB

Contents

require 'rom/configuration'
require 'rom/environment'
require 'rom/setup'
require 'rom/setup/finalize'

module ROM
  class CreateContainer
    attr_reader :container

    def initialize(environment, setup)
      @container = finalize(environment, setup)
    end

    private

    def finalize(environment, setup)
      environment.configure do |config|
        environment.gateways.each_key do |key|
          gateway_config = config.gateways[key]
          gateway_config.infer_relations = true unless gateway_config.key?(:infer_relations)
        end
      end

      finalize = Finalize.new(
        gateways: environment.gateways,
        relation_classes: setup.relation_classes,
        command_classes: setup.command_classes,
        mappers: setup.mapper_classes,
        plugins: setup.plugins,
        notifications: setup.notifications,
        config: environment.config.dup.freeze
      )

      finalize.run!
    end
  end

  class InlineCreateContainer < CreateContainer
    def initialize(*args, &block)
      case args.first
      when Configuration
        environment = args.first.environment
        setup = args.first.setup
      when Environment
        environment = args.first
        setup = args[1]
      else
        configuration = Configuration.new(*args, &block)
        environment = configuration.environment
        setup = configuration.setup
      end

      super(environment, setup)
    end
  end

  def self.container(*args, &block)
    InlineCreateContainer.new(*args, &block).container
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rom-core-4.0.0.beta3 lib/rom/create_container.rb
rom-core-4.0.0.beta2 lib/rom/create_container.rb
rom-core-4.0.0.beta1 lib/rom/create_container.rb