Use changeset and user caches in Changeset#download
This commit is contained in:
parent
e6a1003509
commit
b92a2de9ec
4 changed files with 81 additions and 27 deletions
|
@ -161,6 +161,10 @@ class ChangesetController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# create changeset and user caches
|
||||||
|
changeset_cache = {}
|
||||||
|
user_display_name_cache = {}
|
||||||
|
|
||||||
# create an osmChange document for the output
|
# create an osmChange document for the output
|
||||||
result = OSM::API.new.get_xml_doc
|
result = OSM::API.new.get_xml_doc
|
||||||
result.root.name = "osmChange"
|
result.root.name = "osmChange"
|
||||||
|
@ -173,16 +177,16 @@ class ChangesetController < ApplicationController
|
||||||
if (elt.version == 1)
|
if (elt.version == 1)
|
||||||
# first version, so it must be newly-created.
|
# first version, so it must be newly-created.
|
||||||
created = XML::Node.new "create"
|
created = XML::Node.new "create"
|
||||||
created << elt.to_xml_node
|
created << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||||
else
|
else
|
||||||
unless elt.visible
|
unless elt.visible
|
||||||
# if the element isn't visible then it must have been deleted
|
# if the element isn't visible then it must have been deleted
|
||||||
deleted = XML::Node.new "delete"
|
deleted = XML::Node.new "delete"
|
||||||
deleted << elt.to_xml_node
|
deleted << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||||
else
|
else
|
||||||
# must be a modify
|
# must be a modify
|
||||||
modified = XML::Node.new "modify"
|
modified = XML::Node.new "modify"
|
||||||
modified << elt.to_xml_node
|
modified << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -42,9 +42,37 @@ class OldNode < ActiveRecord::Base
|
||||||
return doc
|
return doc
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_xml_node
|
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||||
el1 = XML::Node.new 'node'
|
el1 = XML::Node.new 'node'
|
||||||
el1['id'] = self.node_id.to_s
|
el1['id'] = self.node_id.to_s
|
||||||
|
el1['version'] = self.version.to_s
|
||||||
|
el1['changeset'] = self.changeset_id.to_s
|
||||||
|
|
||||||
|
if self.visible?
|
||||||
|
el1['lat'] = self.lat.to_s
|
||||||
|
el1['lon'] = self.lon.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
if changeset_cache.key?(self.changeset_id)
|
||||||
|
# use the cache if available
|
||||||
|
else
|
||||||
|
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||||
|
end
|
||||||
|
|
||||||
|
user_id = changeset_cache[self.changeset_id]
|
||||||
|
|
||||||
|
if user_display_name_cache.key?(user_id)
|
||||||
|
# use the cache if available
|
||||||
|
elsif self.changeset.user.data_public?
|
||||||
|
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||||
|
else
|
||||||
|
user_display_name_cache[user_id] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if not user_display_name_cache[user_id].nil?
|
||||||
|
el1['user'] = user_display_name_cache[user_id]
|
||||||
|
el1['uid'] = user_id.to_s
|
||||||
|
end
|
||||||
|
|
||||||
self.tags.each do |k,v|
|
self.tags.each do |k,v|
|
||||||
el2 = XML::Node.new('tag')
|
el2 = XML::Node.new('tag')
|
||||||
|
@ -53,20 +81,8 @@ class OldNode < ActiveRecord::Base
|
||||||
el1 << el2
|
el1 << el2
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.visible?
|
|
||||||
el1['lat'] = self.lat.to_s
|
|
||||||
el1['lon'] = self.lon.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
el1['changeset'] = self.changeset.id.to_s
|
|
||||||
if self.changeset.user.data_public?
|
|
||||||
el1['user'] = self.changeset.user.display_name
|
|
||||||
el1['uid'] = self.changeset.user.id.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
el1['visible'] = self.visible.to_s
|
el1['visible'] = self.visible.to_s
|
||||||
el1['timestamp'] = self.timestamp.xmlschema
|
el1['timestamp'] = self.timestamp.xmlschema
|
||||||
el1['version'] = self.version.to_s
|
|
||||||
|
|
||||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||||
|
|
||||||
|
|
|
@ -93,18 +93,35 @@ class OldRelation < ActiveRecord::Base
|
||||||
return doc
|
return doc
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_xml_node
|
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||||
el1 = XML::Node.new 'relation'
|
el1 = XML::Node.new 'relation'
|
||||||
el1['id'] = self.relation_id.to_s
|
el1['id'] = self.relation_id.to_s
|
||||||
el1['visible'] = self.visible.to_s
|
el1['visible'] = self.visible.to_s
|
||||||
el1['timestamp'] = self.timestamp.xmlschema
|
el1['timestamp'] = self.timestamp.xmlschema
|
||||||
if self.changeset.user.data_public?
|
|
||||||
el1['user'] = self.changeset.user.display_name
|
|
||||||
el1['uid'] = self.changeset.user.id.to_s
|
|
||||||
end
|
|
||||||
el1['version'] = self.version.to_s
|
el1['version'] = self.version.to_s
|
||||||
el1['changeset'] = self.changeset_id.to_s
|
el1['changeset'] = self.changeset_id.to_s
|
||||||
|
|
||||||
|
if changeset_cache.key?(self.changeset_id)
|
||||||
|
# use the cache if available
|
||||||
|
else
|
||||||
|
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||||
|
end
|
||||||
|
|
||||||
|
user_id = changeset_cache[self.changeset_id]
|
||||||
|
|
||||||
|
if user_display_name_cache.key?(user_id)
|
||||||
|
# use the cache if available
|
||||||
|
elsif self.changeset.user.data_public?
|
||||||
|
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||||
|
else
|
||||||
|
user_display_name_cache[user_id] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if not user_display_name_cache[user_id].nil?
|
||||||
|
el1['user'] = user_display_name_cache[user_id]
|
||||||
|
el1['uid'] = user_id.to_s
|
||||||
|
end
|
||||||
|
|
||||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||||
|
|
||||||
self.old_members.each do |member|
|
self.old_members.each do |member|
|
||||||
|
|
|
@ -92,17 +92,34 @@ class OldWay < ActiveRecord::Base
|
||||||
@tags = t
|
@tags = t
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_xml_node
|
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||||
el1 = XML::Node.new 'way'
|
el1 = XML::Node.new 'way'
|
||||||
el1['id'] = self.way_id.to_s
|
el1['id'] = self.way_id.to_s
|
||||||
el1['visible'] = self.visible.to_s
|
el1['visible'] = self.visible.to_s
|
||||||
el1['timestamp'] = self.timestamp.xmlschema
|
el1['timestamp'] = self.timestamp.xmlschema
|
||||||
if self.changeset.user.data_public?
|
|
||||||
el1['user'] = self.changeset.user.display_name
|
|
||||||
el1['uid'] = self.changeset.user.id.to_s
|
|
||||||
end
|
|
||||||
el1['version'] = self.version.to_s
|
el1['version'] = self.version.to_s
|
||||||
el1['changeset'] = self.changeset.id.to_s
|
el1['changeset'] = self.changeset_id.to_s
|
||||||
|
|
||||||
|
if changeset_cache.key?(self.changeset_id)
|
||||||
|
# use the cache if available
|
||||||
|
else
|
||||||
|
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||||
|
end
|
||||||
|
|
||||||
|
user_id = changeset_cache[self.changeset_id]
|
||||||
|
|
||||||
|
if user_display_name_cache.key?(user_id)
|
||||||
|
# use the cache if available
|
||||||
|
elsif self.changeset.user.data_public?
|
||||||
|
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||||
|
else
|
||||||
|
user_display_name_cache[user_id] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if not user_display_name_cache[user_id].nil?
|
||||||
|
el1['user'] = user_display_name_cache[user_id]
|
||||||
|
el1['uid'] = user_id.to_s
|
||||||
|
end
|
||||||
|
|
||||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue