Sha256: efa3ee2fd711c3aced3c4435a11a0a3e8017433334073559de67fa7123607c26
Contents?: true
Size: 1.86 KB
Versions: 1
Compression:
Stored size: 1.86 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ruby_core_extensions-0.0.1 | lib/ruby_core_extensions/recursive/hash.rb |