module Validation::Adjustment
Public Instance Methods
INJECT(adjuster1, adjuster2, *adjusters)
click to toggle source
Sequential apply all adjusters. @param adjuster1 [Proc, to_proc] @param adjuster2 [Proc, to_proc] @param adjusters [Proc, to_proc] @return [lambda]
# File lib/validation/adjustment.rb, line 47 def INJECT(adjuster1, adjuster2, *adjusters) adjusters = [adjuster1, adjuster2, *adjusters] unless adjusters.all? { |f| adjustable?(f) } raise TypeError, 'wrong object for adjuster' end ->v { adjusters.reduce(v) { |ret, adjuster| adjuster.call(ret) } } end
PARSE(parser)
click to toggle source
Accept any parser when that respond to parse method. @param parser [#parse] @return [lambda]
# File lib/validation/adjustment.rb, line 62 def PARSE(parser) if !::Integer.equal?(parser) && !parser.respond_to?(:parse) raise TypeError, 'wrong object for parser' end ->v { if ::Integer.equal?(parser) ::Kernel.Integer(v) else parser.parse( case v when String v when ->_ { v.respond_to?(:to_str) } v.to_str when ->_ { v.respond_to?(:read) } v.read else raise TypeError, 'wrong object for parsing source' end ) end } end
WHEN(pattern, adjuster)
click to toggle source
Adjuster Builders Apply adjuster when passed pattern. @param pattern [Proc, Method, ===] @param adjuster [Proc, to_proc] @return [lambda]
# File lib/validation/adjustment.rb, line 30 def WHEN(pattern, adjuster) unless Eqq.pattern?(pattern) raise TypeError, 'wrong object for pattern' end unless Validation.adjustable?(adjuster) raise TypeError, 'wrong object for adjuster' end ->v { _valid?(pattern, v) ? adjuster.call(v) : v } end
adjustable?(object)
click to toggle source
true if argument is sufficient for adjuster. A adjuster have to be arity equal 1.
# File lib/validation/adjustment.rb, line 12 def adjustable?(object) case object when Proc object.arity == 1 else if object.respond_to?(:to_proc) object.to_proc.arity == 1 else false end end end