+# == Schema Information
+#
+# Table name: changesets
+#
+# id :integer not null, primary key
+# user_id :integer not null
+# created_at :datetime not null
+# min_lat :integer
+# max_lat :integer
+# min_lon :integer
+# max_lon :integer
+# closed_at :datetime not null
+# num_changes :integer default(0), not null
+#
+# Indexes
+#
+# changesets_bbox_idx (min_lat,max_lat,min_lon,max_lon)
+# changesets_closed_at_idx (closed_at)
+# changesets_created_at_idx (created_at)
+# changesets_user_id_created_at_idx (user_id,created_at)
+# changesets_user_id_id_idx (user_id,id)
+#
+# Foreign Keys
+#
+# changesets_user_id_fkey (user_id => users.id)
+#
+
class Changeset < ActiveRecord::Base
require "xml/libxml"
before_save :update_closed_at
- # over-expansion factor to use when updating the bounding box
- EXPAND = 0.1
-
# maximum number of elements allowed in a changeset
MAX_ELEMENTS = 10000
pt.find("tag").each do |tag|
raise OSM::APIBadXMLError.new("changeset", pt, "tag is missing key") if tag["k"].nil?
raise OSM::APIBadXMLError.new("changeset", pt, "tag is missing value") if tag["v"].nil?
+
cs.add_tag_keyval(tag["k"], tag["v"])
end
end
##
- # expand the bounding box to include the given bounding box. also,
- # expand a little bit more in the direction of the expansion, so that
- # further expansions may be unnecessary. this is an optimisation
- # suggested on the wiki page by kleptog.
+ # expand the bounding box to include the given bounding box.
def update_bbox!(bbox_update)
- bbox.expand!(bbox_update, EXPAND)
+ bbox.expand!(bbox_update)
# update active record. rails 2.1's dirty handling should take care of
# whether this object needs saving or not.
##
# the number of elements is also passed in so that we can ensure that
- # a single changeset doesn't contain too many elements. this, of course,
- # destroys the optimisation described in the bbox method above.
+ # a single changeset doesn't contain too many elements.
def add_changes!(elements)
self.num_changes += elements
end
user_display_name_cache = {} if user_display_name_cache.nil?
- if user_display_name_cache && user_display_name_cache.key?(user_id)
+ if user_display_name_cache&.key?(user_id)
# use the cache if available
elsif user.data_public?
user_display_name_cache[user_id] = user.display_name
bbox.to_unscaled.add_bounds_to(el1, "_") if bbox.complete?
- el1["comments_count"] = comments.count.to_s
+ el1["comments_count"] = comments.length.to_s
+ el1["changes_count"] = num_changes.to_s
if include_discussion
el2 = XML::Node.new("discussion")