gmaps4rails 1.5.2 → 1.5.3

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.
Files changed (46) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +7 -1
  3. data/README.rdoc +2 -2
  4. data/app/assets/javascripts/gmaps4rails/gmaps4rails.base.js.coffee +37 -96
  5. data/app/assets/javascripts/gmaps4rails/gmaps4rails.bing.js.coffee +11 -0
  6. data/app/assets/javascripts/gmaps4rails/gmaps4rails.googlemaps.js.coffee +85 -9
  7. data/app/assets/javascripts/gmaps4rails/gmaps4rails.mapquest.js.coffee +13 -2
  8. data/app/assets/javascripts/gmaps4rails/gmaps4rails.openlayers.js.coffee +54 -2
  9. data/app/views/gmaps4rails/_gmaps4rails.html.erb +1 -1
  10. data/gmaps4rails.gemspec +1 -0
  11. data/lib/generators/gmaps4rails/install_generator.rb +28 -12
  12. data/lib/gmaps4rails/acts_as_gmappable.rb +3 -46
  13. data/lib/gmaps4rails/api_wrappers/base_net_methods.rb +40 -0
  14. data/lib/gmaps4rails/api_wrappers/direction.rb +87 -0
  15. data/lib/gmaps4rails/api_wrappers/geocoder.rb +54 -0
  16. data/lib/gmaps4rails/api_wrappers/places.rb +74 -0
  17. data/lib/gmaps4rails/base.rb +80 -22
  18. data/lib/gmaps4rails/extensions/{array.rb → enumerable.rb} +1 -1
  19. data/lib/gmaps4rails/js_builder.rb +9 -17
  20. data/lib/gmaps4rails/json_builder.rb +1 -7
  21. data/lib/gmaps4rails/model_handler.rb +79 -0
  22. data/lib/gmaps4rails/version.rb +1 -1
  23. data/lib/gmaps4rails/view_helper.rb +4 -6
  24. data/public/javascripts/gmaps4rails/gmaps4rails.base.js +35 -112
  25. data/public/javascripts/gmaps4rails/gmaps4rails.bing.js +12 -0
  26. data/public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js +123 -7
  27. data/public/javascripts/gmaps4rails/gmaps4rails.mapquest.js +12 -0
  28. data/public/javascripts/gmaps4rails/gmaps4rails.openlayers.js +53 -2
  29. data/spec/dummy/app/views/users/index.html.erb +88 -85
  30. data/spec/fixtures/google_direction_valid.json +65 -0
  31. data/spec/fixtures/google_geocoding_toulon_france.json +58 -0
  32. data/spec/fixtures/google_places_valid.json +45 -0
  33. data/spec/fixtures/google_wrong_geocoding.json +4 -0
  34. data/spec/lib/base_spec.rb +59 -0
  35. data/spec/lib/direction_spec.rb +53 -0
  36. data/spec/lib/geocoder_spec.rb +46 -0
  37. data/spec/{base/base_spec.rb → lib/js_builder_spec.rb} +0 -6
  38. data/spec/lib/json_builder_spec.rb +232 -0
  39. data/spec/lib/places_spec.rb +25 -0
  40. data/spec/models/user_spec.rb +75 -357
  41. data/spec/spec_helper.rb +1 -0
  42. data/spec/support/geocoding.rb +27 -1
  43. metadata +47 -12
  44. data/lib/gmaps4rails/geocoding.rb +0 -113
  45. data/lib/gmaps4rails/google_places.rb +0 -76
  46. data/spec/base/geocoding_spec.rb +0 -17
data/.gitignore CHANGED
@@ -9,3 +9,4 @@ test/dummy/log/**/*
9
9
  test/dummy/.rvmrc
10
10
  pkg
11
11
  .idea
