lib/dry/validation/rule.rb in dry-validation-1.0.0 vs lib/dry/validation/rule.rb in dry-validation-1.1.0
- old
+ new
@@ -52,11 +52,11 @@
# @see Contract#rule
# @return [Rule]
#
# @api public
def validate(*macros, &block)
- @macros = macros.map { |spec| Array(spec) }.map(&:flatten)
+ @macros = parse_macros(*macros)
@block = block if block
self
end
# Define a validation function for each element of an array
@@ -66,16 +66,18 @@
#
# @example
# rule(:nums).each do
# key.failure("must be greater than 0") if value < 0
# end
+ # rule(:nums).each(min: 3)
#
# @return [Rule]
#
# @api public
def each(*macros, &block)
root = keys
+ macros = parse_macros(*macros)
@keys = []
@block = proc do
values[root].each_with_index do |_, idx|
path = [*root, idx]
@@ -96,9 +98,25 @@
# @return [String]
#
# @api public
def inspect
%(#<#{self.class} keys=#{keys.inspect}>)
+ end
+
+ # Parse function arguments into macros structure
+ #
+ # @return [Array]
+ #
+ # @api private
+ def parse_macros(*args)
+ args.each_with_object([]) do |spec, macros|
+ case spec
+ when Hash
+ spec.each { |k, v| macros << [k, Array(v)] }
+ else
+ macros << Array(spec)
+ end
+ end
end
end
end
end