gmaps4rails 1.5.1 → 1.5.2

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gmaps4rails (1.5.1)
4
+ gmaps4rails (1.5.2)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -415,37 +415,36 @@ class @Gmaps4Rails
415
415
  if @map_options.auto_adjust or @map_options.bounds isnt null
416
416
  @boundsObject = @createLatLngBounds()
417
417
 
418
- #if autodjust is true, must get bounds from markers polylines etc...
419
- if @map_options.auto_adjust
420
- #from markers
421
- @extendBoundsWithMarkers()
422
-
423
- #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
428
-
429
- #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
434
-
435
- #from circles
436
- for circle in @circles
437
- @boundsObject.extend(circle.serviceObject.getBounds().getNorthEast())
438
- @boundsObject.extend(circle.serviceObject.getBounds().getSouthWest())
439
-
440
- #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
446
-
447
- #SECOND_STEP: ajust the map to the bounds
448
- if @map_options.auto_adjust or @map_options.bounds.length > 0
418
+ #if autodjust is true, must get bounds from markers polylines etc...
419
+ if @map_options.auto_adjust
420
+ #from markers
421
+ @extendBoundsWithMarkers()
422
+
423
+ #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
428
+
429
+ #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
434
+
435
+ #from circles
436
+ for circle in @circles
437
+ @boundsObject.extend(circle.serviceObject.getBounds().getNorthEast())
438
+ @boundsObject.extend(circle.serviceObject.getBounds().getSouthWest())
439
+
440
+ #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
446
+
447
+ #SECOND_STEP: ajust the map to the bounds
449
448
 
450
449
  #if autozoom is false, take user info into account
451
450
  if !@map_options.auto_zoom
data/lib/gmaps4rails.rb CHANGED
@@ -8,11 +8,6 @@ module Gmaps4rails
8
8
  ActionView::Base.send :include, Gmaps4railsHelper
9
9
  end
10
10
 
11
- initializer "deprecation warning" do |app|
12
- warn "[Gmaps4rails]: DEPRECATION: Javascript Gmaps.map.map is now deprecated and will be removed in later version. Please use Gmaps.map.serviceObject instead."
13
- warn "[Gmaps4rails]: Be sure to run 'rails g gmaps4rails:install' to get js and css files in your app they are not added automatically anymore see Readme on Github"
14
- end
15
-
16
11
  end
17
12
 
18
13
  class Railtie < Rails::Railtie
@@ -48,7 +48,6 @@ module Gmaps4rails
48
48
  #parse result if result received properly
49
49
  if response.is_a?(Net::HTTPSuccess)
50
50
  #parse the json
51
- #parse = Crack::JSON.parse(response.body)
52
51
  parse = JSON.parse(response.body)
53
52
  #check if google went well
54
53
  if parse["status"] == "OK"
@@ -78,7 +77,6 @@ module Gmaps4rails
78
77
  def Gmaps4rails.handle_destination_response(request, response, output)
79
78
  if response.is_a?(Net::HTTPSuccess)
80
79
  #parse the json
81
- #parse = Crack::JSON.parse(response.body)
82
80
  parse = JSON.parse(response.body)
83
81
  #check if google went well
84
82
  if parse["status"] == "OK"
@@ -1,14 +1,15 @@
1
1
  module Gmaps4rails
2
2
 
3
3
  def Gmaps4rails.create_js_from_hash(hash)
4
- ::Gmaps4rails::JsBuilder.new.create_js_from_hash(hash)
4
+ ::Gmaps4rails::JsBuilder.new(hash).create_js
5
5
  end
6
6
 
7
7
  class JsBuilder
8
8
 
9
- DEFAULT_MAP_ID = "map"
10
-
11
- #the variable 'hash' must have the following structure
9
+ DEFAULT_MAP_ID = "map"
10
+ DATA_KEYS = [:markers, :polylines, :polygons, :circles, :direction, :kml]
11
+
12
+ #the 'option_hash' must have the following structure
12
13
  #{
13
14
  # :map_options => hash,
14
15
  # :markers => { :data => json, :options => hash },
@@ -18,102 +19,145 @@ module Gmaps4rails
18
19
  # :direction => { :data => hash, :options => hash },
19
20
  # :kml => { :data => json, :options => hash }
20
21
  #}
