Sha256: 05ff37a8e691bbaf9e9b7db1c728a128775bdf69e65b3ccfc974bb4f95c4059c
Contents?: true
Size: 1.28 KB
Versions: 1
Compression:
Stored size: 1.28 KB
Contents
# frozen_string_literal: true module Dry module AutoInject DuplicateDependencyError = ::Class.new(::StandardError) DependencyNameInvalid = ::Class.new(::StandardError) VALID_NAME = /([a-z_][a-zA-Z_0-9]*)$/ class DependencyMap def initialize(*dependencies) @map = {} dependencies = dependencies.dup aliases = dependencies.last.is_a?(::Hash) ? dependencies.pop : {} dependencies.each do |identifier| name = name_for(identifier) add_dependency(name, identifier) end aliases.each do |name, identifier| add_dependency(name, identifier) end end def inspect = @map.inspect def names @names ||= @map.keys end def to_h = @map.dup alias_method :to_hash, :to_h private 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 def add_dependency(name, identifier) name = name.to_sym raise DuplicateDependencyError, "name +#{name}+ is already used" if @map.key?(name) @map[name] = identifier end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-auto_inject-1.1.0 | lib/dry/auto_inject/dependency_map.rb |