end
end
+ # Raised when the note provided is already closed
+ class APINoteAlreadyClosedError < APIError
+ def initialize(note)
+ @note = note
+ end
+
+ attr_reader :note
+
+ def status
+ :conflict
+ end
+
+ def to_s
+ "The note #{@note.id} was closed at #{@note.closed_at}"
+ end
+ end
+
+ # Raised when the note provided is already open
+ class APINoteAlreadyOpenError < APIError
+ def initialize(note)
+ @note = note
+ end
+
+ attr_reader :note
+
+ def status
+ :conflict
+ end
+
+ def to_s
+ "The note #{@note.id} is already open"
+ end
+ end
+
+ # raised when a two preferences have a duplicate key string.
+ class APIDuplicatePreferenceError < APIError
+ def initialize(key)
+ @key = key
+ end
+
+ attr_reader :key
+
+ def status
+ :bad_request
+ end
+
+ def to_s
+ "Duplicate preferences with key #{@key}"
+ end
+ end
+
# Helper methods for going to/from mercator and lat/lng.
class Mercator
include Math
root = XML::Node.new 'osm'
root['version'] = API_VERSION.to_s
root['generator'] = GENERATOR
+ root['copyright'] = COPYRIGHT_OWNER
+ root['attribution'] = ATTRIBUTION_URL
+ root['license'] = LICENSE_URL
doc.root = root
return doc
end
country = "GB" if country == "UK"
end
end
-
+
return country.upcase
end
return nil
end
+ # Parse a float, raising a specified exception on failure
+ def self.parse_float(str, klass, *args)
+ Float(str)
+ rescue
+ raise klass.new(*args)
+ end
+
# Construct a random token of a given length
def self.make_token(length = 30)
chars = 'abcdefghijklmnopqrtuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'