class Hash
Public Instance Methods
add_keysym_from(h)
click to toggle source
# File lib/hash.rb, line 4 def add_keysym_from(h) h.each{|k,v| self[ k.to_sym ] = v } self end
any_key?(*list)
click to toggle source
# File lib/hash.rb, line 54 def any_key?(*list) (( self.keys & list ).count > 0 ) && !! ( self.keys & list ) end
deep_merge(src)
click to toggle source
# File lib/hash.rb, line 39 def deep_merge(src) dst = dup dst.merge(src){|k, o1, o2| if o1.is_a?(o2.class) && o1.respond_to?(:deep_merge) o1.deep_merge(o2) else # classes mismatch or simple type o2.dup end } end
filter_keys( *kk )
click to toggle source
# File lib/hash.rb, line 58 def filter_keys( *kk ) filter{ |k, v| kk.include?(k) } end
keys?(*list)
click to toggle source
# File lib/hash.rb, line 50 def keys?(*list) keys.include?(*list) end
keys_to_symbols()
click to toggle source
# File lib/hash.rb, line 22 def keys_to_symbols z = {} self.each do |k,v| z[ k.is_a?(String) ? k.to_sym : k ] = if v.class == Hash v.keys_to_symbols elsif v.respond_to?(:to_hash) v.to_hash.keys_to_symbols elsif v.respond_to?(:collect) v.collect{|i| i.respond_to?(:keys_to_symbols) ? i.keys_to_symbols : i } else v.dup end end z end
method_missing( m, *args )
click to toggle source
# File lib/hash.rb, line 10 def method_missing( m, *args ) case m[-1] when '?' n = m[0..-2].to_sym self.key?(n) || self.key?(n.to_s) when '=' self[ m[0..-2].to_sym ] = args.first else self[m] || self[m.to_s] end end
present?()
click to toggle source
# File lib/hash.rb, line 8 def present?; ! self.empty?; end
recursive_transform_values!() { |i| ... }
click to toggle source
do not processes recursive Arrays
# File lib/hash.rb, line 63 def recursive_transform_values!(&block) transform_values! do |v| case v when Hash v.recursive_transform_values!( &block ) when Enumerable v.map{|i| i.is_a?( Hash ) ? i.recursive_transform_values!( &block ) : yield( i ) } else yield( v ) end end end