Module: KeyValidatable

Defined in:
lib/keyvalidatable.rb,
lib/keyvalidatable/errors.rb,
lib/keyvalidatable/version.rb,
lib/keyvalidatable/refinements.rb,
lib/keyvalidatable/singleton_class.rb

Defined Under Namespace

Modules: Refinements Classes: InvalidKeysError

Constant Summary collapse

VERSION =
'0.2.1'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.keys_for(key_value_pairs) ⇒ Array

Parameters:

  • key_value_pairs (Hash, #to_hash, #to_h, Struct, #keys, #members)

Returns:

  • (Array)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/keyvalidatable/singleton_class.rb', line 70

def keys_for(key_value_pairs)
  pairs = (
    case
    when key_value_pairs.respond_to?(:to_hash)
      key_value_pairs.to_hash
    when key_value_pairs.respond_to?(:to_h)
      key_value_pairs.to_h
    else
      key_value_pairs
    end
  )

  case
  when pairs.respond_to?(:keys)
    pairs.keys
  when pairs.respond_to?(:members)
    pairs.members
  else
    raise TypeError, "#{key_value_pairs.inspect} is not pairs object"
  end
end

.valid_array?(keys, requirements) ⇒ Boolean

Parameters:

  • keys (Array, #to_ary)
  • requirements (Hash)

Options Hash (requirements):

  • :must (Array)
  • :let (Array)

Returns:

  • (Boolean)


59
60
61
62
63
64
65
66
# File 'lib/keyvalidatable/singleton_class.rb', line 59

def valid_array?(keys, requirements)
  assert_requirements(requirements)
  validate_array(keys, requirements)
rescue InvalidKeysError
  false
else
  true
end

.valid_keys?(key_value_pairs, requirements) ⇒ Boolean Also known as: valid_members?

Parameters:

  • key_value_pairs (Hash, #to_hash, #to_h, Struct, #keys, #members)
  • requirements (Hash)

Options Hash (requirements):

  • :must (Array)
  • :let (Array)

Returns:

  • (Boolean)


49
50
51
# File 'lib/keyvalidatable/singleton_class.rb', line 49

def valid_keys?(key_value_pairs, requirements)
  valid_array?(keys_for(key_value_pairs), requirements)
end

.validate_array(keys, requirements) ⇒ nil

Parameters:

  • keys (Array, #to_ary)
  • requirements (Hash)

Options Hash (requirements):

  • :must (Array)
  • :let (Array)

Returns:

  • (nil)

Raises:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/keyvalidatable/singleton_class.rb', line 30

def validate_array(keys, requirements)
  assert_requirements(requirements)
  musts, lets = musts_for(requirements), lets_for(requirements)

  shortage_keys = shortage_elements(keys.to_ary, musts)
  excess_keys   = excess_elements(keys.to_ary, musts, lets)

  unless [*shortage_keys, *excess_keys].empty?
    raise InvalidKeysError,
          "Shortage: #{shortage_keys} / Excess: #{excess_keys}"
  end

  nil
end

.validate_keys_in_pairs(key_value_pairs, requirements) ⇒ nil Also known as: validate_keys, validate_members_in_pairs, assert_keys_in_pairs, assert_members_in_pairs

Parameters:

  • key_value_pairs (Hash, #to_hash, #to_h, Struct, #keys, #members)
  • requirements (Hash)

Options Hash (requirements):

  • :must (Array)
  • :let (Array)

Returns:

  • (nil)

Raises:



12
13
14
# File 'lib/keyvalidatable/singleton_class.rb', line 12

def validate_keys_in_pairs(key_value_pairs, requirements)
  validate_array(keys_for(key_value_pairs), requirements)
end

Instance Method Details

#valid_keys?(requirements) ⇒ Boolean

Parameters:

  • requirements (Hash)

Returns:

  • (Boolean)


19
20
21
# File 'lib/keyvalidatable.rb', line 19

def valid_keys?(requirements)
  KeyValidatable.__send__(__callee__, self, requirements)
end

#valid_members?Boolean

Parameters:

  • requirements (Hash)

Returns:

  • (Boolean)


22
23
24
# File 'lib/keyvalidatable.rb', line 22

def valid_keys?(requirements)
  KeyValidatable.__send__(__callee__, self, requirements)
end

#validate_keys(requirements) ⇒ Object Also known as: validate_members, assert_keys

Parameters:

  • requirements (Hash)


12
13
14
# File 'lib/keyvalidatable.rb', line 12

def validate_keys(requirements)
  KeyValidatable.__send__(__callee__, self, requirements)
end