module Colppy::Core::Hash
Public Instance Methods
snakecase_keys(value)
click to toggle source
Recursively converts CamelCase and camelBack JSON-style hash keys to Rubyish snake_case, suitable for use during instantiation of Ruby model attributes.
# File lib/colppy/core/support/hash.rb, line 13 def snakecase_keys(value) case value when(Array) value.map { |v| snakecase_keys(v) } when(::Hash) snake_hash(value) else value end end
Private Instance Methods
snake_hash(value)
click to toggle source
# File lib/colppy/core/support/hash.rb, line 26 def snake_hash(value) ::Hash[value.map { |k, v| [snake_key(k).to_sym, snakecase_keys(v)] }] end
snake_key(k)
click to toggle source
# File lib/colppy/core/support/hash.rb, line 30 def snake_key(k) if k.is_a? Symbol snakecase(k.to_s).to_sym elsif k.is_a? String snakecase(k) else k # Can't snakify anything except strings and symbols end end
snakecase(string)
click to toggle source
# File lib/colppy/core/support/hash.rb, line 40 def snakecase(string) string.gsub(/::/, '/') .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .tr('-', '_') .downcase end