Class: Typeguard::Validation::FixedHash

Inherits:
Base
  • Object
show all
Defined in:
lib/typeguard/types.rb

Instance Method Summary collapse

Methods inherited from Base

from

Constructor Details

#initialize(node) ⇒ FixedHash

Returns a new instance of FixedHash.



100
101
102
103
104
105
106
107
108
# File 'lib/typeguard/types.rb', line 100

def initialize(node)
  @klass = node.[:const]
  @map = node.children.transpose.each_with_object({}) do |(k, v), h|
    index = k.[:key]
    k_validator = Base.from(k)
    v_validators = v.map { |val| Base.from(val) }
    h[index] = [k_validator, v_validators]
  end
end

Instance Method Details

#valid?(value) ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/typeguard/types.rb', line 110

def valid?(value)
  return false unless value.is_a?(@klass)

  value.all? do |k, v|
    index = k.to_s
    return false unless @map.key?(index)

    k_validator, v_validator = @map[index]
    key_valid = k_validator.valid?(k)
    value_valid = v_validator.any? { |child| child.valid?(v) }
    key_valid && value_valid
  end
end