module Justdi::ClassResolver
Builder of any classes as pure or injectables
Public Class Methods
call(klass, container)
click to toggle source
Build class by resolving all dependencies
@param klass [Class<T>] @param container [Justdi::Container] @return [T]
@raise [Justdi::NoDependencyError] @raise [Justdi::UnknownDestinationError]
# File lib/justdi/resolvers/class_resolver.rb, line 23 def call(klass, container) return klass.new unless klass.is_a? Justdi::Injectable safe_klass = Class.new(klass) klass_args = klass.dependencies.each_with_object({}) do |(token, metadata), hash| resolve_dependency(safe_klass, token, metadata, container, hash) end safe_klass.new(**klass_args) end
Protected Class Methods
resolve_dependency(klass, token, metadata, container, hash)
click to toggle source
# File lib/justdi/resolvers/class_resolver.rb, line 36 def resolve_dependency(klass, token, metadata, container, hash) raise Justdi::NoDependencyError, token unless container.has?(token) resolve_destination(klass, token, metadata, container.get(token), hash) end
resolve_destination(klass, token, metadata, value, store)
click to toggle source
# File lib/justdi/resolvers/class_resolver.rb, line 42 def resolve_destination(klass, token, metadata, value, store) destination = metadata[:destination] || Destination::DEFAULT case destination when Destination::DEFAULT, Destination::INITIALIZER store[token] = value when Destination::INSTANCE_METHOD klass.define_method(token) { value } when Destination::CLASS_METHOD klass.define_singleton_method(token) { value } else raise Justdi::UnknownDestinationError(destination) end end