Skip to content

Commit c885377

Browse files
committed
MultiJson::Engines::OkJson.symbolize_keys supports Array
1 parent 644d1c5 commit c885377

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

lib/multi_json/engines/ok_json.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@ def self.encode(object) #:nodoc:
1616
end
1717

1818
def self.symbolize_keys(object) #:nodoc:
19-
return object unless object.is_a?(Hash)
20-
object.inject({}) do |result, (key, value)|
21-
new_key = key.is_a?(String) ? key.to_sym : key
22-
new_value = value.is_a?(Hash) ? symbolize_keys(value) : value
23-
result.merge! new_key => new_value
19+
case object
20+
when Array
21+
object.map do |value|
22+
symbolize_keys(value)
23+
end
24+
when Hash
25+
object.inject({}) do |result, (key, value)|
26+
new_key = key.is_a?(String) ? key.to_sym : key
27+
new_value = symbolize_keys(value)
28+
result.merge! new_key => new_value
29+
end
30+
else
31+
object
2432
end
2533
end
2634

spec/multi_json_spec.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,22 @@ def self.encode(string)
111111
end
112112

113113
it 'allows for symbolization of keys' do
114-
MultiJson.decode('{"abc":{"def":"hgi"}}', :symbolize_keys => true).should == { :abc => { :def => 'hgi' } }
114+
[
115+
[
116+
'{"abc":{"def":"hgi"}}',
117+
{ :abc => { :def => 'hgi' } }
118+
],
119+
[
120+
'[{"abc":{"def":"hgi"}}]',
121+
[ { :abc => { :def => 'hgi' } } ]
122+
],
123+
[
124+
'{"abc":[{"def":"hgi"}]}',
125+
{ :abc => [ { :def => 'hgi' } ] }
126+
],
127+
].each do |example, expected|
128+
MultiJson.decode(example, :symbolize_keys => true).should == expected
129+
end
115130
end
116131
end
117132
end

0 commit comments

Comments
 (0)