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?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---