Sha256: 68c02304f7010bcb8946646efaf119589b65587a5650f660d732e027f5caf457
Contents?: true
Size: 1.12 KB
Versions: 2
Compression:
Stored size: 1.12 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 = [] end def add(*args) signature = Plugins::Signature.new(*args) validates_uniqueness_of signature validates_order_of signature copy { @list += [signature] } end def each (@list.select(&:param?) + @list.reject(&:param?)).each do |item| yield item end end def call map(&:call).compact.uniq.join(", ") end private def copy(&block) dup.tap do |instance| instance.instance_eval(&block) end end def validates_uniqueness_of(signature) return unless include? signature fail RedefinitionError.new(signature.name) end def validates_order_of(signature) return unless signature.param? && signature.required? return unless any? { |item| item.param? && !item.required? } fail OrderError.new(signature.name) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-initializer-0.8.1 | lib/dry/initializer/signature.rb |
dry-initializer-0.8.0 | lib/dry/initializer/signature.rb |