21
- #should be with only symbol keys or with indifferent access
22
- def create_js_from_hash(hash)
23
- result = Array.new
24
- map_id = "Gmaps." + get_map_id(hash[:map_options])
25
-
26
- #means we are creating a new map
27
- result << "#{map_id} = new #{get_constructor hash[:map_options] }" + ";"
28
- result << "Gmaps.#{js_function_name hash } = function() {"
29
- result << create_map_js(hash[:map_options], map_id) unless hash[:map_options].nil?
30
- result << "#{map_id}.initialize();"
31
-
32
- hash.each do |category, content| #loop through options hash
33
- skipped_categories = [:map_options, :last_map, :scripts]
34
- unless skipped_categories.include? category.to_sym
35
- if category.to_sym == :direction
36
- result << create_direction_js(content, map_id)
37
- else
38
- result << create_general_js(content, map_id, category)
39
- end
22
+ #should be with only symbol keys or with indifferent access
23
+ def initialize(option_hash)
24
+ @js = Array.new
25
+ @hash = option_hash
26
+ end
27
+
28
+ def create_js
29
+ @js << "#{gmap_id} = new #{ map_constructor };"
30
+ @js << "Gmaps.#{js_function_name} = function() {"
31
+
32
+ process_map_options
33
+
34
+ @js << "#{gmap_id}.initialize();"
35
+
36
+ process_data
37
+
38
+ @js << "#{gmap_id}.adjustMapToBounds();"
39
+ @js << "#{gmap_id}.callback();"
40
+ @js << "};"
41
+ @js << "Gmaps.oldOnload = window.onload;\n window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); };" if load_map?
42
+
43
+ @js * ("\n")
44
+ end
45
+
46
+ def process_map_options
47
+ return unless map_options
48
+ map_options.each do |option_key, option_value|
49
+ next if [:class, :container_class].include? option_key.to_sym
50
+ case option_key.to_sym
51
+ when :bounds, :raw #particular case, render the content unescaped
52
+ @js << "#{gmap_id}.map_options.#{option_key} = #{option_value};"
53
+ else
54
+ @js << "#{gmap_id}.map_options.#{option_key} = #{option_value.to_json};"
40
55
  end
41
56
  end
42
- result << "#{map_id}.adjustMapToBounds();"
43
- result << "#{map_id}.callback();"
57
+ end
44
58
 
45
- result << "};"
46
- if hash[:last_map].nil? || hash[:last_map] == true
47
- result << "Gmaps.oldOnload = window.onload;\n window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); };"
59
+ def process_data
60
+ data.each do |name, hash|
61
+ datum = ::Gmaps4rails::JsBuilder::Datum.new(gmap_id, name, hash)
62
+ @js.concat datum.create_js
48
63
  end
