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