From 34021a6869cc3c62a4888f5efefd315a7e5d5407 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Sat, 29 Sep 2012 14:10:09 -0400 Subject: [PATCH] Extract repeated code into new method. --- lib/geocoder/stores/active_record.rb | 35 +++++++++++----------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb index b5ee5b4a..03e0b370 100644 --- a/lib/geocoder/stores/active_record.rb +++ b/lib/geocoder/stores/active_record.rb @@ -116,24 +116,30 @@ module Geocoder::Store ) end - ## - # Scope options hash for use with a database that supports POWER(), - # SQRT(), PI(), and trigonometric functions SIN(), COS(), ASIN(), - # ATAN2(), DEGREES(), and RADIANS(). - # - def full_near_scope_options(latitude, longitude, radius, options) + def bearing_from_sql_options(latitude, longitude, options = {}) if !options.include?(:bearing) options[:bearing] = Geocoder::Configuration.distances end if options[:bearing] - bearing = Geocoder::Sql.full_bearing( + method_prefix = using_sqlite? ? "approx" : "full" + Geocoder::Sql.send( + method_prefix + "_bearing", latitude, longitude, full_column_name(geocoder_options[:latitude]), full_column_name(geocoder_options[:longitude]), options ) end + end + + ## + # Scope options hash for use with a database that supports POWER(), + # SQRT(), PI(), and trigonometric functions SIN(), COS(), ASIN(), + # ATAN2(), DEGREES(), and RADIANS(). + # + def full_near_scope_options(latitude, longitude, radius, options) options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units) + bearing = bearing_from_sql_options(latitude, longitude, options) distance = distance_from_sql_options(latitude, longitude, options) conditions = ["#{distance} <= ?", radius] default_near_scope_options(latitude, longitude, radius, options).merge( @@ -152,22 +158,9 @@ module Geocoder::Store # only exist for interface consistency--not intended for production! # def approx_near_scope_options(latitude, longitude, radius, options) - if !options.include?(:bearing) - options[:bearing] = Geocoder::Configuration.distances - end - if options[:bearing] - bearing = Geocoder::Sql.approx_bearing( - latitude, longitude, - full_column_name(geocoder_options[:latitude]), - full_column_name(geocoder_options[:longitude]) - ) - else - bearing = false - end - options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units) + bearing = bearing_from_sql_options(latitude, longitude, options) distance = distance_from_sql_options(latitude, longitude, options) - b = Geocoder::Calculations.bounding_box([latitude, longitude], radius, options) args = b + [ full_column_name(geocoder_options[:latitude]), -- GitLab