Extract common code for parsing floats
authorTom Hughes <tom@compton.nu>
Mon, 24 Jun 2013 21:44:17 +0000 (22:44 +0100)
committerTom Hughes <tom@compton.nu>
Mon, 24 Jun 2013 21:44:17 +0000 (22:44 +0100)
app/controllers/notes_controller.rb
app/models/node.rb
lib/osm.rb

index 9c6eb94572488e75e5a99e6ddeb3b8a3c2617491..3eb1ac3f92337f408d662f6d93be6d9034fe2bf6 100644 (file)
@@ -59,16 +59,8 @@ class NotesController < ApplicationController
     raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank?
 
     # Extract the arguments
-    begin
-      lon = Float(params[:lon])
-    rescue
-      raise OSM::APIBadUserInput.new("lon was not a number")
-    end
-    begin
-      lat = Float(params[:lat])
-    rescue
-      raise OSM::APIBadUserInput.new("lat was not a number")
-    end
+    lon = OSM.parse_float(params[:lon], OSM::APIBadUserInput, "lon was not a number")
+    lat = OSM.parse_float(params[:lat], OSM::APIBadUserInput, "lat was not a number")
     comment = params[:text]
 
     # Include in a transaction to ensure that there is always a note_comment for every note
index 775f1fd3b22b6ba86d282c72ae5741339b96db6f..81b910f37338eb285730865273a3b4a6ce598f69 100644 (file)
@@ -83,16 +83,8 @@ class Node < ActiveRecord::Base
     
     raise OSM::APIBadXMLError.new("node", pt, "lat missing") if pt['lat'].nil?
     raise OSM::APIBadXMLError.new("node", pt, "lon missing") if pt['lon'].nil?
-    begin
-      node.lat = Float(pt['lat'])
-    rescue
-      raise OSM::APIBadXMLError.new("node", pt, "lat not a number")
-    end
-    begin
-      node.lon = Float(pt['lon'])
-    rescue
-      raise OSM::APIBadXMLError.new("node", pt, "lon not a number")
-    end
+    node.lat = OSM.parse_float(pt['lat'], OSM::APIBadXMLError, "node", pt, "lat not a number")
+    node.lon = OSM.parse_float(pt['lon'], OSM::APIBadXMLError, "node", pt, "lon not a number")
     raise OSM::APIBadXMLError.new("node", pt, "Changeset id is missing") if pt['changeset'].nil?
     node.changeset_id = pt['changeset'].to_i
 
index d4c13ad7feab520f97d1f207b46ac3e36ef3528a..4a6237b12b3dd8cd8c71fc8bf3f9ba5697dd97e7 100644 (file)
@@ -550,6 +550,13 @@ module OSM
     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'