class Hash

Public Instance Methods

clean() click to toggle source
# File lib/ds_hash/hash_core_ext.rb, line 35
def clean
  hsh = self.deep_dup
  hsh.clean!
end
clean!() click to toggle source
# File lib/ds_hash/hash_core_ext.rb, line 20
def clean!
  swoop = Proc.new { |k, v| 
    if v.respond_to? 'clean!'
      v.clean!
      false
    elsif v.respond_to? 'compact!'
      v.compact!
      false
    else
      v.to_s.empty? 
    end
  }
  delete_if &swoop
end
deep_dup() click to toggle source

Returns a deep copy of hash. like rails active support

# File lib/ds_hash/hash_core_ext.rb, line 8
define_method 'deep_dup' do
              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
deep_fetch(*keys) { |self || {}| ... } click to toggle source
# File lib/ds_hash/hash_core_ext.rb, line 55
def deep_fetch *keys
  def_value = keys.pop unless keys[keys.size-1].is_a? Symbol
  key = keys.shift
  if !key.is_a? Symbol
    return nil
  elsif keys.empty? 
    if block_given?
      ret = yield self[key] || {}
    else
      ret = self[key] 
    end
  elsif self[key].is_a? Hash      
    ret = self[key].deep_fetch(*keys)  
  end
  ret == nil ? def_value : ret
end
deep_key?(*keys) click to toggle source
# File lib/ds_hash/hash_core_ext.rb, line 46
def deep_key? *keys
  key = keys.shift
  return key?(key) if keys.empty?
  return self[key].deep_key?(*keys) if self[key].is_a? Hash
  false
end
to_struct() click to toggle source
# File lib/ds_hash/hash_core_ext.rb, line 74
def to_struct
  hash = self
  klass = Struct.new(*hash.keys.map(&:to_sym) )
  struct = klass.new(*hash.values)
  hash.each do |key, value|
    if value.is_a?(Hash)
      v = value.to_struct
      struct[key] = v
    end
  end
  return struct
end