Sha256: 143563eeb96b7ef4f3431be1417f4cccec1ce20494d555e4c6dccd99788dc85b
Contents?: true
Size: 672 Bytes
Versions: 8
Compression:
Stored size: 672 Bytes
Contents
# frozen_string_literal: true module HashExtensions def to_nested return self unless contains_dotted_key? keys.reduce({}) do |nested, key| nested.deep_merge(build_nested_object(key, self[key])) end end def deep_merge(hash_to_merge) merger = proc { |_, val_1, val_2| val_1.is_a?(Hash) && val_2.is_a?(Hash) ? val_1.merge(val_2, &merger) : val_2 } merge(hash_to_merge, &merger) end private def contains_dotted_key? keys.any? { |x| x.to_s.include?('.') } end def build_nested_object(key, val) key.to_s .split('.') .reverse .reduce(val) { |nested, key_part| { key_part.to_sym => nested } } end end
Version data entries
8 entries across 8 versions & 1 rubygems