gmaps4rails 0.8.8 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -44,4 +44,8 @@ class UsersController < ApplicationController
44
44
  def test_list
45
45
  @json = User.all.to_gmaps4rails
46
46
  end
47
+
48
+ def ajax_map
49
+ end
50
+
47
51
  end
@@ -10,7 +10,8 @@ class User < ActiveRecord::Base
10
10
  # {
11
11
  # "picture" => "http://www.blankdots.com/img/github-32x32.png",
12
12
  # "width" => "32",
13
- # "height" => "32"
13
+ # "height" => "32",
14
+ # "marker_anchor" => [10,20]
14
15
  # }
15
16
  # end
16
17
  #
@@ -1,5 +1,7 @@
1
1
  Dummy::Application.routes.draw do
2
2
  match "users/test_list" => "users#test_list", :as => "test_list"
3
+ match "users/ajax_map" => "users#ajax_map", :as => "ajax_map"
4
+
3
5
  resources :users
4
6
  root :to => "users#index"
5
7
  end
@@ -45,7 +45,7 @@ describe "JS creation from hash" do
45
45
  "options" => {"waypoints" => ["toulouse, france", "brest, france"], "travelMode" => "DRIVING", "display_panel" => true, "panel_id" => "instructions"}
46
46
  }
47
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();\nif(typeof gmaps4rails_callback == 'function') { gmaps4rails_callback(); }"
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
49
  end
50
50
 
51
51
  it "should add map settings when 'true' passed" do
@@ -77,7 +77,7 @@ describe "JS creation from hash" do
77
77
  "options" => {"waypoints" => ["toulouse, france", "brest, france"], "travelMode" => "DRIVING", "display_panel" => true, "panel_id" => "instructions"}
78
78
  }
79
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();\nif(typeof gmaps4rails_callback == 'function') { gmaps4rails_callback(); }"
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
81
  end
82
82
  end
83
83
 
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,20 @@
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,384 +1,269 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
- describe "Acts as gmappable" do
4
-
5
- before(:each) do
6
- #reset all configuration to default or nil
7
- User.class_eval do
8
- def gmaps4rails_options
9
- {
10
- :lat_column => "latitude",
11
- :lng_column => "longitude",
12
- :check_process => true,
13
- :checker => "gmaps",
14
- :msg => "Address invalid",
15
- :validation => true,
16
- :address => "gmaps4rails_address",
17
- :language => "en"
18
- }
19
- end
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)
20
22
  end
21
- @toulon = { :latitude => 43.124228, :longitude => 5.928}
22
- @paris = { :latitude => 48.856614, :longitude => 2.3522219}
23
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) }
24
32
 
25
- describe "standard configuration, valid user" do
26
- before(:each) do
27
- @user = Factory(:user)
28
- end
33
+ context "standard configuration, valid user" do
29
34
 
30
35
  it "should have a geocoded position" do
31
- @user.latitude.should == @toulon[:latitude]
32
- @user.longitude.should == @toulon[:longitude]
36
+ user.should have_same_position_as TOULON
33
37
  end
34
38
 
35
39
  it "should set boolean to true once user is created" do
36
- @user.gmaps.should == true
40
+ user.gmaps.should be_true
37
41
  end
38
42
 
39
43
  it "should render a valid json from an array of ojects" do
40
- @user2 = Factory(:user_paris)
41
- User.all.to_gmaps4rails.should == "[{\"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\"},\n{\"longitude\": \"" + @paris[:longitude].to_s + "\", \"latitude\": \"" + @paris[:latitude].to_s + "\"}]"
44
+ user #needed trigger the object from the let statement
45
+ Factory(:user_paris)
46
+ User.all.to_gmaps4rails.should == "[{\"longitude\": \"" + TOULON[:longitude].to_s + "\", \"latitude\": \"" + TOULON[:latitude].to_s + "\"},\n{\"longitude\": \"" + PARIS[:longitude].to_s + "\", \"latitude\": \"" + PARIS[:latitude].to_s + "\"}]"
42
47
  end
43
48
 
44
49
  it "should render a valid json from a single object" do
45
- @user.to_gmaps4rails.should == "[{\"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\"}]"
50
+ user.to_gmaps4rails.should == "[{\"longitude\": \"" + TOULON[:longitude].to_s + "\", \"latitude\": \"" + TOULON[:latitude].to_s + "\"}]"
46
51
  end
47
52
 
48
53
  it "should not geocode again after address changes if checker is true" do
