Class: T::Types::FixedHash
Overview
Takes a hash of types. Validates each item in a hash using the type in the same position in the list.
Instance Method Summary collapse
- #build_type ⇒ Object
-
#describe_obj(obj) ⇒ Object
This gives us better errors, e.g.: ‘Expected String, got TrueClass` instead of `Expected String, got Hash`.
-
#initialize(types) ⇒ FixedHash
constructor
A new instance of FixedHash.
-
#name ⇒ Object
overrides Base.
-
#recursively_valid?(obj) ⇒ Boolean
overrides Base.
- #types ⇒ Object
-
#valid?(obj) ⇒ Boolean
overrides Base.
Methods inherited from Base
#==, #error_message_for_obj, #error_message_for_obj_recursive, #hash, method_added, #subtype_of?, #to_s, #validate!
Constructor Details
#initialize(types) ⇒ FixedHash
Returns a new instance of FixedHash.
8 9 10 |
# File 'lib/types/types/fixed_hash.rb', line 8 def initialize(types) @inner_types = types end |
Instance Method Details
#build_type ⇒ Object
16 17 18 19 |
# File 'lib/types/types/fixed_hash.rb', line 16 def build_type types nil end |
#describe_obj(obj) ⇒ Object
This gives us better errors, e.g.: ‘Expected String, got TrueClass` instead of `Expected String, got Hash`.
overrides Base
81 82 83 84 85 86 87 |
# File 'lib/types/types/fixed_hash.rb', line 81 def describe_obj(obj) if obj.is_a?(Hash) "type #{serialize_hash(obj.transform_values(&:class))}" else super end end |
#name ⇒ Object
overrides Base
22 23 24 |
# File 'lib/types/types/fixed_hash.rb', line 22 def name serialize_hash(types) end |
#recursively_valid?(obj) ⇒ Boolean
overrides Base
27 28 29 30 31 32 |
# File 'lib/types/types/fixed_hash.rb', line 27 def recursively_valid?(obj) return false unless obj.is_a?(Hash) return false if types.any? {|key, type| !type.recursively_valid?(obj[key])} return false if obj.any? {|key, _| !types[key]} true end |