Module: Boldsign::CaseConvert

Defined in:
lib/boldsign/case_convert.rb

Overview

Converts arbitrary Ruby hash keys (snake_case, camelCase, or PascalCase; Symbol or String) to camelCase string keys recursively, matching the casing the BoldSign REST API expects in request bodies. Non-Hash and non-Array values — including binary IO objects, FilePart instances, scalars, dates, etc. — pass through untouched.

Class Method Summary collapse

Class Method Details

.camelize(obj) ⇒ Object

Recursively camelCase every Hash key reachable from ‘obj`.

Parameters:

  • obj (Object)

Returns:

  • (Object)

    new object with the same shape and camelCase keys



13
14
15
16
17
18
19
20
21
22
# File 'lib/boldsign/case_convert.rb', line 13

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

.camelize_key(key) ⇒ String

Returns camelCase string.

Parameters:

  • key (String, Symbol)

Returns:

  • (String)

    camelCase string



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/boldsign/case_convert.rb', line 26

def camelize_key(key)
  str = key.to_s
  return str if str.empty?

  if str.include?("_")
    parts = str.split("_").reject(&:empty?)
    return str if parts.empty?

    ([parts.first.downcase] + parts.drop(1).map { |part| capitalize_word(part) }).join
  else
    lowercase_first(str)
  end
end

.capitalize_word(str) ⇒ Object



40
41
42
43
44
# File 'lib/boldsign/case_convert.rb', line 40

def capitalize_word(str)
  return str if str.empty?

  str[0].upcase + str[1..]
end

.lowercase_first(str) ⇒ Object



46
47
48
49
50
# File 'lib/boldsign/case_convert.rb', line 46

def lowercase_first(str)
  return str if str.empty?

  str[0].downcase + str[1..]
end