49
- @user.sec_address = "paris, France"
50
- @user.save
51
- @user.latitude.should == @toulon[:latitude]
52
- @user.longitude.should == @toulon[:longitude]
54
+ user.update_attributes({ :sec_address => "PARIS, France" })
55
+ user.should have_same_position_as TOULON
53
56
  end
54
57
 
55
58
  it "should geocode after address changes if checker is false" do
56
- @user.sec_address = "paris, France"
57
- @user.gmaps = false
58
- @user.save
59
- @user.latitude.should == @paris[:latitude]
60
- @user.longitude.should == @paris[:longitude]
59
+ user.update_attributes({ :sec_address => "PARIS, France",
60
+ :gmaps => false})
61
+ user.should have_same_position_as PARIS
61
62
  end
62
63
  end
63
64
 
64
65
 
65
- describe "standard configuration, invalid address" do
66
- before(:each) do
67
- @user = Factory.build(:invalid_user)
68
- end
66
+ context "standard configuration, invalid address" do
69
67
 
70
68
  it "should raise an error if validation option is turned on and address incorrect" do
71
- @user.should_not be_valid, "Address invalid"
69
+ invalid_user.should_not be_valid, "Address invalid"
72
70
  end
73
71
 
74
72
  it "should not set boolean to true when address update fails" do
75
- @user.gmaps.should_not == true
73
+ invalid_user.gmaps.should_not be_true
76
74
  end
77
75
  end
78
76
 
79
77
 
80
- describe "model customization" do
81
-
78
+ context "model customization" do
79
+
82
80
  it "should render a valid json even if there is no instance in the db" do
83
81
  User.all.to_gmaps4rails.should == "[]"
84
82
  end
85
83
 
86
- it "should use indifferently a db column for address if passed in config" do
87
- User.class_eval do
88
- def gmaps4rails_options
89
- {
90
- :lat_column => "latitude",
91
- :lng_column => "longitude",
92
- :check_process => true,
93
- :checker => "gmaps",
94
- :msg => "Address invalid",
95
- :validation => true,
96
- :address => "sec_address",
97
- :language => "en"
98
- }
99
- end
84
+ context "acts_as_gmappable options" do
85
+
86
+ after(:all) do
87
+ #reset all configuration to default
88
+ set_gmaps4rails_options!
100
89
  end
101
- @user = Factory(:user)
102
- @user.latitude.should == @toulon[:latitude]
103
- @user.longitude.should == @toulon[:longitude]
104
- end
105
-
106
- it "should save the normalized address if requested" do
107
- User.class_eval do
108
- def gmaps4rails_options
109
- {
110
- :lat_column => "latitude",
111
- :lng_column => "longitude",
112
- :check_process => true,
113
- :checker => "gmaps",
114
- :msg => "Address invalid",
115
- :validation => true,
116
- :normalized_address => "norm_address",
117
- :address => "gmaps4rails_address",
118
- :language => "en"
119
- }
120
- end
90
+
91
+ it "should use indifferently a db column for address if passed in config" do
92
+ set_gmaps4rails_options!({:address => "sec_address"})
93
+ user.should have_same_position_as TOULON
121
94
  end
122
- @user = Factory(:user)
123
- @user.norm_address.should == "Toulon, France"
124
- end
125
-
126
- it "should override user's address with normalized address if requested" do
127
- User.class_eval do
128
- def gmaps4rails_options
129
- {
130
- :lat_column => "latitude",
131
- :lng_column => "longitude",
132
- :check_process => true,
133
- :checker => "gmaps",
134
- :msg => "Custom Address invalid",
135
- :validation => true,
136
- :normalized_address => "sec_address",
137
- :address => "gmaps4rails_address",
138
- :language => "en"
139
- }
140
- end
95
+
96
+ it "should save the normalized address if requested" do
97
+ set_gmaps4rails_options!({ :normalized_address => "norm_address" })
98
+ user.norm_address.should == "Toulon, France"
141
99
  end
142
- @user = Factory.build(:user)
143
- @user.sec_address.should == "Toulon, France"
144
- end
145
-
146
- it "should display the proper error message when address is invalid" do
147
- User.class_eval do
148
- def gmaps4rails_options
149
- {
150
- :lat_column => "latitude",
151
- :lng_column => "longitude",
152
- :check_process => true,
153
- :checker => "gmaps",
154
- :msg => "Custom Address invalid",
155
- :validation => true,
156
- :address => "gmaps4rails_address",
157
- :language => "en"
158
- }
159
- end
100
+
101
+ it "should override user's address with normalized address if requested" do
102
+ set_gmaps4rails_options!({ :normalized_address => "sec_address" })
103
+ user = Factory(:user, :sec_address => "ToUlOn, FrAnCe")
104
+ user.sec_address.should == "Toulon, France"
160
105
  end
