class Flows::Plugin::DependencyInjector::DependencyList

Resolves dependencies on initialization and can inject it into class instance.

@api private

Attributes

definitions[R]
dependencies[R]
provided_values[R]

Public Class Methods

new(klass:, definitions:, provided_values:) click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 10
def initialize(klass:, definitions:, provided_values:)
  @klass = klass
  @definitions = definitions
  @provided_values = provided_values.dup.tap { |pv| pv.default = NO_VALUE }

  check_missing_dependencies
  check_unexpected_dependencies
  resolve_dependencies
end

Public Instance Methods

inject_to(instance) click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 20
def inject_to(instance)
  dependencies.each { |dep| dep.inject_to(instance) }
end

Private Instance Methods

check_missing_dependencies() click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 30
def check_missing_dependencies
  missing = required_dependencies - provided_values.keys

  raise MissingDependencyError.new(@klass, missing) if missing.any?
end
check_unexpected_dependencies() click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 36
def check_unexpected_dependencies
  unexpected = provided_values.keys - definitions.keys

  raise UnexpectedDependencyError.new(@klass, unexpected) if unexpected.any?
end
required_dependencies() click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 26
def required_dependencies
  definitions.select { |_, definition| definition.required }.keys
end
resolve_dependencies() click to toggle source
# File lib/flows/plugin/dependency_injector/dependency_list.rb, line 42
def resolve_dependencies
  @dependencies = definitions.map do |name, definition|
    Dependency.new(
      klass: @klass,
      name: name,
      definition: definition,
      provided_value: provided_values[name]
    )
  end
end