+ el1["created_at"] = created_at.xmlschema
+ el1["closed_at"] = closed_at.xmlschema unless is_open?
+ el1["open"] = is_open?.to_s
+
+ bbox.to_unscaled.add_bounds_to(el1, "_") if bbox.complete?
+
+ el1["comments_count"] = comments.length.to_s
+ el1["changes_count"] = num_changes.to_s
+
+ if include_discussion
+ el2 = XML::Node.new("discussion")
+ comments.includes(:author).each do |comment|
+ el3 = XML::Node.new("comment")
+ el3["date"] = comment.created_at.xmlschema
+ el3["uid"] = comment.author.id.to_s if comment.author.data_public?
+ el3["user"] = comment.author.display_name.to_s if comment.author.data_public?
+ el4 = XML::Node.new("text")
+ el4.content = comment.body.to_s
+ el3 << el4
+ el2 << el3
+ end
+ el1 << el2
+ end
+
+ # NOTE: changesets don't include the XML of the changes within them,
+ # they are just structures for tagging. to get the osmChange of a
+ # changeset, see the download method of the controller.
+
+ el1
+ end
+
+ ##
+ # update this instance from another instance given and the user who is
+ # doing the updating. note that this method is not for updating the
+ # bounding box, only the tags of the changeset.
+ def update_from(other, user)
+ # ensure that only the user who opened the changeset may modify it.
+ raise OSM::APIUserChangesetMismatchError unless user.id == user_id
+
+ # can't change a closed changeset
+ raise OSM::APIChangesetAlreadyClosedError, self unless is_open?
+
+ # copy the other's tags
+ self.tags = other.tags