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