49
-
50
- result * ('
51
- ')
52
64
  end
53
65
 
54
- def js_function_name(hash)
55
- "load_" + get_map_id(hash[:map_options])
66
+ def map_options
67
+ @hash[:map_options]
56
68
  end
57
-
58
- def get_map_id(hash)
59
- hash.nil? || hash[:id].nil? ? DEFAULT_MAP_ID : hash[:id]
69
+
70
+ def data
71
+ @hash.select{|key, value| DATA_KEYS.include?(key.to_sym) }
60
72
  end
61
-
62
- def get_constructor(hash)
63
- hash.nil? || hash[:provider].nil? ? "Gmaps4RailsGoogle()" : "Gmaps4Rails#{hash[:provider].capitalize}()"
73
+
74
+ def load_map?
75
+ @hash[:last_map].nil? || @hash[:last_map] == true
76
+ end
77
+
78
+ def js_function_name
79
+ "load_" + map_id
64
80
  end
65
81
 
66
- def create_map_js(map_hash, map_id)
67
- output = Array.new
68
- skipped_keys = [:class, :container_class]
69
- map_hash.each do |option_k, option_v|
70
- unless skipped_keys.include? option_k.to_sym
71
- case option_k.to_sym
72
- when :bounds, :raw #particular case, render the content unescaped
73
- output << "#{map_id}.map_options.#{option_k} = #{option_v};"
74
- else
75
- output << "#{map_id}.map_options.#{option_k} = #{option_v.to_json};"
76
- end
82
+ def gmap_id
83
+ @gmap_id ||= "Gmaps." + map_id
84
+ end
85
+
86
+ def map_id
87
+ @map_id ||= map_options.try(:[],:id) || DEFAULT_MAP_ID
88
+ end
89
+
90
+ def map_constructor
91
+ map_options.try(:[],:provider) ? "Gmaps4Rails#{map_options[:provider].capitalize}()" : "Gmaps4RailsGoogle()"
92
+ end
93
+
94
+ class Datum
95
+ # example:
96
+ # - name: :markers
97
+ # - hash: { :data => json, :options => hash }
98
+ def initialize(gmap_id, name, hash)
99
+ @gmap_id, @hash, @name, @js = gmap_id, hash, name, Array.new
100
+ end
101
+
102
+ def create_js
103
+ if @name.to_sym == :direction
104
+ create_direction_js
105
+ else
106
+ create_standard_js
77
107
  end
78
108
  end
79
- output
80
- end
109
+
110
+ def create_standard_js
111
+ @js << "#{@gmap_id}.#{@name} = #{value};"
81
112
 
82
- def create_general_js(hash, map_id, category)
83
- output = Array.new
84
- output << "#{map_id}.#{category} = #{hash[:data]};"
85
- hash[:options] ||= Array.new
86
- hash[:options].each do |option_k, option_v|
87
- if option_k.to_sym == :raw
88
- output << "#{map_id}.#{category}_conf.#{option_k} = #{option_v};"
89
- else
90
- output << "#{map_id}.#{category}_conf.#{option_k} = #{option_v.to_json};"
91
- end
113
+ set_configuration_variables
114
+
115
+ @js << "#{@gmap_id}.create_#{@name}();"
92
116
  end
93
- output << "#{map_id}.create_#{category}();"
94
- output
95
- end
96
117
 
97
- def create_direction_js(hash, map_id)
98
- output = Array.new
99
- output << "#{map_id}.direction_conf.origin = '#{hash["data"]["from"]}';"
100
- output << "#{map_id}.direction_conf.destination = '#{hash["data"]["to"]}';"
101
- hash[:options] ||= Array.new
102
- hash[:options].each do |option_k, option_v|
103
- if option_k.to_sym == :waypoints
104
- waypoints = Array.new
105
- option_v.each do |waypoint|
106
- waypoints << { "location" => waypoint, "stopover" => true }.to_json
118
+ def create_direction_js
119
+ @js << "#{@gmap_id}.direction_conf.origin = '#{value["from"]}';"
120
+ @js << "#{@gmap_id}.direction_conf.destination = '#{value["to"]}';"
121
+
122
+ set_direction_variables
123
+
124
+ @js << "#{@gmap_id}.create_direction();"
125
+ end
126
+
127
+ def set_configuration_variables
128
+ return unless options
129
+ options.each do |option_key, option_value|
130
+ @js << if option_key.to_sym == :raw
131
+ "#{@gmap_id}.#{@name}_conf.#{option_key} = #{option_value};"
132
+ else
133
+ "#{@gmap_id}.#{@name}_conf.#{option_key} = #{option_value.to_json};"
134
+ end
135
+ end
136
+ end
137
+
138
+ def set_direction_variables
139
+ return unless options
140
+ options.each do |option_key, option_value|
141
+ if option_key.to_sym == :waypoints
142
+ waypoints = Array.new
143
+ option_value.each do |waypoint|
144
+ waypoints << { "location" => waypoint, "stopover" => true }.to_json
145
+ end
146
+ @js << "#{@gmap_id}.direction_conf.waypoints = [#{waypoints * (",")}];"
147
+ else
148
+ @js << "#{@gmap_id}.direction_conf.#{option_key} = #{option_value.to_json};"
107
149
  end
108
- output << "#{map_id}.direction_conf.waypoints = [#{waypoints * (",")}];"
109
- else #option_k != "waypoint"
110
- output << "#{map_id}.direction_conf.#{option_k} = #{option_v.to_json};"
111
150
  end
112
- end #end .each
113
- output << "#{map_id}.create_direction();"
114
- output
151
+ end
152
+
153
+ def options
154
+ @hash[:options]
155
+ end
156
+
157
+ def value
158
+ @hash[:data]
159
+ end
115
160
  end
116
-
117
161
  end
118
162
 
119
163
 
@@ -1,3 +1,3 @@
1
1
  module Gmaps4rails
2
- VERSION = "1.5.1"
2
+ VERSION = "1.5.2"
3
3
  end
@@ -1,45 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "JS building methods" do
4
-
5
- subject { ::Gmaps4rails::JsBuilder.new }
6
-
7
- describe "constructor name retrieval" do
8
- it "should render google if nothing passed" do
9
- subject.get_constructor(nil).should eq "Gmaps4RailsGoogle()"
10
- end
11
-
12
- it "should render proper provider when provided" do
13
- options_hash = { "provider" => "bing" }
14
- subject.get_constructor(options_hash.with_indifferent_access).should eq "Gmaps4RailsBing()"
15
-
16
- options_hash = { "provider" => "mapquest" }
17
- subject.get_constructor(options_hash.with_indifferent_access).should eq "Gmaps4RailsMapquest()"
18
-
19
- options_hash = { "provider" => "openlayers" }
20
- subject.get_constructor(options_hash.with_indifferent_access).should eq "Gmaps4RailsOpenlayers()"
21
- end
22
- end
23
-
24
- describe "map ID retrieval" do
25
- it "should return the default ID when nothing is passed" do
26
- options_hash = nil
27
- subject.get_map_id(options_hash).should eq subject.class::DEFAULT_MAP_ID
28
- end
29
-
30
- it "should return the default ID when no id is passed within map_options" do
31
- options_hash = { "foo" => "bar" }
32
- subject.get_map_id(options_hash).should eq subject.class::DEFAULT_MAP_ID
33
- end
34
-
35
- it "should return the proper ID when id passed" do
36
- options_hash = { "id" => "foo" }
37
- subject.get_map_id(options_hash.with_indifferent_access).should eq "foo"
38
- end
39
-
40
- end
41
- end
42
-
43
3
  describe "to_gmaps4rails for hash" do
44
4
  it "should accept hashes with indifferent access" do
45
5
  hash1 = {:markers => {:data => @json, :options => {:do_clustering => true, :draggable => true } }}
@@ -163,7 +123,7 @@ describe "to_gmaps4rails for hash" do
163
123
 
164
124
  it "should not call map builder if not last_map" do
165
125
  hash = {:last_map => false}
166
- hash.to_gmaps4rails.should_not include "window.onload = Gmaps.loadMaps;"
126
+ hash.to_gmaps4rails.should_not include "window.onload"
167
127
  end
168
128
 
169
129
  it "should call map builder if last_map" do
@@ -10,6 +10,6 @@
10
10
  // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
11
  // GO AFTER THE REQUIRES BELOW.
12
12
  //
13
- //= require jquery
14
- //= require jquery_ujs
15
- //#= require_tree .
13
+ // require jquery
14
+ // require jquery_ujs
15
+ //= require_tree ./gmaps4rails
@@ -3,4 +3,10 @@ class User < ActiveRecord::Base
3
3
 
4
4
  attr_accessor :lat_test, :long_test, :bool_test
5
5
 
6
+ after_initialize :set_lat_test
7
+
8
+ def set_lat_test
9
+ self.lat_test = address
10
+ end
11
+
6
12
  end
@@ -70,12 +70,24 @@ window.onload =alert('ok');
70
70
  <%#= gmaps(:map_options => { :auto_adjust => true },
71
71
  :markers => {
72
72
  :data => @json,
73
- #:options => {:do_clustering => true}
73
+ :options => {:do_clustering => true}
74
74
  }) %>
