From: Simon Legner Date: Tue, 3 Dec 2013 23:02:27 +0000 (+0000) Subject: Refactor generation of object metadata in API calls X-Git-Tag: live~4564 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/413baecf6b27056cb73e6bb4bedb33de6410c65e Refactor generation of object metadata in API calls Factor out duplicate from the object models into common code. --- diff --git a/app/models/node.rb b/app/models/node.rb index e81f798b9..af2505b93 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -4,6 +4,7 @@ class Node < ActiveRecord::Base include GeoRecord include ConsistencyValidations include NotRedactable + include ObjectMetadata self.table_name = "current_nodes" @@ -177,35 +178,13 @@ class Node < ActiveRecord::Base def to_xml_node(changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'node' el1['id'] = self.id.to_s - el1['version'] = self.version.to_s - el1['changeset'] = self.changeset_id.to_s + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) 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| el2 = XML::Node.new('tag') el2['k'] = k.to_s @@ -213,8 +192,6 @@ class Node < ActiveRecord::Base el1 << el2 end - el1['visible'] = self.visible.to_s - el1['timestamp'] = self.timestamp.xmlschema return el1 end diff --git a/app/models/old_node.rb b/app/models/old_node.rb index ab25d4dbc..0d4fd144f 100644 --- a/app/models/old_node.rb +++ b/app/models/old_node.rb @@ -1,6 +1,7 @@ class OldNode < ActiveRecord::Base include GeoRecord include ConsistencyValidations + include ObjectMetadata self.table_name = "nodes" self.primary_keys = "node_id", "version" @@ -45,35 +46,13 @@ class OldNode < ActiveRecord::Base def to_xml_node(changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'node' el1['id'] = self.node_id.to_s - el1['version'] = self.version.to_s - el1['changeset'] = self.changeset_id.to_s + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) 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| el2 = XML::Node.new('tag') el2['k'] = k.to_s @@ -81,11 +60,6 @@ class OldNode < ActiveRecord::Base el1 << el2 end - el1['visible'] = self.visible.to_s - el1['timestamp'] = self.timestamp.xmlschema - - el1['redacted'] = self.redaction.id.to_s if self.redacted? - return el1 end diff --git a/app/models/old_relation.rb b/app/models/old_relation.rb index 890ba1eed..25f44d832 100644 --- a/app/models/old_relation.rb +++ b/app/models/old_relation.rb @@ -1,5 +1,6 @@ class OldRelation < ActiveRecord::Base include ConsistencyValidations + include ObjectMetadata self.table_name = "relations" self.primary_keys = "relation_id", "version" @@ -96,34 +97,8 @@ class OldRelation < ActiveRecord::Base def to_xml_node(changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'relation' el1['id'] = self.relation_id.to_s - el1['visible'] = self.visible.to_s - el1['timestamp'] = self.timestamp.xmlschema - el1['version'] = self.version.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 + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) - 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? - self.old_members.each do |member| e = XML::Node.new 'member' e['type'] = member.member_type.to_s.downcase diff --git a/app/models/old_way.rb b/app/models/old_way.rb index 591389243..8b9bf19e6 100644 --- a/app/models/old_way.rb +++ b/app/models/old_way.rb @@ -1,5 +1,6 @@ class OldWay < ActiveRecord::Base include ConsistencyValidations + include ObjectMetadata self.table_name = "ways" self.primary_keys = "way_id", "version" @@ -95,34 +96,8 @@ class OldWay < ActiveRecord::Base def to_xml_node(changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'way' el1['id'] = self.way_id.to_s - el1['visible'] = self.visible.to_s - el1['timestamp'] = self.timestamp.xmlschema - el1['version'] = self.version.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 + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) - el1['redacted'] = self.redaction.id.to_s if self.redacted? - self.old_nodes.each do |nd| # FIXME need to make sure they come back in the right order e = XML::Node.new 'nd' e['ref'] = nd.node_id.to_s diff --git a/app/models/relation.rb b/app/models/relation.rb index 581dce16f..b76213c7a 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -3,6 +3,7 @@ class Relation < ActiveRecord::Base include ConsistencyValidations include NotRedactable + include ObjectMetadata self.table_name = "current_relations" @@ -108,31 +109,7 @@ class Relation < ActiveRecord::Base def to_xml_node(visible_members = nil, changeset_cache = {}, user_display_name_cache = {}) el1 = XML::Node.new 'relation' el1['id'] = self.id.to_s - el1['visible'] = self.visible.to_s - el1['timestamp'] = self.timestamp.xmlschema - el1['version'] = self.version.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 + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) self.relation_members.each do |member| p=0 diff --git a/app/models/way.rb b/app/models/way.rb index 58a9214fa..074ae3ba1 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -3,6 +3,7 @@ class Way < ActiveRecord::Base include ConsistencyValidations include NotRedactable + include ObjectMetadata self.table_name = "current_ways" @@ -102,31 +103,7 @@ class Way < ActiveRecord::Base 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 - el1['timestamp'] = self.timestamp.xmlschema - el1['version'] = self.version.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 + add_metadata_to_xml_node(el1, self, changeset_cache, user_display_name_cache) # make sure nodes are output in sequence_id order ordered_nodes = [] diff --git a/lib/object_metadata.rb b/lib/object_metadata.rb new file mode 100644 index 000000000..d4d0bcfc7 --- /dev/null +++ b/lib/object_metadata.rb @@ -0,0 +1,30 @@ +module ObjectMetadata + def add_metadata_to_xml_node(el, osm, changeset_cache, user_display_name_cache) + el['changeset'] = osm.changeset_id.to_s + el['redacted'] = osm.redaction.id.to_s if osm.redacted? + el['timestamp'] = osm.timestamp.xmlschema + el['version'] = osm.version.to_s + el['visible'] = osm.visible.to_s + + if changeset_cache.key?(osm.changeset_id) + # use the cache if available + else + changeset_cache[osm.changeset_id] = osm.changeset.user_id + end + + user_id = changeset_cache[osm.changeset_id] + + if user_display_name_cache.key?(user_id) + # use the cache if available + elsif osm.changeset.user.data_public? + user_display_name_cache[user_id] = osm.changeset.user.display_name + else + user_display_name_cache[user_id] = nil + end + + unless user_display_name_cache[user_id].nil? + el['user'] = user_display_name_cache[user_id] + el['uid'] = user_id.to_s + end + end +end