Module: Kaal::Support::HashTools

Overview

Small deep-copy and key-normalization helpers used across config and scheduler loading.

Class Method Summary collapse

Class Method Details

.constantize(name) ⇒ Object



45
46
47
# File 'lib/kaal/support/hash_tools.rb', line 45

def constantize(name)
  name.to_s.split('::').reject(&:empty?).reduce(Object) { |scope, part| scope.const_get(part) }
end

.deep_dup(value) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/kaal/support/hash_tools.rb', line 13

def deep_dup(value)
  case value
  when Hash
    value.each_with_object({}) do |(key, child), memo|
      duplicated_pair = [deep_dup(key), deep_dup(child)]
      memo[duplicated_pair[0]] = duplicated_pair[1]
    end
  when Array
    value.map { |child| duplicate_child(child) }
  else
    duplicable?(value) ? value.dup : value
  end
end

.deep_merge(left, right) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/kaal/support/hash_tools.rb', line 35

def deep_merge(left, right)
  left.merge(right) do |_key, left_value, right_value|
    if left_value.is_a?(Hash) && right_value.is_a?(Hash)
      deep_merge(left_value, right_value)
    else
      deep_dup(right_value)
    end
  end
end

.duplicable?(value) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
56
57
# File 'lib/kaal/support/hash_tools.rb', line 49

def duplicable?(value)
  !value.is_a?(NilClass) &&
    !value.is_a?(FalseClass) &&
    !value.is_a?(TrueClass) &&
    !value.is_a?(Symbol) &&
    !value.is_a?(Numeric) &&
    !value.is_a?(Method) &&
    !value.is_a?(Proc)
end

.stringify_keys(value) ⇒ Object



27
28
29
# File 'lib/kaal/support/hash_tools.rb', line 27

def stringify_keys(value)
  transform_keys(value, &:to_s)
end

.symbolize_keys(value) ⇒ Object



31
32
33
# File 'lib/kaal/support/hash_tools.rb', line 31

def symbolize_keys(value)
  transform_keys(value) { |key| key.to_s.to_sym }
end