Skip to content

Commit 1a9da1e

Browse files
authored
Fix item of hash behavior of deep_camelize (#455)
Fix `#deep_camelize` which only supports `Hash` and omits `Array` consideration. This will be fixed #450 (comment).
1 parent c59a62e commit 1a9da1e

2 files changed

Lines changed: 18 additions & 7 deletions

File tree

lib/line/bot/v2/utils.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,18 @@ def self.deep_to_hash(object)
3333
end
3434
end
3535

36-
def self.deep_camelize(hash)
37-
return hash unless hash.is_a?(Hash)
38-
39-
hash.each_with_object({}) do |(k, v), new_hash|
40-
camel_key = camelize(k).to_sym
41-
new_value = v.is_a?(Hash) ? deep_camelize(v) : v
42-
new_hash[camel_key] = new_value
36+
def self.deep_camelize(object)
37+
case object
38+
when Array
39+
object.map { |item| deep_camelize(item) }
40+
when Hash
41+
object.each_with_object({}) do |(k, v), new_object|
42+
camel_key = camelize(k).to_sym
43+
new_value = v.is_a?(Array) || v.is_a?(Hash) ? deep_camelize(v) : v
44+
new_object[camel_key] = new_value
45+
end
46+
else
47+
object
4348
end
4449
end
4550

spec/line/bot/v2/utils_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ def initialize(name)
104104
expect(Line::Bot::V2::Utils.deep_camelize(input)).to eq(expected_output)
105105
end
106106

107+
it 'converts hashes in array with snake_case keys' do
108+
input = [{ outer_key: { inner_key: 'value', inner_array: [{ core_key: 'value' }] } }]
109+
expected_output = [{ outerKey: { innerKey: 'value', innerArray: [{ coreKey: 'value' }] } }]
110+
expect(Line::Bot::V2::Utils.deep_camelize(input)).to eq(expected_output)
111+
end
112+
107113
it 'handles empty hashes' do
108114
input = {}
109115
expected_output = {}

0 commit comments

Comments
 (0)