gmaps4rails 0.11.1 → 1.0.0
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.
- data/README.rdoc +6 -2
- data/app/views/gmaps4rails/_gmaps4rails.html.erb +18 -20
- data/lib/gmaps4rails/base.rb +95 -0
- data/lib/gmaps4rails/extensions/hash.rb +3 -67
- data/lib/gmaps4rails/helper/gmaps4rails_helper.rb +13 -2
- data/public/javascripts/gmaps4rails/all_apis.js +5 -0
- data/public/javascripts/gmaps4rails/gmaps4rails.base.js +147 -112
- data/public/javascripts/gmaps4rails/gmaps4rails.bing.js +182 -171
- data/public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js +269 -235
- data/public/javascripts/gmaps4rails/gmaps4rails.mapquest.js +135 -125
- data/public/javascripts/gmaps4rails/gmaps4rails.openlayers.js +227 -218
- data/public/stylesheets/gmaps4rails.css +2 -2
- metadata +9 -111
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/users_controller.rb +0 -60
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/users_helper.rb +0 -3
- data/test/dummy/app/models/user.rb +0 -38
- data/test/dummy/config/application.rb +0 -41
- data/test/dummy/config/boot.rb +0 -6
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -26
- data/test/dummy/config/environments/production.rb +0 -49
- data/test/dummy/config/environments/test.rb +0 -35
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/routes.rb +0 -7
- data/test/dummy/db/migrate/20110306182914_create_users.rb +0 -21
- data/test/dummy/db/migrate/20110430081624_add_addresses_to_users.rb +0 -11
- data/test/dummy/db/migrate/20110430083824_remove_address_from_users.rb +0 -9
- data/test/dummy/db/schema.rb +0 -35
- data/test/dummy/db/seeds.rb +0 -7
- data/test/dummy/spec/base/base_spec.rb +0 -127
- data/test/dummy/spec/helpers/gmaps4rails_helper_spec.rb +0 -13
- data/test/dummy/spec/javascripts/support/jasmine_config.rb +0 -23
- data/test/dummy/spec/javascripts/support/jasmine_runner.rb +0 -20
- data/test/dummy/spec/models/user_spec.rb +0 -284
- data/test/dummy/spec/requests/users_spec.rb +0 -22
- data/test/dummy/spec/spec_helper.rb +0 -41
- data/test/dummy/spec/support/factories.rb +0 -20
- data/test/dummy/spec/support/matchers.rb +0 -7
- data/test/dummy31/app/controllers/application_controller.rb +0 -3
- data/test/dummy31/app/controllers/users_controller.rb +0 -83
- data/test/dummy31/app/helpers/application_helper.rb +0 -2
- data/test/dummy31/app/helpers/users_helper.rb +0 -2
- data/test/dummy31/app/models/user.rb +0 -7
- data/test/dummy31/config/application.rb +0 -43
- data/test/dummy31/config/boot.rb +0 -6
- data/test/dummy31/config/environment.rb +0 -5
- data/test/dummy31/config/environments/development.rb +0 -27
- data/test/dummy31/config/environments/production.rb +0 -51
- data/test/dummy31/config/environments/test.rb +0 -39
- data/test/dummy31/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy31/config/initializers/inflections.rb +0 -10
- data/test/dummy31/config/initializers/mime_types.rb +0 -5
- data/test/dummy31/config/initializers/secret_token.rb +0 -7
- data/test/dummy31/config/initializers/session_store.rb +0 -8
- data/test/dummy31/config/initializers/wrap_parameters.rb +0 -12
- data/test/dummy31/config/routes.rb +0 -61
- data/test/dummy31/db/migrate/20110809134019_create_users.rb +0 -13
- data/test/dummy31/db/schema.rb +0 -25
- data/test/dummy31/db/seeds.rb +0 -7
@@ -1,127 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Geocode" do
|
4
|
-
|
5
|
-
it "should geocode properly an address" do
|
6
|
-
Gmaps4rails.geocode("alaska").should be_an(Array)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should raise an error when address invalid" do
|
10
|
-
lambda { Gmaps4rails.geocode("home")}.should raise_error Gmaps4rails::GeocodeStatus
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should raise an error when net connection failed" #TODO: Damn, I don't know how to test that!
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "JS creation from hash" do
|
18
|
-
|
19
|
-
it "should format entries properly" do
|
20
|
-
options_hash = {
|
21
|
-
"map_options" => { "type" => "SATELLITE", "center_longitude" => 180, "zoom" => 3},
|
22
|
-
"markers" => { "data" => '[{ "description": "", "title": "", "longitude": "5.9311119", "latitude": "43.1251606", "picture": "", "width": "", "height": "" } ,{ "description": "", "title": "", "longitude": "2.3509871", "latitude": "48.8566667", "picture": "", "width": "", "height": "" } ]' },
|
23
|
-
"polylines" => { "data" => '[[
|
24
|
-
{"longitude": -122.214897, "latitude": 37.772323},
|
25
|
-
{"longitude": -157.821856, "latitude": 21.291982},
|
26
|
-
{"longitude": 178.431, "latitude": -18.142599},
|
27
|
-
{"longitude": 153.027892, "latitude": -27.46758}
|
28
|
-
],
|
29
|
-
[
|
30
|
-
{"longitude": -120.214897, "latitude": 30.772323, "strokeColor": "#000", "strokeWeight" : 2 },
|
31
|
-
{"longitude": -10.821856, "latitude": 50.291982}
|
32
|
-
]]' },
|
33
|
-
"polygons" => { "data" => '[[
|
34
|
-
{"longitude": -80.190262, "latitude": 25.774252},
|
35
|
-
{"longitude": -66.118292, "latitude": 18.466465},
|
36
|
-
{"longitude": -64.75737, "latitude": 32.321384}
|
37
|
-
]]' },
|
38
|
-
"circles" => { "data" => '[
|
39
|
-
{"longitude": -122.214897, "latitude": 37.772323, "radius": 1000000},
|
40
|
-
{"longitude": 122.214897, "latitude": 37.772323, "radius": 1000000, "strokeColor": "#FF0000"}
|
41
|
-
]',
|
42
|
-
},
|
43
|
-
"direction" => {
|
44
|
-
"data" => { "from" => "toulon, france", "to" => "paris, france"} ,
|
45
|
-
"options" => {"waypoints" => ["toulouse, france", "brest, france"], "travelMode" => "DRIVING", "display_panel" => true, "panel_id" => "instructions"}
|
46
|
-
}
|
47
|
-
}
|
48
|
-
options_hash.to_gmaps4rails.should == "Gmaps4Rails.polylines = [[\n{\"longitude\": -122.214897, \"latitude\": 37.772323},\n{\"longitude\": -157.821856, \"latitude\": 21.291982},\n{\"longitude\": 178.431, \"latitude\": -18.142599},\n{\"longitude\": 153.027892, \"latitude\": -27.46758}\n],\n[\n{\"longitude\": -120.214897, \"latitude\": 30.772323, \"strokeColor\": \"#000\", \"strokeWeight\" : 2 },\n{\"longitude\": -10.821856, \"latitude\": 50.291982}\n]];\nGmaps4Rails.create_polylines();\nGmaps4Rails.circles = [\n{\"longitude\": -122.214897, \"latitude\": 37.772323, \"radius\": 1000000},\n{\"longitude\": 122.214897, \"latitude\": 37.772323, \"radius\": 1000000, \"strokeColor\": \"#FF0000\"}\n];\nGmaps4Rails.create_circles();\nGmaps4Rails.polygons = [[\n{\"longitude\": -80.190262, \"latitude\": 25.774252},\n{\"longitude\": -66.118292, \"latitude\": 18.466465},\n{\"longitude\": -64.75737, \"latitude\": 32.321384}\n]];\nGmaps4Rails.create_polygons();\nGmaps4Rails.markers = [{ \"description\": \"\", \"title\": \"\", \"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ,{ \"description\": \"\", \"title\": \"\", \"longitude\": \"2.3509871\", \"latitude\": \"48.8566667\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ];\nGmaps4Rails.create_markers();\nGmaps4Rails.direction_conf.origin = 'toulon, france';\nGmaps4Rails.direction_conf.destination = 'paris, france';\nGmaps4Rails.direction_conf.display_panel = true;\nGmaps4Rails.direction_conf.panel_id = 'instructions';\nGmaps4Rails.direction_conf.travelMode = 'DRIVING';\nGmaps4Rails.direction_conf.waypoints = [{\"stopover\":true,\"location\":\"toulouse, france\"},{\"stopover\":true,\"location\":\"brest, france\"}];\nGmaps4Rails.create_direction();\nGmaps4Rails.callback();"
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should add map settings when 'true' passed" do
|
52
|
-
options_hash = {
|
53
|
-
"map_options" => { "type" => "SATELLITE", "center_longitude" => 180, "zoom" => 3},
|
54
|
-
"markers" => { "data" => '[{ "description": "", "title": "", "longitude": "5.9311119", "latitude": "43.1251606", "picture": "", "width": "", "height": "" } ,{ "description": "", "title": "", "longitude": "2.3509871", "latitude": "48.8566667", "picture": "", "width": "", "height": "" } ]' },
|
55
|
-
"polylines" => { "data" => '[[
|
56
|
-
{"longitude": -122.214897, "latitude": 37.772323},
|
57
|
-
{"longitude": -157.821856, "latitude": 21.291982},
|
58
|
-
{"longitude": 178.431, "latitude": -18.142599},
|
59
|
-
{"longitude": 153.027892, "latitude": -27.46758}
|
60
|
-
],
|
61
|
-
[
|
62
|
-
{"longitude": -120.214897, "latitude": 30.772323, "strokeColor": "#000", "strokeWeight" : 2 },
|
63
|
-
{"longitude": -10.821856, "latitude": 50.291982}
|
64
|
-
]]' },
|
65
|
-
"polygons" => { "data" => '[[
|
66
|
-
{"longitude": -80.190262, "latitude": 25.774252},
|
67
|
-
{"longitude": -66.118292, "latitude": 18.466465},
|
68
|
-
{"longitude": -64.75737, "latitude": 32.321384}
|
69
|
-
]]' },
|
70
|
-
"circles" => { "data" => '[
|
71
|
-
{"longitude": -122.214897, "latitude": 37.772323, "radius": 1000000},
|
72
|
-
{"longitude": 122.214897, "latitude": 37.772323, "radius": 1000000, "strokeColor": "#FF0000"}
|
73
|
-
]',
|
74
|
-
},
|
75
|
-
"direction" => {
|
76
|
-
"data" => { "from" => "toulon, france", "to" => "paris, france"} ,
|
77
|
-
"options" => {"waypoints" => ["toulouse, france", "brest, france"], "travelMode" => "DRIVING", "display_panel" => true, "panel_id" => "instructions"}
|
78
|
-
}
|
79
|
-
}
|
80
|
-
options_hash.to_gmaps4rails(true).should == "Gmaps4Rails.map_options.center_longitude = 180;\nGmaps4Rails.map_options.type = 'SATELLITE';\nGmaps4Rails.map_options.zoom = 3;\nGmaps4Rails.initialize();\nGmaps4Rails.polylines = [[\n{\"longitude\": -122.214897, \"latitude\": 37.772323},\n{\"longitude\": -157.821856, \"latitude\": 21.291982},\n{\"longitude\": 178.431, \"latitude\": -18.142599},\n{\"longitude\": 153.027892, \"latitude\": -27.46758}\n],\n[\n{\"longitude\": -120.214897, \"latitude\": 30.772323, \"strokeColor\": \"#000\", \"strokeWeight\" : 2 },\n{\"longitude\": -10.821856, \"latitude\": 50.291982}\n]];\nGmaps4Rails.create_polylines();\nGmaps4Rails.circles = [\n{\"longitude\": -122.214897, \"latitude\": 37.772323, \"radius\": 1000000},\n{\"longitude\": 122.214897, \"latitude\": 37.772323, \"radius\": 1000000, \"strokeColor\": \"#FF0000\"}\n];\nGmaps4Rails.create_circles();\nGmaps4Rails.polygons = [[\n{\"longitude\": -80.190262, \"latitude\": 25.774252},\n{\"longitude\": -66.118292, \"latitude\": 18.466465},\n{\"longitude\": -64.75737, \"latitude\": 32.321384}\n]];\nGmaps4Rails.create_polygons();\nGmaps4Rails.markers = [{ \"description\": \"\", \"title\": \"\", \"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ,{ \"description\": \"\", \"title\": \"\", \"longitude\": \"2.3509871\", \"latitude\": \"48.8566667\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ];\nGmaps4Rails.create_markers();\nGmaps4Rails.direction_conf.origin = 'toulon, france';\nGmaps4Rails.direction_conf.destination = 'paris, france';\nGmaps4Rails.direction_conf.display_panel = true;\nGmaps4Rails.direction_conf.panel_id = 'instructions';\nGmaps4Rails.direction_conf.travelMode = 'DRIVING';\nGmaps4Rails.direction_conf.waypoints = [{\"stopover\":true,\"location\":\"toulouse, france\"},{\"stopover\":true,\"location\":\"brest, france\"}];\nGmaps4Rails.create_direction();\nGmaps4Rails.callback();"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "Hash extension" do
|
85
|
-
|
86
|
-
it "should create the proper text (used as js)" do
|
87
|
-
@options = {
|
88
|
-
"map_options" => { "type" => "SATELLITE", "center_longitude" => 180, "zoom" => 3, "auto_adjust" => true},
|
89
|
-
"markers" => { "data" => '[{ "description": "", "title": "", "longitude": "5.9311119", "latitude": "43.1251606", "picture": "", "width": "", "height": "" } ,{ "description": "", "title": "", "longitude": "2.3509871", "latitude": "48.8566667", "picture": "", "width": "", "height": "" } ]',
|
90
|
-
"options" => { "do_clustering" => false, "list_container" => "makers_list" }
|
91
|
-
},
|
92
|
-
"polylines" => { "data" => '[[
|
93
|
-
{"longitude": -122.214897, "latitude": 37.772323},
|
94
|
-
{"longitude": -157.821856, "latitude": 21.291982},
|
95
|
-
{"longitude": 178.431, "latitude": -18.142599},
|
96
|
-
{"longitude": 153.027892, "latitude": -27.46758}
|
97
|
-
],
|
98
|
-
[
|
99
|
-
{"longitude": -120.214897, "latitude": 30.772323, "strokeColor": "#000", "strokeWeight" : 2 },
|
100
|
-
{"longitude": -10.821856, "latitude": 50.291982}
|
101
|
-
]]' },
|
102
|
-
"polygons" => { "data" => '[[
|
103
|
-
{"longitude": -80.190262, "latitude": 25.774252},
|
104
|
-
{"longitude": -66.118292, "latitude": 18.466465},
|
105
|
-
{"longitude": -64.75737, "latitude": 32.321384}
|
106
|
-
]]' },
|
107
|
-
"circles" => { "data" => '[
|
108
|
-
{"longitude": -122.214897, "latitude": 37.772323, "radius": 1000000},
|
109
|
-
{"longitude": 122.214897, "latitude": 37.772323, "radius": 1000000, "strokeColor": "#FF0000"}
|
110
|
-
]',
|
111
|
-
},
|
112
|
-
"direction" => {
|
113
|
-
"data" => { "from" => "toulon, france", "to" => "paris, france"} ,
|
114
|
-
"options" => {"waypoints" => ["toulouse, france", "brest, france"], "travelMode" => "DRIVING", "display_panel" => true, "panel_id" => "instructions"}
|
115
|
-
}
|
116
|
-
}
|
117
|
-
|
118
|
-
@options.to_gmaps4rails(true).should include "Gmaps4Rails.initialize();"
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
describe "Destination" do
|
124
|
-
it "should render info from only start_end args"
|
125
|
-
it "should accept all options properly"
|
126
|
-
it "should format output in accordance with 'output' variable"
|
127
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe Gmaps4railsHelper do
|
4
|
-
|
5
|
-
it "should create a string containing all desired libraries" do
|
6
|
-
helper.g_libraries(["places", "foo", "bar"]).should eq(",places,foo,bar")
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should render empty string if no library provided" do
|
10
|
-
helper.g_libraries(nil).should eq("")
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Jasmine
|
2
|
-
class Config
|
3
|
-
|
4
|
-
# Add your overrides or custom config code here
|
5
|
-
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
|
10
|
-
# Note - this is necessary for rspec2, which has removed the backtrace
|
11
|
-
module Jasmine
|
12
|
-
class SpecBuilder
|
13
|
-
def declare_spec(parent, spec)
|
14
|
-
me = self
|
15
|
-
example_name = spec["name"]
|
16
|
-
@spec_ids << spec["id"]
|
17
|
-
backtrace = @example_locations[parent.description + " " + example_name]
|
18
|
-
parent.it example_name, {} do
|
19
|
-
me.report_spec(spec["id"])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
$:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'jasmine'
|
5
|
-
require 'rspec'
|
6
|
-
jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
|
7
|
-
require jasmine_config_overrides if File.exists?(jasmine_config_overrides)
|
8
|
-
|
9
|
-
jasmine_config = Jasmine::Config.new
|
10
|
-
spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
|
11
|
-
|
12
|
-
should_stop = false
|
13
|
-
|
14
|
-
RSpec.configuration.after(:suite) do
|
15
|
-
spec_builder.stop if should_stop
|
16
|
-
end
|
17
|
-
|
18
|
-
spec_builder.start
|
19
|
-
should_stop = true
|
20
|
-
spec_builder.declare_suites
|
@@ -1,284 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
DEFAULT_CONFIG_HASH = {
|
4
|
-
:lat_column => "latitude",
|
5
|
-
:lng_column => "longitude",
|
6
|
-
:check_process => true,
|
7
|
-
:checker => "gmaps",
|
8
|
-
:msg => "Address invalid",
|
9
|
-
:validation => true,
|
10
|
-
:address => "gmaps4rails_address",
|
11
|
-
:language => "en"
|
12
|
-
}
|
13
|
-
|
14
|
-
PARIS = { :latitude => 48.856614, :longitude => 2.3522219 }
|
15
|
-
TOULON = { :latitude => 43.124228, :longitude => 5.928 }
|
16
|
-
|
17
|
-
#set model configuration
|
18
|
-
def set_gmaps4rails_options!(change_conf = {})
|
19
|
-
User.class_eval do
|
20
|
-
define_method "gmaps4rails_options" do
|
21
|
-
DEFAULT_CONFIG_HASH.merge(change_conf)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
set_gmaps4rails_options!
|
27
|
-
|
28
|
-
describe Gmaps4rails::ActsAsGmappable do
|
29
|
-
|
30
|
-
let(:user) { Factory(:user) }
|
31
|
-
let(:invalid_user) { Factory.build(:invalid_user) }
|
32
|
-
|
33
|
-
context "standard configuration, valid user" do
|
34
|
-
|
35
|
-
it "should have a geocoded position" do
|
36
|
-
user.should have_same_position_as TOULON
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should set boolean to true once user is created" do
|
40
|
-
user.gmaps.should be_true
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should render a valid json from an array of objects" do
|
44
|
-
user #needed trigger the object from the let statement
|
45
|
-
Factory(:user_paris)
|
46
|
-
User.all.to_gmaps4rails.should == "[{\"lng\": \"" + TOULON[:longitude].to_s + "\", \"lat\": \"" + TOULON[:latitude].to_s + "\"},\n{\"lng\": \"" + PARIS[:longitude].to_s + "\", \"lat\": \"" + PARIS[:latitude].to_s + "\"}]"
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should accept additional block for an array of objects" do
|
50
|
-
user #needed trigger the object from the let statement
|
51
|
-
Factory(:user_paris)
|
52
|
-
User.all.to_gmaps4rails do |u|
|
53
|
-
"\"model\": \"" + u.class.to_s + "\""
|
54
|
-
end.should == "[{\"lng\": \"" + TOULON[:longitude].to_s + "\", \"lat\": \"" + TOULON[:latitude].to_s + "\", \"model\": \"User\"},\n{\"lng\": \"" + PARIS[:longitude].to_s + "\", \"lat\": \"" + PARIS[:latitude].to_s + "\", \"model\": \"User\"}]"
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should accept additional block for a single object" do
|
58
|
-
user.to_gmaps4rails do |u|
|
59
|
-
"\"model\": \"" + u.class.to_s + "\""
|
60
|
-
end.should == "[{\"lng\": \"" + TOULON[:longitude].to_s + "\", \"lat\": \"" + TOULON[:latitude].to_s + "\", \"model\": \"User\"}]"
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should render a valid json from a single object" do
|
64
|
-
user.to_gmaps4rails.should == "[{\"lng\": \"" + TOULON[:longitude].to_s + "\", \"lat\": \"" + TOULON[:latitude].to_s + "\"}]"
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should not geocode again after address changes if checker is true" do
|
68
|
-
user.update_attributes({ :sec_address => "PARIS, France" })
|
69
|
-
user.should have_same_position_as TOULON
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should geocode after address changes if checker is false" do
|
73
|
-
user.update_attributes({ :sec_address => "PARIS, France",
|
74
|
-
:gmaps => false})
|
75
|
-
user.should have_same_position_as PARIS
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
context "standard configuration, invalid address" do
|
81
|
-
|
82
|
-
it "should raise an error if validation option is turned on and address incorrect" do
|
83
|
-
invalid_user.should_not be_valid, "Address invalid"
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should not set boolean to true when address update fails" do
|
87
|
-
invalid_user.gmaps.should_not be_true
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
context "model customization" do
|
93
|
-
|
94
|
-
it "should render a valid json even if there is no instance in the db" do
|
95
|
-
User.all.to_gmaps4rails.should == "[]"
|
96
|
-
end
|
97
|
-
|
98
|
-
context "acts_as_gmappable options" do
|
99
|
-
|
100
|
-
after(:all) do
|
101
|
-
#reset all configuration to default
|
102
|
-
set_gmaps4rails_options!
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should use indifferently a db column for address if passed in config" do
|
106
|
-
set_gmaps4rails_options!({:address => "sec_address"})
|
107
|
-
user.should have_same_position_as TOULON
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should save the normalized address if requested" do
|
111
|
-
set_gmaps4rails_options!({ :normalized_address => "norm_address" })
|
112
|
-
user.norm_address.should == "Toulon, France"
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should override user's address with normalized address if requested" do
|
116
|
-
set_gmaps4rails_options!({ :normalized_address => "sec_address" })
|
117
|
-
user = Factory(:user, :sec_address => "ToUlOn, FrAnCe")
|
118
|
-
user.sec_address.should == "Toulon, France"
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should display the proper error message when address is invalid" do
|
122
|
-
set_gmaps4rails_options!({ :msg => "Custom Address invalid"})
|
123
|
-
invalid_user.should_not be_valid
|
124
|
-
invalid_user.errors[:gmaps4rails_address].should include("Custom Address invalid")
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should not raise an error if validation option is turned off" do
|
128
|
-
set_gmaps4rails_options!({ :validation => false })
|
129
|
-
invalid_user.should be_valid
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should save longitude and latitude to the customized columns" do
|
133
|
-
set_gmaps4rails_options!({
|
134
|
-
:lat_column => "lat_test",
|
135
|
-
:lng_column => "long_test"
|
136
|
-
})
|
137
|
-
user.latitude.should be_nil
|
138
|
-
user.should have_same_position_as TOULON
|
139
|
-
end
|
140
|
-
|
141
|
-
it "should not save the boolean if check_process is false" do
|
142
|
-
set_gmaps4rails_options!({ :check_process => false })
|
143
|
-
user.gmaps.should be_nil
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should geocode after each save if 'check_process' is false" do
|
147
|
-
set_gmaps4rails_options!({ :check_process => false })
|
148
|
-
user = Factory(:user, :sec_address => "PARIS, France")
|
149
|
-
user.should have_same_position_as PARIS
|
150
|
-
end
|
151
|
-
|
152
|
-
it "should save to the proper boolean checker set in checker" do
|
153
|
-
set_gmaps4rails_options!({ :checker => "bool_test" })
|
154
|
-
user.gmaps.should be_nil
|
155
|
-
user.bool_test.should be_true
|
156
|
-
end
|
157
|
-
|
158
|
-
it "should call a callback in the model if asked to" do
|
159
|
-
User.class_eval do
|
160
|
-
def gmaps4rails_options
|
161
|
-
DEFAULT_CONFIG_HASH.merge({ :callback => "save_callback" })
|
162
|
-
end
|
163
|
-
|
164
|
-
def save_callback(data)
|
165
|
-
self.called_back = true
|
166
|
-
end
|
167
|
-
|
168
|
-
attr_accessor :called_back
|
169
|
-
end
|
170
|
-
user.called_back.should be_true
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should return results in the specified language" do
|
174
|
-
set_gmaps4rails_options!({
|
175
|
-
:language => "de",
|
176
|
-
:normalized_address => "norm_address"
|
177
|
-
})
|
178
|
-
user.norm_address.should == "Toulon, Frankreich"
|
179
|
-
end
|
180
|
-
|
181
|
-
end
|
182
|
-
|
183
|
-
context "instance methods" do
|
184
|
-
let(:user_with_pic) { Factory(:user_with_pic) }
|
185
|
-
|
186
|
-
it "should take into account the description provided in the model" do
|
187
|
-
user_with_pic.instance_eval do
|
188
|
-
def gmaps4rails_infowindow
|
189
|
-
"My Beautiful Picture: #{picture}"
|
190
|
-
end
|
191
|
-
end
|
192
|
-
user_with_pic.to_gmaps4rails.should include "\"description\": \"My Beautiful Picture: http://www.blankdots.com/img/github-32x32.png\""
|
193
|
-
end
|
194
|
-
|
195
|
-
it "should take into account the picture provided in the model" do
|
196
|
-
user.instance_eval do
|
197
|
-
def gmaps4rails_marker_picture
|
198
|
-
{
|
199
|
-
"picture" => "http://www.blankdots.com/img/github-32x32.png",
|
200
|
-
"width" => "32",
|
201
|
-
"height" => "32"
|
202
|
-
}
|
203
|
-
end
|
204
|
-
end
|
205
|
-
result = user.to_gmaps4rails
|
206
|
-
result.should include "\"picture\": \"http://www.blankdots.com/img/github-32x32.png\""
|
207
|
-
result.should include "\"width\": \"32\""
|
208
|
-
result.should include "\"height\": \"32\""
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should take into account the picture and shadow provided in the model" do
|
212
|
-
user.instance_eval do
|
213
|
-
def gmaps4rails_marker_picture
|
214
|
-
{
|
215
|
-
"picture" => "http://www.blankdots.com/img/github-32x32.png",
|
216
|
-
"width" => "32",
|
217
|
-
"height" => "32",
|
218
|
-
"marker_anchor" => [10, 20],
|
219
|
-
"shadow_picture" => "http://code.google.com/apis/maps/documentation/javascript/examples/images/beachflag_shadow.png" ,
|
220
|
-
"shadow_width" => "40",
|
221
|
-
"shadow_height" => "40",
|
222
|
-
"shadow_anchor" => [5, 10]
|
223
|
-
}
|
224
|
-
end
|
225
|
-
end
|
226
|
-
result = user.to_gmaps4rails
|
227
|
-
result.should include "\"shadow_width\": \"40\""
|
228
|
-
result.should include "\"shadow_height\": \"40\""
|
229
|
-
result.should include "\"shadow_picture\": \"http://code.google.com/apis/maps/documentation/javascript/examples/images/beachflag_shadow.png\""
|
230
|
-
result.should include "\"shadow_anchor\": [5, 10]"
|
231
|
-
result.should include "\"marker_anchor\": [10, 20]"
|
232
|
-
end
|
233
|
-
|
234
|
-
it "should take into account the title provided in the model" do
|
235
|
-
user.instance_eval do
|
236
|
-
def gmaps4rails_title
|
237
|
-
"Sweet Title"
|
238
|
-
end
|
239
|
-
end
|
240
|
-
user.to_gmaps4rails.should == "[{\"title\": \"Sweet Title\", \"lng\": \"" + TOULON[:longitude].to_s + "\", \"lat\": \"" + TOULON[:latitude].to_s + "\"}]"
|
241
|
-
end
|
242
|
-
|
243
|
-
it "should take into account the sidebar content provided in the model" do
|
244
|
-
user.instance_eval do
|
245
|
-
def gmaps4rails_sidebar
|
246
|
-
"sidebar content"
|
247
|
-
end
|
248
|
-
end
|
249
|
-
user.to_gmaps4rails.should include "\"sidebar\": \"sidebar content\""
|
250
|
-
end
|
251
|
-
|
252
|
-
it "should take into account all additional data provided in the model" do
|
253
|
-
user.instance_eval do
|
254
|
-
def gmaps4rails_infowindow
|
255
|
-
"My Beautiful Picture: #{picture}"
|
256
|
-
end
|
257
|
-
|
258
|
-
def gmaps4rails_marker_picture
|
259
|
-
{
|
260
|
-
"picture" => "http://www.blankdots.com/img/github-32x32.png",
|
261
|
-
"width" => "32",
|
262
|
-
"height" => "32"
|
263
|
-
}
|
264
|
-
end
|
265
|
-
|
266
|
-
def gmaps4rails_title
|
267
|
-
"Sweet Title"
|
268
|
-
end
|
269
|
-
|
270
|
-
def gmaps4rails_sidebar
|
271
|
-
"sidebar content"
|
272
|
-
end
|
273
|
-
end
|
274
|
-
result = user.to_gmaps4rails
|
275
|
-
result.should include "\"description\": \"My Beautiful Picture: \""
|
276
|
-
result.should include "\"title\": \"Sweet Title\""
|
277
|
-
result.should include "\"sidebar\": \"sidebar content\""
|
278
|
-
result.should include "\"picture\": \"http://www.blankdots.com/img/github-32x32.png\""
|
279
|
-
end
|
280
|
-
|
281
|
-
end
|
282
|
-
end
|
283
|
-
|
284
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe "list creation", :js => true do
|
4
|
-
|
5
|
-
it "should create the sidebar with list of users" do
|
6
|
-
|
7
|
-
#first setup what the list should display
|
8
|
-
User.class_eval do
|
9
|
-
def gmaps4rails_sidebar
|
10
|
-
name
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
Factory(:user, :name => "User1")
|
15
|
-
Factory(:user, :name => "User2")
|
16
|
-
|
17
|
-
visit test_list_path
|
18
|
-
page.should have_content("User1")
|
19
|
-
page.should have_content("User2")
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
-
ENV["RAILS_ENV"] ||= 'test'
|
3
|
-
require File.expand_path("../../config/environment", __FILE__)
|
4
|
-
require 'rspec/rails'
|
5
|
-
require 'capybara/rspec'
|
6
|
-
require 'shoulda-matchers'
|
7
|
-
# Requires supporting ruby files with custom matchers and macros, etc,
|
8
|
-
# in spec/support/ and its subdirectories.
|
9
|
-
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
10
|
-
Capybara.server_boot_timeout = 90
|
11
|
-
|
12
|
-
RSpec.configure do |config|
|
13
|
-
# == Mock Framework
|
14
|
-
#
|
15
|
-
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
16
|
-
#
|
17
|
-
# config.mock_with :mocha
|
18
|
-
# config.mock_with :flexmock
|
19
|
-
# config.mock_with :rr
|
20
|
-
config.mock_with :rspec
|
21
|
-
|
22
|
-
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
23
|
-
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
24
|
-
|
25
|
-
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
26
|
-
# examples within a transaction, remove the following line or assign false
|
27
|
-
# instead of true.
|
28
|
-
config.use_transactional_fixtures = false
|
29
|
-
|
30
|
-
config.before(:suite) do
|
31
|
-
DatabaseCleaner.strategy = :truncation
|
32
|
-
end
|
33
|
-
|
34
|
-
config.before(:each) do
|
35
|
-
DatabaseCleaner.start
|
36
|
-
end
|
37
|
-
|
38
|
-
config.after(:each) do
|
39
|
-
DatabaseCleaner.clean
|
40
|
-
end
|
41
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
Factory.define :user do |f|
|
2
|
-
f.name "me"
|
3
|
-
f.sec_address "Toulon, France"
|
4
|
-
end
|
5
|
-
|
6
|
-
Factory.define :user_paris, :parent => :user do |f|
|
7
|
-
f.name "me"
|
8
|
-
f.sec_address "Paris, France"
|
9
|
-
end
|
10
|
-
|
11
|
-
Factory.define :user_with_pic, :parent => :user do |f|
|
12
|
-
f.name "me"
|
13
|
-
f.sec_address "Toulon, France"
|
14
|
-
f.picture "http://www.blankdots.com/img/github-32x32.png"
|
15
|
-
end
|
16
|
-
|
17
|
-
Factory.define :invalid_user, :parent => :user do |f|
|
18
|
-
f.name "me"
|
19
|
-
f.sec_address "home"
|
20
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
require 'rspec/expectations'
|
2
|
-
|
3
|
-
RSpec::Matchers.define :have_same_position_as do |position_hash|
|
4
|
-
match do |object|
|
5
|
-
object.send(object.gmaps4rails_options[:lat_column]) == position_hash[:latitude] && object.send(object.gmaps4rails_options[:lng_column]) == position_hash[:longitude]
|
6
|
-
end
|
7
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
class UsersController < ApplicationController
|
2
|
-
# GET /users
|
3
|
-
# GET /users.json
|
4
|
-
def index
|
5
|
-
@users = User.all
|
6
|
-
@json = User.all.to_gmaps4rails
|
7
|
-
respond_to do |format|
|
8
|
-
format.html # index.html.erb
|
9
|
-
format.json { render :json => @users }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# GET /users/1
|
14
|
-
# GET /users/1.json
|
15
|
-
def show
|
16
|
-
@user = User.find(params[:id])
|
17
|
-
|
18
|
-
respond_to do |format|
|
19
|
-
format.html # show.html.erb
|
20
|
-
format.json { render :json => @user }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# GET /users/new
|
25
|
-
# GET /users/new.json
|
26
|
-
def new
|
27
|
-
@user = User.new
|
28
|
-
|
29
|
-
respond_to do |format|
|
30
|
-
format.html # new.html.erb
|
31
|
-
format.json { render :json => @user }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# GET /users/1/edit
|
36
|
-
def edit
|
37
|
-
@user = User.find(params[:id])
|
38
|
-
end
|
39
|
-
|
40
|
-
# POST /users
|
41
|
-
# POST /users.json
|
42
|
-
def create
|
43
|
-
@user = User.new(params[:user])
|
44
|
-
|
45
|
-
respond_to do |format|
|
46
|
-
if @user.save
|
47
|
-
format.html { redirect_to @user, :notice => 'User was successfully created.' }
|
48
|
-
format.json { render :json => @user, :status => :created, :location => @user }
|
49
|
-
else
|
50
|
-
format.html { render :action => "new" }
|
51
|
-
format.json { render :json => @user.errors, :status => :unprocessable_entity }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# PUT /users/1
|
57
|
-
# PUT /users/1.json
|
58
|
-
def update
|
59
|
-
@user = User.find(params[:id])
|
60
|
-
|
61
|
-
respond_to do |format|
|
62
|
-
if @user.update_attributes(params[:user])
|
63
|
-
format.html { redirect_to @user, :notice => 'User was successfully updated.' }
|
64
|
-
format.json { head :ok }
|
65
|
-
else
|
66
|
-
format.html { render :action => "edit" }
|
67
|
-
format.json { render :json => @user.errors, :status => :unprocessable_entity }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# DELETE /users/1
|
73
|
-
# DELETE /users/1.json
|
74
|
-
def destroy
|
75
|
-
@user = User.find(params[:id])
|
76
|
-
@user.destroy
|
77
|
-
|
78
|
-
respond_to do |format|
|
79
|
-
format.html { redirect_to users_url }
|
80
|
-
format.json { head :ok }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|