Module: Kaal::Support::HashTools
- Included in:
- Definition::MemoryEngine, Definition::RedisEngine, Kaal::SchedulerFileLoader, Kaal::SchedulerFileLoader::JobApplier, Kaal::SchedulerFileLoader::JobNormalizer
- Defined in:
- lib/kaal/support/hash_tools.rb
Overview
Small deep-copy and key-normalization helpers used across config and scheduler loading.
Class Method Summary collapse
- .constantize(name) ⇒ Object
- .deep_dup(value) ⇒ Object
- .deep_merge(left, right) ⇒ Object
- .duplicable?(value) ⇒ Boolean
- .stringify_keys(value) ⇒ Object
- .symbolize_keys(value) ⇒ Object
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
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 |