X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/9f57f60b87ff55a4ba69db3afadb21bbbdcb3385..b5f06e06c14f440d3c014b348149fe9ec1b67657:/app/models/changeset.rb diff --git a/app/models/changeset.rb b/app/models/changeset.rb index b98d213c7..2659eaeea 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -2,8 +2,8 @@ # # Table name: changesets # -# id :integer not null, primary key -# user_id :integer not null +# id :bigint(8) not null, primary key +# user_id :bigint(8) not null # created_at :datetime not null # min_lat :integer # max_lat :integer @@ -14,7 +14,7 @@ # # Indexes # -# changesets_bbox_idx (min_lat,max_lat,min_lon,max_lon) +# changesets_bbox_idx (min_lat,max_lat,min_lon,max_lon) USING gist # changesets_closed_at_idx (closed_at) # changesets_created_at_idx (created_at) # changesets_user_id_created_at_idx (user_id,created_at) @@ -25,7 +25,7 @@ # changesets_user_id_fkey (user_id => users.id) # -class Changeset < ActiveRecord::Base +class Changeset < ApplicationRecord require "xml/libxml" belongs_to :user, :counter_cache => true @@ -43,15 +43,13 @@ class Changeset < ActiveRecord::Base has_and_belongs_to_many :subscribers, :class_name => "User", :join_table => "changesets_subscribers", :association_foreign_key => "subscriber_id" validates :id, :uniqueness => true, :presence => { :on => :update }, - :numericality => { :on => :update, :integer_only => true } - validates :user_id, :presence => true, - :numericality => { :integer_only => true } + :numericality => { :on => :update, :only_integer => true } validates :num_changes, :presence => true, - :numericality => { :integer_only => true, + :numericality => { :only_integer => true, :greater_than_or_equal_to => 0 } validates :created_at, :closed_at, :presence => true validates :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true, - :numericality => { :integer_only => true } + :numericality => { :only_integer => true } before_save :update_closed_at @@ -73,29 +71,31 @@ class Changeset < ActiveRecord::Base # note that this may not be a hard limit - due to timing changes and # concurrency it is possible that some changesets may be slightly # longer than strictly allowed or have slightly more changes in them. - ((closed_at > Time.now.getutc) && (num_changes <= MAX_ELEMENTS)) + ((closed_at > Time.now.utc) && (num_changes <= MAX_ELEMENTS)) end def set_closed_time_now - self.closed_at = Time.now.getutc if is_open? + self.closed_at = Time.now.utc if is_open? end - def self.from_xml(xml, create = false) + def self.from_xml(xml, create: false) p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR) doc = p.parse + pt = doc.find_first("//osm/changeset") - doc.find("//osm/changeset").each do |pt| - return Changeset.from_xml_node(pt, create) + if pt + Changeset.from_xml_node(pt, :create => create) + else + raise OSM::APIBadXMLError.new("changeset", xml, "XML doesn't contain an osm/changeset element.") end - raise OSM::APIBadXMLError.new("changeset", xml, "XML doesn't contain an osm/changeset element.") rescue LibXML::XML::Error, ArgumentError => e raise OSM::APIBadXMLError.new("changeset", xml, e.message) end - def self.from_xml_node(pt, create = false) + def self.from_xml_node(pt, create: false) cs = Changeset.new if create - cs.created_at = Time.now.getutc + cs.created_at = Time.now.utc # initial close time is 1h ahead, but will be increased on each # modification. cs.closed_at = cs.created_at + IDLE_TIMEOUT @@ -131,7 +131,7 @@ class Changeset < ActiveRecord::Base # update active record. rails 2.1's dirty handling should take care of # whether this object needs saving or not. - self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a if bbox.complete? + self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a.collect(&:round) if bbox.complete? end ## @@ -191,7 +191,7 @@ class Changeset < ActiveRecord::Base self.closed_at = if (closed_at - created_at) > (MAX_TIME_OPEN - IDLE_TIMEOUT) created_at + MAX_TIME_OPEN else - Time.now.getutc + IDLE_TIMEOUT + Time.now.utc + IDLE_TIMEOUT end end end