+ # The base class for API Errors.
+ class APIError < RuntimeError
+ 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
+ end
+
+ # Raised when to delete an already-deleted object.
+ class APIAlreadyDeletedError < APIError
+ 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
+ end
+
+ # Helper methods for going to/from mercator and lat/lng.