gmaps4rails 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -0
- data/app/views/gmaps4rails/_gmaps4rails.html.erb +9 -4
- data/lib/acts_as_gmappable/base.rb +74 -67
- data/lib/application_helper.rb +4 -4
- data/public/javascripts/gmaps4rails.js +51 -29
- data/test/dummy/app/controllers/users_controller.rb +4 -0
- data/test/dummy/app/models/user.rb +8 -1
- data/test/dummy/config/routes.rb +1 -0
- data/test/dummy/spec/base/base_spec.rb +40 -0
- data/test/dummy/spec/models/user_spec.rb +55 -10
- data/test/dummy/spec/requests/users_spec.rb +23 -0
- data/test/dummy/spec/spec_helper.rb +15 -1
- metadata +7 -7
- data/test/dummy/app/views/users/test.rb +0 -35
data/README.rdoc
CHANGED
@@ -6,9 +6,14 @@
|
|
6
6
|
<% end %>
|
7
7
|
|
8
8
|
<% content_for :scripts do %>
|
9
|
-
|
10
|
-
<script
|
11
|
-
<%=javascript_include_tag 'gmaps4rails' %>
|
9
|
+
<% if enable_js == true %>
|
10
|
+
<script src="http://www.google.com/jsapi"></script>
|
11
|
+
<%=javascript_include_tag 'gmaps4rails' %>
|
12
|
+
<% debugger %>
|
13
|
+
<% unless options["markers"].nil? or (!options["markers"]["options"].nil? and options["markers"]["options"]["do_clustering"] == false) %>
|
14
|
+
<script type="text/javascript" src='http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterer/1.0/src/markerclusterer.js'></script>
|
15
|
+
<% end %>
|
16
|
+
<% end %>
|
12
17
|
<script type="text/javascript" charset="utf-8">
|
13
18
|
|
14
19
|
window.onload = function() {
|
@@ -19,5 +24,5 @@ window.onload = function() {
|
|
19
24
|
<% end %>
|
20
25
|
|
21
26
|
<div id="<%= options["map_options"].nil? || options['map_options']['container_id'].nil? ? "map_container" : options['map_options']['container_id'] %>">
|
22
|
-
<div id="<%= options["map_options"].nil? || options['map_options']['id'].nil? ? "gmaps4rails_map" : options['map_options']['id'] %>"></div>
|
27
|
+
<div id="<%= options["map_options"].nil? || options['map_options']['id'].nil? ? "gmaps4rails_map" : options['map_options']['id'] %>"></div>
|
23
28
|
</div>
|
@@ -15,7 +15,7 @@ module Gmaps4rails
|
|
15
15
|
def Gmaps4rails.create_json(object)
|
16
16
|
unless object[object.gmaps4rails_options[:lat_column]].blank? && object[object.gmaps4rails_options[:lng_column]].blank?
|
17
17
|
"{
|
18
|
-
\"description\": \"#{object.gmaps4rails_infowindow}\", \"title\": \"#{object.gmaps4rails_title}\",
|
18
|
+
\"description\": \"#{object.gmaps4rails_infowindow}\", \"title\": \"#{object.gmaps4rails_title}\", \"sidebar\": \"#{object.gmaps4rails_sidebar}\",
|
19
19
|
\"longitude\": \"#{object[object.gmaps4rails_options[:lng_column]]}\", \"latitude\": \"#{object[object.gmaps4rails_options[:lat_column]]}\", \"picture\": \"#{object.gmaps4rails_marker_picture['picture']}\", \"width\": \"#{object.gmaps4rails_marker_picture['width']}\", \"height\": \"#{object.gmaps4rails_marker_picture['height']}\"
|
20
20
|
} ,"
|
21
21
|
end
|
@@ -116,88 +116,95 @@ module Gmaps4rails
|
|
116
116
|
|
117
117
|
module ActsAsGmappable
|
118
118
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
119
|
+
extend ActiveSupport::Concern
|
120
|
+
|
121
|
+
module InstanceMethods
|
122
|
+
def gmaps4rails_infowindow
|
123
|
+
end
|
124
|
+
|
125
|
+
def gmaps4rails_title
|
124
126
|
end
|
125
127
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
128
|
+
def gmaps4rails_sidebar
|
129
|
+
end
|
130
|
+
|
131
|
+
def process_geocoding
|
132
|
+
#to prevent geocoding each time a save is made
|
133
|
+
return true if gmaps4rails_options[:check_process] == true && self[gmaps4rails_options[:checker]] == true
|
134
|
+
|
135
|
+
begin
|
136
|
+
coordinates = Gmaps4rails.geocode(self.gmaps4rails_address)
|
137
|
+
rescue GeocodeStatus #adress was invalid, add error to base.
|
138
|
+
errors[:base] << gmaps4rails_options[:msg] if gmaps4rails_options[:validation]
|
139
|
+
rescue GeocodeNetStatus => e #connection error, No need to prevent save.
|
140
|
+
logger.warn(e)
|
141
|
+
#TODO add customization here?
|
142
|
+
else #if no exception
|
143
|
+
self[gmaps4rails_options[:lng_column]] = coordinates.first[:lng]
|
144
|
+
self[gmaps4rails_options[:lat_column]] = coordinates.first[:lat]
|
145
|
+
if gmaps4rails_options[:check_process] == true
|
146
|
+
self[gmaps4rails_options[:checker]] = true
|
143
147
|
end
|
144
|
-
|
145
|
-
include Gmaps4rails::ActsAsGmappable::Base::InstanceMethods
|
146
148
|
end
|
147
149
|
end
|
148
|
-
|
149
|
-
module InstanceMethods
|
150
150
|
|
151
|
-
|
152
|
-
|
151
|
+
def gmaps4rails_marker_picture
|
152
|
+
{
|
153
|
+
"picture" => "",
|
154
|
+
"width" => "",
|
155
|
+
"height" => ""
|
156
|
+
}
|
157
|
+
end
|
153
158
|
|
154
|
-
|
155
|
-
|
159
|
+
def self.gmaps4rails_trusted_scopes
|
160
|
+
[]
|
161
|
+
end
|
156
162
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
coordinates = Gmaps4rails.geocode(self.gmaps4rails_address)
|
163
|
-
rescue GeocodeStatus #adress was invalid, add error to base.
|
164
|
-
errors[:base] << gmaps4rails_options[:msg] if gmaps4rails_options[:validation]
|
165
|
-
rescue GeocodeNetStatus => e #connection error, No need to prevent save.
|
166
|
-
logger.warn(e)
|
167
|
-
#TODO add customization here?
|
168
|
-
else #if no exception
|
169
|
-
self[gmaps4rails_options[:lng_column]] = coordinates.first[:lng]
|
170
|
-
self[gmaps4rails_options[:lat_column]] = coordinates.first[:lat]
|
171
|
-
if gmaps4rails_options[:check_process] == true
|
172
|
-
self[gmaps4rails_options[:checker]] = true
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
163
|
+
def to_gmaps4rails
|
164
|
+
json = "["
|
165
|
+
json += Gmaps4rails.create_json(self).to_s.chop #removes the extra comma
|
166
|
+
json += "]"
|
167
|
+
end
|
176
168
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
169
|
+
end
|
170
|
+
|
171
|
+
module ClassMethods
|
172
|
+
mattr_accessor :gmaps4rails_options
|
173
|
+
|
174
|
+
def acts_as_gmappable args = {}
|
175
|
+
unless args[:process_geocoding] == false
|
176
|
+
validate :process_geocoding
|
183
177
|
end
|
178
|
+
|
179
|
+
# [:lat, :lng, :check_process, :checker, :msg, :validation].each do |sym|
|
180
|
+
# Gmaps4rails::ActsAsGmappable.gmaps4rails_options[sym] = args[sym] unless args[sym].nil?
|
181
|
+
# end
|
184
182
|
|
185
|
-
|
186
|
-
[]
|
187
|
-
end
|
183
|
+
Gmaps4rails::ActsAsGmappable::ClassMethods.gmaps4rails_options = args
|
188
184
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
185
|
+
#instance method
|
186
|
+
define_method "gmaps4rails_options" do
|
187
|
+
{
|
188
|
+
:lat_column => args[:lat] || "latitude",
|
189
|
+
:lng_column => args[:lng] || "longitude",
|
190
|
+
:check_process => args[:check_process].nil? ? true : args[:check_process],
|
191
|
+
:checker => args[:checker] || "gmaps",
|
192
|
+
:msg => args[:msg] || "Address invalid",
|
193
|
+
:validation => args[:validation].nil? ? true : args[:validation]
|
194
|
+
#TODO: address as a proc?
|
195
|
+
}
|
193
196
|
end
|
194
|
-
|
195
|
-
|
197
|
+
end
|
198
|
+
include InstanceMethods
|
196
199
|
end
|
197
|
-
|
200
|
+
|
201
|
+
end #ActsAsGmappable
|
198
202
|
end
|
199
203
|
|
200
|
-
|
204
|
+
ActiveSupport.on_load(:active_record) do
|
205
|
+
ActiveRecord::Base.send(:include, Gmaps4rails::ActsAsGmappable)
|
206
|
+
end
|
207
|
+
#::ActiveRecord::Base.send :include, Gmaps4rails::ActsAsGmappable
|
201
208
|
# Mongoid::Document::ClassMethods.class_eval do
|
202
209
|
# include Gmaps4rails::ActsAsGmappable::Base
|
203
210
|
# end
|
data/lib/application_helper.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
module ApplicationHelper
|
2
2
|
|
3
|
-
def gmaps4rails(builder, enable_css = true )
|
3
|
+
def gmaps4rails(builder, enable_css = true, enable_js = true )
|
4
4
|
options = {
|
5
5
|
"map_options" => { "auto_adjust" => true},
|
6
6
|
"markers" => { "data" => builder }
|
7
7
|
}
|
8
|
-
render :partial => 'gmaps4rails/gmaps4rails', :locals => { :options => options, :enable_css => enable_css }
|
8
|
+
render :partial => 'gmaps4rails/gmaps4rails', :locals => { :options => options, :enable_css => enable_css, :enable_js => enable_js }
|
9
9
|
end
|
10
10
|
|
11
|
-
def gmaps(options, enable_css = true )
|
12
|
-
render :partial => 'gmaps4rails/gmaps4rails', :locals => { :options => options, :enable_css => enable_css }
|
11
|
+
def gmaps(options, enable_css = true, enable_js = true )
|
12
|
+
render :partial => 'gmaps4rails/gmaps4rails', :locals => { :options => options, :enable_css => enable_css, :enable_js => enable_js }
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -3,7 +3,8 @@ google.load('maps', '3', { other_params: 'libraries=geometry&sensor=false' });
|
|
3
3
|
var Gmaps4Rails = {
|
4
4
|
//map config
|
5
5
|
map: null, //contains the map we're working on
|
6
|
-
|
6
|
+
visibleInfoWindow: null,
|
7
|
+
|
7
8
|
//Map settings
|
8
9
|
map_options: {
|
9
10
|
id: 'gmaps4rails_map',
|
@@ -27,11 +28,12 @@ var Gmaps4Rails = {
|
|
27
28
|
clusterer_gridSize: 50, //the more the quicker but the less precise
|
28
29
|
clusterer_maxZoom: 5, //removes clusterer at this zoom level
|
29
30
|
randomize: false, //Google maps can't display two markers which have the same coordinates. This randomizer enables to prevent this situation from happening.
|
30
|
-
max_random_distance: 100
|
31
|
+
max_random_distance: 100, //in meters. Each marker coordinate could be altered by this distance in a random direction
|
32
|
+
list_container : null //id of the ul that will host links to all markers
|
31
33
|
},
|
32
34
|
|
33
35
|
//Stored variables
|
34
|
-
marker_objects:
|
36
|
+
marker_objects: [], //contains markers LatLng
|
35
37
|
markers : [], //contains raw markers
|
36
38
|
bounds: null, //contains current bounds
|
37
39
|
polygons: null, //contains raw data, array of arrays (first element cold be a hash containing options)
|
@@ -304,11 +306,11 @@ var Gmaps4Rails = {
|
|
304
306
|
|
305
307
|
// clear markers
|
306
308
|
clear_markers: function(){
|
307
|
-
if (this.marker_objects) {
|
309
|
+
if (this.marker_objects.size() > 0) {
|
308
310
|
for (i in this.marker_objects) {
|
309
311
|
this.marker_objects[i].setMap(null);
|
310
312
|
}
|
311
|
-
this.marker_objects =
|
313
|
+
this.marker_objects = new Array;
|
312
314
|
}
|
313
315
|
},
|
314
316
|
|
@@ -329,10 +331,7 @@ var Gmaps4Rails = {
|
|
329
331
|
},
|
330
332
|
|
331
333
|
//Creates Marker from the markers passed + markerClusterer
|
332
|
-
setup_Markers: function () {
|
333
|
-
//variable used for Marker Clusterer
|
334
|
-
var marker_objects = [];
|
335
|
-
|
334
|
+
setup_Markers: function () {
|
336
335
|
//resets Clusterer if needed
|
337
336
|
if (this.markerClusterer) {
|
338
337
|
this.markerClusterer.clearMarkers();
|
@@ -368,34 +367,57 @@ var Gmaps4Rails = {
|
|
368
367
|
}
|
369
368
|
//save object for later use, basically, to get back the text to display when clicking it
|
370
369
|
this.markers[i].marker_object = ThisMarker;
|
370
|
+
//add infowindowstuff + list creation if enabled
|
371
|
+
this.handle_info_window(this.markers[i]);
|
371
372
|
//save the marker in a list
|
372
|
-
marker_objects.push(ThisMarker);
|
373
|
-
|
374
|
-
|
375
|
-
}
|
376
|
-
this.setup_Clusterer(marker_objects);
|
373
|
+
this.marker_objects.push(ThisMarker);
|
374
|
+
}
|
375
|
+
this.setup_Clusterer();
|
377
376
|
},
|
378
377
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
378
|
+
handle_info_window: function(marker_container){
|
379
|
+
//create the infowindow
|
380
|
+
var info_window = new google.maps.InfoWindow({content: marker_container.description });
|
381
|
+
//add the listener associated
|
382
|
+
google.maps.event.addListener(marker_container.marker_object, 'click', this.openInfoWindow(info_window, marker_container.marker_object));
|
383
|
+
if (this.markers_conf.list_container)
|
384
|
+
{
|
385
|
+
var ul = document.getElementById(this.markers_conf.list_container);
|
386
|
+
var li = document.createElement('li');
|
387
|
+
var aSel = document.createElement('a');
|
388
|
+
aSel.href = 'javascript:void(0);';
|
389
|
+
var html = this.exists(marker_container.sidebar) ? marker_container.sidebar : "Marker";
|
390
|
+
aSel.innerHTML = html;
|
391
|
+
aSel.onclick = this.generateTriggerCallback(marker_container.marker_object, 'click');
|
392
|
+
li.appendChild(aSel);
|
393
|
+
ul.appendChild(li);
|
394
|
+
}
|
392
395
|
},
|
393
396
|
|
394
|
-
|
397
|
+
openInfoWindow: function(infoWindow, marker) {
|
398
|
+
return function() {
|
399
|
+
// Close the latest selected marker before opening the current one.
|
400
|
+
if (Gmaps4Rails.visibleInfoWindow) {
|
401
|
+
Gmaps4Rails.visibleInfoWindow.close();
|
402
|
+
}
|
403
|
+
|
404
|
+
infoWindow.open(Gmaps4Rails.map, marker);
|
405
|
+
Gmaps4Rails.visibleInfoWindow = infoWindow;
|
406
|
+
};
|
407
|
+
},
|
408
|
+
|
409
|
+
generateTriggerCallback: function(marker, eventType) {
|
410
|
+
return function() {
|
411
|
+
Gmaps4Rails.map.panTo(marker.position);
|
412
|
+
google.maps.event.trigger(marker, eventType);
|
413
|
+
};
|
414
|
+
},
|
415
|
+
|
416
|
+
setup_Clusterer: function()
|
395
417
|
{
|
396
418
|
if (this.markers_conf.do_clustering == true)
|
397
419
|
{
|
398
|
-
this.markerClusterer = new MarkerClusterer(this.map, marker_objects, { maxZoom: this.markers_conf.clusterer_maxZoom,
|
420
|
+
this.markerClusterer = new MarkerClusterer(this.map, this.marker_objects, { maxZoom: this.markers_conf.clusterer_maxZoom,
|
399
421
|
gridSize: this.markers_conf.clusterer_gridSize,
|
400
422
|
//styles: styles TODO: offer clusterer customization
|
401
423
|
});
|
data/test/dummy/config/routes.rb
CHANGED
@@ -81,6 +81,46 @@ describe "JS creation from hash" do
|
|
81
81
|
end
|
82
82
|
end
|
83
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.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.markers_conf.list_container = 'makers_list';\nGmaps4Rails.markers_conf.do_clustering = false;\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();"
|
119
|
+
@options.to_gmaps4rails(true).should include "Gmaps4Rails.initialize();"
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
84
124
|
describe "Destination" do
|
85
125
|
it "should render info from only start_end args"
|
86
126
|
it "should accept all options properly"
|
@@ -2,6 +2,43 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
2
|
|
3
3
|
describe "Acts as gmappable" do
|
4
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
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def gmaps4rails_address
|
20
|
+
address
|
21
|
+
end
|
22
|
+
|
23
|
+
def gmaps4rails_sidebar
|
24
|
+
end
|
25
|
+
|
26
|
+
def gmaps4rails_infowindow
|
27
|
+
end
|
28
|
+
|
29
|
+
def gmaps4rails_title
|
30
|
+
end
|
31
|
+
|
32
|
+
def gmaps4rails_marker_picture
|
33
|
+
{
|
34
|
+
"picture" => "",
|
35
|
+
"width" => "",
|
36
|
+
"height" => ""
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
5
42
|
describe "standard configuration, valid user" do
|
6
43
|
before(:each) do
|
7
44
|
@user = Factory(:user)
|
@@ -18,11 +55,11 @@ describe "Acts as gmappable" do
|
|
18
55
|
|
19
56
|
it "should render a valid json from an array of ojects" do
|
20
57
|
@user2 = Factory(:user_paris)
|
21
|
-
User.all.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ,{\n\"description\": \"\", \"title\": \"\",\n\"longitude\": \"2.3509871\", \"latitude\": \"48.8566667\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
58
|
+
User.all.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ,{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"2.3509871\", \"latitude\": \"48.8566667\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
22
59
|
end
|
23
60
|
|
24
61
|
it "should render a valid json from a single object" do
|
25
|
-
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
62
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
26
63
|
end
|
27
64
|
|
28
65
|
it "should not geocode again after address changes if checker is true" do
|
@@ -57,7 +94,8 @@ describe "Acts as gmappable" do
|
|
57
94
|
end
|
58
95
|
|
59
96
|
|
60
|
-
describe "model customization" do
|
97
|
+
describe "model customization" do
|
98
|
+
|
61
99
|
it "should render a valid json even if there is no instance in the db" do
|
62
100
|
User.all.to_gmaps4rails.should == "[]"
|
63
101
|
end
|
@@ -114,7 +152,7 @@ describe "Acts as gmappable" do
|
|
114
152
|
@user.long_test.should == 5.9311119
|
115
153
|
@user.longitude.should == nil
|
116
154
|
@user.latitude.should == nil
|
117
|
-
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
155
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
118
156
|
end
|
119
157
|
|
120
158
|
it "should not save the boolean if check_process is false" do
|
@@ -179,14 +217,11 @@ describe "Acts as gmappable" do
|
|
179
217
|
end
|
180
218
|
end
|
181
219
|
@user = Factory(:user_with_pic)
|
182
|
-
@user.to_gmaps4rails.should == "[{\n\"description\": \"My Beautiful Picture: http://www.blankdots.com/img/github-32x32.png\", \"title\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
220
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"My Beautiful Picture: http://www.blankdots.com/img/github-32x32.png\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
183
221
|
end
|
184
222
|
|
185
223
|
it "should take into account the picture provided in the model" do
|
186
224
|
User.class_eval do
|
187
|
-
def gmaps4rails_infowindow
|
188
|
-
#to reset the former declaration
|
189
|
-
end
|
190
225
|
def gmaps4rails_marker_picture
|
191
226
|
{
|
192
227
|
"picture" => "http://www.blankdots.com/img/github-32x32.png",
|
@@ -196,7 +231,7 @@ describe "Acts as gmappable" do
|
|
196
231
|
end
|
197
232
|
end
|
198
233
|
@user = Factory(:user)
|
199
|
-
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"http://www.blankdots.com/img/github-32x32.png\", \"width\": \"32\", \"height\": \"32\"\n} ]"
|
234
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"http://www.blankdots.com/img/github-32x32.png\", \"width\": \"32\", \"height\": \"32\"\n} ]"
|
200
235
|
end
|
201
236
|
|
202
237
|
it "should take into account the title provided in the model" do
|
@@ -206,7 +241,17 @@ describe "Acts as gmappable" do
|
|
206
241
|
end
|
207
242
|
end
|
208
243
|
@user = Factory(:user)
|
209
|
-
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"Sweet Title\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"
|
244
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"Sweet Title\", \"sidebar\": \"\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should take into account the sidebar content provided in the model" do
|
248
|
+
User.class_eval do
|
249
|
+
def gmaps4rails_sidebar
|
250
|
+
"sidebar content"
|
251
|
+
end
|
252
|
+
end
|
253
|
+
@user = Factory(:user)
|
254
|
+
@user.to_gmaps4rails.should == "[{\n\"description\": \"\", \"title\": \"\", \"sidebar\": \"sidebar content\",\n\"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\"\n} ]"
|
210
255
|
end
|
211
256
|
end
|
212
257
|
|
@@ -0,0 +1,23 @@
|
|
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
|
23
|
+
|
@@ -2,10 +2,12 @@
|
|
2
2
|
ENV["RAILS_ENV"] ||= 'test'
|
3
3
|
require File.expand_path("../../config/environment", __FILE__)
|
4
4
|
require 'rspec/rails'
|
5
|
+
require 'capybara/rspec'
|
5
6
|
|
6
7
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
7
8
|
# in spec/support/ and its subdirectories.
|
8
9
|
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
10
|
+
Capybara.server_boot_timeout = 50
|
9
11
|
|
10
12
|
RSpec.configure do |config|
|
11
13
|
# == Mock Framework
|
@@ -23,5 +25,17 @@ RSpec.configure do |config|
|
|
23
25
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
24
26
|
# examples within a transaction, remove the following line or assign false
|
25
27
|
# instead of true.
|
26
|
-
config.use_transactional_fixtures =
|
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
|
27
41
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmaps4rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Benjamin Roth
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-04-08 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -68,7 +68,6 @@ files:
|
|
68
68
|
- test/dummy/app/helpers/application_helper.rb
|
69
69
|
- test/dummy/app/helpers/users_helper.rb
|
70
70
|
- test/dummy/app/models/user.rb
|
71
|
-
- test/dummy/app/views/users/test.rb
|
72
71
|
- test/dummy/config/application.rb
|
73
72
|
- test/dummy/config/boot.rb
|
74
73
|
- test/dummy/config/environment.rb
|
@@ -88,6 +87,7 @@ files:
|
|
88
87
|
- test/dummy/spec/controllers/users_controller_spec.rb
|
89
88
|
- test/dummy/spec/factories.rb
|
90
89
|
- test/dummy/spec/models/user_spec.rb
|
90
|
+
- test/dummy/spec/requests/users_spec.rb
|
91
91
|
- test/dummy/spec/spec_helper.rb
|
92
92
|
has_rdoc: true
|
93
93
|
homepage: http://github.com/apneadiving/Google-Maps-for-Rails
|
@@ -129,7 +129,6 @@ test_files:
|
|
129
129
|
- test/dummy/app/helpers/application_helper.rb
|
130
130
|
- test/dummy/app/helpers/users_helper.rb
|
131
131
|
- test/dummy/app/models/user.rb
|
132
|
-
- test/dummy/app/views/users/test.rb
|
133
132
|
- test/dummy/config/application.rb
|
134
133
|
- test/dummy/config/boot.rb
|
135
134
|
- test/dummy/config/environment.rb
|
@@ -149,4 +148,5 @@ test_files:
|
|
149
148
|
- test/dummy/spec/controllers/users_controller_spec.rb
|
150
149
|
- test/dummy/spec/factories.rb
|
151
150
|
- test/dummy/spec/models/user_spec.rb
|
151
|
+
- test/dummy/spec/requests/users_spec.rb
|
152
152
|
- test/dummy/spec/spec_helper.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
Gmaps4Rails.map_options.center_longitude = 180;
|
2
|
-
Gmaps4Rails.map_options.type = 'SATELLITE';
|
3
|
-
Gmaps4Rails.map_options.zoom = 3;
|
4
|
-
Gmaps4Rails.initialize();
|
5
|
-
Gmaps4Rails.polylines = [[
|
6
|
-
{\"longitude\": -122.214897, \"latitude\": 37.772323},
|
7
|
-
{\"longitude\": -157.821856, \"latitude\": 21.291982},
|
8
|
-
{\"longitude\": 178.431, \"latitude\": -18.142599},
|
9
|
-
{\"longitude\": 153.027892, \"latitude\": -27.46758}
|
10
|
-
],
|
11
|
-
[
|
12
|
-
{\"longitude\": -120.214897, \"latitude\": 30.772323, \"strokeColor\": \"#000\", \"strokeWeight\" : 2 },
|
13
|
-
{\"longitude\": -10.821856, \"latitude\": 50.291982}
|
14
|
-
]];
|
15
|
-
Gmaps4Rails.create_polylines();
|
16
|
-
Gmaps4Rails.circles = [
|
17
|
-
{\"longitude\": -122.214897, \"latitude\": 37.772323, \"radius\": 1000000},
|
18
|
-
{\"longitude\": 122.214897, \"latitude\": 37.772323, \"radius\": 1000000, \"strokeColor\": \"#FF0000\"}
|
19
|
-
];
|
20
|
-
Gmaps4Rails.create_circles();
|
21
|
-
Gmaps4Rails.polygons = [[
|
22
|
-
{\"longitude\": -80.190262, \"latitude\": 25.774252},
|
23
|
-
{\"longitude\": -66.118292, \"latitude\": 18.466465},
|
24
|
-
{\"longitude\": -64.75737, \"latitude\": 32.321384}
|
25
|
-
]];
|
26
|
-
Gmaps4Rails.create_polygons();
|
27
|
-
Gmaps4Rails.markers = [{ \"description\": \"\", \"title\": \"\", \"longitude\": \"5.9311119\", \"latitude\": \"43.1251606\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ,{ \"description\": \"\", \"title\": \"\", \"longitude\": \"2.3509871\", \"latitude\": \"48.8566667\", \"picture\": \"\", \"width\": \"\", \"height\": \"\" } ];
|
28
|
-
Gmaps4Rails.create_markers();
|
29
|
-
Gmaps4Rails.direction_conf.origin = 'toulon, france';
|
30
|
-
Gmaps4Rails.direction_conf.destination = 'paris, france';
|
31
|
-
Gmaps4Rails.direction_conf.display_panel = 'true';
|
32
|
-
Gmaps4Rails.direction_conf.panel_id = 'instructions';
|
33
|
-
Gmaps4Rails.direction_conf.travelMode = 'DRIVING';
|
34
|
-
Gmaps4Rails.direction_conf.waypoints = [{\"stopover\":true,\"location\":\"toulouse, france\"},{\"stopover\":true,\"location\":\"brest, france\"}];
|
35
|
-
Gmaps4Rails.create_direction();
|