Trouble consuming REST from OpenStreetMap - self-closing elements, perhaps?

I'm consuming openstreetmap.org's REST api: http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.5#Retrieving_all_objects_in_a_bounding_box

and I get an error when I try to run the following code in my ActiveResource model:

  # GET /api/0.5/map?bbox=left,bottom,right,top   def self.features(left,bottom,right,top)     find(:first, :from=>"/api/0.5/map?bbox=#{left},#{bottom},#{right},# {top}")   end

Yields:

undefined method `collect!' for #<Hash:0x22f2798> RAILS_ROOT: /Users/jeff/Desktop/whooz-osm/whooz-osm

Application Trace | Framework Trace | Full Trace lib/active_resource/base.rb:595:in `instantiate_collection' lib/active_resource/base.rb:559:in `find_every' lib/active_resource/base.rb:508:in `find' app/models/openstreetmap.rb:9:in `features'

I thought it was this patch, and perhaps it is, in a sense: http://dev.rubyonrails.org/ticket/8798 (that's why i'm using my own copy of base.rb; i used their patch)

But in fact, I think it may be because if you actually go to OSM's response:

http://api.openstreetmap.org/api/0.5/map?bbox=11.54,48.14,11.543,48.145

you see that they're using self-closing elements, which aren't ever used in REST examples, as far as I can tell. That is, they use:

<node foo="bar" />

instead of always:

<node>   <foo>bar</foo> </node>

Odd, since OSM is run on Rails anyways... so that gives me a Hash:

{"node"=>[{"lon"=>"11.5411444", "user"=>"lesi", (...)

...in which "node" is the only node element. Looks like it's not recognizing it as self-closing, and treating the rest of the xml as part of that element.

In any case, it's the following part of /active_resource/base.rb which is causing the problem:

        def instantiate_collection(collection, prefix_options = {})           # collection.collect! { |record| instantiate_record(record, prefix_options) }           puts collection.inspect           if collection.is_a?(Hash) && collection.size == 1             value = collection.values.first             if value.is_a?(Array)               value.collect! { |record| instantiate_record(record, prefix_options) }             else               [ instantiate_record(value, prefix_options) ]             end           else             collection.collect! { |record| instantiate_record(record, prefix_options) }           end         end

And I'm not sure how to patch AR to be able to read self-closing elements... i think it's in /active_resource/formats/xml_format.rb, but it's kind of opaque to me. Wonder if you have any thoughts on this? Are self-closing elements a valid expression of REST xml? Can I filter/reformat in my AR model, or should I extend whatever XML parser AR is using... rexml, i'd guess... to appropriately read this?

FYI!

My good friend Robert (http://www.robertsosinski.com/) responded with this excellent overview with which I got things running in about 20 lines of code: