Sha256: f6c4ce68ad7f891dcb48b77b0278ab6177acd80b070d1e7a5d0a7c2da4c31393

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

class Hash

  unless method_defined?(:stringify_keys)
    def stringify_keys
      inject({}) do |options, (key, value)|
        options[key.to_s] = value
        options
      end
    end
  end

  unless method_defined?(:stringify_keys!)
    def stringify_keys!
      replace(stringify_keys)
    end
  end

  unless method_defined?(:symbolize_keys)
    def symbolize_keys
      inject({}) do |options, (key, value)|
        options[(key.to_sym rescue key) || key] = value
        options
      end
    end
  end

  unless method_defined?(:symbolize_keys!)
    def symbolize_keys!
      replace(symbolize_keys)
    end
  end

  unless method_defined?(:except)
    def except(*args)
      hash = dup
      args.each {|k| hash.delete(k) }
      hash
    end
  end

  unless method_defined?(:only)
    def only(*args)
      hash = {}
      args.each {|k| hash[k] = self[k] if self.has_key?(k) }
      hash
    end
  end

  def rename_keys(*args)
    keys = Hash[*args.flatten]
    keys.each { |k, v| self[v] = delete(k) if self[k] }
    self
  end

  def rename_keys!(*args)
    replace(rename_keys(*args))
  end

  def symbolize_and_underscore_keys
    inject({}) do |options, (key, value)|
      options[(key.to_s.underscore.to_sym rescue key) || key] = value
      options
    end
  end

  def symbolize_and_underscore_keys!
    replace(symbolize_and_underscore_keys)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nobiru-1.0.0 lib/nobiru/extensions/hash_extension.rb
nobiru-0.0.1 lib/nobiru/extensions/hash_extension.rb