module Realm::Mixins::DependencyInjection::ClassMethods
Public Instance Methods
dependencies()
click to toggle source
# File lib/realm/mixins/dependency_injection.rb, line 23 def dependencies deps.freeze end
inject(*dependables, **options)
click to toggle source
# File lib/realm/mixins/dependency_injection.rb, line 19 def inject(*dependables, **options) deps.concat(dependables.map { |d| Dependency.new(d, **options) }) end
new(*args, **kwargs, &block)
click to toggle source
# File lib/realm/mixins/dependency_injection.rb, line 11 def new(*args, **kwargs, &block) instance = allocate deps.each { |d| define_dependency_method(instance, kwargs, d) } kwargs_without_dependencies = kwargs.reject { |k, _| deps.any? { |d| d.name == k } } instance.send(:initialize, *args, **kwargs_without_dependencies, &block) instance end
Private Instance Methods
define_dependency_method(instance, kwargs, spec)
click to toggle source
# File lib/realm/mixins/dependency_injection.rb, line 33 def define_dependency_method(instance, kwargs, spec) dependency = kwargs[spec.name] instance.singleton_class.class_eval do define_method(spec.name) do return dependency unless spec.lazy? var = "@#{spec.name}" return instance_variable_get(var) if instance_variable_defined?(var) instance_variable_set(var, dependency.respond_to?(:call) ? dependency.call : dependency) end protected spec.name end end
deps()
click to toggle source
# File lib/realm/mixins/dependency_injection.rb, line 29 def deps @deps ||= [] end