module Colppy::Core::Hash

Colppy::Core::Hash.snakecase_keys(value)

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