module Tins::HashSymbolizeKeysRecursive

Public Instance Methods

symbolize_keys_recursive(circular: nil) click to toggle source
# File lib/tins/hash_symbolize_keys_recursive.rb, line 9
def symbolize_keys_recursive(circular: nil)
  self.seen = {}
  _symbolize_keys_recursive(self, circular: circular)
ensure
  self.seen = nil
end
symbolize_keys_recursive!(circular: nil) click to toggle source
# File lib/tins/hash_symbolize_keys_recursive.rb, line 16
def symbolize_keys_recursive!(circular: nil)
  replace symbolize_keys_recursive(circular: circular)
end

Private Instance Methods

_symbolize_keys_recursive(object, circular: nil) click to toggle source
# File lib/tins/hash_symbolize_keys_recursive.rb, line 22
def _symbolize_keys_recursive(object, circular: nil)
  case
  when seen[object.__id__]
    object = circular
  when Hash === object
    seen[object.__id__] = true
    new_object = object.class.new
    seen[new_object.__id__] = true
    object.each do |k, v|
      new_object[k.to_s.to_sym] = _symbolize_keys_recursive(v, circular: circular)
    end
    object = new_object
  when Array === object
    seen[object.__id__] = true
    new_object = object.class.new(object.size)
    seen[new_object.__id__] = true
    object.each_with_index do |v, i|
      new_object[i] = _symbolize_keys_recursive(v, circular: circular)
    end
    object = new_object
  end
  object
end