From dd33fc633c1bcd2ab4ecfc412ffe5edf43491cec Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 10 Oct 2007 23:00:25 +0000 Subject: [PATCH] Factor out common code for models which deal with geographic points into a base class. --- app/models/geo_record.rb | 29 +++++++++++++++++++++++++++++ app/models/node.rb | 31 ++----------------------------- app/models/old_node.rb | 30 +----------------------------- app/models/tracepoint.rb | 30 +----------------------------- 4 files changed, 33 insertions(+), 87 deletions(-) create mode 100644 app/models/geo_record.rb diff --git a/app/models/geo_record.rb b/app/models/geo_record.rb new file mode 100644 index 000000000..12a2a643e --- /dev/null +++ b/app/models/geo_record.rb @@ -0,0 +1,29 @@ +class GeoRecord < ActiveRecord::Base + before_save :update_tile + + def self.find_by_area(minlat, minlon, maxlat, maxlon, options) + self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do + return self.find(:all, options) + end + end + + def update_tile + self.tile = QuadTile.tile_for_point(lat, lon) + end + + def lat=(l) + self.latitude = (l * 10000000).round + end + + def lon=(l) + self.longitude = (l * 10000000).round + end + + def lat + return self.latitude.to_f / 10000000 + end + + def lon + return self.longitude.to_f / 10000000 + end +end diff --git a/app/models/node.rb b/app/models/node.rb index f9210bf06..9ed5c3bbf 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -1,5 +1,6 @@ -class Node < ActiveRecord::Base +class Node < GeoRecord require 'xml/libxml' + set_table_name 'current_nodes' validates_presence_of :user_id, :timestamp @@ -10,34 +11,6 @@ class Node < ActiveRecord::Base has_many :old_nodes, :foreign_key => :id belongs_to :user - before_save :update_tile - - def self.find_by_area(minlat, minlon, maxlat, maxlon, options) - self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do - return self.find(:all, options) - end - end - - def update_tile - self.tile = QuadTile.tile_for_point(lat, lon) - end - - def lat=(l) - self.latitude = (l * 10000000).round - end - - def lon=(l) - self.longitude = (l * 10000000).round - end - - def lat - return self.latitude.to_f / 10000000 - end - - def lon - return self.longitude.to_f / 10000000 - end - def validate_position errors.add_to_base("Node is not in the world") unless in_world? end diff --git a/app/models/old_node.rb b/app/models/old_node.rb index c63738fc4..464849157 100644 --- a/app/models/old_node.rb +++ b/app/models/old_node.rb @@ -1,4 +1,4 @@ -class OldNode < ActiveRecord::Base +class OldNode < GeoRecord set_table_name 'nodes' validates_presence_of :user_id, :timestamp @@ -8,34 +8,6 @@ class OldNode < ActiveRecord::Base belongs_to :user - before_save :update_tile - - def self.find_by_area(minlat, minlon, maxlat, maxlon, options) - self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do - return self.find(:all, options) - end - end - - def update_tile - self.tile = QuadTile.tile_for_point(lat, lon) - end - - def lat=(l) - self.latitude = (l * 10000000).round - end - - def lon=(l) - self.longitude = (l * 10000000).round - end - - def lat - return self.latitude.to_f / 10000000 - end - - def lon - return self.longitude.to_f / 10000000 - end - def validate_position errors.add_to_base("Node is not in the world") unless in_world? end diff --git a/app/models/tracepoint.rb b/app/models/tracepoint.rb index 1d9f1bd6b..8648e555d 100644 --- a/app/models/tracepoint.rb +++ b/app/models/tracepoint.rb @@ -1,4 +1,4 @@ -class Tracepoint < ActiveRecord::Base +class Tracepoint < GeoRecord set_table_name 'gps_points' validates_numericality_of :trackid, :only_integer => true @@ -8,34 +8,6 @@ class Tracepoint < ActiveRecord::Base validates_presence_of :timestamp belongs_to :trace, :foreign_key => 'gpx_id' - - before_save :update_tile - - def self.find_by_area(minlat, minlon, maxlat, maxlon, options) - self.with_scope(:find => {:conditions => OSM.sql_for_area(minlat, minlon, maxlat, maxlon)}) do - return self.find(:all, options) - end - end - - def update_tile - self.tile = QuadTile.tile_for_point(lat, lon) - end - - def lat=(l) - self.latitude = (l * 10000000).round - end - - def lon=(l) - self.longitude = (l * 10000000).round - end - - def lat - return self.latitude.to_f / 10000000 - end - - def lon - return self.longitude.to_f / 10000000 - end def to_xml_node el1 = XML::Node.new 'trkpt' -- 2.43.2