class Injectable::DependenciesGraph

Holds the dependency signatures of the service object

Attributes

dependency_class[R]
graph[R]
namespace[RW]
proxy_class[R]

Public Class Methods

new(namespace:, proxy_class: ::Injectable::DependenciesProxy, dependency_class: ::Injectable::Dependency) click to toggle source
# File lib/injectable/dependencies_graph.rb, line 7
def initialize(namespace:,
               proxy_class: ::Injectable::DependenciesProxy,
               dependency_class: ::Injectable::Dependency)
  @namespace = namespace
  @graph = {}
  @proxy_class = proxy_class
  @dependency_class = dependency_class
end

Public Instance Methods

add(name:, depends_on:, **kwargs) click to toggle source

Adds the signature of a dependency to the graph

# File lib/injectable/dependencies_graph.rb, line 25
def add(name:, depends_on:, **kwargs)
  check_for_missing_dependencies!(depends_on)
  graph[name] = dependency_class.new(kwargs.merge(name: name, depends_on: depends_on))
end
names() click to toggle source
# File lib/injectable/dependencies_graph.rb, line 16
def names
  graph.keys
end
proxy() click to toggle source
# File lib/injectable/dependencies_graph.rb, line 30
def proxy
  proxy_class.new(graph: graph, namespace: namespace)
end
with_namespace(namespace) click to toggle source
# File lib/injectable/dependencies_graph.rb, line 20
def with_namespace(namespace)
  dup.tap { |dupe| dupe.namespace = namespace }
end

Private Instance Methods

check_for_missing_dependencies!(deps) click to toggle source
# File lib/injectable/dependencies_graph.rb, line 36
def check_for_missing_dependencies!(deps)
  missing = deps.reject { |dep| graph.key?(dep) }
  return if missing.empty?

  raise Injectable::MissingDependenciesException, "missing dependencies: #{missing.join(', ')}"
end