Class: RubstApi::DependencyResolver
- Inherits:
-
Object
- Object
- RubstApi::DependencyResolver
- Defined in:
- lib/rubst_api/dependencies.rb
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(request, overrides = {}) ⇒ DependencyResolver
constructor
A new instance of DependencyResolver.
- #resolve(dependency) ⇒ Object
Constructor Details
#initialize(request, overrides = {}) ⇒ DependencyResolver
Returns a new instance of DependencyResolver.
13 14 15 |
# File 'lib/rubst_api/dependencies.rb', line 13 def initialize(request, overrides = {}) @request, @overrides, @cache, @cleanups = request, overrides, {}, [] end |
Instance Method Details
#close ⇒ Object
32 33 34 35 36 |
# File 'lib/rubst_api/dependencies.rb', line 32 def close return if @closed @closed = true @cleanups.reverse_each(&:call) end |
#resolve(dependency) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/rubst_api/dependencies.rb', line 17 def resolve(dependency) callable = @overrides.fetch(dependency.callable, dependency.callable) return @cache[callable] if dependency.use_cache && @cache.key?(callable) signature = callable.respond_to?(:parameters) ? callable : callable.method(:call) arguments = dependency.dependencies.to_h { |name, child| [name, resolve(child)] } signature.parameters.each do |kind, name| next unless %i[key keyreq].include?(kind) arguments[name] = @request if name == :request end value = callable.call(**arguments) value = consume_generator(value) if value.is_a?(Enumerator) @cache[callable] = value if dependency.use_cache value end |