class Dry::Effects::Providers::Resolve
Constants
- Locate
Attributes
dynamic[R]
parent[R]
Public Class Methods
handle_method(*, as: Undefined, **)
click to toggle source
# File lib/dry/effects/providers/resolve.rb, line 10 def self.handle_method(*, as: Undefined, **) Undefined.default(as, :provide) end
new(*)
click to toggle source
Calls superclass method
# File lib/dry/effects/providers/resolve.rb, line 24 def initialize(*) super @dynamic = EMPTY_HASH end
Public Instance Methods
call(dynamic = EMPTY_HASH, options = EMPTY_HASH) { || ... }
click to toggle source
Yield the block with the handler installed
@api private
# File lib/dry/effects/providers/resolve.rb, line 52 def call(dynamic = EMPTY_HASH, options = EMPTY_HASH) @dynamic = dynamic if options.fetch(:overridable, false) @parent = ::Dry::Effects.yield(Locate) { nil } else @parent = nil end yield ensure @dynamic = EMPTY_HASH end
key?(key)
click to toggle source
@param [Symbol,String] key Dependency key @return [Boolean] @api public
# File lib/dry/effects/providers/resolve.rb, line 80 def key?(key) static.key?(key) || dynamic.key?(key) || parent&.key?(key) end
locate()
click to toggle source
Locate
handler in the stack
@return [Provider] @api private
# File lib/dry/effects/providers/resolve.rb, line 45 def locate self end
provide?(effect)
click to toggle source
@param [Effect] effect @return [Boolean] @api public
Calls superclass method
# File lib/dry/effects/providers/resolve.rb, line 69 def provide?(effect) if super !effect.name.equal?(:resolve) || key?(effect.payload[0]) else false end end
represent()
click to toggle source
@return [String] @api public
# File lib/dry/effects/providers/resolve.rb, line 86 def represent containers = [represent_container(static), represent_container(dynamic)].compact.join("+") "resolve[#{containers.empty? ? "empty" : containers}]" end
represent_container(container)
click to toggle source
@return [String] @api private
# File lib/dry/effects/providers/resolve.rb, line 93 def represent_container(container) case container when ::Hash container.empty? ? nil : "hash" when ::Class container.name || container.to_s else container.to_s end end
resolve(key)
click to toggle source
# File lib/dry/effects/providers/resolve.rb, line 29 def resolve(key) if parent&.key?(key) parent.resolve(key) elsif dynamic.key?(key) dynamic[key] elsif static.key?(key) static[key] else Instructions.Raise(Errors::ResolutionError.new(key)) end end