75
75
 
76
+ <%#= gmaps("markers" => { "data" => @json, "options" => {
77
+ "picture" => "/logo.png",
78
+ "width" => 30, "marker_length" => 32 } }) %>
79
+
80
+
76
81
  <%#= gmaps( {:map_options => { :disableDefaultUI => true, :auto_adjust => true, :center_on_user => true, :detect_location => true, :center_latitude => 41.574361,
77
82
  :center_longitude => -72.949219 }}) %>
78
- <%= gmaps(:markers => {:data => @json, :options => {:do_clustering => false, "custom_infowindow_class" => "yellow", :raw => "{ flat: true, draggable: true}" } },
83
+ <%#= gmaps(:map_options => {:type => "ROADMAP"},
84
+ :markers => {:data => @json,
85
+ :options => {"list_container" => "markers_list" }
86
+ })%>
87
+ <div id="markers_list"></div>
88
+ <%= gmaps(:markers => {:data => @json}, :map_options =>
89
+ {:auto_adjust => false, :bounds => '[{"lat":42.3124,"lng":-71.1712},{"lat":42.3997,"lng":-71.0531}]', :auto_zoom => false }) %>
90
+ <%#= gmaps(:markers => {:data => @json, :options => {:do_clustering => false, "custom_infowindow_class" => "yellow", :raw => "{ flat: true, draggable: true}" } },
79
91
  :polygons => {:data => '[[
80
92
  {"lng": 5.190262, "lat": 25.774252},
81
93
  {"lng": 7.118292, "lat": 45.466465},
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gmaps4rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-01 00:00:00.000000000 Z
13
+ date: 2012-05-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -346,7 +346,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
346
346
  version: '0'
347
347
  segments:
348
348
  - 0
349
- hash: 2348507473355438696
349
+ hash: 3704430434536150863
350
350
  required_rubygems_version: !ruby/object:Gem::Requirement
351
351
  none: false
352
352
  requirements:
@@ -355,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
355
355
  version: '0'
356
356
  segments:
357
357
  - 0
358
- hash: 2348507473355438696
358
+ hash: 3704430434536150863
359
359
  requirements: []
360
360
  rubyforge_project:
361
361
  rubygems_version: 1.8.21