class Sullivan::Validations::Many

Public Class Methods

new(validation, at_least: nil, at_most: nil) click to toggle source
# File lib/sullivan/validations/many.rb, line 4
def initialize(validation, at_least: nil, at_most: nil)
  @validation = validation
  @at_least   = at_least
  @at_most    = at_most
end

Public Instance Methods

validate(values) click to toggle source
# File lib/sullivan/validations/many.rb, line 10
def validate(values)
  return 'must be an array' unless values.respond_to?(:map)
  return "must contain at least #{num_elements(@at_least)}" if @at_least && values.size < @at_least
  return "must contain at most #{num_elements(@at_most)}"   if @at_most  && values.size > @at_most

  errors = values.map do |value|
    @validation.validate(value)
  end

  errors unless errors.all?(&:nil?)
end

Private Instance Methods

num_elements(n) click to toggle source
# File lib/sullivan/validations/many.rb, line 24
def num_elements(n)
  "#{n} #{n == 1 ? 'element' : 'elements'}"
end