X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/094855be22a06ceeef5366bdf103b303deb38a12..dc4cc8d21967d74b1fb229e37afb9ea4dcaf3e99:/app/models/changeset.rb diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 803cbb52f..8f9a1e69b 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -19,7 +19,6 @@ class Changeset < ActiveRecord::Base validates_numericality_of :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true, :integer_only => true validates_numericality_of :user_id, :integer_only => true validates_numericality_of :num_changes, :integer_only => true, :greater_than_or_equal_to => 0 - validates_associated :user # over-expansion factor to use when updating the bounding box EXPAND = 0.1 @@ -116,16 +115,21 @@ class Changeset < ActiveRecord::Base # nils, just use the bounding box update to write over them. @bbox = bbox.zip(array).collect { |a, b| a.nil? ? b : a } - # FIXME - this looks nasty and violates DRY... is there any prettier - # way to do this? - @bbox[0] = [-180 * GeoRecord::SCALE, array[0] + EXPAND * (@bbox[0] - @bbox[2])].max if array[0] < @bbox[0] - @bbox[1] = [ -90 * GeoRecord::SCALE, array[1] + EXPAND * (@bbox[1] - @bbox[3])].max if array[1] < @bbox[1] - @bbox[2] = [ 180 * GeoRecord::SCALE, array[2] + EXPAND * (@bbox[2] - @bbox[0])].min if array[2] > @bbox[2] - @bbox[3] = [ 90 * GeoRecord::SCALE, array[3] + EXPAND * (@bbox[3] - @bbox[1])].min if array[3] > @bbox[3] - - # 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 + # only try to update the bbox if there is a value for every coordinate + # which there will be from the previous line as long as both array and + # bbox are all non-nil. + if has_valid_bbox? and array.all? + # FIXME - this looks nasty and violates DRY... is there any prettier + # way to do this? + @bbox[0] = [-180 * GeoRecord::SCALE, array[0] + EXPAND * (@bbox[0] - @bbox[2])].max if array[0] < @bbox[0] + @bbox[1] = [ -90 * GeoRecord::SCALE, array[1] + EXPAND * (@bbox[1] - @bbox[3])].max if array[1] < @bbox[1] + @bbox[2] = [ 180 * GeoRecord::SCALE, array[2] + EXPAND * (@bbox[2] - @bbox[0])].min if array[2] > @bbox[2] + @bbox[3] = [ 90 * GeoRecord::SCALE, array[3] + EXPAND * (@bbox[3] - @bbox[1])].min if array[3] > @bbox[3] + + # 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 + end end ##