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
- .camelize(str) ⇒ Object
-
.deep_camelize(obj) ⇒ Object
Recursively rewrite a Hash/Array — used on outgoing variable payloads.
-
.deep_snakeize(obj) ⇒ Object
Recursively rewrite a Hash/Array — used on incoming GraphQL responses.
- .snakeize(str) ⇒ Object
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 |