161
- @user = Factory.build(:invalid_user)
162
- @user.should_not be_valid, "Custom Address invalid"
163
- end
164
-
165
- it "should not raise an error if validation option is turned off" do
166
- User.class_eval do
167
- def gmaps4rails_options
168
- {
169
- :lat_column => "latitude",
170
- :lng_column => "longitude",
171
- :check_process => true,
172
- :checker => "gmaps",
173
- :msg => "Address invalid",
174
- :validation => false,
175
- :address => "gmaps4rails_address",
176
- :language => "en"
177
- }
178
- end
106
+
107
+ it "should display the proper error message when address is invalid" do
108
+ set_gmaps4rails_options!({ :msg => "Custom Address invalid"})
109
+ invalid_user.should_not be_valid
110
+ invalid_user.errors[:gmaps4rails_address].should include("Custom Address invalid")
179
111
  end
180
- @user = Factory.build(:invalid_user)
181
- @user.should be_valid
182
- end
183
-
184
- it "should save longitude and latitude to the customized columns" do
185
- User.class_eval do
186
- def gmaps4rails_options
187
- {
188
- :lat_column => "lat_test",
189
- :lng_column => "long_test",
190
- :check_process => true,
191
- :checker => "gmaps",
192
- :msg => "Address invalid",
193
- :validation => true,
194
- :address => "gmaps4rails_address",
195
- :language => "en"
196
- }
197
- end
112
+
113
+ it "should not raise an error if validation option is turned off" do
114
+ set_gmaps4rails_options!({ :validation => false })
115
+ invalid_user.should be_valid
198
116
  end
199
- @user = Factory(:user)
200
- @user.lat_test.should == @toulon[:latitude]
201
- @user.long_test.should == @toulon[:longitude]
202
- @user.longitude.should == nil
203
- @user.latitude.should == nil
204
- end
205
-
206
- it "should not save the boolean if check_process is false" do
207
- User.class_eval do
208
- def gmaps4rails_options
209
- {
210
- :lat_column => "lat_test",
211
- :lng_column => "long_test",
212
- :check_process => false,
213
- :checker => "gmaps",
214
- :msg => "Address invalid",
215
- :validation => true,
216
- :address => "gmaps4rails_address",
217
- :language => "en"
218
- }
219
- end
117
+
118
+ it "should save longitude and latitude to the customized columns" do
119
+ set_gmaps4rails_options!({
120
+ :lat_column => "lat_test",
121
+ :lng_column => "long_test"
122
+ })
123
+ user.latitude.should be_nil
124
+ user.should have_same_position_as TOULON
220
125
  end
221
- @user = Factory(:user)
222
- @user.gmaps.should == nil
223
- end
224
-
225
- it "should geocode after each save if 'check_process' is false" do
226
- User.class_eval do
227
- def gmaps4rails_options
228
- {
229
- :lat_column => "latitude",
230
- :lng_column => "longitude",
231
- :check_process => false,
232
- :checker => "gmaps",
233
- :msg => "Address invalid",
234
- :validation => true,
235
- :address => "gmaps4rails_address",
236
- :language => "en"
237
- }
238
- end
126
+
127
+ it "should not save the boolean if check_process is false" do
128
+ set_gmaps4rails_options!({ :check_process => false })
129
+ user.gmaps.should be_nil
239
130
  end
240
- @user = Factory(:user)
241
- @user.sec_address = "paris, France"
242
- @user.save
243
- @user.latitude.should == @paris[:latitude]
244
- @user.longitude.should == @paris[:longitude]
245
- end
246
-
247
- it "should save to the proper boolean checker set in checker" do
248
- User.class_eval do
249
- def gmaps4rails_options
250
- {
251
- :lat_column => "lat_test",
252
- :lng_column => "long_test",
253
- :check_process => true,
254
- :checker => "bool_test",
255
- :msg => "Address invalid",
256
- :validation => true,
257
- :address => "gmaps4rails_address",
258
- :language => "en"
259
- }
131
+
132
+ it "should geocode after each save if 'check_process' is false" do
133
+ set_gmaps4rails_options!({ :check_process => false })
134
+ user = Factory(:user, :sec_address => "PARIS, France")
135
+ user.should have_same_position_as PARIS
136
+ end
137
+
138
+ it "should save to the proper boolean checker set in checker" do
139
+ set_gmaps4rails_options!({ :checker => "bool_test" })
140
+ user.gmaps.should be_nil
141
+ user.bool_test.should be_true
142
+ end
143
+
144
+ it "should call a callback in the model if asked to" do
145
+ User.class_eval do
146
+ def gmaps4rails_options
147
+ DEFAULT_CONFIG_HASH.merge({ :callback => "save_callback" })
148
+ end
149
+
150
+ def save_callback(data)
151
+ self.called_back = true
152
+ end
153
+
154
+ attr_accessor :called_back
260
155
  end
