class Dry::Effects::Effects::Resolve

Constants

DependencyNameInvalid
Resolve
VALID_NAME

Public Class Methods

new(*keys, **aliases) click to toggle source
Calls superclass method
# File lib/dry/effects/effects/resolve.rb, line 18
def initialize(*keys, **aliases)
  super()

  keys_aliased = keys.map { |k| name_for(k) }.zip(keys)
  module_eval do
    (keys_aliased + aliases.to_a).each do |name, key|
      define_method(name) { |&block| ::Dry::Effects.yield(Resolve.(key), &block) }
    end
  end
end

Private Instance Methods

name_for(identifier) click to toggle source

similar approach in dry-auto_inject github.com/dry-rb/dry-auto_inject/blob/master/lib/dry/auto_inject/dependency_map.rb#L42

# File lib/dry/effects/effects/resolve.rb, line 32
def name_for(identifier)
  matched = VALID_NAME.match(identifier.to_s)
  unless matched
    raise DependencyNameInvalid,
          "name +#{identifier}+ is not a valid Ruby identifier"
  end

  matched[0]
end