Method: Hash#has_shape?

Defined in:
lib/shenanigans/hash/has_shape_pred.rb

#has_shape?(shape) ⇒ Boolean

Checks if a hash has a certain structure.

h = { k1: 1, k2: "1" }
h.has_shape?(k1: Fixnum, k2: String)
#=> true
h.has_shape?(k1: Class, k2: String)
#=> false

It also works with compound data structures.

h = { k1: [], k2: { k3: Struct.new("Foo") } }
shape = { k1: Array, k2: { k3: Module } }
h.has_shape?(shape)
#=> true

Returns:

  • (Boolean)


13
14
15
16
17
# File 'lib/shenanigans/hash/has_shape_pred.rb', line 13

def has_shape?(shape)
  all? do |k, v|
    Hash === v ? v.has_shape?(shape[k]) : shape[k] === v
  end
end