Sha256: e6b36526b05fadfe10433ea8611dac42dd5111d48411c4c69f422dec34ec4318
Contents?: true
Size: 1.03 KB
Versions: 7
Compression:
Stored size: 1.03 KB
Contents
# frozen_string_literal: true module Infusible # Sanitizes and resolves dependencies for use. class DependencyMap PATTERNS = {key: /([a-z_][a-zA-Z_0-9]*)$/, valid: /^[\w.]+$/}.freeze attr_reader :keys def initialize *configuration, patterns: PATTERNS @patterns = patterns @collection = {} aliases = configuration.last.is_a?(Hash) ? configuration.pop : {} configuration.each { |identifier| add to_key(identifier), identifier } aliases.each { |key, identifier| add key, identifier } @keys = collection.keys.freeze end def to_h = collection private attr_reader :patterns, :collection def to_key identifier key = identifier[patterns.fetch(:key)] return key if key && key.match?(patterns.fetch(:valid)) fail Errors::InvalidDependency.new(identifier:) end def add key, identifier key = key.to_sym return collection[key] = identifier unless collection.key? key fail Errors::DuplicateDependency.new(key:, identifier:) end end end
Version data entries
7 entries across 7 versions & 1 rubygems