X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/183ffc78648938ca079f7ea5f899d3e71e829333..783528830ad1b0d5f07c8e758747841a0b4e5cc6:/lib/osm.rb diff --git a/lib/osm.rb b/lib/osm.rb index 223e351f4..09ded2bd2 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -17,6 +17,9 @@ module OSM # Raised when an API object is not found. class APINotFoundError < APIError + def render_opts + { :nothing => true, :status => :not_found } + end end # Raised when a precondition to an API action fails sanity check. @@ -42,8 +45,14 @@ module OSM # Raised when the changeset provided is already closed class APIChangesetAlreadyClosedError < APIError + def initialize(changeset) + @changeset = changeset + end + + attr_reader :changeset + def render_opts - { :text => "The supplied changeset has already been closed", :status => :conflict } + { :text => "The changeset #{@changeset.id} was closed at #{@changeset.closed_at}.", :status => :conflict } end end @@ -95,15 +104,16 @@ module OSM # Raised when the provided version is not equal to the latest in the db. class APIVersionMismatchError < APIError - def initialize(provided, latest) - @provided, @latest = provided, latest + def initialize(id, type, provided, latest) + @id, @type, @provided, @latest = id, type, provided, latest end - attr_reader :provided, :latest + attr_reader :provided, :latest, :id, :type def render_opts { :text => "Version mismatch: Provided " + provided.to_s + - ", server had: " + latest.to_s, :status => :conflict } + ", server had: " + latest.to_s + " of " + type + " " + id.to_s, + :status => :conflict } end end @@ -137,6 +147,18 @@ module OSM end end + ## + # raised when user input couldn't be parsed + class APIBadUserInput < APIError + def initialize(message) + @message = message + end + + def render_opts + { :text => message, :mime_type => "text/plain", :status => :bad_request } + end + end + # Helper methods for going to/from mercator and lat/lng. class Mercator include Math