module Hashie::Extensions::SymbolizeKeys::ClassMethods

Public Instance Methods

symbolize_keys(hash) click to toggle source

Return a copy of hash with all keys converted to symbols. @param [::Hash] hash

# File lib/hashie/extensions/symbolize_keys.rb, line 57
def symbolize_keys(hash)
  copy = hash.dup
  copy.extend(Hashie::Extensions::SymbolizeKeys) unless copy.respond_to?(:symbolize_keys!)
  copy.tap do |new_hash|
    symbolize_keys!(new_hash)
  end
end
symbolize_keys!(hash) click to toggle source

Convert all keys in hash to symbols.

@param [Hash] hash @example

test = {'abc' => 'def'}
Hashie.symbolize_keys! test
test # => {:abc => 'def'}
# File lib/hashie/extensions/symbolize_keys.rb, line 45
def symbolize_keys!(hash)
  hash.extend(Hashie::Extensions::SymbolizeKeys) unless hash.respond_to?(:symbolize_keys!)
  hash.keys.each do |k| # rubocop:disable Performance/HashEachMethods
    symbolize_keys_recursively!(hash[k])
    hash[convert_key(k)] = hash.delete(k)
  end
  hash
end
symbolize_keys_recursively!(object) click to toggle source

Symbolize all keys recursively within nested hashes and arrays. @api private

# File lib/hashie/extensions/symbolize_keys.rb, line 25
def symbolize_keys_recursively!(object)
  case object
  when self.class
    symbolize_keys!(object)
  when ::Array
    object.each do |i|
      symbolize_keys_recursively!(i)
    end
  when ::Hash
    symbolize_keys!(object)
  end
end

Private Instance Methods

convert_key(key) click to toggle source

Converts a key to a symbol, if possible

@api private @param [<K>] key the key to attempt convert to a symbol @return [Symbol, K]

# File lib/hashie/extensions/symbolize_keys.rb, line 72
def convert_key(key)
  key.respond_to?(:to_sym) ? key.to_sym : key
end