diff --git a/test/unit/product_test.rb b/test/unit/product_test.rb
index a32c0b3..757e441 100644
--- a/test/unit/product_test.rb
+++ b/test/unit/product_test.rb
@@ -126,16 +126,6 @@ class ProductTest < ActiveSupport::TestCase
assert_in_delta 45.0, prod.lng, 0.0001
end
- should 'be searched by radius and distance' do
- prod1 = fast_create(Product, :name => 'prod test 1', :lat => 30.0, :lng => 30.0, :product_category_id => @product_category.id)
- prod2 = fast_create(Product, :name => 'prod test 2', :lat => 45.0, :lng => 45.0, :product_category_id => @product_category.id)
-
- prods = Product.find(:all, :within => 10, :origin => [30.0, 30.0])
-
- assert_includes prods, prod1
- assert_not_includes prods, prod2
- end
-
should 'provide url' do
product = Product.new
diff --git a/test/unit/profile_test.rb b/test/unit/profile_test.rb
index b2d25c6..c24ba45 100644
--- a/test/unit/profile_test.rb
+++ b/test/unit/profile_test.rb
@@ -439,12 +439,6 @@ class ProfileTest < ActiveSupport::TestCase
assert_includes Enterprise.find_within(2, :origin => [45, 45]), e
end
- should 'have latitude and longitude and find' do
- e = fast_create(Enterprise, :lat => 45, :lng => 45)
-
- assert_includes Enterprise.find(:all, :within => 2, :origin => [45, 45]), e
- end
-
should 'have a public profile by default' do
assert_equal true, Profile.new.public_profile
end
diff --git a/vendor/plugins/geokit/MIT-LICENSE b/vendor/plugins/geokit/MIT-LICENSE
deleted file mode 100644
index 97d81c8..0000000
--- a/vendor/plugins/geokit/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2007 Bill Eisenhauer & Andre Lewis
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/vendor/plugins/geokit/README b/vendor/plugins/geokit/README
deleted file mode 100644
index 02079fb..0000000
--- a/vendor/plugins/geokit/README
+++ /dev/null
@@ -1,451 +0,0 @@
-## FEATURE SUMMARY
-
-This plugin provides key functionality for location-oriented Rails applications:
-
-- Distance calculations, for both flat and spherical environments. For example,
- given the location of two points on the earth, you can calculate the miles/KM
- between them.
-- ActiveRecord distance-based finders. For example, you can find all the points
- in your database within a 50-mile radius.
-- Geocoding from multiple providers. It currently supports Google, Yahoo,
- Geocoder.us, and Geocoder.ca geocoders, and it provides a uniform response
- structure from all of them. It also provides a fail-over mechanism, in case
- your input fails to geocode in one service.
-- IP-based location lookup utilizing hostip.info. Provide an IP address, and get
- city name and latitude/longitude in return
-- A before_filter helper to geocoder the user's location based on IP address,
- and retain the location in a cookie.
-
-The goal of this plugin is to provide the common functionality for location-oriented
-applications (geocoding, location lookup, distance calculation) in an easy-to-use
-package.
-
-## A NOTE ON TERMINOLOGY
-
-Throughout the code and API of this, latitude and longitude are referred to as lat
-and lng. We've found over the long term the abbreviation saves lots of typing time.
-
-## DISTANCE CALCULATIONS AND QUERIES
-
-If you want only distance calculation services, you need only mix in the Mappable
-module like so:
-
- class Location
- include GeoKit::Mappable
- end
-
-After doing so, you can do things like:
-
- Location.distance_between(from, to)
-
-with optional parameters :units and :formula. Values for :units can be :miles or
-:kms with :miles as the default. Values for :formula can be :sphere or :flat with
-:sphere as the default. :sphere gives you Haversine calculations, while :flat
-gives the Pythagoreum Theory. These defaults persist through out the plug-in.
-
-You can also do:
-
- location.distance_to(other)
-
-The real power and utility of the plug-in is in its query support. This is
-achieved through mixing into an ActiveRecord model object:
-
- class Location < ActiveRecord::Base
- acts_as_mappable
- end
-
-The plug-in uses the above-mentioned defaults, but can be modified to use
-different units and a different formulae. This is done through the :default_units
-and :default_formula keys which accept the same values as mentioned above.
-
-The plug-in creates a calculated column and potentially a calculated condition.
-By default, these are known as "distance" but this can be changed through the
-:distance_field_name key.
-
-So, an alternative invocation would look as below:
-
- class Location < ActiveRecord::Base
- acts_as_mappable :default_units => :kms,
- :default_formula => :flat,
- :distance_field_name => :distance
- end
-
-You can also define alternative column names for latitude and longitude using
-the :lat_column_name and :lng_column_name keys. The defaults are 'lat' and
-'lng' respectively.
-
-Thereafter, a set of finder methods are made available. Below are the
-different combinations:
-
-Origin as a two-element array of latititude/longitude:
-
- find(:all, :origin => [37.792,-122.393])
-
-Origin as a geocodeable string:
-
- find(:all, :origin => '100 Spear st, San Francisco, CA')
-
-Origin as an object which responds to lat and lng methods,
-or latitude and longitude methods, or whatever methods you have
-specified for lng_column_name and lat_column_name:
-
- find(:all, :origin=>my_store) # my_store.lat and my_store.lng methods exist
-
-Often you will need to find within a certain distance. The prefered syntax is:
-
- find(:all, :origin => @somewhere, :within => 5)
-
-. . . however these syntaxes will also work:
-
- find_within(5, :origin => @somewhere)
- find(:all, :origin => @somewhere, :conditions => "distance < 5")
-
-Note however that the third form should be avoided. With either of the first two,
-GeoKit automatically adds a bounding box to speed up the radial query in the database.
-With the third form, it does not.
-
-If you need to combine distance conditions with other conditions, you should do
-so like this:
-
- find(:all, :origin => @somewhere, :within => 5, :conditions=>['state=?',state])
-
-If :origin is not provided in the finder call, the find method
-works as normal. Further, the key is removed
-from the :options hash prior to invoking the superclass behavior.
-
-Other convenience methods work intuitively and are as follows:
-
- find_within(distance, :origin => @somewhere)
- find_beyond(distance, :origin => @somewhere)
- find_closest(:origin => @somewhere)
- find_farthest(:origin => @somewhere)
-
-where the options respect the defaults, but can be overridden if
-desired.
-
-Lastly, if all that is desired is the raw SQL for distance
-calculations, you can use the following:
-
- distance_sql(origin, units=default_units, formula=default_formula)
-
-Thereafter, you are free to use it in find_by_sql as you wish.
-
-There are methods available to enable you to get the count based upon
-the find condition that you have provided. These all work similarly to
-the finders. So for instance:
-
- count(:origin, :conditions => "distance < 5")
- count_within(distance, :origin => @somewhere)
- count_beyond(distance, :origin => @somewhere)
-
-## FINDING WITHIN A BOUNDING BOX
-
-If you are displaying points on a map, you probably need to query for whatever falls within the rectangular bounds of the map:
-
- Store.find :all, :bounds=>[sw_point,ne_point]
-
-The input to :bounds can be array with the two points or a Bounds object. However you provide them, the order should always be the southwest corner, northeast corner of the rectangle. Typically, you will be getting the sw_point and ne_point from a map that is displayed on a web page.
-
-If you need to calculate the bounding box from a point and radius, you can do that:
-
- bounds=Bounds.from_point_and_radius(home,5)
- Store.find :all, :bounds=>bounds
-
-## USING INCLUDES
-
-You can use includes along with your distance finders:
-
- stores=Store.find :all, :origin=>home, :include=>[:reviews,:cities] :within=>5, :order=>'distance'
-
-*However*, ActiveRecord drops the calculated distance column when you use include. So, if you need to
-use the distance column, you'll have to re-calculate it post-query in Ruby:
-
- stores.sort_by_distance_from(home)
-
-In this case, you may want to just use the bounding box
-condition alone in your SQL (there's no use calculating the distance twice):
-
- bounds=Bounds.from_point_and_radius(home,5)
- stores=Store.find :all, :include=>[:reviews,:cities] :bounds=>bounds
- stores.sort_by_distance_from(home)
-
-## IP GEOCODING
-
-You can obtain the location for an IP at any time using the geocoder
-as in the following example:
-
- location = IpGeocoder.geocode('12.215.42.19')
-
-where Location is a GeoLoc instance containing the latitude,
-longitude, city, state, and country code. Also, the success
-value is true.
-
-If the IP cannot be geocoded, a GeoLoc instance is returned with a
-success value of false.
-
-It should be noted that the IP address needs to be visible to the
-Rails application. In other words, you need to ensure that the
-requesting IP address is forwarded by any front-end servers that
-are out in front of the Rails app. Otherwise, the IP will always
-be that of the front-end server.
-
-## IP GEOCODING HELPER
-
-A class method called geocode_ip_address has been mixed into the
-ActionController::Base. This enables before_filter style lookup of
-the IP address. Since it is a filter, it can accept any of the
-available filter options.
-
-Usage is as below:
-
- class LocationAwareController < ActionController::Base
- geocode_ip_address
- end
-
-A first-time lookup will result in the GeoLoc class being stored
-in the session as :geo_location as well as in a cookie called
-:geo_session. Subsequent lookups will use the session value if it
-exists or the cookie value if it doesn't exist. The last resort is
-to make a call to the web service. Clients are free to manage the
-cookie as they wish.
-
-The intent of this feature is to be able to provide a good guess as
-to a new visitor's location.
-
-## INTEGRATED FIND AND GEOCODING
-
-Geocoding has been integrated with the finders enabling you to pass
-a physical address or an IP address. This would look the following:
-
- Location.find_farthest(:origin => '217.15.10.9')
- Location.find_farthest(:origin => 'Irving, TX')
-
-where the IP or physical address would be geocoded to a location and
-then the resulting latitude and longitude coordinates would be used
-in the find. This is not expected to be common usage, but it can be
-done nevertheless.
-
-## ADDRESS GEOCODING
-
-GeoKit can geocode addresses using multiple geocodeing web services.
-Currently, GeoKit supports Google, Yahoo, and Geocoder.us geocoding
-services.
-
-These geocoder services are made available through three classes:
-GoogleGeocoder, YahooGeocoder, and UsGeocoder. Further, an additional
-geocoder class called MultiGeocoder incorporates an ordered failover
-sequence to increase the probability of successful geocoding.
-
-All classes are called using the following signature:
-
- include GeoKit::Geocoders
- location = XxxGeocoder.geocode(address)
-
-where you replace Xxx Geocoder with the appropriate class. A GeoLoc
-instance is the result of the call. This class has a "success"
-attribute which will be true if a successful geocoding occurred.
-If successful, the lat and lng properties will be populated.
-
-Geocoders are named with the naming convention NameGeocoder. This
-naming convention enables Geocoder to auto-detect its sub-classes
-in order to create methods called name_geocoder(address) so that
-all geocoders are called through the base class. This is done
-purely for convenience; the individual geocoder classes are expected
-to be used independently.
-
-The MultiGeocoder class requires the configuration of a provider
-order which dictates what order to use the various geocoders. Ordering
-is done through the PROVIDER_ORDER constant found in environment.rb.
-
-On installation, this plugin appends a template for your API keys to
-your environment.rb.
-
-Make sure your failover configuration matches the usage characteristics
-of your application -- for example, if you routinely get bogus input to
-geocode, your code will be much slower if you have to failover among
-multiple geocoders before determining that the input was in fact bogus.
-
-The Geocoder.geocode method returns a GeoLoc object. Basic usage:
-
- loc=Geocoder.geocode('100 Spear St, San Francisco, CA')
- if loc.success
- puts loc.lat
- puts loc.lng
- puts loc.full_address
- end
-
-## INTEGRATED FIND WITH ADDRESS GEOCODING
-
-Just has you can pass an IP address directly into an ActiveRecord finder
-as the origin, you can also pass a physical address as the origin:
-
- Location.find_closest(:origin => '100 Spear st, San Francisco, CA')
-
-where the physical address would be geocoded to a location and then the
-resulting latitude and longitude coordinates would be used in the
-find.
-
-Note that if the address fails to geocode, the find method will raise an
-ActiveRecord::GeocodeError you must be prepared to catch. Alternatively,
-You can geocoder the address beforehand, and pass the resulting lat/lng
-into the finder if successful.
-
-## Auto Geocoding
-
-If your geocoding needs are simple, you can tell your model to automatically
-geocode itself on create:
-
- class Store < ActiveRecord::Base
- acts_as_mappable :auto_geocode=>true
- end
-
-It takes two optional params:
-
- class Store < ActiveRecord::Base
- acts_as_mappable :auto_geocode=>{:field=>:address, :error_message=>'Could not geocode address'}
- end
-
-. . . which is equivilent to:
-
- class Store << ActiveRecord::Base
- acts_as_mappable
- before_validation_on_create :geocode_address
-
- private
- def geocode_address
- geo=GeoKit::Geocoders::MultiGeocoder.geocode (address)
- errors.add(:address, "Could not Geocode address") if !geo.success
- self.lat, self.lng = geo.lat,geo.lng if geo.success
- end
- end
-
-If you need any more complicated geocoding behavior for your model, you should roll your own
-before_validate callback.
-
-
-## Distances, headings, endpoints, and midpoints
-
- distance=home.distance_from(work, :units=>:miles)
- heading=home.heading_to(work) # result is in degrees, 0 is north
- endpoint=home.endpoint(90,2) # two miles due east
- midpoing=home.midpoint_to(work)
-
-## Cool stuff you can do with bounds
-
- bounds=Bounds.new(sw_point,ne_point)
- bounds.contains?(home)
- puts bounds.center
-
-
-HOW TO . . .
-=================================================================================
-
-## How to install the GeoKit plugin
- cd [APP_ROOT]
- ruby script/plugin install svn://rubyforge.org/var/svn/geokit/trunk
- or, to install as an external (your project must be version controlled):
- ruby script/plugin install -x svn://rubyforge.org/var/svn/geokit/trunk
-
-## How to find all stores within a 10-mile radius of a given lat/lng
-1. ensure your stores table has lat and lng columns with numeric or float
- datatypes to store your latitude/longitude
-
-3. use acts_as_mappable on your store model:
- class Store < ActiveRecord::Base
- acts_as_mappable
- ...
- end
-3. finders now have extra capabilities:
- Store.find(:all, :origin =>[32.951613,-96.958444], :within=>10)
-
-## How to geocode an address
-
-1. configure your geocoder key(s) in environment.rb
-
-2. also in environment.rb, make sure that PROVIDER_ORDER reflects the
- geocoder(s). If you only want to use one geocoder, there should
- be only one symbol in the array. For example:
- PROVIDER_ORDER=[:google]
-
-3. Test it out in script/console
- include GeoKit::Geocoders
- res = MultiGeocoder.geocode('100 Spear St, San Francisco, CA')
- puts res.lat
- puts res.lng
- puts res.full_address
- ... etc. The return type is GeoLoc, see the API for
- all the methods you can call on it.
-
-## How to find all stores within 10 miles of a given address
-
-1. as above, ensure your table has the lat/lng columns, and you've
- applied acts_as_mappable to the Store model.
-
-2. configure and test out your geocoder, as above
-
-3. pass the address in under the :origin key
- Store.find(:all, :origin=>'100 Spear st, San Francisco, CA',
- :within=>10)
-
-4. you can also use a zipcode, or anything else that's geocodable:
- Store.find(:all, :origin=>'94117',
- :conditions=>'distance<10')
-
-## How to sort a query by distance from an origin
-
-You now have access to a 'distance' column, and you can use it
-as you would any other column. For example:
- Store.find(:all, :origin=>'94117', :order=>'distance')
-
-## How to elements of an array according to distance from a common point
-
-Usually, you can do your sorting in the database as part of your find call.
-If you need to sort things post-query, you can do so:
-
- stores=Store.find :all
- stores.sort_by_distance_from(home)
- puts stores.first.distance
-
-Obviously, each of the items in the array must have a latitude/longitude so
-they can be sorted by distance.
-
-Database Compatability
-=================================================================================
-GeoKit does *not* work with SQLite, as it lacks the necessary geometry functions.
-GeoKit works with MySQL (tested with version 5.0.41) or PostgreSQL (tested with version 8.2.6)
-GeoKit is known to *not* work with Postgres <8.1 -- it uses the least() funciton.
-
-
-HIGH-LEVEL NOTES ON WHAT'S WHERE
-=================================================================================
-
-acts_as_mappable.rb, as you'd expect, contains the ActsAsMappable
-module which gets mixed into your models to provide the
-location-based finder goodness.
-
-mappable.rb contains the Mappable module, which provides basic
-distance calculation methods, i.e., calculating the distance
-between two points.
-
-mappable.rb also contains LatLng, GeoLoc, and Bounds.
-LatLng is a simple container for latitude and longitude, but
-it's made more powerful by mixing in the above-mentioned Mappable
-module -- therefore, you can calculate easily the distance between two
-LatLng ojbects with distance = first.distance_to(other)
-
-GeoLoc (also in mappable.rb) represents an address or location which
-has been geocoded. You can get the city, zipcode, street address, etc.
-from a GeoLoc object. GeoLoc extends LatLng, so you also get lat/lng
-AND the Mappable modeule goodness for free.
-
-geocoders.rb contains the geocoder classes.
-
-ip_geocode_lookup.rb contains the before_filter helper method which
-enables auto lookup of the requesting IP address.
-
-## IMPORTANT NOTE: We have appended to your environment.rb file
-
-Installation of this plugin has appended an API key template
-to your environment.rb file. You *must* add your own keys for the various
-geocoding services if you want to use geocoding. If you need to refer to the original
-template again, see the api_keys_template file in the root of the plugin.
diff --git a/vendor/plugins/geokit/Rakefile b/vendor/plugins/geokit/Rakefile
deleted file mode 100644
index 82e289e..0000000
--- a/vendor/plugins/geokit/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
-
-desc 'Default: run unit tests.'
-task :default => :test
-
-desc 'Test the GeoKit plugin.'
-Rake::TestTask.new(:test) do |t|
- t.libs << 'lib'
- t.pattern = 'test/**/*_test.rb'
- t.verbose = true
-end
-
-desc 'Generate documentation for the GeoKit plugin.'
-Rake::RDocTask.new(:rdoc) do |rdoc|
- rdoc.rdoc_dir = 'rdoc'
- rdoc.title = 'GeoKit'
- rdoc.options << '--line-numbers' << '--inline-source'
- rdoc.rdoc_files.include('README')
- rdoc.rdoc_files.include('lib/**/*.rb')
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/VERSION_HISTORY.txt b/vendor/plugins/geokit/VERSION_HISTORY.txt
deleted file mode 100644
index 8805383..0000000
--- a/vendor/plugins/geokit/VERSION_HISTORY.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-01/20/08 Version 1.0.1. Further fix of distance calculation, this time in SQL. Now uses least() function, which is available in MySQL version 3.22.5+ and postgres versions 8.1+
-01/16/08 fixed the "zero-distance" bug (calculating between two points that are the same)
-12/11/07 fixed a small but with queries crossing meridian, and also fixed find(:closest)
-10/11/07 Fixed Rails2/Edge compatability
\ No newline at end of file
diff --git a/vendor/plugins/geokit/about.yml b/vendor/plugins/geokit/about.yml
deleted file mode 100644
index 43a5675..0000000
--- a/vendor/plugins/geokit/about.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-author:
- name_1: Bill Eisenhauer
- homepage_1: http://blog.billeisenhauer.com
- name_2: Andre Lewis
- homepage_2: http://www.earthcode.com
-summary: Geo distance calculations, distance calculation query support, geocoding for physical and ip addresses.
-version: 1.0.1
-rails_version: 1.0+
-license: MIT
\ No newline at end of file
diff --git a/vendor/plugins/geokit/assets/api_keys_template b/vendor/plugins/geokit/assets/api_keys_template
deleted file mode 100644
index 6367a1a..0000000
--- a/vendor/plugins/geokit/assets/api_keys_template
+++ /dev/null
@@ -1,50 +0,0 @@
-# These defaults are used in GeoKit::Mappable.distance_to and in acts_as_mappable
-GeoKit::default_units = :miles
-GeoKit::default_formula = :sphere
-
-# This is the timeout value in seconds to be used for calls to the geocoder web
-# services. For no timeout at all, comment out the setting. The timeout unit
-# is in seconds.
-GeoKit::Geocoders::timeout = 3
-
-# These settings are used if web service calls must be routed through a proxy.
-# These setting can be nil if not needed, otherwise, addr and port must be
-# filled in at a minimum. If the proxy requires authentication, the username
-# and password can be provided as well.
-GeoKit::Geocoders::proxy_addr = nil
-GeoKit::Geocoders::proxy_port = nil
-GeoKit::Geocoders::proxy_user = nil
-GeoKit::Geocoders::proxy_pass = nil
-
-# This is your yahoo application key for the Yahoo Geocoder.
-# See http://developer.yahoo.com/faq/index.html#appid
-# and http://developer.yahoo.com/maps/rest/V1/geocode.html
-GeoKit::Geocoders::yahoo = 'REPLACE_WITH_YOUR_YAHOO_KEY'
-
-# This is your Google Maps geocoder key.
-# See http://www.google.com/apis/maps/signup.html
-# and http://www.google.com/apis/maps/documentation/#Geocoding_Examples
-GeoKit::Geocoders::google = 'REPLACE_WITH_YOUR_GOOGLE_KEY'
-
-# This is your username and password for geocoder.us.
-# To use the free service, the value can be set to nil or false. For
-# usage tied to an account, the value should be set to username:password.
-# See http://geocoder.us
-# and http://geocoder.us/user/signup
-GeoKit::Geocoders::geocoder_us = false
-
-# This is your authorization key for geocoder.ca.
-# To use the free service, the value can be set to nil or false. For
-# usage tied to an account, set the value to the key obtained from
-# Geocoder.ca.
-# See http://geocoder.ca
-# and http://geocoder.ca/?register=1
-GeoKit::Geocoders::geocoder_ca = false
-
-# This is the order in which the geocoders are called in a failover scenario
-# If you only want to use a single geocoder, put a single symbol in the array.
-# Valid symbols are :google, :yahoo, :us, and :ca.
-# Be aware that there are Terms of Use restrictions on how you can use the
-# various geocoders. Make sure you read up on relevant Terms of Use for each
-# geocoder you are going to use.
-GeoKit::Geocoders::provider_order = [:google,:us]
\ No newline at end of file
diff --git a/vendor/plugins/geokit/init.rb b/vendor/plugins/geokit/init.rb
deleted file mode 100644
index 4512dd7..0000000
--- a/vendor/plugins/geokit/init.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# Load modules and classes needed to automatically mix in ActiveRecord and
-# ActionController helpers. All other functionality must be explicitly
-# required.
-require 'geo_kit/defaults'
-require 'geo_kit/mappable'
-require 'geo_kit/acts_as_mappable'
-require 'geo_kit/ip_geocode_lookup'
-require 'geo_kit/sqlite_extension'
-
-# Automatically mix in distance finder support into ActiveRecord classes.
-ActiveRecord::Base.send :include, GeoKit::ActsAsMappable
-
-# Automatically mix in ip geocoding helpers into ActionController classes.
-ActionController::Base.send :include, GeoKit::IpGeocodeLookup
diff --git a/vendor/plugins/geokit/install.rb b/vendor/plugins/geokit/install.rb
deleted file mode 100644
index 8263e22..0000000
--- a/vendor/plugins/geokit/install.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# Display to the console the contents of the README file.
-puts IO.read(File.join(File.dirname(__FILE__), 'README'))
-
-# Append the contents of api_keys_template to the application's environment.rb file
-environment_rb = File.open(File.expand_path(File.join(File.dirname(__FILE__), '../../../config/environment.rb')), "a")
-environment_rb.puts IO.read(File.join(File.dirname(__FILE__), '/assets/api_keys_template'))
-environment_rb.close
diff --git a/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb b/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb
deleted file mode 100644
index 14c81c8..0000000
--- a/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb
+++ /dev/null
@@ -1,446 +0,0 @@
-module GeoKit
- # Contains the class method acts_as_mappable targeted to be mixed into ActiveRecord.
- # When mixed in, augments find services such that they provide distance calculation
- # query services. The find method accepts additional options:
- #
- # * :origin - can be
- # 1. a two-element array of latititude/longitude -- :origin=>[37.792,-122.393]
- # 2. a geocodeable string -- :origin=>'100 Spear st, San Francisco, CA'
- # 3. an object which responds to lat and lng methods, or latitude and longitude methods,
- # or whatever methods you have specified for lng_column_name and lat_column_name
- #
- # Other finder methods are provided for specific queries. These are:
- #
- # * find_within (alias: find_inside)
- # * find_beyond (alias: find_outside)
- # * find_closest (alias: find_nearest)
- # * find_farthest
- #
- # Counter methods are available and work similarly to finders.
- #
- # If raw SQL is desired, the distance_sql method can be used to obtain SQL appropriate
- # to use in a find_by_sql call.
- module ActsAsMappable
- # Mix below class methods into ActiveRecord.
- def self.included(base) # :nodoc:
- base.extend ClassMethods
- end
-
- # Class method to mix into active record.
- module ClassMethods # :nodoc:
- # Class method to bring distance query support into ActiveRecord models. By default
- # uses :miles for distance units and performs calculations based upon the Haversine
- # (sphere) formula. These can be changed by setting GeoKit::default_units and
- # GeoKit::default_formula. Also, by default, uses lat, lng, and distance for respective
- # column names. All of these can be overridden using the :default_units, :default_formula,
- # :lat_column_name, :lng_column_name, and :distance_column_name hash keys.
- #
- # Can also use to auto-geocode a specific column on create. Syntax;
- #
- # acts_as_mappable :auto_geocode=>true
- #
- # By default, it tries to geocode the "address" field. Or, for more customized behavior:
- #
- # acts_as_mappable :auto_geocode=>{:field=>:address,:error_message=>'bad address'}
- #
- # In both cases, it creates a before_validation_on_create callback to geocode the given column.
- # For anything more customized, we recommend you forgo the auto_geocode option
- # and create your own AR callback to handle geocoding.
- def acts_as_mappable(options = {})
- # Mix in the module, but ensure to do so just once.
- return if self.included_modules.include?(GeoKit::ActsAsMappable::InstanceMethods)
- send :include, GeoKit::ActsAsMappable::InstanceMethods
- # include the Mappable module.
- send :include, Mappable
-
- # Handle class variables.
- cattr_accessor :distance_column_name, :default_units, :default_formula, :lat_column_name, :lng_column_name, :qualified_lat_column_name, :qualified_lng_column_name
- self.distance_column_name = options[:distance_column_name] || 'distance'
- self.default_units = options[:default_units] || GeoKit::default_units
- self.default_formula = options[:default_formula] || GeoKit::default_formula
- self.lat_column_name = options[:lat_column_name] || 'lat'
- self.lng_column_name = options[:lng_column_name] || 'lng'
- self.qualified_lat_column_name = "#{table_name}.#{lat_column_name}"
- self.qualified_lng_column_name = "#{table_name}.#{lng_column_name}"
- if options.include?(:auto_geocode) && options[:auto_geocode]
- # if the form auto_geocode=>true is used, let the defaults take over by suppling an empty hash
- options[:auto_geocode] = {} if options[:auto_geocode] == true
- cattr_accessor :auto_geocode_field, :auto_geocode_error_message
- self.auto_geocode_field = options[:auto_geocode][:field] || 'address'
- self.auto_geocode_error_message = options[:auto_geocode][:error_message] || 'could not locate address'
-
- # set the actual callback here
- before_validation_on_create :auto_geocode_address
- end
- end
- end
-
- # this is the callback for auto_geocoding
- def auto_geocode_address
- address=self.send(auto_geocode_field)
- geo=GeoKit::Geocoders::MultiGeocoder.geocode(address)
-
- if geo.success
- self.send("#{lat_column_name}=", geo.lat)
- self.send("#{lng_column_name}=", geo.lng)
- else
- errors.add(auto_geocode_field, auto_geocode_error_message)
- end
-
- geo.success
- end
-
- # Instance methods to mix into ActiveRecord.
- module InstanceMethods #:nodoc:
- # Mix class methods into module.
- def self.included(base) # :nodoc:
- base.extend SingletonMethods
- end
-
- # Class singleton methods to mix into ActiveRecord.
- module SingletonMethods # :nodoc:
- # Extends the existing find method in potentially two ways:
- # - If a mappable instance exists in the options, adds a distance column.
- # - If a mappable instance exists in the options and the distance column exists in the
- # conditions, substitutes the distance sql for the distance column -- this saves
- # having to write the gory SQL.
- def find(*args)
- prepare_for_find_or_count(:find, args)
- super(*args)
- end
-
- # Extends the existing count method by:
- # - If a mappable instance exists in the options and the distance column exists in the
- # conditions, substitutes the distance sql for the distance column -- this saves
- # having to write the gory SQL.
- def count(*args)
- prepare_for_find_or_count(:count, args)
- super(*args)
- end
-
- # Finds within a distance radius.
- def find_within(distance, options={})
- options[:within] = distance
- find(:all, options)
- end
- alias find_inside find_within
-
- # Finds beyond a distance radius.
- def find_beyond(distance, options={})
- options[:beyond] = distance
- find(:all, options)
- end
- alias find_outside find_beyond
-
- # Finds according to a range. Accepts inclusive or exclusive ranges.
- def find_by_range(range, options={})
- options[:range] = range
- find(:all, options)
- end
-
- # Finds the closest to the origin.
- def find_closest(options={})
- find(:nearest, options)
- end
- alias find_nearest find_closest
-
- # Finds the farthest from the origin.
- def find_farthest(options={})
- find(:farthest, options)
- end
-
- # Finds within rectangular bounds (sw,ne).
- def find_within_bounds(bounds, options={})
- options[:bounds] = bounds
- find(:all, options)
- end
-
- # counts within a distance radius.
- def count_within(distance, options={})
- options[:within] = distance
- count(options)
- end
- alias count_inside count_within
-
- # Counts beyond a distance radius.
- def count_beyond(distance, options={})
- options[:beyond] = distance
- count(options)
- end
- alias count_outside count_beyond
-
- # Counts according to a range. Accepts inclusive or exclusive ranges.
- def count_by_range(range, options={})
- options[:range] = range
- count(options)
- end
-
- # Finds within rectangular bounds (sw,ne).
- def count_within_bounds(bounds, options={})
- options[:bounds] = bounds
- count(options)
- end
-
- # Returns the distance calculation to be used as a display column or a condition. This
- # is provide for anyone wanting access to the raw SQL.
- def distance_sql(origin, units=default_units, formula=default_formula)
- case formula
- when :sphere
- sql = sphere_distance_sql(origin, units)
- when :flat
- sql = flat_distance_sql(origin, units)
- end
- sql
- end
-
- private
-
- # Prepares either a find or a count action by parsing through the options and
- # conditionally adding to the select clause for finders.
- def prepare_for_find_or_count(action, args)
- options = defined?(args.extract_options!) ? args.extract_options! : extract_options_from_args!(args)
- # Obtain items affecting distance condition.
- origin = extract_origin_from_options(options)
- units = extract_units_from_options(options)
- formula = extract_formula_from_options(options)
- bounds = extract_bounds_from_options(options)
- # if no explicit bounds were given, try formulating them from the point and distance given
- bounds = formulate_bounds_from_distance(options, origin, units) unless bounds
- # Apply select adjustments based upon action.
- add_distance_to_select(options, origin, units, formula) if origin && action == :find
- # Apply the conditions for a bounding rectangle if applicable
- apply_bounds_conditions(options,bounds) if bounds
- # Apply distance scoping and perform substitutions.
- apply_distance_scope(options)
- substitute_distance_in_conditions(options, origin, units, formula) if origin && options.has_key?(:conditions)
- # Order by scoping for find action.
- apply_find_scope(args, options) if action == :find
- # Unfortunatley, we need to do extra work if you use an :include. See the method for more info.
- handle_order_with_include(options,origin,units,formula) if options.include?(:include) && options.include?(:order) && origin
- # Restore options minus the extra options that we used for the
- # GeoKit API.
- args.push(options)
- end
-
- # If we're here, it means that 1) an origin argument, 2) an :include, 3) an :order clause were supplied.
- # Now we have to sub some SQL into the :order clause. The reason is that when you do an :include,
- # ActiveRecord drops the psuedo-column (specificically, distance) which we supplied for :select.
- # So, the 'distance' column isn't available for the :order clause to reference when we use :include.
- def handle_order_with_include(options, origin, units, formula)
- # replace the distance_column_name with the distance sql in order clause
- options[:order].sub!(distance_column_name, distance_sql(origin, units, formula))
- end
-
- # Looks for mapping-specific tokens and makes appropriate translations so that the
- # original finder has its expected arguments. Resets the the scope argument to
- # :first and ensures the limit is set to one.
- def apply_find_scope(args, options)
- case args.first
- when :nearest, :closest
- args[0] = :first
- options[:limit] = 1
- options[:order] = "#{distance_column_name} ASC"
- when :farthest
- args[0] = :first
- options[:limit] = 1
- options[:order] = "#{distance_column_name} DESC"
- end
- end
-
- # If it's a :within query, add a bounding box to improve performance.
- # This only gets called if a :bounds argument is not otherwise supplied.
- def formulate_bounds_from_distance(options, origin, units)
- distance = options[:within] if options.has_key?(:within)
- distance = options[:range].last-(options[:range].exclude_end?? 1 : 0) if options.has_key?(:range)
- if distance
- res=GeoKit::Bounds.from_point_and_radius(origin,distance,:units=>units)
- else
- nil
- end
- end
-
- # Replace :within, :beyond and :range distance tokens with the appropriate distance
- # where clauses. Removes these tokens from the options hash.
- def apply_distance_scope(options)
- distance_condition = "#{distance_column_name} <= #{options[:within]}" if options.has_key?(:within)
- distance_condition = "#{distance_column_name} > #{options[:beyond]}" if options.has_key?(:beyond)
- distance_condition = "#{distance_column_name} >= #{options[:range].first} AND #{distance_column_name} <#{'=' unless options[:range].exclude_end?} #{options[:range].last}" if options.has_key?(:range)
- [:within, :beyond, :range].each { |option| options.delete(option) } if distance_condition
-
- options[:conditions]=augment_conditions(options[:conditions],distance_condition) if distance_condition
- end
-
- # This method lets you transparently add a new condition to a query without
- # worrying about whether it currently has conditions, or what kind of conditions they are
- # (string or array).
- #
- # Takes the current conditions (which can be an array or a string, or can be nil/false),
- # and a SQL string. It inserts the sql into the existing conditions, and returns new conditions
- # (which can be a string or an array
- def augment_conditions(current_conditions,sql)
- if current_conditions && current_conditions.is_a?(String)
- res="#{current_conditions} AND #{sql}"
- elsif current_conditions && current_conditions.is_a?(Array)
- current_conditions[0]="#{current_conditions[0]} AND #{sql}"
- res=current_conditions
- else
- res=sql
- end
- res
- end
-
- # Alters the conditions to include rectangular bounds conditions.
- def apply_bounds_conditions(options,bounds)
- sw,ne=bounds.sw,bounds.ne
- lng_sql= bounds.crosses_meridian? ? "(#{qualified_lng_column_name}<#{sw.lng} OR #{qualified_lng_column_name}>#{ne.lng})" : "#{qualified_lng_column_name}>#{sw.lng} AND #{qualified_lng_column_name}<#{ne.lng}"
- bounds_sql="#{qualified_lat_column_name}>#{sw.lat} AND #{qualified_lat_column_name}<#{ne.lat} AND #{lng_sql}"
- options[:conditions]=augment_conditions(options[:conditions],bounds_sql)
- end
-
- # Extracts the origin instance out of the options if it exists and returns
- # it. If there is no origin, looks for latitude and longitude values to
- # create an origin. The side-effect of the method is to remove these
- # option keys from the hash.
- def extract_origin_from_options(options)
- origin = options.delete(:origin)
- res = normalize_point_to_lat_lng(origin) if origin
- res
- end
-
- # Extract the units out of the options if it exists and returns it. If
- # there is no :units key, it uses the default. The side effect of the
- # method is to remove the :units key from the options hash.
- def extract_units_from_options(options)
- units = options[:units] || default_units
- options.delete(:units)
- units
- end
-
- # Extract the formula out of the options if it exists and returns it. If
- # there is no :formula key, it uses the default. The side effect of the
- # method is to remove the :formula key from the options hash.
- def extract_formula_from_options(options)
- formula = options[:formula] || default_formula
- options.delete(:formula)
- formula
- end
-
- def extract_bounds_from_options(options)
- bounds = options.delete(:bounds)
- bounds = GeoKit::Bounds.normalize(bounds) if bounds
- end
-
- # Geocode IP address.
- def geocode_ip_address(origin)
- geo_location = GeoKit::Geocoders::IpGeocoder.geocode(origin)
- return geo_location if geo_location.success
- raise GeoKit::Geocoders::GeocodeError
- end
-
-
- # Given a point in a variety of (an address to geocode,
- # an array of [lat,lng], or an object with appropriate lat/lng methods, an IP addres)
- # this method will normalize it into a GeoKit::LatLng instance. The only thing this
- # method adds on top of LatLng#normalize is handling of IP addresses
- def normalize_point_to_lat_lng(point)
- res = geocode_ip_address(point) if point.is_a?(String) && /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})?$/.match(point)
- res = GeoKit::LatLng.normalize(point) unless res
- res
- end
-
- # Augments the select with the distance SQL.
- def add_distance_to_select(options, origin, units=default_units, formula=default_formula)
- if origin
- distance_selector = distance_sql(origin, units, formula) + " AS #{distance_column_name}"
- selector = options.has_key?(:select) && options[:select] ? options[:select] : "*"
- options[:select] = "#{selector}, #{distance_selector}"
- end
- end
-
- # Looks for the distance column and replaces it with the distance sql. If an origin was not
- # passed in and the distance column exists, we leave it to be flagged as bad SQL by the database.
- # Conditions are either a string or an array. In the case of an array, the first entry contains
- # the condition.
- def substitute_distance_in_conditions(options, origin, units=default_units, formula=default_formula)
- original_conditions = options[:conditions]
- condition = original_conditions.is_a?(String) ? original_conditions : original_conditions.first
- pattern = Regexp.new("\s*#{distance_column_name}(\s<>=)*")
- condition = condition.gsub(pattern, distance_sql(origin, units, formula))
- original_conditions = condition if original_conditions.is_a?(String)
- original_conditions[0] = condition if original_conditions.is_a?(Array)
- options[:conditions] = original_conditions
- end
-
- # Returns the distance SQL using the spherical world formula (Haversine). The SQL is tuned
- # to the database in use.
- def sphere_distance_sql(origin, units)
- lat = deg2rad(origin.lat)
- lng = deg2rad(origin.lng)
- multiplier = units_sphere_multiplier(units)
- case connection.adapter_name.downcase
- when "mysql"
- sql=<<-SQL_END
- (ACOS(least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
- COS(#{lat})*SIN(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*SIN(RADIANS(#{qualified_lng_column_name}))+
- SIN(#{lat})*SIN(RADIANS(#{qualified_lat_column_name}))))*#{multiplier})
- SQL_END
- when "postgresql"
- sql=<<-SQL_END
- (ACOS(least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
- COS(#{lat})*SIN(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*SIN(RADIANS(#{qualified_lng_column_name}))+
- SIN(#{lat})*SIN(RADIANS(#{qualified_lat_column_name}))))*#{multiplier})
- SQL_END
- when "sqlite"
- # The /1.0 in the end is to force the convertion to float
- sql=<<-SQL_END
- (SPHERIC_DISTANCE(#{lat},#{lng},RADIANS(#{qualified_lat_column_name}),RADIANS(#{qualified_lng_column_name}),#{multiplier})/1.0)
- SQL_END
- else
- sql = "unhandled #{connection.adapter_name.downcase} adapter"
- end
- end
-
- # Returns the distance SQL using the flat-world formula (Phythagorean Theory). The SQL is tuned
- # to the database in use.
- def flat_distance_sql(origin, units)
- lat_degree_units = units_per_latitude_degree(units)
- lng_degree_units = units_per_longitude_degree(origin.lat, units)
- case connection.adapter_name.downcase
- when "mysql"
- sql=<<-SQL_END
- SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
- POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
- SQL_END
- when "postgresql"
- sql=<<-SQL_END
- SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
- POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
- SQL_END
- when "sqlite"
- sql=<<-SQL_END
- (SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
- POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))/1.0)
- SQL_END
- else
- sql = "unhandled #{connection.adapter_name.downcase} adapter"
- end
- end
- end
- end
- end
-end
-
-# Extend Array with a sort_by_distance method.
-# This method creates a "distance" attribute on each object,
-# calculates the distance from the passed origin,
-# and finally sorts the array by the resulting distance.
-class Array
- def sort_by_distance_from(origin, opts={})
- distance_attribute_name = opts.delete(:distance_attribute_name) || 'distance'
- self.each do |e|
- e.class.send(:attr_accessor, distance_attribute_name) if !e.respond_to? "#{distance_attribute_name}="
- e.send("#{distance_attribute_name}=", origin.distance_to(e,opts))
- end
- self.sort!{|a,b|a.send(distance_attribute_name) <=> b.send(distance_attribute_name)}
- end
-end
diff --git a/vendor/plugins/geokit/lib/geo_kit/defaults.rb b/vendor/plugins/geokit/lib/geo_kit/defaults.rb
deleted file mode 100644
index e9832c1..0000000
--- a/vendor/plugins/geokit/lib/geo_kit/defaults.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-module GeoKit
- # These defaults are used in GeoKit::Mappable.distance_to and in acts_as_mappable
- @@default_units = :miles
- @@default_formula = :sphere
-
- [:default_units, :default_formula].each do |sym|
- class_eval <<-EOS, __FILE__, __LINE__
- def self.#{sym}
- if defined?(#{sym.to_s.upcase})
- #{sym.to_s.upcase}
- else
- @@#{sym}
- end
- end
-
- def self.#{sym}=(obj)
- @@#{sym} = obj
- end
- EOS
- end
-end
diff --git a/vendor/plugins/geokit/lib/geo_kit/geocoders.rb b/vendor/plugins/geokit/lib/geo_kit/geocoders.rb
deleted file mode 100644
index 54520b1..0000000
--- a/vendor/plugins/geokit/lib/geo_kit/geocoders.rb
+++ /dev/null
@@ -1,348 +0,0 @@
-require 'net/http'
-require 'rexml/document'
-require 'yaml'
-require 'timeout'
-
-module GeoKit
- # Contains a set of geocoders which can be used independently if desired. The list contains:
- #
- # * Google Geocoder - requires an API key.
- # * Yahoo Geocoder - requires an API key.
- # * Geocoder.us - may require authentication if performing more than the free request limit.
- # * Geocoder.ca - for Canada; may require authentication as well.
- # * IP Geocoder - geocodes an IP address using hostip.info's web service.
- # * Multi Geocoder - provides failover for the physical location geocoders.
- #
- # Some configuration is required for these geocoders and can be located in the environment
- # configuration files.
- module Geocoders
- @@proxy_addr = nil
- @@proxy_port = nil
- @@proxy_user = nil
- @@proxy_pass = nil
- @@timeout = nil
- @@yahoo = 'REPLACE_WITH_YOUR_YAHOO_KEY'
- @@google = 'REPLACE_WITH_YOUR_GOOGLE_KEY'
- @@geocoder_us = false
- @@geocoder_ca = false
- @@provider_order = [:google,:us]
-
- [:yahoo, :google, :geocoder_us, :geocoder_ca, :provider_order, :timeout,
- :proxy_addr, :proxy_port, :proxy_user, :proxy_pass].each do |sym|
- class_eval <<-EOS, __FILE__, __LINE__
- def self.#{sym}
- if defined?(#{sym.to_s.upcase})
- #{sym.to_s.upcase}
- else
- @@#{sym}
- end
- end
-
- def self.#{sym}=(obj)
- @@#{sym} = obj
- end
- EOS
- end
-
- # Error which is thrown in the event a geocoding error occurs.
- class GeocodeError < StandardError; end
-
- # The Geocoder base class which defines the interface to be used by all
- # other geocoders.
- class Geocoder
- # Main method which calls the do_geocode template method which subclasses
- # are responsible for implementing. Returns a populated GeoLoc or an
- # empty one with a failed success code.
- def self.geocode(address)
- res = do_geocode(address)
- return res.success ? res : GeoLoc.new
- end
-
- # Call the geocoder service using the timeout if configured.
- def self.call_geocoder_service(url)
- timeout(GeoKit::Geocoders::timeout) { return self.do_get(url) } if GeoKit::Geocoders::timeout
- return self.do_get(url)
- rescue TimeoutError
- return nil
- end
-
- protected
-
- def self.logger() RAILS_DEFAULT_LOGGER; end
-
- private
-
- # Wraps the geocoder call around a proxy if necessary.
- def self.do_get(url)
- return Net::HTTP::Proxy(GeoKit::Geocoders::proxy_addr, GeoKit::Geocoders::proxy_port,
- GeoKit::Geocoders::proxy_user, GeoKit::Geocoders::proxy_pass).get_response(URI.parse(url))
- end
-
- # Adds subclass' geocode method making it conveniently available through
- # the base class.
- def self.inherited(clazz)
- class_name = clazz.name.split('::').last
- src = <<-END_SRC
- def self.#{class_name.underscore}(address)
- #{class_name}.geocode(address)
- end
- END_SRC
- class_eval(src)
- end
- end
-
- # Geocoder CA geocoder implementation. Requires the GeoKit::Geocoders::GEOCODER_CA variable to
- # contain true or false based upon whether authentication is to occur. Conforms to the
- # interface set by the Geocoder class.
- #
- # Returns a response like:
- #
- #
- # 49.243086
- # -123.153684
- #
- class CaGeocoder < Geocoder
-
- private
-
- # Template method which does the geocode lookup.
- def self.do_geocode(address)
- raise ArgumentError('Geocoder.ca requires a GeoLoc argument') unless address.is_a?(GeoLoc)
- url = construct_request(address)
- res = self.call_geocoder_service(url)
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
- xml = res.body
- logger.debug "Geocoder.ca geocoding. Address: #{address}. Result: #{xml}"
- # Parse the document.
- doc = REXML::Document.new(xml)
- address.lat = doc.elements['//latt'].text
- address.lng = doc.elements['//longt'].text
- address.success = true
- return address
- rescue
- logger.error "Caught an error during Geocoder.ca geocoding call: "+$!
- return GeoLoc.new
- end
-
- # Formats the request in the format acceptable by the CA geocoder.
- def self.construct_request(location)
- url = ""
- url += add_ampersand(url) + "stno=#{location.street_number}" if location.street_address
- url += add_ampersand(url) + "addresst=#{CGI.escape(location.street_name)}" if location.street_address
- url += add_ampersand(url) + "city=#{CGI.escape(location.city)}" if location.city
- url += add_ampersand(url) + "prov=#{location.state}" if location.state
- url += add_ampersand(url) + "postal=#{location.zip}" if location.zip
- url += add_ampersand(url) + "auth=#{GeoKit::Geocoders::geocoder_ca}" if GeoKit::Geocoders::geocoder_ca
- url += add_ampersand(url) + "geoit=xml"
- 'http://geocoder.ca/?' + url
- end
-
- def self.add_ampersand(url)
- url && url.length > 0 ? "&" : ""
- end
- end
-
- # Google geocoder implementation. Requires the GeoKit::Geocoders::GOOGLE variable to
- # contain a Google API key. Conforms to the interface set by the Geocoder class.
- class GoogleGeocoder < Geocoder
-
- private
-
- # Template method which does the geocode lookup.
- def self.do_geocode(address)
- address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
- res = self.call_geocoder_service("http://maps.google.com/maps/geo?q=#{CGI.escape(address_str)}&output=xml&key=#{GeoKit::Geocoders::google}&oe=utf-8")
-# res = Net::HTTP.get_response(URI.parse("http://maps.google.com/maps/geo?q=#{CGI.escape(address_str)}&output=xml&key=#{GeoKit::Geocoders::google}&oe=utf-8"))
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
- xml=res.body
- logger.debug "Google geocoding. Address: #{address}. Result: #{xml}"
- doc=REXML::Document.new(xml)
-
- if doc.elements['//kml/Response/Status/code'].text == '200'
- res = GeoLoc.new
- coordinates=doc.elements['//coordinates'].text.to_s.split(',')
-
- #basics
- res.lat=coordinates[1]
- res.lng=coordinates[0]
- res.country_code=doc.elements['//CountryNameCode'].text
- res.provider='google'
-
- #extended -- false if not not available
- res.city = doc.elements['//LocalityName'].text if doc.elements['//LocalityName']
- res.state = doc.elements['//AdministrativeAreaName'].text if doc.elements['//AdministrativeAreaName']
- res.full_address = doc.elements['//address'].text if doc.elements['//address'] # google provides it
- res.zip = doc.elements['//PostalCodeNumber'].text if doc.elements['//PostalCodeNumber']
- res.street_address = doc.elements['//ThoroughfareName'].text if doc.elements['//ThoroughfareName']
- # Translate accuracy into Yahoo-style token address, street, zip, zip+4, city, state, country
- # For Google, 1=low accuracy, 8=high accuracy
- # old way -- address_details=doc.elements['//AddressDetails','urn:oasis:names:tc:ciq:xsdschema:xAL:2.0']
- address_details=doc.elements['//*[local-name() = "AddressDetails"]']
- accuracy = address_details ? address_details.attributes['Accuracy'].to_i : 0
- res.precision=%w{unknown country state state city zip zip+4 street address}[accuracy]
- res.success=true
-
- return res
- else
- logger.info "Google was unable to geocode address: "+address
- return GeoLoc.new
- end
-
- rescue
- logger.error "Caught an error during Google geocoding call: "+$!
- return GeoLoc.new
- end
- end
-
- # Provides geocoding based upon an IP address. The underlying web service is a hostip.info
- # which sources their data through a combination of publicly available information as well
- # as community contributions.
- class IpGeocoder < Geocoder
-
- private
-
- # Given an IP address, returns a GeoLoc instance which contains latitude,
- # longitude, city, and country code. Sets the success attribute to false if the ip
- # parameter does not match an ip address.
- def self.do_geocode(ip)
- return GeoLoc.new unless /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})?$/.match(ip)
- url = "http://api.hostip.info/get_html.php?ip=#{ip}&position=true"
- response = self.call_geocoder_service(url)
- response.is_a?(Net::HTTPSuccess) ? parse_body(response.body) : GeoLoc.new
- rescue
- logger.error "Caught an error during HostIp geocoding call: "+$!
- return GeoLoc.new
- end
-
- # Converts the body to YAML since its in the form of:
- #
- # Country: UNITED STATES (US)
- # City: Sugar Grove, IL
- # Latitude: 41.7696
- # Longitude: -88.4588
- #
- # then instantiates a GeoLoc instance to populate with location data.
- def self.parse_body(body) # :nodoc:
- yaml = YAML.load(body)
- res = GeoLoc.new
- res.provider = 'hostip'
- res.city, res.state = yaml['City'].split(', ')
- country, res.country_code = yaml['Country'].split(' (')
- res.lat = yaml['Latitude']
- res.lng = yaml['Longitude']
- res.country_code.chop!
- res.success = res.city != "(Private Address)"
- res
- end
- end
-
- # Geocoder Us geocoder implementation. Requires the GeoKit::Geocoders::GEOCODER_US variable to
- # contain true or false based upon whether authentication is to occur. Conforms to the
- # interface set by the Geocoder class.
- class UsGeocoder < Geocoder
-
- private
-
- # For now, the geocoder_method will only geocode full addresses -- not zips or cities in isolation
- def self.do_geocode(address)
- address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
- url = "http://"+(GeoKit::Geocoders::geocoder_us || '')+"geocoder.us/service/csv/geocode?address=#{CGI.escape(address_str)}"
- res = self.call_geocoder_service(url)
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
- data = res.body
- logger.debug "Geocoder.us geocoding. Address: #{address}. Result: #{data}"
- array = data.chomp.split(',')
-
- if array.length == 6
- res=GeoLoc.new
- res.lat,res.lng,res.street_address,res.city,res.state,res.zip=array
- res.country_code='US'
- res.success=true
- return res
- else
- logger.info "geocoder.us was unable to geocode address: "+address
- return GeoLoc.new
- end
- rescue
- logger.error "Caught an error during geocoder.us geocoding call: "+$!
- return GeoLoc.new
- end
- end
-
- # Yahoo geocoder implementation. Requires the GeoKit::Geocoders::YAHOO variable to
- # contain a Yahoo API key. Conforms to the interface set by the Geocoder class.
- class YahooGeocoder < Geocoder
-
- private
-
- # Template method which does the geocode lookup.
- def self.do_geocode(address)
- address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
- url="http://api.local.yahoo.com/MapsService/V1/geocode?appid=#{GeoKit::Geocoders::yahoo}&location=#{CGI.escape(address_str)}"
- res = self.call_geocoder_service(url)
- return GeoLoc.new if !res.is_a?(Net::HTTPSuccess)
- xml = res.body
- doc = REXML::Document.new(xml)
- logger.debug "Yahoo geocoding. Address: #{address}. Result: #{xml}"
-
- if doc.elements['//ResultSet']
- res=GeoLoc.new
-
- #basic
- res.lat=doc.elements['//Latitude'].text
- res.lng=doc.elements['//Longitude'].text
- res.country_code=doc.elements['//Country'].text
- res.provider='yahoo'
-
- #extended - false if not available
- res.city=doc.elements['//City'].text if doc.elements['//City'] && doc.elements['//City'].text != nil
- res.state=doc.elements['//State'].text if doc.elements['//State'] && doc.elements['//State'].text != nil
- res.zip=doc.elements['//Zip'].text if doc.elements['//Zip'] && doc.elements['//Zip'].text != nil
- res.street_address=doc.elements['//Address'].text if doc.elements['//Address'] && doc.elements['//Address'].text != nil
- res.precision=doc.elements['//Result'].attributes['precision'] if doc.elements['//Result']
- res.success=true
- return res
- else
- logger.info "Yahoo was unable to geocode address: "+address
- return GeoLoc.new
- end
-
- rescue
- logger.info "Caught an error during Yahoo geocoding call: "+$!
- return GeoLoc.new
- end
- end
-
- # Provides methods to geocode with a variety of geocoding service providers, plus failover
- # among providers in the order you configure.
- #
- # Goal:
- # - homogenize the results of multiple geocoders
- #
- # Limitations:
- # - currently only provides the first result. Sometimes geocoders will return multiple results.
- # - currently discards the "accuracy" component of the geocoding calls
- class MultiGeocoder < Geocoder
- private
-
- # This method will call one or more geocoders in the order specified in the
- # configuration until one of the geocoders work.
- #
- # The failover approach is crucial for production-grade apps, but is rarely used.
- # 98% of your geocoding calls will be successful with the first call
- def self.do_geocode(address)
- GeoKit::Geocoders::provider_order.each do |provider|
- begin
- klass = GeoKit::Geocoders.const_get "#{provider.to_s.capitalize}Geocoder"
- res = klass.send :geocode, address
- return res if res.success
- rescue
- logger.error("Something has gone very wrong during geocoding, OR you have configured an invalid class name in GeoKit::Geocoders::provider_order. Address: #{address}. Provider: #{provider}")
- end
- end
- # If we get here, we failed completely.
- GeoLoc.new
- end
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/lib/geo_kit/ip_geocode_lookup.rb b/vendor/plugins/geokit/lib/geo_kit/ip_geocode_lookup.rb
deleted file mode 100644
index 3d630ea..0000000
--- a/vendor/plugins/geokit/lib/geo_kit/ip_geocode_lookup.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require 'yaml'
-
-module GeoKit
- # Contains a class method geocode_ip_address which can be used to enable automatic geocoding
- # for request IP addresses. The geocoded information is stored in a cookie and in the
- # session to minimize web service calls. The point of the helper is to enable location-based
- # websites to have a best-guess for new visitors.
- module IpGeocodeLookup
- # Mix below class methods into ActionController.
- def self.included(base) # :nodoc:
- base.extend ClassMethods
- end
-
- # Class method to mix into active record.
- module ClassMethods # :nodoc:
- def geocode_ip_address(filter_options = {})
- before_filter :store_ip_location, filter_options
- end
- end
-
- private
-
- # Places the IP address' geocode location into the session if it
- # can be found. Otherwise, looks for a geo location cookie and
- # uses that value. The last resort is to call the web service to
- # get the value.
- def store_ip_location
- session[:geo_location] ||= retrieve_location_from_cookie_or_service
- cookies[:geo_location] = { :value => session[:geo_location].to_yaml, :expires => 30.days.from_now } if session[:geo_location]
- end
-
- # Uses the stored location value from the cookie if it exists. If
- # no cookie exists, calls out to the web service to get the location.
- def retrieve_location_from_cookie_or_service
- return YAML.load(cookies[:geo_location]) if cookies[:geo_location]
- location = Geocoders::IpGeocoder.geocode(get_ip_address)
- return location.success ? location : nil
- end
-
- # Returns the real ip address, though this could be the localhost ip
- # address. No special handling here anymore.
- def get_ip_address
- request.remote_ip
- end
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/lib/geo_kit/mappable.rb b/vendor/plugins/geokit/lib/geo_kit/mappable.rb
deleted file mode 100644
index b6434c8..0000000
--- a/vendor/plugins/geokit/lib/geo_kit/mappable.rb
+++ /dev/null
@@ -1,432 +0,0 @@
-require 'geo_kit/defaults'
-
-module GeoKit
- # Contains class and instance methods providing distance calcuation services. This
- # module is meant to be mixed into classes containing lat and lng attributes where
- # distance calculation is desired.
- #
- # At present, two forms of distance calculations are provided:
- #
- # * Pythagorean Theory (flat Earth) - which assumes the world is flat and loses accuracy over long distances.
- # * Haversine (sphere) - which is fairly accurate, but at a performance cost.
- #
- # Distance units supported are :miles and :kms.
- module Mappable
- PI_DIV_RAD = 0.0174
- KMS_PER_MILE = 1.609
- EARTH_RADIUS_IN_MILES = 3963.19
- EARTH_RADIUS_IN_KMS = EARTH_RADIUS_IN_MILES * KMS_PER_MILE
- MILES_PER_LATITUDE_DEGREE = 69.1
- KMS_PER_LATITUDE_DEGREE = MILES_PER_LATITUDE_DEGREE * KMS_PER_MILE
- LATITUDE_DEGREES = EARTH_RADIUS_IN_MILES / MILES_PER_LATITUDE_DEGREE
-
- # Mix below class methods into the includer.
- def self.included(receiver) # :nodoc:
- receiver.extend ClassMethods
- end
-
- module ClassMethods #:nodoc:
- # Returns the distance between two points. The from and to parameters are
- # required to have lat and lng attributes. Valid options are:
- # :units - valid values are :miles or :kms (GeoKit::default_units is the default)
- # :formula - valid values are :flat or :sphere (GeoKit::default_formula is the default)
- def distance_between(from, to, options={})
- from=GeoKit::LatLng.normalize(from)
- to=GeoKit::LatLng.normalize(to)
- return 0.0 if from == to # fixes a "zero-distance" bug
- units = options[:units] || GeoKit::default_units
- formula = options[:formula] || GeoKit::default_formula
- case formula
- when :sphere
- units_sphere_multiplier(units) *
- Math.acos( Math.sin(deg2rad(from.lat)) * Math.sin(deg2rad(to.lat)) +
- Math.cos(deg2rad(from.lat)) * Math.cos(deg2rad(to.lat)) *
- Math.cos(deg2rad(to.lng) - deg2rad(from.lng)))
- when :flat
- Math.sqrt((units_per_latitude_degree(units)*(from.lat-to.lat))**2 +
- (units_per_longitude_degree(from.lat, units)*(from.lng-to.lng))**2)
- end
- end
-
- # Returns heading in degrees (0 is north, 90 is east, 180 is south, etc)
- # from the first point to the second point. Typicaly, the instance methods will be used
- # instead of this method.
- def heading_between(from,to)
- from=GeoKit::LatLng.normalize(from)
- to=GeoKit::LatLng.normalize(to)
-
- d_lng=deg2rad(to.lng-from.lng)
- from_lat=deg2rad(from.lat)
- to_lat=deg2rad(to.lat)
- y=Math.sin(d_lng) * Math.cos(to_lat)
- x=Math.cos(from_lat)*Math.sin(to_lat)-Math.sin(from_lat)*Math.cos(to_lat)*Math.cos(d_lng)
- heading=to_heading(Math.atan2(y,x))
- end
-
- # Given a start point, distance, and heading (in degrees), provides
- # an endpoint. Returns a LatLng instance. Typically, the instance method
- # will be used instead of this method.
- def endpoint(start,heading, distance, options={})
- units = options[:units] || GeoKit::default_units
- radius = units == :miles ? EARTH_RADIUS_IN_MILES : EARTH_RADIUS_IN_KMS
- start=GeoKit::LatLng.normalize(start)
- lat=deg2rad(start.lat)
- lng=deg2rad(start.lng)
- heading=deg2rad(heading)
- distance=distance.to_f
-
- end_lat=Math.asin(Math.sin(lat)*Math.cos(distance/radius) +
- Math.cos(lat)*Math.sin(distance/radius)*Math.cos(heading))
-
- end_lng=lng+Math.atan2(Math.sin(heading)*Math.sin(distance/radius)*Math.cos(lat),
- Math.cos(distance/radius)-Math.sin(lat)*Math.sin(end_lat))
-
- LatLng.new(rad2deg(end_lat),rad2deg(end_lng))
- end
-
- # Returns the midpoint, given two points. Returns a LatLng.
- # Typically, the instance method will be used instead of this method.
- # Valid option:
- # :units - valid values are :miles or :kms (:miles is the default)
- def midpoint_between(from,to,options={})
- from=GeoKit::LatLng.normalize(from)
-
- units = options[:units] || GeoKit::default_units
-
- heading=from.heading_to(to)
- distance=from.distance_to(to,options)
- midpoint=from.endpoint(heading,distance/2,options)
- end
-
- # Geocodes a location using the multi geocoder.
- def geocode(location)
- res = Geocoders::MultiGeocoder.geocode(location)
- return res if res.success
- raise GeoKit::Geocoders::GeocodeError
- end
-
- protected
-
- def deg2rad(degrees)
- degrees.to_f / 180.0 * Math::PI
- end
-
- def rad2deg(rad)
- rad.to_f * 180.0 / Math::PI
- end
-
- def to_heading(rad)
- (rad2deg(rad)+360)%360
- end
-
- # Returns the multiplier used to obtain the correct distance units.
- def units_sphere_multiplier(units)
- units == :miles ? EARTH_RADIUS_IN_MILES : EARTH_RADIUS_IN_KMS
- end
-
- # Returns the number of units per latitude degree.
- def units_per_latitude_degree(units)
- units == :miles ? MILES_PER_LATITUDE_DEGREE : KMS_PER_LATITUDE_DEGREE
- end
-
- # Returns the number units per longitude degree.
- def units_per_longitude_degree(lat, units)
- miles_per_longitude_degree = (LATITUDE_DEGREES * Math.cos(lat * PI_DIV_RAD)).abs
- units == :miles ? miles_per_longitude_degree : miles_per_longitude_degree * KMS_PER_MILE
- end
- end
-
- # -----------------------------------------------------------------------------------------------
- # Instance methods below here
- # -----------------------------------------------------------------------------------------------
-
- # Extracts a LatLng instance. Use with models that are acts_as_mappable
- def to_lat_lng
- return self if instance_of?(GeoKit::LatLng) || instance_of?(GeoKit::GeoLoc)
- return LatLng.new(send(self.class.lat_column_name),send(self.class.lng_column_name)) if self.class.respond_to?(:acts_as_mappable)
- return nil
- end
-
- # Returns the distance from another point. The other point parameter is
- # required to have lat and lng attributes. Valid options are:
- # :units - valid values are :miles or :kms (:miles is the default)
- # :formula - valid values are :flat or :sphere (:sphere is the default)
- def distance_to(other, options={})
- self.class.distance_between(self, other, options)
- end
- alias distance_from distance_to
-
- # Returns heading in degrees (0 is north, 90 is east, 180 is south, etc)
- # to the given point. The given point can be a LatLng or a string to be Geocoded
- def heading_to(other)
- self.class.heading_between(self,other)
- end
-
- # Returns heading in degrees (0 is north, 90 is east, 180 is south, etc)
- # FROM the given point. The given point can be a LatLng or a string to be Geocoded
- def heading_from(other)
- self.class.heading_between(other,self)
- end
-
- # Returns the endpoint, given a heading (in degrees) and distance.
- # Valid option:
- # :units - valid values are :miles or :kms (:miles is the default)
- def endpoint(heading,distance,options={})
- self.class.endpoint(self,heading,distance,options)
- end
-
- # Returns the midpoint, given another point on the map.
- # Valid option:
- # :units - valid values are :miles or :kms (:miles is the default)
- def midpoint_to(other, options={})
- self.class.midpoint_between(self,other,options)
- end
-
- end
-
- class LatLng
- include Mappable
-
- attr_accessor :lat, :lng
-
- # Accepts latitude and longitude or instantiates an empty instance
- # if lat and lng are not provided. Converted to floats if provided
- def initialize(lat=nil, lng=nil)
- lat = lat.to_f if lat && !lat.is_a?(Numeric)
- lng = lng.to_f if lng && !lng.is_a?(Numeric)
- @lat = lat
- @lng = lng
- end
-
- # Latitude attribute setter; stored as a float.
- def lat=(lat)
- @lat = lat.to_f if lat
- end
-
- # Longitude attribute setter; stored as a float;
- def lng=(lng)
- @lng=lng.to_f if lng
- end
-
- # Returns the lat and lng attributes as a comma-separated string.
- def ll
- "#{lat},#{lng}"
- end
-
- #returns a string with comma-separated lat,lng values
- def to_s
- ll
- end
-
- #returns a two-element array
- def to_a
- [lat,lng]
- end
- # Returns true if the candidate object is logically equal. Logical equivalence
- # is true if the lat and lng attributes are the same for both objects.
- def ==(other)
- other.is_a?(LatLng) ? self.lat == other.lat && self.lng == other.lng : false
- end
-
- # A *class* method to take anything which can be inferred as a point and generate
- # a LatLng from it. You should use this anything you're not sure what the input is,
- # and want to deal with it as a LatLng if at all possible. Can take:
- # 1) two arguments (lat,lng)
- # 2) a string in the format "37.1234,-129.1234" or "37.1234 -129.1234"
- # 3) a string which can be geocoded on the fly
- # 4) an array in the format [37.1234,-129.1234]
- # 5) a LatLng or GeoLoc (which is just passed through as-is)
- # 6) anything which acts_as_mappable -- a LatLng will be extracted from it
- def self.normalize(thing,other=nil)
- # if an 'other' thing is supplied, normalize the input by creating an array of two elements
- thing=[thing,other] if other
-
- if thing.is_a?(String)
- thing.strip!
- if match=thing.match(/(\-?\d+\.?\d*)[, ] ?(\-?\d+\.?\d*)$/)
- return GeoKit::LatLng.new(match[1],match[2])
- else
- res = GeoKit::Geocoders::MultiGeocoder.geocode(thing)
- return res if res.success
- raise GeoKit::Geocoders::GeocodeError
- end
- elsif thing.is_a?(Array) && thing.size==2
- return GeoKit::LatLng.new(thing[0],thing[1])
- elsif thing.is_a?(LatLng) # will also be true for GeoLocs
- return thing
- elsif thing.class.respond_to?(:acts_as_mappable) && thing.class.respond_to?(:distance_column_name)
- return thing.to_lat_lng
- end
-
- throw ArgumentError.new("#{thing} (#{thing.class}) cannot be normalized to a LatLng. We tried interpreting it as an array, string, Mappable, etc., but no dice.")
- end
-
- end
-
- # This class encapsulates the result of a geocoding call
- # It's primary purpose is to homogenize the results of multiple
- # geocoding providers. It also provides some additional functionality, such as
- # the "full address" method for geocoders that do not provide a
- # full address in their results (for example, Yahoo), and the "is_us" method.
- class GeoLoc < LatLng
- # Location attributes. Full address is a concatenation of all values. For example:
- # 100 Spear St, San Francisco, CA, 94101, US
- attr_accessor :street_address, :city, :state, :zip, :country_code, :full_address
- # Attributes set upon return from geocoding. Success will be true for successful
- # geocode lookups. The provider will be set to the name of the providing geocoder.
- # Finally, precision is an indicator of the accuracy of the geocoding.
- attr_accessor :success, :provider, :precision
- # Street number and street name are extracted from the street address attribute.
- attr_reader :street_number, :street_name
-
- # Constructor expects a hash of symbols to correspond with attributes.
- def initialize(h={})
- @street_address=h[:street_address]
- @city=h[:city]
- @state=h[:state]
- @zip=h[:zip]
- @country_code=h[:country_code]
- @success=false
- @precision='unknown'
- super(h[:lat],h[:lng])
- end
-
- # Returns true if geocoded to the United States.
- def is_us?
- country_code == 'US'
- end
-
- # full_address is provided by google but not by yahoo. It is intended that the google
- # geocoding method will provide the full address, whereas for yahoo it will be derived
- # from the parts of the address we do have.
- def full_address
- @full_address ? @full_address : to_geocodeable_s
- end
-
- # Extracts the street number from the street address if the street address
- # has a value.
- def street_number
- street_address[/(\d*)/] if street_address
- end
-
- # Returns the street name portion of the street address.
- def street_name
- street_address[street_number.length, street_address.length].strip if street_address
- end
-
- # gives you all the important fields as key-value pairs
- def hash
- res={}
- [:success,:lat,:lng,:country_code,:city,:state,:zip,:street_address,:provider,:full_address,:is_us?,:ll,:precision].each { |s| res[s] = self.send(s.to_s) }
- res
- end
- alias to_hash hash
-
- # Sets the city after capitalizing each word within the city name.
- def city=(city)
- @city = city.titleize if city
- end
-
- # Sets the street address after capitalizing each word within the street address.
- def street_address=(address)
- @street_address = address.titleize if address
- end
-
- # Returns a comma-delimited string consisting of the street address, city, state,
- # zip, and country code. Only includes those attributes that are non-blank.
- def to_geocodeable_s
- a=[street_address, city, state, zip, country_code].compact
- a.delete_if { |e| !e || e == '' }
- a.join(', ')
- end
-
- # Returns a string representation of the instance.
- def to_s
- "Provider: #{provider}\n Street: #{street_address}\nCity: #{city}\nState: #{state}\nZip: #{zip}\nLatitude: #{lat}\nLongitude: #{lng}\nCountry: #{country_code}\nSuccess: #{success}"
- end
- end
-
- # Bounds represents a rectangular bounds, defined by the SW and NE corners
- class Bounds
- # sw and ne are LatLng objects
- attr_accessor :sw, :ne
-
- # provide sw and ne to instantiate a new Bounds instance
- def initialize(sw,ne)
- raise ArguementError if !(sw.is_a?(GeoKit::LatLng) && ne.is_a?(GeoKit::LatLng))
- @sw,@ne=sw,ne
- end
-
- #returns the a single point which is the center of the rectangular bounds
- def center
- @sw.midpoint_to(@ne)
- end
-
- # a simple string representation:sw,ne
- def to_s
- "#{@sw.to_s},#{@ne.to_s}"
- end
-
- # a two-element array of two-element arrays: sw,ne
- def to_a
- [@sw.to_a, @ne.to_a]
- end
-
- # Returns true if the bounds contain the passed point.
- # allows for bounds which cross the meridian
- def contains?(point)
- point=GeoKit::LatLng.normalize(point)
- res = point.lat > @sw.lat && point.lat < @ne.lat
- if crosses_meridian?
- res &= point.lng < @ne.lng || point.lng > @sw.lng
- else
- res &= point.lng < @ne.lng && point.lng > @sw.lng
- end
- res
- end
-
- # returns true if the bounds crosses the international dateline
- def crosses_meridian?
- @sw.lng > @ne.lng
- end
-
- # Returns true if the candidate object is logically equal. Logical equivalence
- # is true if the lat and lng attributes are the same for both objects.
- def ==(other)
- other.is_a?(Bounds) ? self.sw == other.sw && self.ne == other.ne : false
- end
-
- class <true
-end
-
-# Uses deviations from conventions.
-class CustomLocation < ActiveRecord::Base #:nodoc: all
- belongs_to :company
- acts_as_mappable :distance_column_name => 'dist',
- :default_units => :kms,
- :default_formula => :flat,
- :lat_column_name => 'latitude',
- :lng_column_name => 'longitude'
-
- def to_s
- "lat: #{latitude} lng: #{longitude} dist: #{dist}"
- end
-end
-
-class ActsAsMappableTest < Test::Unit::TestCase #:nodoc: all
-
- LOCATION_A_IP = "217.10.83.5"
-
- #self.fixture_path = File.dirname(__FILE__) + '/fixtures'
- #self.fixture_path = RAILS_ROOT + '/test/fixtures/'
- #puts "Rails Path #{RAILS_ROOT}"
- #puts "Fixture Path: #{self.fixture_path}"
- #self.fixture_path = ' /Users/bill_eisenhauer/Projects/geokit_test/test/fixtures/'
- fixtures :companies, :locations, :custom_locations, :stores
-
- def setup
- @location_a = GeoKit::GeoLoc.new
- @location_a.lat = 32.918593
- @location_a.lng = -96.958444
- @location_a.city = "Irving"
- @location_a.state = "TX"
- @location_a.country_code = "US"
- @location_a.success = true
-
- @sw = GeoKit::LatLng.new(32.91663,-96.982841)
- @ne = GeoKit::LatLng.new(32.96302,-96.919495)
- @bounds_center=GeoKit::LatLng.new((@sw.lat+@ne.lat)/2,(@sw.lng+@ne.lng)/2)
-
- @starbucks = companies(:starbucks)
- @loc_a = locations(:a)
- @custom_loc_a = custom_locations(:a)
- @loc_e = locations(:e)
- @custom_loc_e = custom_locations(:e)
- end
-
- def test_override_default_units_the_hard_way
- Location.default_units = :kms
- locations = Location.find(:all, :origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 5, locations.size
- locations = Location.count(:origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 5, locations
- Location.default_units = :miles
- end
-
- def test_include
- locations = Location.find(:all, :origin => @loc_a, :include => :company, :conditions => "company_id = 1")
- assert !locations.empty?
- assert_equal 1, locations[0].company.id
- assert_equal 'Starbucks', locations[0].company.name
- end
-
- def test_distance_between_geocoded
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("Irving, TX").returns(@location_a)
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("San Francisco, CA").returns(@location_a)
- assert_equal 0, Location.distance_between("Irving, TX", "San Francisco, CA")
- end
-
- def test_distance_to_geocoded
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("Irving, TX").returns(@location_a)
- assert_equal 0, @custom_loc_a.distance_to("Irving, TX")
- end
-
- def test_distance_to_geocoded_error
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("Irving, TX").returns(GeoKit::GeoLoc.new)
- assert_raise(GeoKit::Geocoders::GeocodeError) { @custom_loc_a.distance_to("Irving, TX") }
- end
-
- def test_custom_attributes_distance_calculations
- assert_equal 0, @custom_loc_a.distance_to(@loc_a)
- assert_equal 0, CustomLocation.distance_between(@custom_loc_a, @loc_a)
- end
-
- def test_distance_column_in_select
- locations = Location.find(:all, :origin => @loc_a, :order => "distance ASC")
- assert_equal 6, locations.size
- assert_equal 0, @loc_a.distance_to(locations.first)
- assert_in_delta 3.97, @loc_a.distance_to(locations.last, :units => :miles, :formula => :sphere), 0.01
- end
-
- def test_find_with_distance_condition
- locations = Location.find(:all, :origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 5, locations.size
- locations = Location.count(:origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 5, locations
- end
-
- def test_find_with_distance_condition_with_units_override
- locations = Location.find(:all, :origin => @loc_a, :units => :kms, :conditions => "distance < 6.387")
- assert_equal 5, locations.size
- locations = Location.count(:origin => @loc_a, :units => :kms, :conditions => "distance < 6.387")
- assert_equal 5, locations
- end
-
- def test_find_with_distance_condition_with_formula_override
- locations = Location.find(:all, :origin => @loc_a, :formula => :flat, :conditions => "distance < 6.387")
- assert_equal 6, locations.size
- locations = Location.count(:origin => @loc_a, :formula => :flat, :conditions => "distance < 6.387")
- assert_equal 6, locations
- end
-
- def test_find_within
- locations = Location.find_within(3.97, :origin => @loc_a)
- assert_equal 5, locations.size
- locations = Location.count_within(3.97, :origin => @loc_a)
- assert_equal 5, locations
- end
-
- def test_find_within_with_token
- locations = Location.find(:all, :within => 3.97, :origin => @loc_a)
- assert_equal 5, locations.size
- locations = Location.count(:within => 3.97, :origin => @loc_a)
- assert_equal 5, locations
- end
-
- def test_find_within_with_coordinates
- locations = Location.find_within(3.97, :origin =>[@loc_a.lat,@loc_a.lng])
- assert_equal 5, locations.size
- locations = Location.count_within(3.97, :origin =>[@loc_a.lat,@loc_a.lng])
- assert_equal 5, locations
- end
-
- def test_find_with_compound_condition
- locations = Location.find(:all, :origin => @loc_a, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations.size
- locations = Location.count(:origin => @loc_a, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations
- end
-
- def test_find_with_secure_compound_condition
- locations = Location.find(:all, :origin => @loc_a, :conditions => ["distance < ? and city = ?", 5, 'Coppell'])
- assert_equal 2, locations.size
- locations = Location.count(:origin => @loc_a, :conditions => ["distance < ? and city = ?", 5, 'Coppell'])
- assert_equal 2, locations
- end
-
- def test_find_beyond
- locations = Location.find_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations.size
- locations = Location.count_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations
- end
-
- def test_find_beyond_with_token
- locations = Location.find(:all, :beyond => 3.95, :origin => @loc_a)
- assert_equal 1, locations.size
- locations = Location.count(:beyond => 3.95, :origin => @loc_a)
- assert_equal 1, locations
- end
-
- def test_find_beyond_with_coordinates
- locations = Location.find_beyond(3.95, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 1, locations.size
- locations = Location.count_beyond(3.95, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 1, locations
- end
-
- def test_find_range_with_token
- locations = Location.find(:all, :range => 0..10, :origin => @loc_a)
- assert_equal 6, locations.size
- locations = Location.count(:range => 0..10, :origin => @loc_a)
- assert_equal 6, locations
- end
-
- def test_find_range_with_token_with_conditions
- locations = Location.find(:all, :origin => @loc_a, :range => 0..10, :conditions => ["city = ?", 'Coppell'])
- assert_equal 2, locations.size
- locations = Location.count(:origin => @loc_a, :range => 0..10, :conditions => ["city = ?", 'Coppell'])
- assert_equal 2, locations
- end
-
- def test_find_range_with_token_excluding_end
- locations = Location.find(:all, :range => 0...10, :origin => @loc_a)
- assert_equal 6, locations.size
- locations = Location.count(:range => 0...10, :origin => @loc_a)
- assert_equal 6, locations
- end
-
- def test_find_nearest
- assert_equal @loc_a, Location.find_nearest(:origin => @loc_a)
- end
-
- def test_find_nearest_through_find
- assert_equal @loc_a, Location.find(:nearest, :origin => @loc_a)
- end
-
- def test_find_nearest_with_coordinates
- assert_equal @loc_a, Location.find_nearest(:origin =>[@loc_a.lat, @loc_a.lng])
- end
-
- def test_find_farthest
- assert_equal @loc_e, Location.find_farthest(:origin => @loc_a)
- end
-
- def test_find_farthest_through_find
- assert_equal @loc_e, Location.find(:farthest, :origin => @loc_a)
- end
-
- def test_find_farthest_with_coordinates
- assert_equal @loc_e, Location.find_farthest(:origin =>[@loc_a.lat, @loc_a.lng])
- end
-
- def test_scoped_distance_column_in_select
- locations = @starbucks.locations.find(:all, :origin => @loc_a, :order => "distance ASC")
- assert_equal 5, locations.size
- assert_equal 0, @loc_a.distance_to(locations.first)
- assert_in_delta 3.97, @loc_a.distance_to(locations.last, :units => :miles, :formula => :sphere), 0.01
- end
-
- def test_scoped_find_with_distance_condition
- locations = @starbucks.locations.find(:all, :origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 4, locations.size
- locations = @starbucks.locations.count(:origin => @loc_a, :conditions => "distance < 3.97")
- assert_equal 4, locations
- end
-
- def test_scoped_find_within
- locations = @starbucks.locations.find_within(3.97, :origin => @loc_a)
- assert_equal 4, locations.size
- locations = @starbucks.locations.count_within(3.97, :origin => @loc_a)
- assert_equal 4, locations
- end
-
- def test_scoped_find_with_compound_condition
- locations = @starbucks.locations.find(:all, :origin => @loc_a, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations.size
- locations = @starbucks.locations.count( :origin => @loc_a, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations
- end
-
- def test_scoped_find_beyond
- locations = @starbucks.locations.find_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations.size
- locations = @starbucks.locations.count_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations
- end
-
- def test_scoped_find_nearest
- assert_equal @loc_a, @starbucks.locations.find_nearest(:origin => @loc_a)
- end
-
- def test_scoped_find_farthest
- assert_equal @loc_e, @starbucks.locations.find_farthest(:origin => @loc_a)
- end
-
- def test_ip_geocoded_distance_column_in_select
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find(:all, :origin => LOCATION_A_IP, :order => "distance ASC")
- assert_equal 6, locations.size
- assert_equal 0, @loc_a.distance_to(locations.first)
- assert_in_delta 3.97, @loc_a.distance_to(locations.last, :units => :miles, :formula => :sphere), 0.01
- end
-
- def test_ip_geocoded_find_with_distance_condition
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find(:all, :origin => LOCATION_A_IP, :conditions => "distance < 3.97")
- assert_equal 5, locations.size
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.count(:origin => LOCATION_A_IP, :conditions => "distance < 3.97")
- assert_equal 5, locations
- end
-
- def test_ip_geocoded_find_within
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find_within(3.97, :origin => LOCATION_A_IP)
- assert_equal 5, locations.size
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.count_within(3.97, :origin => LOCATION_A_IP)
- assert_equal 5, locations
- end
-
- def test_ip_geocoded_find_with_compound_condition
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find(:all, :origin => LOCATION_A_IP, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations.size
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.count(:origin => LOCATION_A_IP, :conditions => "distance < 5 and city = 'Coppell'")
- assert_equal 2, locations
- end
-
- def test_ip_geocoded_find_with_secure_compound_condition
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find(:all, :origin => LOCATION_A_IP, :conditions => ["distance < ? and city = ?", 5, 'Coppell'])
- assert_equal 2, locations.size
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.count(:origin => LOCATION_A_IP, :conditions => ["distance < ? and city = ?", 5, 'Coppell'])
- assert_equal 2, locations
- end
-
- def test_ip_geocoded_find_beyond
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.find_beyond(3.95, :origin => LOCATION_A_IP)
- assert_equal 1, locations.size
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- locations = Location.count_beyond(3.95, :origin => LOCATION_A_IP)
- assert_equal 1, locations
- end
-
- def test_ip_geocoded_find_nearest
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- assert_equal @loc_a, Location.find_nearest(:origin => LOCATION_A_IP)
- end
-
- def test_ip_geocoded_find_farthest
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with(LOCATION_A_IP).returns(@location_a)
- assert_equal @loc_e, Location.find_farthest(:origin => LOCATION_A_IP)
- end
-
- def test_ip_geocoder_exception
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with('127.0.0.1').returns(GeoKit::GeoLoc.new)
- assert_raises GeoKit::Geocoders::GeocodeError do
- Location.find_farthest(:origin => '127.0.0.1')
- end
- end
-
- def test_address_geocode
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with('Irving, TX').returns(@location_a)
- locations = Location.find(:all, :origin => 'Irving, TX', :conditions => ["distance < ? and city = ?", 5, 'Coppell'])
- assert_equal 2, locations.size
- end
-
- def test_find_with_custom_distance_condition
- locations = CustomLocation.find(:all, :origin => @loc_a, :conditions => "dist < 3.97")
- assert_equal 5, locations.size
- locations = CustomLocation.count(:origin => @loc_a, :conditions => "dist < 3.97")
- assert_equal 5, locations
- end
-
- def test_find_with_custom_distance_condition_using_custom_origin
- locations = CustomLocation.find(:all, :origin => @custom_loc_a, :conditions => "dist < 3.97")
- assert_equal 5, locations.size
- locations = CustomLocation.count(:origin => @custom_loc_a, :conditions => "dist < 3.97")
- assert_equal 5, locations
- end
-
- def test_find_within_with_custom
- locations = CustomLocation.find_within(3.97, :origin => @loc_a)
- assert_equal 5, locations.size
- locations = CustomLocation.count_within(3.97, :origin => @loc_a)
- assert_equal 5, locations
- end
-
- def test_find_within_with_coordinates_with_custom
- locations = CustomLocation.find_within(3.97, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 5, locations.size
- locations = CustomLocation.count_within(3.97, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 5, locations
- end
-
- def test_find_with_compound_condition_with_custom
- locations = CustomLocation.find(:all, :origin => @loc_a, :conditions => "dist < 5 and city = 'Coppell'")
- assert_equal 1, locations.size
- locations = CustomLocation.count(:origin => @loc_a, :conditions => "dist < 5 and city = 'Coppell'")
- assert_equal 1, locations
- end
-
- def test_find_with_secure_compound_condition_with_custom
- locations = CustomLocation.find(:all, :origin => @loc_a, :conditions => ["dist < ? and city = ?", 5, 'Coppell'])
- assert_equal 1, locations.size
- locations = CustomLocation.count(:origin => @loc_a, :conditions => ["dist < ? and city = ?", 5, 'Coppell'])
- assert_equal 1, locations
- end
-
- def test_find_beyond_with_custom
- locations = CustomLocation.find_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations.size
- locations = CustomLocation.count_beyond(3.95, :origin => @loc_a)
- assert_equal 1, locations
- end
-
- def test_find_beyond_with_coordinates_with_custom
- locations = CustomLocation.find_beyond(3.95, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 1, locations.size
- locations = CustomLocation.count_beyond(3.95, :origin =>[@loc_a.lat, @loc_a.lng])
- assert_equal 1, locations
- end
-
- def test_find_nearest_with_custom
- assert_equal @custom_loc_a, CustomLocation.find_nearest(:origin => @loc_a)
- end
-
- def test_find_nearest_with_coordinates_with_custom
- assert_equal @custom_loc_a, CustomLocation.find_nearest(:origin =>[@loc_a.lat, @loc_a.lng])
- end
-
- def test_find_farthest_with_custom
- assert_equal @custom_loc_e, CustomLocation.find_farthest(:origin => @loc_a)
- end
-
- def test_find_farthest_with_coordinates_with_custom
- assert_equal @custom_loc_e, CustomLocation.find_farthest(:origin =>[@loc_a.lat, @loc_a.lng])
- end
-
- def test_find_with_array_origin
- locations = Location.find(:all, :origin =>[@loc_a.lat,@loc_a.lng], :conditions => "distance < 3.97")
- assert_equal 5, locations.size
- locations = Location.count(:origin =>[@loc_a.lat,@loc_a.lng], :conditions => "distance < 3.97")
- assert_equal 5, locations
- end
-
-
- # Bounding box tests
-
- def test_find_within_bounds
- locations = Location.find_within_bounds([@sw,@ne])
- assert_equal 2, locations.size
- locations = Location.count_within_bounds([@sw,@ne])
- assert_equal 2, locations
- end
-
- def test_find_within_bounds_ordered_by_distance
- locations = Location.find_within_bounds([@sw,@ne], :origin=>@bounds_center, :order=>'distance asc')
- assert_equal locations[0], locations(:d)
- assert_equal locations[1], locations(:a)
- end
-
- def test_find_within_bounds_with_token
- locations = Location.find(:all, :bounds=>[@sw,@ne])
- assert_equal 2, locations.size
- locations = Location.count(:bounds=>[@sw,@ne])
- assert_equal 2, locations
- end
-
- def test_find_within_bounds_with_string_conditions
- locations = Location.find(:all, :bounds=>[@sw,@ne], :conditions=>"id !=#{locations(:a).id}")
- assert_equal 1, locations.size
- end
-
- def test_find_within_bounds_with_array_conditions
- locations = Location.find(:all, :bounds=>[@sw,@ne], :conditions=>["id != ?", locations(:a).id])
- assert_equal 1, locations.size
- end
-
- def test_auto_geocode
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("Irving, TX").returns(@location_a)
- store=Store.new(:address=>'Irving, TX')
- store.save
- assert_equal store.lat,@location_a.lat
- assert_equal store.lng,@location_a.lng
- assert_equal 0, store.errors.size
- end
-
- def test_auto_geocode_failure
- GeoKit::Geocoders::MultiGeocoder.expects(:geocode).with("BOGUS").returns(GeoKit::GeoLoc.new)
- store=Store.new(:address=>'BOGUS')
- store.save
- assert store.new_record?
- assert_equal 1, store.errors.size
- end
-end
diff --git a/vendor/plugins/geokit/test/base_geocoder_test.rb b/vendor/plugins/geokit/test/base_geocoder_test.rb
deleted file mode 100644
index b51a739..0000000
--- a/vendor/plugins/geokit/test/base_geocoder_test.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'test/unit'
-require 'net/http'
-require 'rubygems'
-require 'mocha'
-require File.join(File.dirname(__FILE__), '../../../../config/environment')
-
-
-class MockSuccess < Net::HTTPSuccess #:nodoc: all
- def initialize
- end
-end
-
-class MockFailure < Net::HTTPServiceUnavailable #:nodoc: all
- def initialize
- end
-end
-
-# Base class for testing geocoders.
-class BaseGeocoderTest < Test::Unit::TestCase #:nodoc: all
-
- # Defines common test fixtures.
- def setup
- @address = 'San Francisco, CA'
- @full_address = '100 Spear St, San Francisco, CA, 94105-1522, US'
- @full_address_short_zip = '100 Spear St, San Francisco, CA, 94105, US'
-
- @success = GeoKit::GeoLoc.new({:city=>"SAN FRANCISCO", :state=>"CA", :country_code=>"US", :lat=>37.7742, :lng=>-122.417068})
- @success.success = true
- end
-
- def test_timeout_call_web_service
- GeoKit::Geocoders::Geocoder.class_eval do
- def self.do_get(url)
- sleep(2)
- end
- end
- url = "http://www.anything.com"
- GeoKit::Geocoders::timeout = 1
- assert_nil GeoKit::Geocoders::Geocoder.call_geocoder_service(url)
- end
-
- def test_successful_call_web_service
- url = "http://www.anything.com"
- GeoKit::Geocoders::Geocoder.expects(:do_get).with(url).returns("SUCCESS")
- assert_equal "SUCCESS", GeoKit::Geocoders::Geocoder.call_geocoder_service(url)
- end
-
- def test_find_geocoder_methods
- public_methods = GeoKit::Geocoders::Geocoder.public_methods
- assert public_methods.include?("yahoo_geocoder")
- assert public_methods.include?("google_geocoder")
- assert public_methods.include?("ca_geocoder")
- assert public_methods.include?("us_geocoder")
- assert public_methods.include?("multi_geocoder")
- assert public_methods.include?("ip_geocoder")
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/bounds_test.rb b/vendor/plugins/geokit/test/bounds_test.rb
deleted file mode 100644
index 4cabfde..0000000
--- a/vendor/plugins/geokit/test/bounds_test.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-$LOAD_PATH.unshift File.join('..', 'lib')
-require 'geo_kit/mappable'
-require 'test/unit'
-
-class BoundsTest < Test::Unit::TestCase #:nodoc: all
-
- def setup
- # This is the area in Texas
- @sw = GeoKit::LatLng.new(32.91663,-96.982841)
- @ne = GeoKit::LatLng.new(32.96302,-96.919495)
- @bounds=GeoKit::Bounds.new(@sw,@ne)
- @loc_a=GeoKit::LatLng.new(32.918593,-96.958444) # inside bounds
- @loc_b=GeoKit::LatLng.new(32.914144,-96.958444) # outside bouds
-
- # this is a cross-meridan area
- @cross_meridian=GeoKit::Bounds.normalize([30,170],[40,-170])
- @inside_cm=GeoKit::LatLng.new(35,175)
- @inside_cm_2=GeoKit::LatLng.new(35,-175)
- @east_of_cm=GeoKit::LatLng.new(35,-165)
- @west_of_cm=GeoKit::LatLng.new(35,165)
-
- end
-
- def test_equality
- assert_equal GeoKit::Bounds.new(@sw,@ne), GeoKit::Bounds.new(@sw,@ne)
- end
-
- def test_normalize
- res=GeoKit::Bounds.normalize(@sw,@ne)
- assert_equal res,GeoKit::Bounds.new(@sw,@ne)
- res=GeoKit::Bounds.normalize([@sw,@ne])
- assert_equal res,GeoKit::Bounds.new(@sw,@ne)
- res=GeoKit::Bounds.normalize([@sw.lat,@sw.lng],[@ne.lat,@ne.lng])
- assert_equal res,GeoKit::Bounds.new(@sw,@ne)
- res=GeoKit::Bounds.normalize([[@sw.lat,@sw.lng],[@ne.lat,@ne.lng]])
- assert_equal res,GeoKit::Bounds.new(@sw,@ne)
- end
-
- def test_point_inside_bounds
- assert @bounds.contains?(@loc_a)
- end
-
- def test_point_outside_bounds
- assert !@bounds.contains?(@loc_b)
- end
-
- def test_point_inside_bounds_cross_meridian
- assert @cross_meridian.contains?(@inside_cm)
- assert @cross_meridian.contains?(@inside_cm_2)
- end
-
- def test_point_outside_bounds_cross_meridian
- assert !@cross_meridian.contains?(@east_of_cm)
- assert !@cross_meridian.contains?(@west_of_cm)
- end
-
- def test_center
- assert_in_delta 32.939828,@bounds.center.lat,0.00005
- assert_in_delta -96.9511763,@bounds.center.lng,0.00005
- end
-
- def test_center_cross_meridian
- assert_in_delta 35.41160, @cross_meridian.center.lat,0.00005
- assert_in_delta 179.38112, @cross_meridian.center.lng,0.00005
- end
-
- def test_creation_from_circle
- bounds=GeoKit::Bounds.from_point_and_radius([32.939829, -96.951176],2.5)
- inside=GeoKit::LatLng.new 32.9695270000,-96.9901590000
- outside=GeoKit::LatLng.new 32.8951550000,-96.9584440000
- assert bounds.contains?(inside)
- assert !bounds.contains?(outside)
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/ca_geocoder_test.rb b/vendor/plugins/geokit/test/ca_geocoder_test.rb
deleted file mode 100644
index 9d797ce..0000000
--- a/vendor/plugins/geokit/test/ca_geocoder_test.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-GeoKit::Geocoders::geocoder_ca = "SOMEKEYVALUE"
-
-class CaGeocoderTest < BaseGeocoderTest #:nodoc: all
-
- CA_SUCCESS=<<-EOF
-
- 49.243086-123.153684
- EOF
-
- def setup
- @ca_full_hash = {:street_address=>"2105 West 32nd Avenue",:city=>"Vancouver", :state=>"BC"}
- @ca_full_loc = GeoKit::GeoLoc.new(@ca_full_hash)
- end
-
- def test_geocoder_with_geo_loc_with_account
- response = MockSuccess.new
- response.expects(:body).returns(CA_SUCCESS)
- url = "http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml"
- GeoKit::Geocoders::CaGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- verify(GeoKit::Geocoders::CaGeocoder.geocode(@ca_full_loc))
- end
-
- def test_service_unavailable
- response = MockFailure.new
- #Net::HTTP.expects(:get_response).with(URI.parse("http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml")).returns(response)
- url = "http://geocoder.ca/?stno=2105&addresst=West+32nd+Avenue&city=Vancouver&prov=BC&auth=SOMEKEYVALUE&geoit=xml"
- GeoKit::Geocoders::CaGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert !GeoKit::Geocoders::CaGeocoder.geocode(@ca_full_loc).success
- end
-
- private
-
- def verify(location)
- assert_equal "BC", location.state
- assert_equal "Vancouver", location.city
- assert_equal "49.243086,-123.153684", location.ll
- assert !location.is_us?
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/database.yml b/vendor/plugins/geokit/test/database.yml
deleted file mode 100644
index 126a872..0000000
--- a/vendor/plugins/geokit/test/database.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-mysql:
- adapter: mysql
- host: localhost
- username: root
- password:
- database: geokit_plugin_test
-postgresql:
- adapter: postgresql
- host: localhost
- username: root
- password:
- database: geokit_plugin_test
-sqlite:
- adapter: sqlite3
- database: tmp/geokit_plugin_test.sqlite3
diff --git a/vendor/plugins/geokit/test/fixtures/companies.yml b/vendor/plugins/geokit/test/fixtures/companies.yml
deleted file mode 100644
index d48a2e8..0000000
--- a/vendor/plugins/geokit/test/fixtures/companies.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-starbucks:
- id: 1
- name: Starbucks
-
-barnes_and_noble:
- id: 2
- name: Barnes & Noble
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/fixtures/custom_locations.yml b/vendor/plugins/geokit/test/fixtures/custom_locations.yml
deleted file mode 100644
index f5a1e92..0000000
--- a/vendor/plugins/geokit/test/fixtures/custom_locations.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-a:
- id: 1
- company_id: 1
- street: 7979 N MacArthur Blvd
- city: Irving
- state: TX
- postal_code: 75063
- latitude: 32.918593
- longitude: -96.958444
-b:
- id: 2
- company_id: 1
- street: 7750 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75063
- latitude: 32.914144
- longitude: -96.958444
-c:
- id: 3
- company_id: 1
- street: 5904 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75039
- latitude: 32.895155
- longitude: -96.958444
-d:
- id: 4
- company_id: 1
- street: 817 S Macarthur Blvd # 145
- city: Coppell
- state: TX
- postal_code: 75019
- latitude: 32.951613
- longitude: -96.958444
-e:
- id: 5
- company_id: 1
- street: 106 N Denton Tap Rd # 350
- city: Coppell
- state: TX
- postal_code: 75019
- latitude: 32.969527
- longitude: -96.990159
-f:
- id: 6
- company_id: 2
- street: 5904 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75039
- latitude: 32.895155
- longitude: -96.958444
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/fixtures/locations.yml b/vendor/plugins/geokit/test/fixtures/locations.yml
deleted file mode 100644
index 779faba..0000000
--- a/vendor/plugins/geokit/test/fixtures/locations.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-a:
- id: 1
- company_id: 1
- street: 7979 N MacArthur Blvd
- city: Irving
- state: TX
- postal_code: 75063
- lat: 32.918593
- lng: -96.958444
-b:
- id: 2
- company_id: 1
- street: 7750 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75063
- lat: 32.914144
- lng: -96.958444
-c:
- id: 3
- company_id: 1
- street: 5904 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75039
- lat: 32.895155
- lng: -96.958444
-d:
- id: 4
- company_id: 1
- street: 817 S Macarthur Blvd # 145
- city: Coppell
- state: TX
- postal_code: 75019
- lat: 32.951613
- lng: -96.958444
-e:
- id: 5
- company_id: 1
- street: 106 N Denton Tap Rd # 350
- city: Coppell
- state: TX
- postal_code: 75019
- lat: 32.969527
- lng: -96.990159
-f:
- id: 6
- company_id: 2
- street: 5904 N Macarthur Blvd # 160
- city: Irving
- state: TX
- postal_code: 75039
- lat: 32.895155
- lng: -96.958444
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/fixtures/stores.yml b/vendor/plugins/geokit/test/fixtures/stores.yml
deleted file mode 100644
index e69de29..0000000
--- a/vendor/plugins/geokit/test/fixtures/stores.yml
+++ /dev/null
diff --git a/vendor/plugins/geokit/test/geoloc_test.rb b/vendor/plugins/geokit/test/geoloc_test.rb
deleted file mode 100644
index 5cf6411..0000000
--- a/vendor/plugins/geokit/test/geoloc_test.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'test/unit'
-require File.join(File.dirname(__FILE__), '../../../../config/environment')
-
-class GeoLocTest < Test::Unit::TestCase #:nodoc: all
-
- def setup
- @loc = GeoKit::GeoLoc.new
- end
-
- def test_is_us
- assert !@loc.is_us?
- @loc.country_code = 'US'
- assert @loc.is_us?
- end
-
- def test_street_number
- @loc.street_address = '123 Spear St.'
- assert_equal '123', @loc.street_number
- end
-
- def test_street_name
- @loc.street_address = '123 Spear St.'
- assert_equal 'Spear St.', @loc.street_name
- end
-
- def test_city
- @loc.city = "san francisco"
- assert_equal 'San Francisco', @loc.city
- end
-
- def test_full_address
- @loc.city = 'San Francisco'
- @loc.state = 'CA'
- @loc.zip = '94105'
- @loc.country_code = 'US'
- assert_equal 'San Francisco, CA, 94105, US', @loc.full_address
- @loc.full_address = 'Irving, TX, 75063, US'
- assert_equal 'Irving, TX, 75063, US', @loc.full_address
- end
-
- def test_hash
- @loc.city = 'San Francisco'
- @loc.state = 'CA'
- @loc.zip = '94105'
- @loc.country_code = 'US'
- @another = GeoKit::GeoLoc.new @loc.to_hash
- assert_equal @loc, @another
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/google_geocoder_test.rb b/vendor/plugins/geokit/test/google_geocoder_test.rb
deleted file mode 100644
index dfa8a0c..0000000
--- a/vendor/plugins/geokit/test/google_geocoder_test.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-GeoKit::Geocoders::google = 'Google'
-
-class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
-
- GOOGLE_FULL=<<-EOF.strip
- 100 spear st, san francisco, ca200
geocode100 Spear St, San Francisco, CA 94105, USAUSCASan FranciscoSan Francisco100 Spear St94105-122.393985,37.792501,0
- EOF
-
- GOOGLE_CITY=<<-EOF.strip
- San Francisco200
geocodeSan Francisco, CA, USAUSCASan Francisco-122.418333,37.775000,0
- EOF
-
- def setup
- super
- @google_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105", :country_code=>"US"}
- @google_city_hash = {:city=>"San Francisco", :state=>"CA"}
-
- @google_full_loc = GeoKit::GeoLoc.new(@google_full_hash)
- @google_city_loc = GeoKit::GeoLoc.new(@google_city_hash)
- end
-
- def test_google_full_address
- response = MockSuccess.new
- response.expects(:body).returns(GOOGLE_FULL)
- url = "http://maps.google.com/maps/geo?q=#{CGI.escape(@address)}&output=xml&key=Google&oe=utf-8"
- GeoKit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- res=GeoKit::Geocoders::GoogleGeocoder.geocode(@address)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.792501,-122.393985", res.ll # slightly dif from yahoo
- assert res.is_us?
- assert_equal "100 Spear St, San Francisco, CA 94105, USA", res.full_address #slightly different from yahoo
- assert_equal "google", res.provider
- end
-
- def test_google_full_address_with_geo_loc
- response = MockSuccess.new
- response.expects(:body).returns(GOOGLE_FULL)
- url = "http://maps.google.com/maps/geo?q=#{CGI.escape(@full_address_short_zip)}&output=xml&key=Google&oe=utf-8"
- GeoKit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- res=GeoKit::Geocoders::GoogleGeocoder.geocode(@google_full_loc)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.792501,-122.393985", res.ll # slightly dif from yahoo
- assert res.is_us?
- assert_equal "100 Spear St, San Francisco, CA 94105, USA", res.full_address #slightly different from yahoo
- assert_equal "google", res.provider
- end
-
- def test_google_city
- response = MockSuccess.new
- response.expects(:body).returns(GOOGLE_CITY)
- url = "http://maps.google.com/maps/geo?q=#{CGI.escape(@address)}&output=xml&key=Google&oe=utf-8"
- GeoKit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- res=GeoKit::Geocoders::GoogleGeocoder.geocode(@address)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.775,-122.418333", res.ll
- assert res.is_us?
- assert_equal "San Francisco, CA, USA", res.full_address
- assert_nil res.street_address
- assert_equal "google", res.provider
- end
-
- def test_google_city_with_geo_loc
- response = MockSuccess.new
- response.expects(:body).returns(GOOGLE_CITY)
- url = "http://maps.google.com/maps/geo?q=#{CGI.escape(@address)}&output=xml&key=Google&oe=utf-8"
- GeoKit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- res=GeoKit::Geocoders::GoogleGeocoder.geocode(@google_city_loc)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.775,-122.418333", res.ll
- assert res.is_us?
- assert_equal "San Francisco, CA, USA", res.full_address
- assert_nil res.street_address
- assert_equal "google", res.provider
- end
-
- def test_service_unavailable
- response = MockFailure.new
- url = "http://maps.google.com/maps/geo?q=#{CGI.escape(@address)}&output=xml&key=Google&oe=utf-8"
- GeoKit::Geocoders::GoogleGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert !GeoKit::Geocoders::GoogleGeocoder.geocode(@google_city_loc).success
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/ip_geocode_lookup_test.rb b/vendor/plugins/geokit/test/ip_geocode_lookup_test.rb
deleted file mode 100644
index 31f3582..0000000
--- a/vendor/plugins/geokit/test/ip_geocode_lookup_test.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.join(File.dirname(__FILE__), '../../../../config/environment')
-require 'action_controller/test_process'
-require 'test/unit'
-require 'rubygems'
-require 'mocha'
-
-
-class LocationAwareController < ActionController::Base #:nodoc: all
- geocode_ip_address
-
- def index
- render :nothing => true
- end
-end
-
-class ActionController::TestRequest #:nodoc: all
- attr_accessor :remote_ip
-end
-
-# Re-raise errors caught by the controller.
-class LocationAwareController #:nodoc: all
- def rescue_action(e) raise e end;
-end
-
-class IpGeocodeLookupTest < Test::Unit::TestCase #:nodoc: all
-
- def setup
- @success = GeoKit::GeoLoc.new
- @success.provider = "hostip"
- @success.lat = 41.7696
- @success.lng = -88.4588
- @success.city = "Sugar Grove"
- @success.state = "IL"
- @success.country_code = "US"
- @success.success = true
-
- @failure = GeoKit::GeoLoc.new
- @failure.provider = "hostip"
- @failure.city = "(Private Address)"
- @failure.success = false
-
- @controller = LocationAwareController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- end
-
- def test_no_location_in_cookie_or_session
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with("good ip").returns(@success)
- @request.remote_ip = "good ip"
- get :index
- verify
- end
-
- def test_location_in_cookie
- @request.remote_ip = "good ip"
- @request.cookies['geo_location'] = CGI::Cookie.new('geo_location', @success.to_yaml)
- get :index
- verify
- end
-
- def test_location_in_session
- @request.remote_ip = "good ip"
- @request.session[:geo_location] = @success
- @request.cookies['geo_location'] = CGI::Cookie.new('geo_location', @success.to_yaml)
- get :index
- verify
- end
-
- def test_ip_not_located
- GeoKit::Geocoders::IpGeocoder.expects(:geocode).with("bad ip").returns(@failure)
- @request.remote_ip = "bad ip"
- get :index
- assert_nil @request.session[:geo_location]
- end
-
- private
-
- def verify
- assert_response :success
- assert_equal @success, @request.session[:geo_location]
- assert_not_nil cookies['geo_location']
- assert_equal @success, YAML.load(cookies['geo_location'].join)
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/ipgeocoder_test.rb b/vendor/plugins/geokit/test/ipgeocoder_test.rb
deleted file mode 100644
index 4d2b6a0..0000000
--- a/vendor/plugins/geokit/test/ipgeocoder_test.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
-
- IP_FAILURE=<<-EOF
- Country: (Private Address) (XX)
- City: (Private Address)
- Latitude:
- Longitude:
- EOF
-
- IP_SUCCESS=<<-EOF
- Country: UNITED STATES (US)
- City: Sugar Grove, IL
- Latitude: 41.7696
- Longitude: -88.4588
- EOF
-
- IP_UNICODED=<<-EOF
- Country: SWEDEN (SE)
- City: Borås
- Latitude: 57.7167
- Longitude: 12.9167
- EOF
-
- def setup
- super
- @success.provider = "hostip"
- end
-
- def test_successful_lookup
- success = MockSuccess.new
- success.expects(:body).returns(IP_SUCCESS)
- url = 'http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true'
- GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(success)
- location = GeoKit::Geocoders::IpGeocoder.geocode('12.215.42.19')
- assert_not_nil location
- assert_equal 41.7696, location.lat
- assert_equal -88.4588, location.lng
- assert_equal "Sugar Grove", location.city
- assert_equal "IL", location.state
- assert_equal "US", location.country_code
- assert_equal "hostip", location.provider
- assert location.success
- end
-
- def test_unicoded_lookup
- success = MockSuccess.new
- success.expects(:body).returns(IP_UNICODED)
- url = 'http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true'
- GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(success)
- location = GeoKit::Geocoders::IpGeocoder.geocode('12.215.42.19')
- assert_not_nil location
- assert_equal 57.7167, location.lat
- assert_equal 12.9167, location.lng
- assert_equal "Borås", location.city
- assert_nil location.state
- assert_equal "SE", location.country_code
- assert_equal "hostip", location.provider
- assert location.success
- end
-
- def test_failed_lookup
- failure = MockSuccess.new
- failure.expects(:body).returns(IP_FAILURE)
- url = 'http://api.hostip.info/get_html.php?ip=0.0.0.0&position=true'
- GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
- location = GeoKit::Geocoders::IpGeocoder.geocode("0.0.0.0")
- assert_not_nil location
- assert !location.success
- end
-
- def test_invalid_ip
- location = GeoKit::Geocoders::IpGeocoder.geocode("blah")
- assert_not_nil location
- assert !location.success
- end
-
- def test_service_unavailable
- failure = MockFailure.new
- url = 'http://api.hostip.info/get_html.php?ip=0.0.0.0&position=true'
- GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(failure)
- location = GeoKit::Geocoders::IpGeocoder.geocode("0.0.0.0")
- assert_not_nil location
- assert !location.success
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/latlng_test.rb b/vendor/plugins/geokit/test/latlng_test.rb
deleted file mode 100644
index 993d2be..0000000
--- a/vendor/plugins/geokit/test/latlng_test.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-$LOAD_PATH.unshift File.join('..', 'lib')
-require 'geo_kit/mappable'
-require 'test/unit'
-
-class LatLngTest < Test::Unit::TestCase #:nodoc: all
-
- def setup
- @loc_a = GeoKit::LatLng.new(32.918593,-96.958444)
- @loc_e = GeoKit::LatLng.new(32.969527,-96.990159)
- @point = GeoKit::LatLng.new(@loc_a.lat, @loc_a.lng)
- end
-
- def test_distance_between_same_using_defaults
- assert_equal 0, GeoKit::LatLng.distance_between(@loc_a, @loc_a)
- assert_equal 0, @loc_a.distance_to(@loc_a)
- end
-
- def test_distance_between_same_with_miles_and_flat
- assert_equal 0, GeoKit::LatLng.distance_between(@loc_a, @loc_a, :units => :miles, :formula => :flat)
- assert_equal 0, @loc_a.distance_to(@loc_a, :units => :miles, :formula => :flat)
- end
-
- def test_distance_between_same_with_kms_and_flat
- assert_equal 0, GeoKit::LatLng.distance_between(@loc_a, @loc_a, :units => :kms, :formula => :flat)
- assert_equal 0, @loc_a.distance_to(@loc_a, :units => :kms, :formula => :flat)
- end
-
- def test_distance_between_same_with_miles_and_sphere
- assert_equal 0, GeoKit::LatLng.distance_between(@loc_a, @loc_a, :units => :miles, :formula => :sphere)
- assert_equal 0, @loc_a.distance_to(@loc_a, :units => :miles, :formula => :sphere)
- end
-
- def test_distance_between_same_with_kms_and_sphere
- assert_equal 0, GeoKit::LatLng.distance_between(@loc_a, @loc_a, :units => :kms, :formula => :sphere)
- assert_equal 0, @loc_a.distance_to(@loc_a, :units => :kms, :formula => :sphere)
- end
-
- def test_distance_between_diff_using_defaults
- assert_in_delta 3.97, GeoKit::LatLng.distance_between(@loc_a, @loc_e), 0.01
- assert_in_delta 3.97, @loc_a.distance_to(@loc_e), 0.01
- end
-
- def test_distance_between_diff_with_miles_and_flat
- assert_in_delta 3.97, GeoKit::LatLng.distance_between(@loc_a, @loc_e, :units => :miles, :formula => :flat), 0.2
- assert_in_delta 3.97, @loc_a.distance_to(@loc_e, :units => :miles, :formula => :flat), 0.2
- end
-
- def test_distance_between_diff_with_kms_and_flat
- assert_in_delta 6.39, GeoKit::LatLng.distance_between(@loc_a, @loc_e, :units => :kms, :formula => :flat), 0.4
- assert_in_delta 6.39, @loc_a.distance_to(@loc_e, :units => :kms, :formula => :flat), 0.4
- end
-
- def test_distance_between_diff_with_miles_and_sphere
- assert_in_delta 3.97, GeoKit::LatLng.distance_between(@loc_a, @loc_e, :units => :miles, :formula => :sphere), 0.01
- assert_in_delta 3.97, @loc_a.distance_to(@loc_e, :units => :miles, :formula => :sphere), 0.01
- end
-
- def test_distance_between_diff_with_kms_and_sphere
- assert_in_delta 6.39, GeoKit::LatLng.distance_between(@loc_a, @loc_e, :units => :kms, :formula => :sphere), 0.01
- assert_in_delta 6.39, @loc_a.distance_to(@loc_e, :units => :kms, :formula => :sphere), 0.01
- end
-
- def test_manually_mixed_in
- assert_equal 0, GeoKit::LatLng.distance_between(@point, @point)
- assert_equal 0, @point.distance_to(@point)
- assert_equal 0, @point.distance_to(@loc_a)
- assert_in_delta 3.97, @point.distance_to(@loc_e, :units => :miles, :formula => :flat), 0.2
- assert_in_delta 6.39, @point.distance_to(@loc_e, :units => :kms, :formula => :flat), 0.4
- end
-
- def test_heading_between
- assert_in_delta 332, GeoKit::LatLng.heading_between(@loc_a,@loc_e), 0.5
- end
-
- def test_heading_to
- assert_in_delta 332, @loc_a.heading_to(@loc_e), 0.5
- end
-
- def test_class_endpoint
- endpoint=GeoKit::LatLng.endpoint(@loc_a, 332, 3.97)
- assert_in_delta @loc_e.lat, endpoint.lat, 0.0005
- assert_in_delta @loc_e.lng, endpoint.lng, 0.0005
- end
-
- def test_instance_endpoint
- endpoint=@loc_a.endpoint(332, 3.97)
- assert_in_delta @loc_e.lat, endpoint.lat, 0.0005
- assert_in_delta @loc_e.lng, endpoint.lng, 0.0005
- end
-
- def test_midpoint
- midpoint=@loc_a.midpoint_to(@loc_e)
- assert_in_delta 32.944061, midpoint.lat, 0.0005
- assert_in_delta -96.974296, midpoint.lng, 0.0005
- end
-
- def test_normalize
- lat=37.7690
- lng=-122.443
- res=GeoKit::LatLng.normalize(lat,lng)
- assert_equal res,GeoKit::LatLng.new(lat,lng)
- res=GeoKit::LatLng.normalize("#{lat}, #{lng}")
- assert_equal res,GeoKit::LatLng.new(lat,lng)
- res=GeoKit::LatLng.normalize("#{lat} #{lng}")
- assert_equal res,GeoKit::LatLng.new(lat,lng)
- res=GeoKit::LatLng.normalize("#{lat.to_i} #{lng.to_i}")
- assert_equal res,GeoKit::LatLng.new(lat.to_i,lng.to_i)
- res=GeoKit::LatLng.normalize([lat,lng])
- assert_equal res,GeoKit::LatLng.new(lat,lng)
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/multi_geocoder_test.rb b/vendor/plugins/geokit/test/multi_geocoder_test.rb
deleted file mode 100644
index 57f326c..0000000
--- a/vendor/plugins/geokit/test/multi_geocoder_test.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-GeoKit::Geocoders::provider_order=[:google,:yahoo,:us]
-
-class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
-
- def setup
- super
- @failure = GeoKit::GeoLoc.new
- end
-
- def test_successful_first
- GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@success)
- assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
- end
-
- def test_failover
- GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
- GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@success)
- assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
- end
-
- def test_double_failover
- GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
- GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@failure)
- GeoKit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@success)
- assert_equal @success, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
- end
-
- def test_failure
- GeoKit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure)
- GeoKit::Geocoders::YahooGeocoder.expects(:geocode).with(@address).returns(@failure)
- GeoKit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@failure)
- assert_equal @failure, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
- end
-
- def test_invalid_provider
- temp = GeoKit::Geocoders::provider_order
- GeoKit::Geocoders.provider_order = [:bogus]
- assert_equal @failure, GeoKit::Geocoders::MultiGeocoder.geocode(@address)
- GeoKit::Geocoders.provider_order = temp
- end
-
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/schema.rb b/vendor/plugins/geokit/test/schema.rb
deleted file mode 100644
index ad69e08..0000000
--- a/vendor/plugins/geokit/test/schema.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-ActiveRecord::Schema.define(:version => 0) do
- create_table :companies, :force => true do |t|
- t.column :name, :string
- end
-
- create_table :locations, :force => true do |t|
- t.column :company_id, :integer, :default => 0, :null => false
- t.column :street, :string, :limit => 60
- t.column :city, :string, :limit => 60
- t.column :state, :string, :limit => 2
- t.column :postal_code, :string, :limit => 16
- t.column :lat, :decimal, :precision => 15, :scale => 10
- t.column :lng, :decimal, :precision => 15, :scale => 10
- end
-
- create_table :custom_locations, :force => true do |t|
- t.column :company_id, :integer, :default => 0, :null => false
- t.column :street, :string, :limit => 60
- t.column :city, :string, :limit => 60
- t.column :state, :string, :limit => 2
- t.column :postal_code, :string, :limit => 16
- t.column :latitude, :decimal, :precision => 15, :scale => 10
- t.column :longitude, :decimal, :precision => 15, :scale => 10
- end
-
- create_table :stores, :force=> true do |t|
- t.column :address, :string
- t.column :lat, :decimal, :precision => 15, :scale => 10
- t.column :lng, :decimal, :precision => 15, :scale => 10
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/sqlite_extension_test.rb b/vendor/plugins/geokit/test/sqlite_extension_test.rb
deleted file mode 100644
index 9b14a65..0000000
--- a/vendor/plugins/geokit/test/sqlite_extension_test.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/test_helper'
-
-if ActiveRecord::Base.connection.adapter_name =~ /^sqlite$/i
-
- # this test only makes sense when using sqlite
- class SQliteExtensionTest < Test::Unit::TestCase
-
- def test_pow_function
- assert_in_delta 8.0, ActiveRecord::Base.connection.execute('select pow(2.0, 3.0) as result').first['result'], 0.0001
- end
-
- def test_radians_function
- assert_in_delta Math::PI/2, ActiveRecord::Base.connection.execute('select radians(90) as rad').first['rad'], 0.0001
- end
-
- def test_sqrt_function
- assert_in_delta 1.4142, ActiveRecord::Base.connection.execute('select sqrt(2) as sqrt').first['sqrt'], 0.0001
- end
-
- def test_spheric_distance_function
- args = [32.918593, -96.958444, 32.951613, -96.958444].map{|l|l * Math::PI/180}
- assert_in_delta 2.28402, ActiveRecord::Base.connection.execute("select spheric_distance(#{args.inspect[1..-2]}, 3963.19) as dist").first['dist'], 0.0001
- end
-
- end
-
-end
diff --git a/vendor/plugins/geokit/test/test_helper.rb b/vendor/plugins/geokit/test/test_helper.rb
deleted file mode 100644
index 4f1d742..0000000
--- a/vendor/plugins/geokit/test/test_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'test/unit'
-
-plugin_test_dir = File.dirname(__FILE__)
-
-# Load the Rails environment
-require File.join(plugin_test_dir, '../../../../config/environment')
-require 'active_record/fixtures'
-databases = YAML::load(IO.read(plugin_test_dir + '/database.yml'))
-ActiveRecord::Base.logger = Logger.new(plugin_test_dir + "/debug.log")
-
-# A specific database can be used by setting the DB environment variable
-ActiveRecord::Base.establish_connection(databases[ENV['DB'] || 'mysql'])
-
-# Load the test schema into the database
-load(File.join(plugin_test_dir, 'schema.rb'))
-
-# Load fixtures from the plugin
-Test::Unit::TestCase.fixture_path = File.join(plugin_test_dir, 'fixtures/')
-
-require File.join(plugin_test_dir, '..', 'lib', 'geo_kit', 'sqlite_extension')
diff --git a/vendor/plugins/geokit/test/us_geocoder_test.rb b/vendor/plugins/geokit/test/us_geocoder_test.rb
deleted file mode 100644
index 4457803..0000000
--- a/vendor/plugins/geokit/test/us_geocoder_test.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-GeoKit::Geocoders::geocoder_us = nil
-
-class UsGeocoderTest < BaseGeocoderTest #:nodoc: all
-
- GEOCODER_US_FULL='37.792528,-122.393981,100 Spear St,San Francisco,CA,94105'
-
- def setup
- super
- @us_full_hash = {:city=>"San Francisco", :state=>"CA"}
- @us_full_loc = GeoKit::GeoLoc.new(@us_full_hash)
- end
-
- def test_geocoder_us
- response = MockSuccess.new
- response.expects(:body).returns(GEOCODER_US_FULL)
- url = "http://geocoder.us/service/csv/geocode?address=#{CGI.escape(@address)}"
- GeoKit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- verify(GeoKit::Geocoders::UsGeocoder.geocode(@address))
- end
-
- def test_geocoder_with_geo_loc
- response = MockSuccess.new
- response.expects(:body).returns(GEOCODER_US_FULL)
- url = "http://geocoder.us/service/csv/geocode?address=#{CGI.escape(@address)}"
- GeoKit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- verify(GeoKit::Geocoders::UsGeocoder.geocode(@us_full_loc))
- end
-
- def test_service_unavailable
- response = MockFailure.new
- url = "http://geocoder.us/service/csv/geocode?address=#{CGI.escape(@address)}"
- GeoKit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert !GeoKit::Geocoders::UsGeocoder.geocode(@us_full_loc).success
- end
-
- private
-
- def verify(location)
- assert_equal "CA", location.state
- assert_equal "San Francisco", location.city
- assert_equal "37.792528,-122.393981", location.ll
- assert location.is_us?
- assert_equal "100 Spear St, San Francisco, CA, 94105, US", location.full_address #slightly different from yahoo
- end
-end
\ No newline at end of file
diff --git a/vendor/plugins/geokit/test/yahoo_geocoder_test.rb b/vendor/plugins/geokit/test/yahoo_geocoder_test.rb
deleted file mode 100644
index abf9a4e..0000000
--- a/vendor/plugins/geokit/test/yahoo_geocoder_test.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require File.join(File.dirname(__FILE__), 'base_geocoder_test')
-
-GeoKit::Geocoders::yahoo = 'Yahoo'
-
-class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
- YAHOO_FULL=<<-EOF.strip
-
- 37.792406-122.39411100 SPEAR STSAN FRANCISCOCA94105-1522US
-
- EOF
-
- YAHOO_CITY=<<-EOF.strip
-
- 37.7742-122.417068SAN FRANCISCOCAUS
-
- EOF
-
- def setup
- super
- @yahoo_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105-1522", :country_code=>"US"}
- @yahoo_city_hash = {:city=>"San Francisco", :state=>"CA"}
- @yahoo_full_loc = GeoKit::GeoLoc.new(@yahoo_full_hash)
- @yahoo_city_loc = GeoKit::GeoLoc.new(@yahoo_city_hash)
- end
-
- # the testing methods themselves
- def test_yahoo_full_address
- response = MockSuccess.new
- response.expects(:body).returns(YAHOO_FULL)
- url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{CGI.escape(@address)}"
- GeoKit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- do_full_address_assertions(GeoKit::Geocoders::YahooGeocoder.geocode(@address))
- end
-
- def test_yahoo_full_address_with_geo_loc
- response = MockSuccess.new
- response.expects(:body).returns(YAHOO_FULL)
- url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{CGI.escape(@full_address)}"
- GeoKit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- do_full_address_assertions(GeoKit::Geocoders::YahooGeocoder.geocode(@yahoo_full_loc))
- end
-
- def test_yahoo_city
- response = MockSuccess.new
- response.expects(:body).returns(YAHOO_CITY)
- url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{CGI.escape(@address)}"
- GeoKit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- do_city_assertions(GeoKit::Geocoders::YahooGeocoder.geocode(@address))
- end
-
- def test_yahoo_city_with_geo_loc
- response = MockSuccess.new
- response.expects(:body).returns(YAHOO_CITY)
- url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{CGI.escape(@address)}"
- GeoKit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- do_city_assertions(GeoKit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc))
- end
-
- def test_service_unavailable
- response = MockFailure.new
- url = "http://api.local.yahoo.com/MapsService/V1/geocode?appid=Yahoo&location=#{CGI.escape(@address)}"
- GeoKit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
- assert !GeoKit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc).success
- end
-
- private
-
- # next two methods do the assertions for both address-level and city-level lookups
- def do_full_address_assertions(res)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.792406,-122.39411", res.ll
- assert res.is_us?
- assert_equal "100 Spear St, San Francisco, CA, 94105-1522, US", res.full_address
- assert_equal "yahoo", res.provider
- end
-
- def do_city_assertions(res)
- assert_equal "CA", res.state
- assert_equal "San Francisco", res.city
- assert_equal "37.7742,-122.417068", res.ll
- assert res.is_us?
- assert_equal "San Francisco, CA, US", res.full_address
- assert_nil res.street_address
- assert_equal "yahoo", res.provider
- end
-end
\ No newline at end of file
--
libgit2 0.21.2