156
+ user.called_back.should be_true
261
157
  end
262
- @user = Factory(:user)
263
- @user.gmaps.should == nil
264
- @user.bool_test.should == true
158
+
159
+ it "should return results in the specified language" do
160
+ set_gmaps4rails_options!({
161
+ :language => "de",
162
+ :normalized_address => "norm_address"
163
+ })
164
+ user.norm_address.should == "Toulon, Frankreich"
165
+ end
166
+
265
167
  end
266
-
267
- it "should take into account the description provided in the model" do
268
- @user = Factory(:user_with_pic)
269
- @user.class_eval do
270
- def gmaps4rails_infowindow
271
- "My Beautiful Picture: #{picture}"
168
+
169
+ context "instance methods" do
170
+ let(:user_with_pic) { Factory(:user_with_pic) }
171
+
172
+ it "should take into account the description provided in the model" do
173
+ user_with_pic.instance_eval do
174
+ def gmaps4rails_infowindow
175
+ "My Beautiful Picture: #{picture}"
176
+ end
272
177
  end
178
+ user_with_pic.to_gmaps4rails.should include "\"description\": \"My Beautiful Picture: http://www.blankdots.com/img/github-32x32.png\""
273
179
  end
274
- @user.to_gmaps4rails.should == "[{\"description\": \"My Beautiful Picture: http://www.blankdots.com/img/github-32x32.png\", \"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\"}]"
275
- end
276
180
 
277
- it "should take into account the picture provided in the model" do
278
- @user = Factory(:user)
279
- @user.class_eval do
280
- def gmaps4rails_marker_picture
281
- {
282
- "picture" => "http://www.blankdots.com/img/github-32x32.png",
283
- "width" => "32",
284
- "height" => "32"
285
- }
181
+ it "should take into account the picture provided in the model" do
182
+ user.instance_eval do
183
+ def gmaps4rails_marker_picture
184
+ {
185
+ "picture" => "http://www.blankdots.com/img/github-32x32.png",
186
+ "width" => "32",
187
+ "height" => "32"
188
+ }
189
+ end
286
190
  end
191
+ result = user.to_gmaps4rails
192
+ result.should include "\"picture\": \"http://www.blankdots.com/img/github-32x32.png\""
193
+ result.should include "\"width\": \"32\""
194
+ result.should include "\"height\": \"32\""
287
195
  end
288
- @user.to_gmaps4rails.should == "[{\"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\", \"picture\": \"http://www.blankdots.com/img/github-32x32.png\", \"width\": \"32\", \"height\": \"32\"}]"
289
- end
290
-
291
- it "should take into account the title provided in the model" do
292
- @user = Factory(:user)
293
- @user.class_eval do
294
- def gmaps4rails_title
295
- "Sweet Title"
196
+
197
+ it "should take into account the picture and shadow provided in the model" do
198
+ user.instance_eval do
199
+ def gmaps4rails_marker_picture
200
+ {
201
+ "picture" => "http://www.blankdots.com/img/github-32x32.png",
202
+ "width" => "32",
203
+ "height" => "32",
204
+ "marker_anchor" => [10, 20],
205
+ "shadow_picture" => "http://code.google.com/apis/maps/documentation/javascript/examples/images/beachflag_shadow.png" ,
206
+ "shadow_width" => "40",
207
+ "shadow_height" => "40",
208
+ "shadow_anchor" => [5, 10]
209
+ }
210
+ end
296
211
  end
212
+ result = user.to_gmaps4rails
213
+ result.should include "\"shadow_width\": \"40\""
214
+ result.should include "\"shadow_height\": \"40\""
215
+ result.should include "\"shadow_picture\": \"http://code.google.com/apis/maps/documentation/javascript/examples/images/beachflag_shadow.png\""
216
+ result.should include "\"shadow_anchor\": [5, 10]"
217
+ result.should include "\"marker_anchor\": [10, 20]"
297
218
  end
298
- @user.to_gmaps4rails.should == "[{\"title\": \"Sweet Title\", \"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\"}]"
299
- end
300
219
 
