Sha256: e188f27b64553199075f22fb7b5913b983c6ae30c4f8b087c1f031471f100946

Contents?: true

Size: 697 Bytes

Versions: 125

Compression:

Stored size: 697 Bytes

Contents

# frozen_string_literal: true

class ReeHash::HashKeysContract
  extend Ree::Contracts::Truncatable

  def self.valid?(obj)
    return false if !obj.is_a?(Array)
    return false if obj.any? { !valid_item?(_1) }
    true
  end

  def self.to_s
    "[:key0, .., :keyM => [:keyN, .., :keyZ]]"
  end

  def self.message(value, name, lvl = 1)
    "expected #{to_s}, got => #{truncate(value.inspect)}"
  end

  private

  def self.valid_item?(obj)
    return true if obj.is_a?(Symbol)
    return false if !obj.is_a?(Hash)  

    obj.each do |k, v|
      return false if !k.is_a?(Symbol)
      return false if !v.is_a?(Array)
      return false if v.any? { !valid_item?(_1) }
    end

    true
  end
end

Version data entries

125 entries across 125 versions & 1 rubygems

Version Path
ree_lib-1.0.24 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.23 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.22 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.21 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.20 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.19 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.18 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.17 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.16 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.15 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.14 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.13 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.12 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.11 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.10 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.9 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.8 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.7 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.6 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb
ree_lib-1.0.5 lib/ree_lib/packages/ree_hash/package/ree_hash/contracts/hash_keys_contract.rb