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