Module: Rockbox::CaseConversion

Defined in:
lib/rockbox/case_conversion.rb

Overview

Convert between GraphQL camelCase JSON keys and Ruby snake_case symbols. The transport applies these on every request/response so user code can always work in idiomatic Ruby.

Class Method Summary collapse

Class Method Details

.camelize(str) ⇒ Object



10
11
12
13
# File 'lib/rockbox/case_conversion.rb', line 10

def camelize(str)
  head, *tail = str.to_s.split("_")
  ([head] + tail.map(&:capitalize)).join
end

.deep_camelize(obj) ⇒ Object

Recursively rewrite a Hash/Array — used on outgoing variable payloads.



20
21
22
23
24
25
26
27
28
29
# File 'lib/rockbox/case_conversion.rb', line 20

def deep_camelize(obj)
  case obj
  when Hash
    obj.each_with_object({}) { |(k, v), h| h[camelize(k)] = deep_camelize(v) }
  when Array
    obj.map { |v| deep_camelize(v) }
  else
    obj
  end
end

.deep_snakeize(obj) ⇒ Object

Recursively rewrite a Hash/Array — used on incoming GraphQL responses.



32
33
34
35
36
37
38
39
40
41
# File 'lib/rockbox/case_conversion.rb', line 32

def deep_snakeize(obj)
  case obj
  when Hash
    obj.each_with_object({}) { |(k, v), h| h[snakeize(k).to_sym] = deep_snakeize(v) }
  when Array
    obj.map { |v| deep_snakeize(v) }
  else
    obj
  end
end

.snakeize(str) ⇒ Object



15
16
17
# File 'lib/rockbox/case_conversion.rb', line 15

def snakeize(str)
  str.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
end