geokit-rails 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of geokit-rails might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +46 -0
- data/MIT-LICENSE +20 -0
- data/Manifest.txt +44 -0
- data/README.markdown +561 -0
- data/Rakefile +54 -0
- data/about.yml +9 -0
- data/assets/api_keys_template +61 -0
- data/geokit-rails.gemspec +39 -0
- data/init.rb +1 -0
- data/install.rb +14 -0
- data/lib/geokit-rails.rb +26 -0
- data/lib/geokit-rails/acts_as_mappable.rb +456 -0
- data/lib/geokit-rails/adapters/abstract.rb +31 -0
- data/lib/geokit-rails/adapters/mysql.rb +22 -0
- data/lib/geokit-rails/adapters/postgresql.rb +22 -0
- data/lib/geokit-rails/adapters/sqlserver.rb +43 -0
- data/lib/geokit-rails/defaults.rb +22 -0
- data/lib/geokit-rails/geocoder_control.rb +16 -0
- data/lib/geokit-rails/ip_geocode_lookup.rb +46 -0
- data/test/acts_as_mappable_test.rb +474 -0
- data/test/boot.rb +25 -0
- data/test/database.yml +20 -0
- data/test/fixtures/companies.yml +7 -0
- data/test/fixtures/custom_locations.yml +54 -0
- data/test/fixtures/locations.yml +54 -0
- data/test/fixtures/mock_addresses.yml +17 -0
- data/test/fixtures/mock_families.yml +2 -0
- data/test/fixtures/mock_houses.yml +9 -0
- data/test/fixtures/mock_organizations.yml +5 -0
- data/test/fixtures/mock_people.yml +5 -0
- data/test/fixtures/stores.yml +0 -0
- data/test/ip_geocode_lookup_test.rb +77 -0
- data/test/models/company.rb +3 -0
- data/test/models/custom_location.rb +12 -0
- data/test/models/location.rb +4 -0
- data/test/models/mock_address.rb +4 -0
- data/test/models/mock_family.rb +3 -0
- data/test/models/mock_house.rb +3 -0
- data/test/models/mock_organization.rb +4 -0
- data/test/models/mock_person.rb +4 -0
- data/test/models/store.rb +3 -0
- data/test/schema.rb +60 -0
- data/test/tasks.rake +31 -0
- data/test/test_helper.rb +23 -0
- metadata +161 -0
data/test/boot.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/test_case'
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'test/unit/testcase'
|
6
|
+
require 'active_support/testing/setup_and_teardown'
|
7
|
+
|
8
|
+
require 'active_record'
|
9
|
+
require 'active_record/fixtures'
|
10
|
+
|
11
|
+
require 'action_controller'
|
12
|
+
require 'action_controller/test_process'
|
13
|
+
|
14
|
+
PLUGIN_ROOT = File.join(File.dirname(__FILE__), '..')
|
15
|
+
ADAPTER = ENV['DB'] || 'mysql'
|
16
|
+
|
17
|
+
$LOAD_PATH << File.join(PLUGIN_ROOT, 'lib') << File.join(PLUGIN_ROOT, 'test', 'models')
|
18
|
+
|
19
|
+
FIXTURES_PATH = File.join(PLUGIN_ROOT, 'test', 'fixtures')
|
20
|
+
ActiveRecord::Base.configurations = config = YAML::load(IO.read(File.join(PLUGIN_ROOT, 'test', 'database.yml')))
|
21
|
+
ActiveRecord::Base.logger = Logger.new(File.join(PLUGIN_ROOT, 'test', "#{ADAPTER}-debug.log"))
|
22
|
+
ActiveRecord::Base.establish_connection(config[ADAPTER])
|
23
|
+
|
24
|
+
ActiveRecord::Migration.verbose = false
|
25
|
+
load File.join(PLUGIN_ROOT, 'test', 'schema.rb')
|
data/test/database.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
baes: &base
|
2
|
+
host: localhost
|
3
|
+
username: root
|
4
|
+
password:
|
5
|
+
|
6
|
+
mysql:
|
7
|
+
adapter: mysql
|
8
|
+
database: geokit_plugin_test
|
9
|
+
<<: *base
|
10
|
+
|
11
|
+
postgresql:
|
12
|
+
adapter: postgresql
|
13
|
+
database: geokit_plugin_test
|
14
|
+
<<: *base
|
15
|
+
|
16
|
+
sqlserver:
|
17
|
+
adapter: sqlserver
|
18
|
+
mode: ODBC
|
19
|
+
dsn: geokit_tests
|
20
|
+
username: ruby
|
@@ -0,0 +1,54 @@
|
|
1
|
+
a:
|
2
|
+
id: 1
|
3
|
+
company_id: 1
|
4
|
+
street: 7979 N MacArthur Blvd
|
5
|
+
city: Irving
|
6
|
+
state: TX
|
7
|
+
postal_code: 75063
|
8
|
+
latitude: 32.918593
|
9
|
+
longitude: -96.958444
|
10
|
+
b:
|
11
|
+
id: 2
|
12
|
+
company_id: 1
|
13
|
+
street: 7750 N Macarthur Blvd # 160
|
14
|
+
city: Irving
|
15
|
+
state: TX
|
16
|
+
postal_code: 75063
|
17
|
+
latitude: 32.914144
|
18
|
+
longitude: -96.958444
|
19
|
+
c:
|
20
|
+
id: 3
|
21
|
+
company_id: 1
|
22
|
+
street: 5904 N Macarthur Blvd # 160
|
23
|
+
city: Irving
|
24
|
+
state: TX
|
25
|
+
postal_code: 75039
|
26
|
+
latitude: 32.895155
|
27
|
+
longitude: -96.958444
|
28
|
+
d:
|
29
|
+
id: 4
|
30
|
+
company_id: 1
|
31
|
+
street: 817 S Macarthur Blvd # 145
|
32
|
+
city: Coppell
|
33
|
+
state: TX
|
34
|
+
postal_code: 75019
|
35
|
+
latitude: 32.951613
|
36
|
+
longitude: -96.958444
|
37
|
+
e:
|
38
|
+
id: 5
|
39
|
+
company_id: 1
|
40
|
+
street: 106 N Denton Tap Rd # 350
|
41
|
+
city: Coppell
|
42
|
+
state: TX
|
43
|
+
postal_code: 75019
|
44
|
+
latitude: 32.969527
|
45
|
+
longitude: -96.990159
|
46
|
+
f:
|
47
|
+
id: 6
|
48
|
+
company_id: 2
|
49
|
+
street: 5904 N Macarthur Blvd # 160
|
50
|
+
city: Irving
|
51
|
+
state: TX
|
52
|
+
postal_code: 75039
|
53
|
+
latitude: 32.895155
|
54
|
+
longitude: -96.958444
|
@@ -0,0 +1,54 @@
|
|
1
|
+
a:
|
2
|
+
id: 1
|
3
|
+
company_id: 1
|
4
|
+
street: 7979 N MacArthur Blvd
|
5
|
+
city: Irving
|
6
|
+
state: TX
|
7
|
+
postal_code: 75063
|
8
|
+
lat: 32.918593
|
9
|
+
lng: -96.958444
|
10
|
+
b:
|
11
|
+
id: 2
|
12
|
+
company_id: 1
|
13
|
+
street: 7750 N Macarthur Blvd # 160
|
14
|
+
city: Irving
|
15
|
+
state: TX
|
16
|
+
postal_code: 75063
|
17
|
+
lat: 32.914144
|
18
|
+
lng: -96.958444
|
19
|
+
c:
|
20
|
+
id: 3
|
21
|
+
company_id: 1
|
22
|
+
street: 5904 N Macarthur Blvd # 160
|
23
|
+
city: Irving
|
24
|
+
state: TX
|
25
|
+
postal_code: 75039
|
26
|
+
lat: 32.895155
|
27
|
+
lng: -96.958444
|
28
|
+
d:
|
29
|
+
id: 4
|
30
|
+
company_id: 1
|
31
|
+
street: 817 S Macarthur Blvd # 145
|
32
|
+
city: Coppell
|
33
|
+
state: TX
|
34
|
+
postal_code: 75019
|
35
|
+
lat: 32.951613
|
36
|
+
lng: -96.958444
|
37
|
+
e:
|
38
|
+
id: 5
|
39
|
+
company_id: 1
|
40
|
+
street: 106 N Denton Tap Rd # 350
|
41
|
+
city: Coppell
|
42
|
+
state: TX
|
43
|
+
postal_code: 75019
|
44
|
+
lat: 32.969527
|
45
|
+
lng: -96.990159
|
46
|
+
f:
|
47
|
+
id: 6
|
48
|
+
company_id: 2
|
49
|
+
street: 5904 N Macarthur Blvd # 160
|
50
|
+
city: Irving
|
51
|
+
state: TX
|
52
|
+
postal_code: 75039
|
53
|
+
lat: 32.895155
|
54
|
+
lng: -96.958444
|
@@ -0,0 +1,17 @@
|
|
1
|
+
address_starbucks:
|
2
|
+
addressable: starbucks (MockOrganization)
|
3
|
+
street: 106 N Denton Tap Rd # 350
|
4
|
+
city: Coppell
|
5
|
+
state: TX
|
6
|
+
postal_code: 75019
|
7
|
+
lat: 32.969527
|
8
|
+
lng: -96.990159
|
9
|
+
|
10
|
+
address_barnes_and_noble:
|
11
|
+
addressable: barnes_and_noble (MockOrganization)
|
12
|
+
street: 5904 N Macarthur Blvd # 160
|
13
|
+
city: Irving
|
14
|
+
state: TX
|
15
|
+
postal_code: 75039
|
16
|
+
lat: 32.895155
|
17
|
+
lng: -96.958444
|
File without changes
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
ActionController::Routing::Routes.draw do |map|
|
4
|
+
map.connect ':controller/:action/:id'
|
5
|
+
end
|
6
|
+
|
7
|
+
class LocationAwareController < ActionController::Base #:nodoc: all
|
8
|
+
geocode_ip_address
|
9
|
+
|
10
|
+
def index
|
11
|
+
render :nothing => true
|
12
|
+
end
|
13
|
+
|
14
|
+
def rescue_action(e) raise e end;
|
15
|
+
end
|
16
|
+
|
17
|
+
class ActionController::TestRequest #:nodoc: all
|
18
|
+
attr_accessor :remote_ip
|
19
|
+
end
|
20
|
+
|
21
|
+
class IpGeocodeLookupTest < ActionController::TestCase
|
22
|
+
tests LocationAwareController
|
23
|
+
|
24
|
+
def setup
|
25
|
+
@success = GeoKit::GeoLoc.new
|
26
|
+
@success.provider = "hostip"
|
27
|
+
@success.lat = 41.7696
|
28
|
+
@success.lng = -88.4588
|
29
|
+
@success.city = "Sugar Grove"
|
30
|
+
@success.state = "IL"
|
31
|
+
@success.country_code = "US"
|
32
|
+
@success.success = true
|
33
|
+
|
34
|
+
@failure = GeoKit::GeoLoc.new
|
35
|
+
@failure.provider = "hostip"
|
36
|
+
@failure.city = "(Private Address)"
|
37
|
+
@failure.success = false
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_no_location_in_cookie_or_session
|
41
|
+
Geokit::Geocoders::MultiGeocoder.expects(:geocode).with("good ip").returns(@success)
|
42
|
+
@request.remote_ip = "good ip"
|
43
|
+
get :index
|
44
|
+
verify
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_location_in_cookie
|
48
|
+
@request.remote_ip = "good ip"
|
49
|
+
@request.cookies['geo_location'] = @success.to_yaml
|
50
|
+
get :index
|
51
|
+
verify
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_location_in_session
|
55
|
+
@request.remote_ip = "good ip"
|
56
|
+
@request.session[:geo_location] = @success
|
57
|
+
@request.cookies['geo_location'] = CGI::Cookie.new('geo_location', @success.to_yaml)
|
58
|
+
get :index
|
59
|
+
verify
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_ip_not_located
|
63
|
+
Geokit::Geocoders::MultiGeocoder.expects(:geocode).with("bad ip").returns(@failure)
|
64
|
+
@request.remote_ip = "bad ip"
|
65
|
+
get :index
|
66
|
+
assert_nil @request.session[:geo_location]
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def verify
|
72
|
+
assert_response :success
|
73
|
+
assert_equal @success, @request.session[:geo_location]
|
74
|
+
assert_not_nil cookies['geo_location']
|
75
|
+
assert_equal @success, YAML.load(cookies['geo_location'])
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CustomLocation < ActiveRecord::Base
|
2
|
+
belongs_to :company
|
3
|
+
acts_as_mappable :distance_column_name => 'dist',
|
4
|
+
:default_units => :kms,
|
5
|
+
:default_formula => :flat,
|
6
|
+
:lat_column_name => 'latitude',
|
7
|
+
:lng_column_name => 'longitude'
|
8
|
+
|
9
|
+
def to_s
|
10
|
+
"lat: #{latitude} lng: #{longitude} dist: #{dist}"
|
11
|
+
end
|
12
|
+
end
|
data/test/schema.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 0) do
|
2
|
+
create_table :companies, :force => true do |t|
|
3
|
+
t.column :name, :string
|
4
|
+
end
|
5
|
+
|
6
|
+
create_table :locations, :force => true do |t|
|
7
|
+
t.column :company_id, :integer, :default => 0, :null => false
|
8
|
+
t.column :street, :string, :limit => 60
|
9
|
+
t.column :city, :string, :limit => 60
|
10
|
+
t.column :state, :string, :limit => 2
|
11
|
+
t.column :postal_code, :string, :limit => 16
|
12
|
+
t.column :lat, :decimal, :precision => 15, :scale => 10
|
13
|
+
t.column :lng, :decimal, :precision => 15, :scale => 10
|
14
|
+
end
|
15
|
+
|
16
|
+
create_table :custom_locations, :force => true do |t|
|
17
|
+
t.column :company_id, :integer, :default => 0, :null => false
|
18
|
+
t.column :street, :string, :limit => 60
|
19
|
+
t.column :city, :string, :limit => 60
|
20
|
+
t.column :state, :string, :limit => 2
|
21
|
+
t.column :postal_code, :string, :limit => 16
|
22
|
+
t.column :latitude, :decimal, :precision => 15, :scale => 10
|
23
|
+
t.column :longitude, :decimal, :precision => 15, :scale => 10
|
24
|
+
end
|
25
|
+
|
26
|
+
create_table :stores, :force=> true do |t|
|
27
|
+
t.column :address, :string
|
28
|
+
t.column :lat, :decimal, :precision => 15, :scale => 10
|
29
|
+
t.column :lng, :decimal, :precision => 15, :scale => 10
|
30
|
+
end
|
31
|
+
|
32
|
+
create_table :mock_organizations, :force => true do |t|
|
33
|
+
t.column :name, :string
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :mock_addresses, :force => true do |t|
|
37
|
+
t.column :addressable_id, :integer, :null => false
|
38
|
+
t.column :addressable_type, :string, :null => false
|
39
|
+
t.column :street, :string, :limit => 60
|
40
|
+
t.column :city, :string, :limit => 60
|
41
|
+
t.column :state, :string, :limit => 2
|
42
|
+
t.column :postal_code, :string, :limit => 16
|
43
|
+
t.column :lat, :decimal, :precision => 15, :scale => 10
|
44
|
+
t.column :lng, :decimal, :precision => 15, :scale => 10
|
45
|
+
end
|
46
|
+
|
47
|
+
create_table :mock_houses, :force=> true do |t|
|
48
|
+
t.column :address, :string
|
49
|
+
t.column :lat, :decimal, :precision => 15, :scale => 10
|
50
|
+
t.column :lng, :decimal, :precision => 15, :scale => 10
|
51
|
+
end
|
52
|
+
|
53
|
+
create_table :mock_families, :force => true do |t|
|
54
|
+
t.belongs_to :mock_house
|
55
|
+
end
|
56
|
+
|
57
|
+
create_table :mock_people, :force => true do |t|
|
58
|
+
t.belongs_to :mock_family
|
59
|
+
end
|
60
|
+
end
|
data/test/tasks.rake
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
desc 'Test the GeoKit plugin.'
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
5
|
+
t.pattern = 'test/**/*_test.rb'
|
6
|
+
t.verbose = true
|
7
|
+
t.libs << 'test'
|
8
|
+
end
|
9
|
+
|
10
|
+
class EnvTestTask < Rake::TestTask
|
11
|
+
attr_accessor :env
|
12
|
+
|
13
|
+
def ruby(*args)
|
14
|
+
env.each { |key, value| ENV[key] = value } if env
|
15
|
+
super
|
16
|
+
env.keys.each { |key| ENV.delete(key) } if env
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
%w(mysql postgresql sqlserver).each do |configuration|
|
22
|
+
EnvTestTask.new("test_#{configuration}") do |t|
|
23
|
+
t.pattern = 'test/**/*_test.rb'
|
24
|
+
t.verbose = true
|
25
|
+
t.env = { 'DB' => configuration }
|
26
|
+
t.libs << 'test'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Test available databases.'
|
31
|
+
task :test_databases => %w(test_mysql test_postgresql test_sqlserver)
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
require 'boot'
|
5
|
+
|
6
|
+
require 'geokit'
|
7
|
+
require 'geokit-rails'
|
8
|
+
|
9
|
+
|
10
|
+
class GeokitTestCase < ActiveSupport::TestCase
|
11
|
+
begin
|
12
|
+
include ActiveRecord::TestFixtures
|
13
|
+
rescue NameError
|
14
|
+
puts "You appear to be using a pre-2.3 version of Rails. No need to include ActiveRecord::TestFixtures."
|
15
|
+
end
|
16
|
+
|
17
|
+
self.fixture_path = File.join(File.dirname(__FILE__), 'fixtures')
|
18
|
+
self.use_transactional_fixtures = true
|
19
|
+
self.use_instantiated_fixtures = false
|
20
|
+
|
21
|
+
fixtures :all
|
22
|
+
|
23
|
+
end
|