12
+ .redcar
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gmaps4rails (1.5.2)
4
+ gmaps4rails (1.5.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -33,6 +33,7 @@ GEM
33
33
  activesupport (3.2.3)
34
34
  i18n (~> 0.6)
35
35
  multi_json (~> 1.0)
36
+ addressable (2.2.8)
36
37
  arel (3.0.2)
37
38
  builder (3.0.0)
38
39
  childprocess (0.3.1)
@@ -42,6 +43,7 @@ GEM
42
43
  coffee-script-source
43
44
  execjs
44
45
  coffee-script-source (1.2.0)
46
+ crack (0.3.1)
45
47
  database_cleaner (0.7.2)
46
48
  diff-lcs (1.1.3)
47
49
  erubis (2.7.0)
@@ -152,6 +154,9 @@ GEM
152
154
  polyglot
153
155
  polyglot (>= 0.3.1)
154
156
  tzinfo (0.3.32)
157
+ webmock (1.8.7)
158
+ addressable (>= 2.2.7)
159
+ crack (>= 0.1.7)
155
160
 
156
161
  PLATFORMS
157
162
  ruby
@@ -171,3 +176,4 @@ DEPENDENCIES
171
176
  rails (~> 3.2.1)
172
177
  rspec-rails
173
178
  sqlite3
179
+ webmock
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- == Google Maps for Rails (gmaps4rails) {<img src="https://secure.travis-ci.org/apneadiving/Google-Maps-for-Rails.png?branch=master" alt="Build Status" />}[http://travis-ci.org/apneadiving/Google-Maps-for-Rails]
1
+ == Google Maps for Rails (gmaps4rails) {<img src="https://secure.travis-ci.org/apneadiving/Google-Maps-for-Rails.png?branch=master" alt="Build Status" />}[http://travis-ci.org/apneadiving/Google-Maps-for-Rails] {<img src="https://codeclimate.com/badge.png" />}[https://codeclimate.com/github/apneadiving/Google-Maps-for-Rails]
2
2
 
3
3
  Gmaps4rails is developed to simply create a Google Map:
4
4
 
@@ -124,4 +124,4 @@ MIT license.
124
124
 
125
125
  Authors: Benjamin Roth, David Ruyer
126
126
 
127
- Contributors: Mircea Pricop, Kamil Śliwak, Alex Vorobiev
127
+ {Contributors}[https://github.com/apneadiving/Google-Maps-for-Rails/graphs/contributors]
@@ -70,6 +70,14 @@ class @Gmaps4Rails
70
70
  @markerClusterer = null # contains all marker clusterers
71
71
  @markerImages = []
72
72
 
73
+ #Polyline Styling
74
+ @polylines_conf = #default style for polylines
75
+ strokeColor: "#FF0000"
76
+ strokeOpacity: 1
77
+ strokeWeight: 2
78
+ clickable: false
79
+ zIndex: null
80
+
73
81
  #tnitializes the map
74
82
  initialize : ->
75
83
  @serviceObject = @createMap()
@@ -228,73 +236,7 @@ class @Gmaps4Rails
228
236
  #save polygon in list
229
237
  polygon.serviceObject = new_poly
230
238
 
231
- #////////////////////////////////////////////////////
232
- #/////////////////// POLYLINES //////////////////////
233
- #////////////////////////////////////////////////////
234
-
235
- #replace old markers with new markers on an existing map
236
- replacePolylines : (new_polylines) ->
237
- #reset previous polylines and kill them from map
238
- @destroy_polylines()
239
- #set new polylines
240
- @polylines = new_polylines
241
- #create
242
- @create_polylines()
243
- #.... and adjust map boundaries
244
- @adjustMapToBounds()
245
-
246
- destroy_polylines : ->
247
- for polyline in @polylines
248
- #delete polylines from map
249
- polyline.serviceObject.setMap(null)
250
- #empty array
251
- @polylines = []
252
-
253
- #polylines is an array of arrays. It loops.
254
- create_polylines : ->
255
- for polyline in @polylines
256
- @create_polyline polyline
257
-
258
- #creates a single polyline, triggered by create_polylines
259
- create_polyline : (polyline) ->
260
- polyline_coordinates = []
261
-
262
- #2 cases here, either we have a coded array of LatLng or we have an Array of LatLng
263
- for element in polyline
264
- #if we have a coded array
265
- if element.coded_array?
266
- decoded_array = new google.maps.geometry.encoding.decodePath(element.coded_array)
267
- #loop through every point in the array
268
- for point in decoded_array
269
- polyline_coordinates.push(point)
270
-
271
- #or we have an array of latlng
272
- else
273
- #by convention, a single polyline could be customized in the first array or it uses default values
274
- if element == polyline[0]
275
- strokeColor = element.strokeColor || @polylines_conf.strokeColor
276
- strokeOpacity = element.strokeOpacity || @polylines_conf.strokeOpacity
277
- strokeWeight = element.strokeWeight || @polylines_conf.strokeWeight
278
- clickable = element.clickable || @polylines_conf.clickable
279
- zIndex = element.zIndex || @polylines_conf.zIndex
280
-
281
- #add latlng if positions provided
282
- if element.lat? && element.lng?
283
- latlng = @createLatLng(element.lat, element.lng)
284
- polyline_coordinates.push(latlng)
285
-
286
- # Construct the polyline
287
- new_poly = new google.maps.Polyline
288
- path: polyline_coordinates
289
- strokeColor: strokeColor
290
- strokeOpacity: strokeOpacity
291
- strokeWeight: strokeWeight
292
- clickable: clickable
293
- zIndex: zIndex
294
-
295
- #save polyline
296
- polyline.serviceObject = new_poly
297
- new_poly.setMap(@serviceObject)
239
+
298
240
 
299
241
  #////////////////////////////////////////////////////
300
242
  #///////////////////// MARKERS //////////////////////
@@ -421,47 +363,46 @@ class @Gmaps4Rails
421
363
  @extendBoundsWithMarkers()
422
364
 
423
365
  #from polylines:
424
- for polyline in @polylines
425
- polyline_points = polyline.serviceObject.latLngs.getArray()[0].getArray()
426
- for point in polyline_points
427
- @boundsObject.extend point
366
+ @updateBoundsWithPolylines()
428
367
 
429
368
  #from polygons:
430
- for polygon in @polygons
431
- polygon_points = polygon.serviceObject.latLngs.getArray()[0].getArray()
432
- for point in polygon_points
433
- @boundsObject.extend point
369
+ @updateBoundsWithPolygons()
434
370
 
435
371
  #from circles
436
- for circle in @circles
437
- @boundsObject.extend(circle.serviceObject.getBounds().getNorthEast())
438
- @boundsObject.extend(circle.serviceObject.getBounds().getSouthWest())
372
+ @updateBoundsWithCircles()
439
373
 
440
374
  #in every case, I've to take into account the bounds set up by the user
441
- for bound in @map_options.bounds
442
- #create points from bounds provided
443
- #TODO:only works with google maps
444
- bound = @createLatLng(bound.lat, bound.lng)
445
- @boundsObject.extend bound
375
+ @extendMapBounds()
446
376
 
447
377
  #SECOND_STEP: ajust the map to the bounds
448
-
449
- #if autozoom is false, take user info into account
450
- if !@map_options.auto_zoom
451
- map_center = @boundsObject.getCenter()
452
- @map_options.center_latitude = map_center.lat()
453
- @map_options.center_longitude = map_center.lng()
454
- @serviceObject.setCenter(map_center)
455
- else
456
- @fitBounds()
378
+ @adaptMapToBounds()
457
379
 
458
380
  #////////////////////////////////////////////////////
459
- #///////////////// KML //////////////////
381
+ #/////////////////// POLYLINES //////////////////////
460
382
  #////////////////////////////////////////////////////
461
383
 
462
- create_kml : ->
463
- for kml in @kml
464
- kml.serviceObject = @createKmlLayer kml
384
+ #replace old markers with new markers on an existing map
385
+ replacePolylines : (new_polylines) ->
386
+ #reset previous polylines and kill them from map
387
+ @destroy_polylines()
388
+ #set new polylines
389
+ @polylines = new_polylines
390
+ #create
391
+ @create_polylines()
392
+ #.... and adjust map boundaries
393
+ @adjustMapToBounds()
394
+
395
+ destroy_polylines : ->
396
+ for polyline in @polylines
397
+ #delete polylines from map
398
+ polyline.serviceObject.setMap(null)
399
+ #empty array
400
+ @polylines = []
401
+
402
+ #polylines is an array of arrays. It loops.
403
+ create_polylines : ->
404
+ for polyline in @polylines
405
+ @create_polyline polyline
465
406
 
466
407
  #////////////////////////////////////////////////////
467
408
  #///////////////// Basic functions //////////////////
@@ -161,3 +161,14 @@ class @Gmaps4RailsBing extends Gmaps4Rails
161
161
 
162
162
  centerMapOnUser: ->
163
163
  @serviceObject.setView({ center: @userLocation})
164
+
165
+ updateBoundsWithPolylines: ()->
166
+
167
+ updateBoundsWithPolygons: ()->
168
+
169
+ updateBoundsWithCircles: ()->
170
+
171
+ extendMapBounds :->
172
+
173
+ adaptMapToBounds: ->
174
+ @fitBounds()
@@ -36,14 +36,6 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
36
36
  fillOpacity: 0.35
37
37
  clickable: false
38
38
 
39
- #Polyline Styling
40
- @polylines_conf = #default style for polylines
41
- strokeColor: "#FF0000"
42
- strokeOpacity: 1
43
- strokeWeight: 2
44
- clickable: false
45
- zIndex: null
46
-
47
39
  #Circle Styling
48
40
  @circles_conf = #default style for circles
49
41
  fillColor: "#00AAFF"
@@ -250,7 +242,66 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
250
242
  kml.setMap(@serviceObject)
251
243
  return kml
252
244
 
245
+ #////////////////////////////////////////////////////
246
+ #/////////////////// POLYLINES //////////////////////
247
+ #////////////////////////////////////////////////////
248
+
249
+ #creates a single polyline, triggered by create_polylines
250
+ create_polyline : (polyline) ->
251
+ polyline_coordinates = []
253
252
 
253
+ #2 cases here, either we have a coded array of LatLng or we have an Array of LatLng
254
+ for element in polyline
255
+ #if we have a coded array
256
+ if element.coded_array?
257
+ decoded_array = new google.maps.geometry.encoding.decodePath(element.coded_array)
258
+ #loop through every point in the array
259
+ for point in decoded_array
260
+ polyline_coordinates.push(point)
261
+
262
+ #or we have an array of latlng
263
+ else
264
+ #by convention, a single polyline could be customized in the first array or it uses default values
265
+ if element == polyline[0]
266
+ strokeColor = element.strokeColor || @polylines_conf.strokeColor
267
+ strokeOpacity = element.strokeOpacity || @polylines_conf.strokeOpacity
268
+ strokeWeight = element.strokeWeight || @polylines_conf.strokeWeight
269
+ clickable = element.clickable || @polylines_conf.clickable
270
+ zIndex = element.zIndex || @polylines_conf.zIndex
271
+
272
+ #add latlng if positions provided
273
+ if element.lat? && element.lng?
274
+ latlng = @createLatLng(element.lat, element.lng)
275
+ polyline_coordinates.push(latlng)
276
+
277
+ # Construct the polyline
278
+ new_poly = new google.maps.Polyline
279
+ path: polyline_coordinates
280
+ strokeColor: strokeColor
281
+ strokeOpacity: strokeOpacity
282
+ strokeWeight: strokeWeight
283
+ clickable: clickable
284
+ zIndex: zIndex
285
+
286
+ #save polyline
287
+ polyline.serviceObject = new_poly
288
+ new_poly.setMap(@serviceObject)
289
+
290
+
291
+ updateBoundsWithPolylines: ()->
292
+ for polyline in @polylines
293
+ polyline_points = polyline.serviceObject.latLngs.getArray()[0].getArray()
294
+ for point in polyline_points
295
+ @boundsObject.extend point
296
+
297
+ #////////////////////////////////////////////////////
298
+ #///////////////// KML //////////////////
299
+ #////////////////////////////////////////////////////
300
+
301
+ create_kml : ->
302
+ for kml in @kml
303
+ kml.serviceObject = @createKmlLayer kml
304
+
254
305
  #////////////////////////////////////////////////////
255
306
  #/////////////////// Other methods //////////////////
256
307
  #////////////////////////////////////////////////////
@@ -260,4 +311,29 @@ class @Gmaps4RailsGoogle extends Gmaps4Rails
260
311
 
261
312
  centerMapOnUser : ->
262
313
  @serviceObject.setCenter(@userLocation)
263
-
314
+
315
+ updateBoundsWithPolygons: ()->
316
+ for polygon in @polygons
317
+ polygon_points = polygon.serviceObject.latLngs.getArray()[0].getArray()
318
+ for point in polygon_points
319
+ @boundsObject.extend point
320
+
321
+ updateBoundsWithCircles: ()->
322
+ for circle in @circles
323
+ @boundsObject.extend(circle.serviceObject.getBounds().getNorthEast())
324
+ @boundsObject.extend(circle.serviceObject.getBounds().getSouthWest())
325
+
326
+ extendMapBounds: ()->
327
+ for bound in @map_options.bounds
328
+ #create points from bounds provided
329
+ @boundsObject.extend @createLatLng(bound.lat, bound.lng)
330
+
331
+ adaptMapToBounds:()->
332
+ #if autozoom is false, take user info into account
333
+ if !@map_options.auto_zoom
334
+ map_center = @boundsObject.getCenter()
335
+ @map_options.center_latitude = map_center.lat()
336
+ @map_options.center_longitude = map_center.lng()
337
+ @serviceObject.setCenter(map_center)
338
+ else
339
+ @fitBounds()
@@ -1,7 +1,7 @@
1
1
  #######################################################################################################
2
2
  ############################################## Map Quest #############################################
3
3
  #######################################################################################################
4
- # http://www.mapquestapi.com/sdk/js/v6.0.0/poi.html
4
+ # http://developer.mapquest.com/web/documentation/sdk/javascript/v7.0/api/MQA.Poi.html
5
5
 
6
6
  class @Gmaps4RailsMapquest extends Gmaps4Rails
7
7
 
@@ -131,4 +131,15 @@ class @Gmaps4RailsMapquest extends Gmaps4Rails
131
131
  @serviceObject.addShape object
132
132
 
133
133
  removeFromMap: (object)->
134
- @serviceObject.removeShape object
134
+ @serviceObject.removeShape object
135
+
136
+ updateBoundsWithPolylines: ()->
137
+
138
+ updateBoundsWithPolygons: ()->
139
+
140
+ updateBoundsWithCircles: ()->
141
+
142
+ extendMapBounds :->
143
+
144
+ adaptMapToBounds: ->
145
+ @fitBounds()
@@ -18,6 +18,7 @@ class @Gmaps4RailsOpenlayers extends Gmaps4Rails
18
18
  @openMarkers = null
19
19
  @markersLayer = null
20
20
  @markersControl = null
21
+ @polylinesLayer = null
21
22
 
22
23
  #////////////////////////////////////////////////////
23
24
  #/////////////// Basic Objects ////////////////////
@@ -110,6 +111,7 @@ class @Gmaps4RailsOpenlayers extends Gmaps4Rails
110
111
  @serviceObject.removeLayer(@markersLayer) if @markersLayer != null and @serviceObject.getLayer(@markersLayer.id) != null
111
112
 
112
113
  extendBoundsWithMarkers: ->
114
+ console.log "here"
113
115
  for marker in @markers
114
116
  @boundsObject.extend(@createLatLng(marker.lat,marker.lng))
115
117
 
@@ -187,16 +189,62 @@ class @Gmaps4RailsOpenlayers extends Gmaps4Rails
187
189
  null, true, @onPopupClose)
188
190
  feature.popup = popup
189
191
  popup.feature = feature
190
- @serviceObject.addPopup popup
192
+ @map.addPopup popup
191
193
 
192
194
  onFeatureUnselect: (evt) ->
193
195
  feature = evt.feature
194
196
  if feature.popup
195
197
  #//popup.feature = null;
196
- @serviceObject.removePopup feature.popup
198
+ @map.removePopup feature.popup
197
199
  feature.popup.destroy()
198
200
  feature.popup = null
199
201
 
202
+ #////////////////////////////////////////////////////
203
+ #/////////////////// POLYLINES //////////////////////
204
+ #////////////////////////////////////////////////////
205
+
206
+ create_polyline : (polyline) ->
207
+
208
+ if(@polylinesLayer == null)
209
+ @polylinesLayer = new OpenLayers.Layer.Vector("Polylines", null)
210
+ @serviceObject.addLayer(@polylinesLayer)
211
+ @polylinesLayer.events.register("featureselected", @polylinesLayer, @onFeatureSelect)
212
+ @polylinesLayer.events.register("featureunselected", @polylinesLayer, @onFeatureUnselect)
213
+ @polylinesControl = new OpenLayers.Control.DrawFeature(@polylinesLayer, OpenLayers.Handler.Path)
214
+ @serviceObject.addControl(@polylinesControl)
215
+
216
+ polyline_coordinates = []
217
+
218
+ for element in polyline
219
+ #by convention, a single polyline could be customized in the first array or it uses default values
220
+ if element == polyline[0]
221
+ strokeColor = element.strokeColor || @polylines_conf.strokeColor
222
+ strokeOpacity = element.strokeOpacity || @polylines_conf.strokeOpacity
223
+ strokeWeight = element.strokeWeight || @polylines_conf.strokeWeight
224
+ clickable = element.clickable || @polylines_conf.clickable
225
+ zIndex = element.zIndex || @polylines_conf.zIndex
226
+
227
+ #add latlng if positions provided
228
+ if element.lat? && element.lng?
229
+ latlng = new OpenLayers.Geometry.Point(element.lng, element.lat)
230
+ polyline_coordinates.push(latlng)
231
+
232
+ line_points = new OpenLayers.Geometry.LineString(polyline_coordinates);
233
+ line_style = { strokeColor: strokeColor, strokeOpacity: strokeOpacity, strokeWidth: strokeWeight };
234
+
235
+ polyline = new OpenLayers.Feature.Vector(line_points, null, line_style);
236
+ polyline.geometry.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"))
237
+
238
+ @polylinesLayer.addFeatures([polyline])
239
+
240
+ return polyline
241
+
242
+ updateBoundsWithPolylines: ()->
243
+
244
+ updateBoundsWithPolygons: ()->
245
+
246
+ updateBoundsWithCircles: ()->
247
+
200
248
  # #////////////////////////////////////////////////////
201
249
  # #/////////////////// Other methods //////////////////
202
250
  # #////////////////////////////////////////////////////
@@ -207,3 +255,7 @@ class @Gmaps4RailsOpenlayers extends Gmaps4Rails
207
255
  centerMapOnUser: ->
208
256
  @serviceObject.setCenter @userLocation
209
257
 
258
+ extendMapBounds :->
259
+
260
+ adaptMapToBounds: ->
261
+ @fitBounds()
@@ -1,5 +1,5 @@
1
1
  <% content_for :scripts do %>
2
- <%= javascript_include_tag *js_dependencies %>
2
+ <%= javascript_include_tag *(js_dependencies.map(&:html_safe)) %>
3
3
 
4
4
  <script type="text/javascript" charset="utf-8">
5
5
  <%=raw options.to_gmaps4rails %>
data/gmaps4rails.gemspec CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.add_development_dependency "guard-rspec"
33
33
 
34
34
  s.add_development_dependency "factory_girl_rails"
35
+ s.add_development_dependency "webmock"
35
36
 
36
37
  s.add_development_dependency 'pry'
37
38
  end
@@ -7,22 +7,38 @@ module Gmaps4rails
7
7
 
8
8
  def copy_locale
9
9
  if Rails::VERSION::MINOR >= 1
10
- copy_file '../../../app/assets/javascripts/gmaps4rails/gmaps4rails.base.js.coffee', 'app/assets/javascripts/gmaps4rails/gmaps4rails.base.js.coffee'
11
- copy_file '../../../app/assets/javascripts/gmaps4rails/gmaps4rails.googlemaps.js.coffee', 'app/assets/javascripts/gmaps4rails/gmaps4rails.googlemaps.js.coffee'
12
- copy_file '../../../app/assets/javascripts/gmaps4rails/gmaps4rails.openlayers.js.coffee', 'app/assets/javascripts/gmaps4rails/gmaps4rails.openlayers.js.coffee'
13
- copy_file '../../../app/assets/javascripts/gmaps4rails/gmaps4rails.bing.js.coffee', 'app/assets/javascripts/gmaps4rails/gmaps4rails.bing.js.coffee'
14
- copy_file '../../../app/assets/javascripts/gmaps4rails/gmaps4rails.mapquest.js.coffee', 'app/assets/javascripts/gmaps4rails/gmaps4rails.mapquest.js.coffee'
15
- copy_file '../../../public/stylesheets/gmaps4rails.css', 'app/assets/stylesheets/gmaps4rails.css'
10
+ copy_file "#{source_assets_base_path}gmaps4rails.base.js.coffee", "#{destination_assets_base_path}gmaps4rails.base.js.coffee"
11
+ copy_file "#{source_assets_base_path}gmaps4rails.googlemaps.js.coffee", "#{destination_assets_base_path}gmaps4rails.googlemaps.js.coffee"
12
+ copy_file "#{source_assets_base_path}gmaps4rails.openlayers.js.coffee", "#{destination_assets_base_path}gmaps4rails.openlayers.js.coffee"
13
+ copy_file "#{source_assets_base_path}gmaps4rails.bing.js.coffee", "#{destination_assets_base_path}gmaps4rails.bing.js.coffee"
14
+ copy_file "#{source_assets_base_path}gmaps4rails.mapquest.js.coffee", "#{destination_assets_base_path}gmaps4rails.mapquest.js.coffee"
15
+ copy_file "../../../public/stylesheets/gmaps4rails.css", "app/assets/stylesheets/gmaps4rails.css"
16
16
  else
17
17
  #I don't copy manifests, kind of useless
18
- copy_file '../../../public/javascripts/gmaps4rails/gmaps4rails.base.js', 'public/javascripts/gmaps4rails/gmaps4rails.base.js'
19
- copy_file '../../../public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js', 'public/javascripts/gmaps4rails/gmaps4rails.googlemaps.js'
20
- copy_file '../../../public/javascripts/gmaps4rails/gmaps4rails.bing.js', 'public/javascripts/gmaps4rails/gmaps4rails.bing.js'
21
- copy_file '../../../public/javascripts/gmaps4rails/gmaps4rails.openlayers.js', 'public/javascripts/gmaps4rails/gmaps4rails.openlayers.js'
22
- copy_file '../../../public/javascripts/gmaps4rails/gmaps4rails.mapquest.js', 'public/javascripts/gmaps4rails/gmaps4rails.mapquest.js'
23
- copy_file '../../../public/stylesheets/gmaps4rails.css', 'public/stylesheets/gmaps4rails.css'
18
+ copy_file "#{source_js_base_path}gmaps4rails.base.js", "#{destination_js_base_path}gmaps4rails.base.js"
19
+ copy_file "#{source_js_base_path}gmaps4rails.googlemaps.js", "#{destination_js_base_path}gmaps4rails.googlemaps.js"
20
+ copy_file "#{source_js_base_path}gmaps4rails.bing.js", "#{destination_js_base_path}gmaps4rails.bing.js"
21
+ copy_file "#{source_js_base_path}gmaps4rails.openlayers.js", "#{destination_js_base_path}gmaps4rails.openlayers.js"
22
+ copy_file "#{source_js_base_path}gmaps4rails.mapquest.js", "#{destination_js_base_path}gmaps4rails.mapquest.js"
23
+ copy_file "../../../public/stylesheets/gmaps4rails.css", "public/stylesheets/gmaps4rails.css"
24
24
  end
25
25
  end
26
+
27
+ def source_assets_base_path
28
+ '../../../app/assets/javascripts/gmaps4rails/'
29
+ end
30
+
31
+ def destination_assets_base_path
32
+ 'app/assets/javascripts/gmaps4rails/'
33
+ end
34
+
35
+ def source_js_base_path
36
+ "../../../public/javascripts/gmaps4rails/"
37
+ end
38
+
39
+ def destination_js_base_path
40
+ "public/javascripts/gmaps4rails/"
41
+ end
26
42
 
27
43
  def show_readme
28
44
  readme 'README' if behavior == :invoke
@@ -10,57 +10,14 @@ module Gmaps4rails
10
10
 
11
11
  # This is a validation method which triggers the geocoding and save its results
12
12
  def process_geocoding
13
- #to prevent geocoding each time a save is made
14
- return true if gmaps4rails_prevent_geocoding?
15
- begin
16
- coordinates = Gmaps4rails.geocode(self.send(gmaps4rails_options[:address]), gmaps4rails_options[:language], false, gmaps4rails_options[:protocol])
17
- rescue GeocodeStatus, GeocodeInvalidQuery => e #address was invalid, add error to address.
18
- Rails.logger.warn(e)
19
- errors[gmaps4rails_options[:address]] << gmaps4rails_options[:msg] if Gmaps4rails.condition_eval(self, gmaps4rails_options[:validation])
20
- rescue GeocodeNetStatus => e #connection error, No need to prevent save.
21
- Rails.logger.warn(e)
22
- else #if no exception, save the values
23
- self.gmaps4rails_save_data(coordinates)
24
- end
25
- end
26
-
27
- # saves coordinates according to the various options
28
- def gmaps4rails_save_data(coordinates)
29
- self.send("#{gmaps4rails_options[:lng_column]}=", coordinates.first[:lng])
30
- self.send("#{gmaps4rails_options[:lat_column]}=", coordinates.first[:lat])
31
- # save normalized address if required
32
- self.send("#{gmaps4rails_options[:normalized_address]}=", coordinates.first[:matched_address]) unless gmaps4rails_options[:normalized_address].nil?
33
- # Call the callback method to let the user do what he wants with the data
34
- self.send(gmaps4rails_options[:callback], coordinates.first[:full_data]) unless gmaps4rails_options[:callback].nil?
35
- # update checker if required
36
- self.send("#{gmaps4rails_options[:checker]}=", true) if gmaps4rails_check_geocoding?
37
- end
38
-
39
- # if process_geocoding is a TrueClass or a FalseClass, 'check_process' and 'checker' play an additional role
40
- # if process_geocoding is a Proc or a Symbol, 'check_process' and 'checker' are skipped since process_geocoding bears the whole logic
41
- def gmaps4rails_prevent_geocoding?
42
- if gmaps4rails_options[:process_geocoding].is_a?(TrueClass) || gmaps4rails_options[:process_geocoding].is_a?(FalseClass)
43
- return true if !Gmaps4rails.condition_eval(self, gmaps4rails_options[:process_geocoding])
44
- Gmaps4rails.condition_eval(self, gmaps4rails_options[:check_process]) && self.send("#{gmaps4rails_options[:checker]}") == true
45
- else
46
- !Gmaps4rails.condition_eval(self, gmaps4rails_options[:process_geocoding])
47
- end
48
- end
49
-
50
- # Do we have to check the geocoding
51
- def gmaps4rails_check_geocoding?
52
- if gmaps4rails_options[:process_geocoding].is_a?(TrueClass) || gmaps4rails_options[:process_geocoding].is_a?(FalseClass)
53
- Gmaps4rails.condition_eval(self, gmaps4rails_options[:check_process])
54
- else
55
- false
56
- end
13
+ Gmaps4rails::ModelHandler.new(self, gmaps4rails_options).retrieve_coordinates
57
14
  end
58
15
 
59
16
  # creates json for one instance
60
17
  def to_gmaps4rails(&block)
61
18
  json = "["
62
19
  object_json = Gmaps4rails.create_json(self, &block)
63
- json << object_json.to_s unless json.nil?
20
+ json << object_json.to_s unless object_json.nil?
64
21
  json << "]"
65
22
  end
66
23
 
@@ -97,5 +54,5 @@ module Gmaps4rails
97
54
  end
98
55
  end
99
56
 
100
- end #ActsAsGmappable
57
+ end
101
58
  end
@@ -0,0 +1,40 @@
1
+ module Gmaps4rails
2
+
3
+ module BaseNetMethods
4
+
5
+ def checked_google_response(&block)
6
+ raise_net_status unless valid_response?
7
+
8
+ raise_query_error unless valid_parsed_response?
9
+
10
+ yield
11
+ end
12
+
13
+ def base_url
14
+ URI.escape base_request
15
+ end
16
+
17
+ def response
18
+ @response ||= get_response
19
+ end
20
+
21
+ def valid_response?
22
+ response.is_a?(Net::HTTPSuccess)
23
+ end
24
+
25
+ def valid_parsed_response?
26
+ parsed_response["status"] == "OK"
27
+ end
28
+
29
+ def parsed_response
30
+ @parsed_response ||= JSON.parse(response.body)
31
+ end
32
+
33
+ def get_response
34
+ url = URI.parse(base_url)
35
+ http = Gmaps4rails.http_agent
36
+ http.get_response(url)
37
+ end
38
+
39
+ end
40
+ end