Sha256: a0e07681c89add65a1ee8376f32e7ffc86f49cc969f47c6271a7f8ee7c414d42
Contents?: true
Size: 1.84 KB
Versions: 4
Compression:
Stored size: 1.84 KB
Contents
class Hash def recursive_blank? each do |k, v| if v.respond_to?(:recursive_blank?) return false unless v.recursive_blank? else return false unless v.blank? end end true end def convert self end def convert_keys(&converter) inject({}) do |hash, (key, value)| hash[converter.call(key)] = value hash end end def convert_values(*keys, &converter) inject(clone) do |hash, (key, value)| hash[key] = value.convert(&converter) if keys.blank? || keys.include?(key) hash end end def convert_keys_recursively(&converter) Hash[map do |key, value| k = converter.call(key) v = value.convert_keys_recursively(&converter) [k, v] end] end def convert_values_recursively(&converter) inject({}) do |hash, (key, value)| hash[key] = value.convert_values_recursively(&converter) hash end end def symbolize_keys_recursively Hash[map do |key, value| k = key.is_a?(String) ? key.to_sym : key v = value.symbolize_keys_recursively [k, v] end] end def stringify_values_recursively inject({}) do |options, (key, value)| options[key] = value.stringify_values_recursively options end end def make_indifferent_access_recursively HashWithIndifferentAccess.new(inject({}) do |options, (key, value)| options[key] = value.make_indifferent_access_recursively options end) end def deep_dup duplicate = self.dup duplicate.each_pair do |k, v| tv = duplicate[k] duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v end duplicate end def recursively(&block) each do |key, value| block.call(key, value) value.recursively(&block) if value.respond_to?(:recursively) end end end
Version data entries
4 entries across 4 versions & 1 rubygems