Class: Highway::Steps::Types::Hash

Inherits:
Any
  • Object
show all
Defined in:
lib/highway/steps/types/hash.rb

Overview

This class represents a dictionary parameter type.

Instance Method Summary collapse

Methods inherited from Any

#typecheck_and_validate, #validate

Constructor Details

#initialize(element_type, validate: nil) ⇒ Hash

Initialize an instance.

Parameters:

  • element_type (Object)

    Type of inner elements.

  • validate (Proc) (defaults to: nil)

    A custom value validation block.



22
23
24
25
# File 'lib/highway/steps/types/hash.rb', line 22

def initialize(element_type, validate: nil)
  super(validate: validate)
  @element_type = element_type
end

Instance Method Details

#typecheck(value) ⇒ Hash?

Typecheck and coerce a value if possible.

This method returns a typechecked and coerced value or ‘nil` if value has invalid type and can’t be coerced.

Parameters:

  • value (Object)

    A value.

Returns:



35
36
37
38
39
# File 'lib/highway/steps/types/hash.rb', line 35

def typecheck(value)
  return nil unless value.is_a?(::Hash)
  typechecked = Utilities::hash_map(value) { |key, element| [key, @element_type.typecheck_and_validate(element)] }
  typechecked if typechecked.values.all? { |element| !element.nil? }
end