class ObjectFramework::Scope
Resolves and closes the collaborators belonging to one invocation.
Public Class Methods
Source
# File lib/object_framework/execution.rb, line 104 def initialize(factories, context:) @factories, @context, @instances, @resources = factories, context, { context: }, [] end
Public Instance Methods
Source
# File lib/object_framework/execution.rb, line 121 def close(reporter:) @resources.reverse_each do |resource| resource.close rescue StandardError => error reporter.report(error, context: @context, secondary: true) end @resources.clear @instances.clear end
Source
# File lib/object_framework/execution.rb, line 108 def provide(name, instance) @instances[name] = instance end
Source
# File lib/object_framework/execution.rb, line 112 def resolve(name) return @instances.fetch(name) if @instances.key?(name) factory = @factories.fetch(name) arguments = factory.dependencies.to_h { |dependency| [dependency, resolve(dependency)] } instance = factory.build.call(**arguments) @resources << instance if factory.close @instances[name] = instance end