diff options
Diffstat (limited to 'activeresource/lib/active_resource/connection.rb')
-rw-r--r-- | activeresource/lib/active_resource/connection.rb | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/activeresource/lib/active_resource/connection.rb b/activeresource/lib/active_resource/connection.rb index e4f733cf70..c52d4d4839 100644 --- a/activeresource/lib/active_resource/connection.rb +++ b/activeresource/lib/active_resource/connection.rb @@ -49,7 +49,7 @@ module ActiveResource end def get(path) - Hash.from_xml(request(:get, path, build_request_headers).body) + from_xml_data(Hash.from_xml(request(:get, path, build_request_headers).body).values.first) end def delete(path) @@ -113,5 +113,25 @@ module ActiveResource def logger ActiveResource::Base.logger end + + # Manipulate from_xml Hash, because xml_simple is not exactly what we + # want for ActiveResource. + def from_xml_data(data) + case data + when Hash + if data.keys.size == 1 + case data.values.first + when Hash then [ from_xml_data(data.values.first) ] + when Array then from_xml_data(data.values.first) + else data + end + else + data.each_key { |key| data[key] = from_xml_data(data[key]) } + data + end + when Array then data.collect { |val| from_xml_data(val) } + else data + end + end end end |