301
- it "should take into account the sidebar content provided in the model" do
302
- @user = Factory(:user)
303
- @user.class_eval do
304
- def gmaps4rails_sidebar
305
- "sidebar content"
220
+ it "should take into account the title provided in the model" do
221
+ user.instance_eval do
222
+ def gmaps4rails_title
223
+ "Sweet Title"
224
+ end
306
225
  end
226
+ user.to_gmaps4rails.should == "[{\"title\": \"Sweet Title\", \"longitude\": \"" + TOULON[:longitude].to_s + "\", \"latitude\": \"" + TOULON[:latitude].to_s + "\"}]"
307
227
  end
308
- @user.to_gmaps4rails.should == "[{\"sidebar\": \"sidebar content\",\"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\"}]"
309
- end
310
228
 
311
- it "should take into account all additional data provided in the model" do
312
- @user = Factory(:user)
313
-
314
- @user.instance_eval do
315
- def gmaps4rails_infowindow
316
- "My Beautiful Picture: #{picture}"
317
- end
318
-
319
- def gmaps4rails_marker_picture
320
- {
321
- "picture" => "http://www.blankdots.com/img/github-32x32.png",
322
- "width" => "32",
323
- "height" => "32"
324
- }
325
- end
326
-
327
- def gmaps4rails_title
328
- "Sweet Title"
329
- end
330
-
331
- def gmaps4rails_sidebar
332
- "sidebar content"
229
+ it "should take into account the sidebar content provided in the model" do
230
+ user.instance_eval do
231
+ def gmaps4rails_sidebar
232
+ "sidebar content"
233
+ end
333
234
  end
235
+ user.to_gmaps4rails.should include "\"sidebar\": \"sidebar content\""
334
236
  end
335
- @user.to_gmaps4rails.should == "[{\"description\": \"My Beautiful Picture: \", \"title\": \"Sweet Title\", \"sidebar\": \"sidebar content\",\"longitude\": \"" + @toulon[:longitude].to_s + "\", \"latitude\": \"" + @toulon[:latitude].to_s + "\", \"picture\": \"http://www.blankdots.com/img/github-32x32.png\", \"width\": \"32\", \"height\": \"32\"}]"
336
- end
337
237
 
338
- it "should call a callback in the model if asked to" do
339
- User.class_eval do
340
- def gmaps4rails_options
341
- {
342
- :lat_column => "latitude",
343
- :lng_column => "longitude",
344
- :check_process => true,
345
- :checker => "gmaps",
346
- :msg => "Address invalid",
347
- :validation => true,
348
- :address => "gmaps4rails_address",
349
- :language => "en",
350
- :callback => "save_callback"
351
- }
352
- end
238
+ it "should take into account all additional data provided in the model" do
239
+ user.instance_eval do
240
+ def gmaps4rails_infowindow
241
+ "My Beautiful Picture: #{picture}"
242
+ end
353
243
 
354
- def save_callback(data)
355
- self.called_back = true
356
- end
244
+ def gmaps4rails_marker_picture
245
+ {
246
+ "picture" => "http://www.blankdots.com/img/github-32x32.png",
247
+ "width" => "32",
248
+ "height" => "32"
249
+ }
250
+ end
357
251
 
358
- attr_accessor :called_back
359
- end
360
- @user = Factory(:user)
361
- @user.called_back.should == true
362
- end
363
-
364
- it "should return results in the specified language" do
365
- User.class_eval do
366
- def gmaps4rails_options
367
- {
368
- :lat_column => "latitude",
369
- :lng_column => "longitude",
370
- :check_process => true,
371
- :checker => "gmaps",
372
- :msg => "Address invalid",
373
- :validation => true,
374
- :address => "gmaps4rails_address",
375
- :language => "de",
376
- :normalized_address => "norm_address"
377
- }
252
+ def gmaps4rails_title
253
+ "Sweet Title"
254
+ end
255
+
256
+ def gmaps4rails_sidebar
257
+ "sidebar content"
258
+ end
378
259
  end
260
+ result = user.to_gmaps4rails
261
+ result.should include "\"description\": \"My Beautiful Picture: \""
262
+ result.should include "\"title\": \"Sweet Title\""
263
+ result.should include "\"sidebar\": \"sidebar content\""
264
+ result.should include "\"picture\": \"http://www.blankdots.com/img/github-32x32.png\""
379
265
  end
380
- @user = Factory(:user)
381
- @user.norm_address.should == "Toulon, Frankreich"
266
+
382
267
  end
383
268
  end
384
269