class HashValidator::Validator::HashValidator

Public Class Methods

new() click to toggle source
Calls superclass method HashValidator::Validator::Base::new
# File lib/hash_validator/validators/hash_validator.rb, line 2
def initialize
  super('hash')
end

Public Instance Methods

should_validate?(rhs) click to toggle source
# File lib/hash_validator/validators/hash_validator.rb, line 6
def should_validate?(rhs)
  rhs.is_a?(Hash)
end
validate(key, value, validations, errors) click to toggle source
# File lib/hash_validator/validators/hash_validator.rb, line 10
def validate(key, value, validations, errors)
  # Validate hash
  unless value.is_a?(Hash)
    errors[key] = presence_error_message
    return
  end

  # Hashes can contain sub-elements, attempt to validator those
  errors = (errors[key] = {})

  validations.each do |v_key, v_value|
    HashValidator.validator_for(v_value).validate(v_key, value[v_key], v_value, errors)
  end

  if HashValidator::Base.strict?
    value.keys.each do |k|
      errors[k] = 'key not expected' unless validations[k]
    end
  end

  # Cleanup errors (remove any empty nested errors)
  errors.delete_if { |_,v| v.empty? }
end