Use a builder to render changeset downloads
This commit is contained in:
parent
8a9dbc94c8
commit
76f1d7bc78
3 changed files with 38 additions and 24 deletions
|
@ -11,6 +11,8 @@ module Api
|
|||
before_action :require_public_data, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
|
||||
before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
|
||||
before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :subscribe, :unsubscribe]
|
||||
before_action :set_request_formats, :only => [:download]
|
||||
|
||||
around_action :api_call_handle_error
|
||||
around_action :api_call_timeout, :except => [:upload]
|
||||
|
||||
|
@ -122,35 +124,29 @@ module Api
|
|||
end
|
||||
end
|
||||
|
||||
# create changeset and user caches
|
||||
changeset_cache = {}
|
||||
user_display_name_cache = {}
|
||||
|
||||
# create an osmChange document for the output
|
||||
result = OSM::API.new.get_xml_doc
|
||||
result.root.name = "osmChange"
|
||||
|
||||
# generate an output element for each operation. note: we avoid looking
|
||||
# at the history because it is simpler - but it would be more correct to
|
||||
# check these assertions.
|
||||
@created = []
|
||||
@modified = []
|
||||
@deleted = []
|
||||
|
||||
elements.each do |elt|
|
||||
result.root <<
|
||||
if elt.version == 1
|
||||
# first version, so it must be newly-created.
|
||||
created = XML::Node.new "create"
|
||||
created << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
elsif elt.visible
|
||||
# must be a modify
|
||||
modified = XML::Node.new "modify"
|
||||
modified << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
else
|
||||
# if the element isn't visible then it must have been deleted
|
||||
deleted = XML::Node.new "delete"
|
||||
deleted << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
end
|
||||
if elt.version == 1
|
||||
# first version, so it must be newly-created.
|
||||
@created << elt
|
||||
elsif elt.visible
|
||||
# must be a modify
|
||||
@modified << elt
|
||||
else
|
||||
# if the element isn't visible then it must have been deleted
|
||||
@deleted << elt
|
||||
end
|
||||
end
|
||||
|
||||
render :xml => result.to_s
|
||||
respond_to do |format|
|
||||
format.xml
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
|
|
19
app/views/api/changesets/download.xml.builder
Normal file
19
app/views/api/changesets/download.xml.builder
Normal file
|
@ -0,0 +1,19 @@
|
|||
xml.instruct! :xml, :version => "1.0"
|
||||
|
||||
xml.osmChange(OSM::API.new.xml_root_attributes) do |osm|
|
||||
@created.each do |elt|
|
||||
osm.create do |create|
|
||||
create << render(elt)
|
||||
end
|
||||
end
|
||||
@modified.each do |elt|
|
||||
osm.modify do |modify|
|
||||
modify << render(elt)
|
||||
end
|
||||
end
|
||||
@deleted.each do |elt|
|
||||
osm.delete do |delete|
|
||||
delete << render(elt)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue