Sha256: a15c8727f1a3a2edb6e3e722974b0a0a49dbe38cef31b815008294537775c5ab
Contents?: true
Size: 1.6 KB
Versions: 3
Compression:
Stored size: 1.6 KB
Contents
module Dry::Initializer # Immutable container for chunks of code describing argument signatures. # Responcible for building the resulting signature for the initializer args. class Signature include Enumerable include Errors def initialize(*list) @list = list end def add(*args) signature = Plugins::Signature.new(*args) validate_order_of signature validate_param_uniqueness_of signature validate_option_uniqueness_of signature validate_attribute_uniqueness_of signature self.class.new(*@list, signature) end def each @list.each { |item| yield item } end def call options = all?(&:param?) ? %w(__options__={}) : %w(**__options__) (select(&:param?).map(&:call) + options).compact.join(", ") end private def validate_param_uniqueness_of(signature) return unless signature.param? return unless select(&:param?).map(&:name).include? signature.name fail RedefinitionError.new(signature.name) end def validate_option_uniqueness_of(signature) return if signature.param? return unless reject(&:param?).map(&:name).include? signature.name fail RedefinitionError.new(signature.name) end def validate_attribute_uniqueness_of(signature) return unless map(&:rename).include? signature.rename fail RedefinitionError.new(signature.name) end def validate_order_of(signature) return unless signature.required? && signature.param? return unless reject(&:required?).any?(&:param?) fail OrderError.new(signature.name) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-initializer-0.11.0 | lib/dry/initializer/signature.rb |
dry-initializer-0.10.2 | lib/dry/initializer/signature.rb |
dry-initializer-0.10.1 | lib/dry/initializer/signature.rb |