X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/b7596f7fbc21a2c02b8ec12c971da670c9b7c4f8..9acc6d32883435ab9734cd4970b292583075a75d:/app/models/way.rb?ds=sidebyside diff --git a/app/models/way.rb b/app/models/way.rb index 637f41e28..52d280209 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -89,7 +89,7 @@ class Way < ActiveRecord::Base return doc end - def to_xml_node(visible_nodes = nil, user_display_name_cache = nil) + def to_xml_node(visible_nodes = nil, changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'way' el1['id'] = self.id.to_s el1['visible'] = self.visible.to_s @@ -97,19 +97,25 @@ class Way < ActiveRecord::Base el1['version'] = self.version.to_s el1['changeset'] = self.changeset_id.to_s - user_display_name_cache = {} if user_display_name_cache.nil? + 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 and user_display_name_cache.key?(self.changeset.user_id) + if user_display_name_cache.key?(user_id) # use the cache if available elsif self.changeset.user.data_public? - user_display_name_cache[self.changeset.user_id] = self.changeset.user.display_name + user_display_name_cache[user_id] = self.changeset.user.display_name else - user_display_name_cache[self.changeset.user_id] = nil + user_display_name_cache[user_id] = nil end - if not user_display_name_cache[self.changeset.user_id].nil? - el1['user'] = user_display_name_cache[self.changeset.user_id] - el1['uid'] = self.changeset.user_id.to_s + if not user_display_name_cache[user_id].nil? + el1['user'] = user_display_name_cache[user_id] + el1['uid'] = user_id.to_s end # make sure nodes are output in sequence_id order @@ -237,7 +243,7 @@ class Way < ActiveRecord::Base def delete_with_history!(new_way, user) unless self.visible - raise OSM::APIAlreadyDeletedError + raise OSM::APIAlreadyDeletedError.new("way", new_way.id) end # need to start the transaction here, so that the database can