Sha256: dbbcc642e305457ca484e3b025b91b5cbbc79412791f9dd50e5d826abebc4eca
Contents?: true
Size: 1.05 KB
Versions: 2
Compression:
Stored size: 1.05 KB
Contents
# frozen_string_literal: true module Dry module Effects module Effects class Resolve < ::Module DependencyNameInvalid = ::Class.new(StandardError) VALID_NAME = /([a-z_][a-zA-Z_0-9]*)$/.freeze Resolve = Effect.new(type: :resolve) def initialize(*keys, **aliases) super() keys_aliased = keys.map { name_for(_1) }.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 # similar approach in dry-auto_inject https://github.com/dry-rb/dry-auto_inject/blob/master/lib/dry/auto_inject/dependency_map.rb#L42 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 end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-effects-0.4.0 | lib/dry/effects/effects/resolve.rb |
dry-effects-0.3.1 | lib/dry/effects/effects/resolve.rb |