]> git.openstreetmap.org Git - rails.git/blobdiff - lib/osm.rb
Now just got one test to sort on the functional tests. All other tests are working...
[rails.git] / lib / osm.rb
index 24df7a35ddf11efe5ea2aba1a83e8ee66cd4c7be..c038ab2d5f77464833d8c6c3d3a5f24b5184d5a1 100644 (file)
@@ -1,13 +1,6 @@
+# The OSM module provides support functions for OSM.
 module OSM
 
 module OSM
 
-  # This piece of magic reads a GPX with SAX and spits out
-  # lat/lng and stuff
-  #
-  # This would print every latitude value:
-  #
-  # gpx = OSM::GPXImporter.new('somefile.gpx')
-  # gpx.points {|p| puts p['latitude']}
-
   require 'time'
   require 'rexml/parsers/sax2parser'
   require 'rexml/text'
   require 'time'
   require 'rexml/parsers/sax2parser'
   require 'rexml/text'
@@ -15,11 +8,50 @@ module OSM
   require 'digest/md5'
   require 'RMagick'
 
   require 'digest/md5'
   require 'RMagick'
 
+  # The base class for API Errors.
+  class APIError < RuntimeError
+    def render_opts
+      { :text => "", :status => :internal_server_error }
+    end
+  end
+
+  # Raised when an API object is not found.
+  class APINotFoundError < APIError
+  end
+
+  # Raised when a precondition to an API action fails sanity check.
+  class APIPreconditionFailedError < APIError
+    def render_opts
+      { :text => "", :status => :precondition_failed }
+    end
+  end
+
+  # Raised when to delete an already-deleted object.
+  class APIAlreadyDeletedError < APIError
+    def render_opts
+      { :text => "", :status => :gone }
+    end
+  end
+
+  # 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
+    end
+
+    attr_reader :provided, :latest
+
+    def render_opts
+      { :text => "Version mismatch: Provided " + provided.to_s +
+       ", server had: " + latest.to_s, :status => :bad_request }
+    end
+  end
+
+  # Helper methods for going to/from mercator and lat/lng.
   class Mercator
     include Math
 
     #init me with your bounding box and the size of your image
   class Mercator
     include Math
 
     #init me with your bounding box and the size of your image
-
     def initialize(min_lat, min_lon, max_lat, max_lon, width, height)
       xsize = xsheet(max_lon) - xsheet(min_lon)
       ysize = ysheet(max_lat) - ysheet(min_lat)
     def initialize(min_lat, min_lon, max_lat, max_lon, width, height)
       xsize = xsheet(max_lon) - xsheet(min_lon)
       ysize = ysheet(max_lat) - ysheet(min_lat)
@@ -62,6 +94,13 @@ module OSM
   end
 
 
   end
 
 
+  # This piece of magic reads a GPX with SAX and spits out
+  # lat/lng and stuff
+  #
+  # This would print every latitude value:
+  #
+  # gpx = OSM::GPXImporter.new('somefile.gpx')
+  # gpx.points {|p| puts p['latitude']}
   class GPXImporter
     # FIXME swap REXML for libXML
     attr_reader :possible_points
   class GPXImporter
     # FIXME swap REXML for libXML
     attr_reader :possible_points