doc = p.parse
doc.find('//osm/relation').each do |pt|
return Relation.from_xml_node(pt, create)
end
doc = p.parse
doc.find('//osm/relation').each do |pt|
return Relation.from_xml_node(pt, create)
end
# The follow block does not need to be executed because they are dealt with
# in create_with_history, update_from and delete_with_history
if create
# The follow block does not need to be executed because they are dealt with
# in create_with_history, update_from and delete_with_history
if create
#member_role
member['role'] ||= "" # Allow the upload to not include this, in which case we default to an empty string.
logger.debug member['role']
#member_role
member['role'] ||= "" # Allow the upload to not include this, in which case we default to an empty string.
logger.debug member['role']
- self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'node' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
+ self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'Node' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
- self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'way' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
+ self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'Way' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
- self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'relation' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
+ self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'Relation' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do
Relation.transaction do
check_consistency(self, new_relation, user)
# This will check to see if this relation is used by another relation
Relation.transaction do
check_consistency(self, new_relation, user)
# This will check to see if this relation is used by another relation
- if RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='relation' and member_id=? ", true, self.id ])
+ if RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='Relation' and member_id=? ", true, self.id ])
raise OSM::APIPreconditionFailedError.new("The relation #{new_relation.id} is a used in another relation")
end
self.changeset_id = new_relation.changeset_id
raise OSM::APIPreconditionFailedError.new("The relation #{new_relation.id} is a used in another relation")
end
self.changeset_id = new_relation.changeset_id
elements = { :node => Hash.new, :way => Hash.new, :relation => Hash.new }
self.members.each do |m|
# find the hash for the element type or die
elements = { :node => Hash.new, :way => Hash.new, :relation => Hash.new }
self.members.each do |m|
# find the hash for the element type or die
# unless its in the cache already
unless hash.key? m[1]
# use reflection to look up the appropriate class
model = Kernel.const_get(m[0].capitalize)
# unless its in the cache already
unless hash.key? m[1]
# use reflection to look up the appropriate class
model = Kernel.const_get(m[0].capitalize)
# remove from the map, so that we can expect an empty map
# at the end if there are no new tags
# remove from the map, so that we can expect an empty map
# at the end if there are no new tags
# same pattern as before, but this time we're collecting the
# changed members in an array, as the bounding box updates for
# elements are per-element, not blanked on/off like for tags.
# same pattern as before, but this time we're collecting the
# changed members in an array, as the bounding box updates for
# elements are per-element, not blanked on/off like for tags.
# FIXME: check for tag changes along with element deletions and
# make sure that the deleted element's bounding box is hit.
self.members.each do |type, id, role|
# FIXME: check for tag changes along with element deletions and
# make sure that the deleted element's bounding box is hit.
self.members.each do |type, id, role|
update_changeset_element(type, id)
end
end
else
# add only changed members to the changeset
changed_members.each do |id, type|
update_changeset_element(type, id)
end
end
else
# add only changed members to the changeset
changed_members.each do |id, type|