Sha256: 416acc527f45715c27d9823b8642ec838345bf7e7e66fce652639cd340b56561

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

class Hash
	def delete_all_of(*keys)
		keys = keys.map {|k| [ k.to_s, k.to_sym ]}.flatten.uniq
		values = values_at(*keys).flatten.compact.uniq
		keys.each {|k| delete k}
		values
	end

  # from ActiveSupport:
  #
  # Returns a new hash with +self+ and +other_hash+ merged recursively.
  def deep_merge(other_hash)
    self.merge(other_hash) do |key, oldval, newval|
      oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
      newval = newval.to_hash if newval.respond_to?(:to_hash)
      oldval.class.to_s == 'Hash' && newval.class.to_s == 'Hash' ? oldval.deep_merge(newval) : newval
    end
  end

  # Returns a new hash with +self+ and +other_hash+ merged recursively.
  # Modifies the receiver in place.
  def deep_merge!(other_hash)
    replace(deep_merge(other_hash))
  end

  # Return a new hash with all keys converted to symbols.
    def symbolize_keys
      inject({}) do |options, (key, value)|
        options[(key.to_sym rescue key) || key] = value
        options
      end
    end

    # Destructively convert all keys to symbols.
    def symbolize_keys!
      self.replace(self.symbolize_keys)
    end

    def deep_symbolize_keys
      inject({}) do |options, (key, value)|
        options[(key.to_sym rescue key) || key] = __recurse_deep_symbolize_keys(value)
      options
      end
    end

    def __recurse_deep_symbolize_keys(value)
      case value
      when Hash
        value.deep_symbolize_keys
      when Array
        value.map {|v| __recurse_deep_symbolize_keys(v)}
      else
        value
      end
    end
    

end

class AngryHash
    def delete_all_of(*keys)
      keys.map {|k| delete(k.to_s)}.compact.uniq
    end

    require 'angry_hash/merge_string'
    include AngryHash::MergeString
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
angry_mob-0.1.0 lib/angry_mob/extend/hash.rb