Sha256: bf2476d8b669690eddab51d32a2029b4f3a3e0102c5738f593ffaf862d80f8f3

Contents?: true

Size: 907 Bytes

Versions: 5

Compression:

Stored size: 907 Bytes

Contents

class HashValidator::Validator::HashValidator < HashValidator::Validator::Base
  def initialize
    super('hash')
  end

  def should_validate?(rhs)
    rhs.is_a?(Hash)
  end

  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 { |k,v| v.empty? }
  end
end


HashValidator.append_validator(HashValidator::Validator::HashValidator.new)

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hash_validator-0.7.1 lib/hash_validator/validators/hash_validator.rb
hash_validator-0.7.0 lib/hash_validator/validators/hash_validator.rb
hash_validator-0.6.0 lib/hash_validator/validators/hash_validator.rb
hash_validator-0.5.0 lib/hash_validator/validators/hash_validator.rb
hash_validator-0.4.0 lib/hash_validator/validators/hash_validator.rb