class PoroValidator::Validators::LengthValidator

Public Instance Methods

validate(attribute, value, options) click to toggle source
# File lib/poro_validator/validators/length_validator.rb, line 4
def validate(attribute, value, options)
  return if value.nil?

  message = options.fetch(:message, :length)

  options.keys.each do |key|
    matcher = matchers(key)
    next if matcher.nil?
    v = value.is_a?(::String) ? value : value.to_s
    unless matchers(key).call(v, options[key])
      errors.add(attribute, message, key => options[key])
    end
  end
end

Private Instance Methods

matchers(key) click to toggle source
# File lib/poro_validator/validators/length_validator.rb, line 21
def matchers(key)
  m = {
    extremum: lambda do |value, length|
      value.length == length
    end,

    max: lambda do |value, length|
      value.length <= length
    end,

    min: lambda do |value, length|
      value.length >= length
    end,

    in: lambda do |value, length|
      length.cover?(value.length)
    end
  }
  m.fetch(key, nil)
end