gmaps4rails 2.0.0.pre → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/.travis.yml +2 -4
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +31 -113
  4. data/README.rdoc +53 -70
  5. data/Rakefile +21 -1
  6. data/gmaps4rails.gemspec +4 -19
  7. data/js_compilation/gmaps_google.js +961 -0
  8. data/lib/generators/gmaps4rails/copy_coffee_generator.rb +14 -0
  9. data/lib/generators/gmaps4rails/copy_js_generator.rb +15 -0
  10. data/lib/gmaps4rails.rb +12 -22
  11. data/lib/gmaps4rails/markers_builder.rb +74 -0
  12. data/lib/gmaps4rails/rails/engine.rb +6 -0
  13. data/lib/gmaps4rails/rails/railtie.rb +6 -0
  14. data/lib/gmaps4rails/version.rb +2 -2
  15. data/script/compile_coffee_files.rb +19 -0
  16. data/script/gmaps4rails.rake +7 -0
  17. data/spec/javascripts/google/builders/marker_spec.js +96 -0
  18. data/spec/javascripts/helpers/SpecHelper.js +101 -0
  19. data/spec/javascripts/helpers/matchers.js +12 -0
  20. data/spec/javascripts/helpers/underscore.js +6 -0
  21. data/spec/javascripts/objects/handler_spec.js +320 -0
  22. data/spec/javascripts/support/jasmine.yml +86 -0
  23. data/spec/javascripts/support/jasmine_helper.rb +11 -0
  24. data/spec/lib/base_spec.rb +10 -52
  25. data/spec/lib/markers_builder_spec.rb +49 -0
  26. data/spec/spec_helper.rb +1 -25
  27. data/vendor/assets/javascripts/gmaps/base.coffee +16 -0
  28. data/vendor/assets/javascripts/gmaps/base/base.coffee +17 -0
  29. data/vendor/assets/javascripts/gmaps/google.coffee +3 -0
  30. data/vendor/assets/javascripts/gmaps/google/builders/bound.coffee +6 -0
  31. data/vendor/assets/javascripts/gmaps/google/builders/circle.coffee +21 -0
  32. data/vendor/assets/javascripts/gmaps/google/builders/clusterer.coffee +6 -0
  33. data/vendor/assets/javascripts/gmaps/google/builders/kml.coffee +17 -0
  34. data/vendor/assets/javascripts/gmaps/google/builders/map.coffee +27 -0
  35. data/vendor/assets/javascripts/gmaps/google/builders/marker.coffee +100 -0
  36. data/vendor/assets/javascripts/gmaps/google/builders/polygon.coffee +24 -0
  37. data/vendor/assets/javascripts/gmaps/google/builders/polyline.coffee +24 -0
  38. data/vendor/assets/javascripts/gmaps/google/objects/bound.coffee +13 -0
  39. data/vendor/assets/javascripts/gmaps/google/objects/circle.coffee +9 -0
  40. data/vendor/assets/javascripts/gmaps/google/objects/clusterer.coffee +13 -0
  41. data/vendor/assets/javascripts/gmaps/google/objects/common.coffee +23 -0
  42. data/vendor/assets/javascripts/gmaps/google/objects/kml.coffee +15 -0
  43. data/vendor/assets/javascripts/gmaps/google/objects/map.coffee +19 -0
  44. data/vendor/assets/javascripts/gmaps/google/objects/marker.coffee +11 -0
  45. data/vendor/assets/javascripts/gmaps/google/objects/polygon.coffee +8 -0
  46. data/vendor/assets/javascripts/gmaps/google/objects/polyline.coffee +8 -0
  47. data/vendor/assets/javascripts/gmaps/google/primitives.coffee +43 -0
  48. data/vendor/assets/javascripts/gmaps/objects/base_builder.coffee +20 -0
  49. data/vendor/assets/javascripts/gmaps/objects/builder.coffee +12 -0
  50. data/vendor/assets/javascripts/gmaps/objects/handler.coffee +153 -0
  51. data/vendor/assets/javascripts/gmaps/objects/null_clusterer.coffee +4 -0
  52. metadata +66 -299
  53. data/Guardfile.old +0 -24
  54. data/app/views/gmaps4rails/_gmaps4rails.html.erb +0 -20
  55. data/lib/generators/gmaps4rails/install_generator.rb +0 -43
  56. data/lib/generators/templates/README +0 -2
  57. data/lib/gmaps4rails/acts_as_gmappable.rb +0 -54
  58. data/lib/gmaps4rails/api_wrappers/base_net_methods.rb +0 -40
  59. data/lib/gmaps4rails/api_wrappers/direction.rb +0 -87
  60. data/lib/gmaps4rails/api_wrappers/geocoder.rb +0 -54
  61. data/lib/gmaps4rails/api_wrappers/places.rb +0 -74
  62. data/lib/gmaps4rails/base.rb +0 -126
  63. data/lib/gmaps4rails/extensions/enumerable.rb +0 -14
  64. data/lib/gmaps4rails/extensions/hash.rb +0 -9
  65. data/lib/gmaps4rails/helper/gmaps4rails_helper.rb +0 -33
  66. data/lib/gmaps4rails/js_builder.rb +0 -154
  67. data/lib/gmaps4rails/json_builder.rb +0 -140
  68. data/lib/gmaps4rails/model_handler.rb +0 -101
  69. data/lib/gmaps4rails/view_helper.rb +0 -172
  70. data/lib/tasks/jasmine.rake +0 -8
  71. data/public/javascripts/gmaps4rails/all.js +0 -2144
  72. data/public/javascripts/gmaps4rails/base.js +0 -792
  73. data/public/javascripts/gmaps4rails/google.js +0 -556
  74. data/public/javascripts/gmaps4rails/openlayers.js +0 -377
  75. data/public/stylesheets/gmaps4rails.css +0 -24
  76. data/spec/dummy/.gitignore +0 -3
  77. data/spec/dummy/.rspec +0 -1
  78. data/spec/dummy/README.rdoc +0 -261
  79. data/spec/dummy/Rakefile +0 -7
  80. data/spec/dummy/app/assets/javascripts/application.js +0 -18
  81. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  82. data/spec/dummy/app/assets/stylesheets/gmaps4rails.css +0 -24
  83. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  84. data/spec/dummy/app/controllers/users_controller.rb +0 -105
  85. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  86. data/spec/dummy/app/mailers/.gitkeep +0 -0
  87. data/spec/dummy/app/models/.gitkeep +0 -0
  88. data/spec/dummy/app/models/place.rb +0 -16
  89. data/spec/dummy/app/models/user.rb +0 -12
  90. data/spec/dummy/app/views/layouts/application.html.erb +0 -17
  91. data/spec/dummy/app/views/users/_form.html.erb +0 -37
  92. data/spec/dummy/app/views/users/edit.html.erb +0 -6
  93. data/spec/dummy/app/views/users/index.html.erb +0 -268
  94. data/spec/dummy/app/views/users/new.html.erb +0 -5
  95. data/spec/dummy/app/views/users/show.html.erb +0 -30
  96. data/spec/dummy/config.ru +0 -4
  97. data/spec/dummy/config/application.rb +0 -62
  98. data/spec/dummy/config/boot.rb +0 -10
  99. data/spec/dummy/config/database.yml +0 -25
  100. data/spec/dummy/config/environment.rb +0 -5
  101. data/spec/dummy/config/environments/development.rb +0 -37
  102. data/spec/dummy/config/environments/production.rb +0 -67
  103. data/spec/dummy/config/environments/test.rb +0 -37
  104. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  105. data/spec/dummy/config/initializers/gmaps4rails.rb +0 -1
  106. data/spec/dummy/config/initializers/inflections.rb +0 -15
  107. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  108. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  109. data/spec/dummy/config/initializers/session_store.rb +0 -8
  110. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  111. data/spec/dummy/config/locales/en.yml +0 -5
  112. data/spec/dummy/config/routes.rb +0 -60
  113. data/spec/dummy/db/migrate/20120408170155_create_users.rb +0 -16
  114. data/spec/dummy/db/schema.rb +0 -29
  115. data/spec/dummy/lib/assets/.gitkeep +0 -0
  116. data/spec/dummy/log/.gitkeep +0 -0
  117. data/spec/dummy/public/404.html +0 -26
  118. data/spec/dummy/public/422.html +0 -26
  119. data/spec/dummy/public/500.html +0 -25
  120. data/spec/dummy/public/favicon.ico +0 -0
  121. data/spec/dummy/public/javascripts/Player.js +0 -22
  122. data/spec/dummy/public/javascripts/Song.js +0 -7
  123. data/spec/dummy/public/logo.png +0 -0
  124. data/spec/dummy/script/rails +0 -6
  125. data/spec/factories/place_factory.rb +0 -16
  126. data/spec/factories/user_factory.rb +0 -23
  127. data/spec/fixtures/google_direction_valid.json +0 -65
  128. data/spec/fixtures/google_geocoding_toulon_france.json +0 -58
  129. data/spec/fixtures/google_places_valid.json +0 -45
  130. data/spec/fixtures/google_wrong_geocoding.json +0 -4
  131. data/spec/launchers/all_but_requests.rb +0 -0
  132. data/spec/launchers/all_specs.rb +0 -0
  133. data/spec/launchers/requests.rb +0 -0
  134. data/spec/lib/direction_spec.rb +0 -53
  135. data/spec/lib/geocoder_spec.rb +0 -46
  136. data/spec/lib/js_builder_spec.rb +0 -134
  137. data/spec/lib/json_builder_spec.rb +0 -232
  138. data/spec/lib/places_spec.rb +0 -25
  139. data/spec/models/place_spec.rb +0 -39
  140. data/spec/models/user_spec.rb +0 -187
  141. data/spec/support/geocoding.rb +0 -40
  142. data/spec/support/matchers.rb +0 -73
  143. data/todo +0 -0
  144. data/vendor/assets/javascripts/gmaps4rails/all.js +0 -1
  145. data/vendor/assets/javascripts/gmaps4rails/base.coffee +0 -1
  146. data/vendor/assets/javascripts/gmaps4rails/base/common.coffee +0 -43
  147. data/vendor/assets/javascripts/gmaps4rails/base/configuration.coffee +0 -7
  148. data/vendor/assets/javascripts/gmaps4rails/base/gmaps.coffee +0 -13
  149. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/basic_interface.coffee +0 -15
  150. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/controller_interface.coffee +0 -15
  151. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/map_interface.coffee +0 -27
  152. data/vendor/assets/javascripts/gmaps4rails/base/interfaces/marker_interface.coffee +0 -15
  153. data/vendor/assets/javascripts/gmaps4rails/base/main.coffee +0 -124
  154. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/circle_controller.coffee +0 -29
  155. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/kml_controller.coffee +0 -5
  156. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/marker_controller.coffee +0 -76
  157. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polygon_controller.coffee +0 -29
  158. data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polyline_controller.coffee +0 -29
  159. data/vendor/assets/javascripts/gmaps4rails/base/objects/circle.coffee +0 -12
  160. data/vendor/assets/javascripts/gmaps4rails/base/objects/kml.coffee +0 -8
  161. data/vendor/assets/javascripts/gmaps4rails/base/objects/map.coffee +0 -62
  162. data/vendor/assets/javascripts/gmaps4rails/base/objects/marker.coffee +0 -24
  163. data/vendor/assets/javascripts/gmaps4rails/base/objects/polygon.coffee +0 -11
  164. data/vendor/assets/javascripts/gmaps4rails/base/objects/polyline.coffee +0 -11
  165. data/vendor/assets/javascripts/gmaps4rails/bing.coffee +0 -1
  166. data/vendor/assets/javascripts/gmaps4rails/bing/main.coffee +0 -29
  167. data/vendor/assets/javascripts/gmaps4rails/bing/objects/map.coffee +0 -63
  168. data/vendor/assets/javascripts/gmaps4rails/bing/objects/marker.coffee +0 -78
  169. data/vendor/assets/javascripts/gmaps4rails/bing/shared.coffee +0 -20
  170. data/vendor/assets/javascripts/gmaps4rails/google.coffee +0 -1
  171. data/vendor/assets/javascripts/gmaps4rails/google/main.coffee +0 -47
  172. data/vendor/assets/javascripts/gmaps4rails/google/objects/circle.coffee +0 -38
  173. data/vendor/assets/javascripts/gmaps4rails/google/objects/kml.coffee +0 -16
  174. data/vendor/assets/javascripts/gmaps4rails/google/objects/map.coffee +0 -71
  175. data/vendor/assets/javascripts/gmaps4rails/google/objects/marker.coffee +0 -114
  176. data/vendor/assets/javascripts/gmaps4rails/google/objects/polygon.coffee +0 -38
  177. data/vendor/assets/javascripts/gmaps4rails/google/objects/polyline.coffee +0 -49
  178. data/vendor/assets/javascripts/gmaps4rails/google/shared.coffee +0 -27
  179. data/vendor/assets/javascripts/gmaps4rails/openlayers.coffee +0 -1
  180. data/vendor/assets/javascripts/gmaps4rails/openlayers/main.coffee +0 -138
  181. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/map.coffee +0 -49
  182. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/marker.coffee +0 -68
  183. data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/polyline.coffee +0 -39
  184. data/vendor/assets/javascripts/gmaps4rails/openlayers/shared.coffee +0 -19
@@ -1,14 +0,0 @@
1
- module Enumerable
2
- #Scopes on models generate Arrays
3
- #this method enables short call to the json creation for all elements in the array
4
- def to_gmaps4rails(&block)
5
- output = "["
6
- json_array = []
7
- each do |object|
8
- json = Gmaps4rails.create_json(object, &block)
9
- json_array << json.to_s unless json.nil?
10
- end
11
- output << json_array * (",")
12
- output << "]"
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- class Hash
2
-
3
- # this method extracts all info from the hash to create javascript
4
- # this javascript is then rendered raw to the view so it can be interpreted and executed
5
- def to_gmaps4rails
6
- Gmaps4rails.create_js_from_hash(self.with_indifferent_access)
7
- end
8
-
9
- end
@@ -1,33 +0,0 @@
1
- module Gmaps4railsHelper
2
-
3
- # shortcut helper for marker display with convenient default settings
4
- # @params [String] builder is a json string
5
- def gmaps4rails(builder)
6
- options = {
7
- :map_options => { :auto_adjust => true},
8
- :markers => { :data => builder, :options => {:do_clustering => true} }
9
- }
10
- gmaps(options)
11
- end
12
-
13
- # full helper to pass all variables and their options
14
- # @params [Hash] options is a Hash containing data and options. Example: { markers:{ data: @json, options: { do_clustering: true } } }
15
- def gmaps(options)
16
- options_with_indifferent_access = options.with_indifferent_access
17
- view_helper = Gmaps4rails::ViewHelper.new(options_with_indifferent_access)
18
-
19
- js_dependencies = if Gmaps4rails.escape_js_url
20
- view_helper.js_dependencies_array
21
- else
22
- view_helper.js_dependencies_array.map(&:html_safe)
23
- end
24
-
25
- render :partial => '/gmaps4rails/gmaps4rails',
26
- :locals => {
27
- :options => options_with_indifferent_access,
28
- :js_dependencies => js_dependencies,
29
- :dom => view_helper.dom_attributes
30
- }
31
- end
32
-
33
- end
@@ -1,154 +0,0 @@
1
- module Gmaps4rails
2
- class JsBuilder
3
-
4
- DEFAULT_MAP_ID = "map"
5
- DATA_KEYS = [:markers, :polylines, :polygons, :circles, :direction, :kml]
6
-
7
- #the 'option_hash' must have the following structure
8
- #{
9
- # :map_options => hash,
10
- # :markers => { :data => json, :options => hash },
11
- # :polylines => { :data => json, :options => hash },
12
- # :polygons => { :data => json, :options => hash },
13
- # :circles => { :data => json, :options => hash },
14
- # :direction => { :data => hash, :options => hash },
15
- # :kml => { :data => json, :options => hash }
16
- #}
17
- #should be with only symbol keys or with indifferent access
18
- def initialize(option_hash)
19
- @js = Array.new
20
- @hash = option_hash
21
- end
22
-
23
- def create_js
24
- @js << "#{gmap_id} = new #{ map_constructor };"
25
- @js << "Gmaps.#{js_function_name} = function() {"
26
-
27
- process_map_options
28
-
29
- @js << "#{gmap_id}.initialize();"
30
-
31
- process_data
32
-
33
- @js << "#{gmap_id}.adjustMapToBounds();"
34
- @js << "#{gmap_id}.callback();"
35
- @js << "};"
36
- @js << "Gmaps.oldOnload = window.onload;\n window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); };" if load_map?
37
-
38
- @js * ("\n")
39
- end
40
-
41
- def process_map_options
42
- return unless map_options
43
- map_options.each do |option_key, option_value|
44
- next if [:class, :container_class].include? option_key.to_sym
45
- case option_key.to_sym
46
- when :bounds, :raw #particular case, render the content unescaped
47
- @js << "#{gmap_id}.map_options.#{option_key} = #{option_value};"
48
- else
49
- @js << "#{gmap_id}.map_options.#{option_key} = #{option_value.to_json};"
50
- end
51
- end
52
- end
53
-
54
- def process_data
55
- data.each do |name, hash|
56
- datum = ::Gmaps4rails::JsBuilder::Datum.new(gmap_id, name, hash)
57
- @js.concat datum.create_js
58
- end
59
- end
60
-
61
- def map_options
62
- @hash[:map_options]
63
- end
64
-
65
- def data
66
- @hash.select{|key, value| DATA_KEYS.include?(key.to_sym) }
67
- end
68
-
69
- def load_map?
70
- @hash[:last_map].nil? || @hash[:last_map] == true
71
- end
72
-
73
- def js_function_name
74
- "load_" + map_id
75
- end
76
-
77
- def gmap_id
78
- @gmap_id ||= "Gmaps." + map_id
79
- end
80
-
81
- def map_id
82
- @map_id ||= map_options.try(:[],:id) || DEFAULT_MAP_ID
83
- end
84
-
85
- def map_constructor
86
- map_options.try(:[],:provider) ? "Gmaps4Rails#{map_options[:provider].capitalize}()" : "Gmaps4RailsGoogle()"
87
- end
88
-
89
- class Datum
90
- # example:
91
- # - name: :markers
92
- # - hash: { :data => json, :options => hash }
93
-
94
- delegate :options, :data, :to => :@element_info
95
-
96
- def initialize(gmap_id, name, hash)
97
- @gmap_id, @name, @js = gmap_id, name, Array.new
98
- @element_info = OpenStruct.new(hash)
99
- end
100
-
101
- def create_js
102
- if @name.to_sym == :direction
103
- create_direction_js
104
- else
105
- create_standard_js
106
- end
107
- end
108
-
109
- def create_standard_js
110
- set_configuration_variables
111
- @js << "#{@gmap_id}.add#{@name.capitalize}(#{data});"
112
- end
113
-
114
- def create_direction_js
115
- @js << "#{@gmap_id}.direction_conf.origin = '#{data["from"]}';"
116
- @js << "#{@gmap_id}.direction_conf.destination = '#{data["to"]}';"
117
-
118
- set_direction_variables
119
-
120
- @js << "#{@gmap_id}.create_direction();"
121
- end
122
-
123
- def set_configuration_variables
124
- return unless options
125
- options.each do |option_key, option_value|
126
- @js << if option_key.to_sym == :raw
127
- "#{@gmap_id}.#{@name}_conf.#{option_key} = #{option_value};"
128
- else
129
- "#{@gmap_id}.#{@name}_conf.#{option_key} = #{option_value.to_json};"
130
- end
131
- end
132
- end
133
-
134
- def set_direction_variables
135
- return unless options
136
- options.each do |option_key, option_value|
137
- if option_key.to_sym == :waypoints
138
- waypoints = Array.new
139
- option_value.each do |waypoint|
140
- waypoints << { "location" => waypoint, "stopover" => true }.to_json
141
- end
142
- @js << "#{@gmap_id}.direction_conf.waypoints = [#{waypoints * (",")}];"
143
- else
144
- @js << "#{@gmap_id}.direction_conf.#{option_key} = #{option_value.to_json};"
145
- end
146
- end
147
- end
148
-
149
- end
150
- end
151
-
152
-
153
- end
154
-
@@ -1,140 +0,0 @@
1
- module Gmaps4rails
2
- # the to_gmaps4rails method accepts a block to customize:
3
- # - infowindow
4
- # - picture
5
- # - title
6
- # - sidebar
7
- # - json
8
- #
9
- # This works this way:
10
- # @json = User.all.to_gmaps4rails do |user, marker|
11
- # marker.infowindow render_to_string(:partial => "/users/my_template", :locals => { :object => user}).gsub(/\n/, '').gsub(/"/, '\"')
12
- # marker.picture({
13
- # :picture => "http://www.blankdots.com/img/github-32x32.png",
14
- # :width => "32",
15
- # :height => "32"
16
- # })
17
- # marker.title "i'm the title"
18
- # marker.sidebar "i'm the sidebar"
19
- # marker.json({ :id => user.id })
20
- # end
21
- #
22
- # For backward compability, a mere string could be passed:
23
- # @json = User.all.to_gmaps4rails do |user, marker|
24
- # "\"id\": #{user.id}"
25
- # end
26
- #
27
- class JsonBuilder
28
-
29
- delegate :position, :lat_column, :lng_column, :to => :@options
30
-
31
- def initialize(object)
32
- @object, @json_hash, @custom_json = object, Hash.new, nil
33
- @options = OpenStruct.new @object.gmaps4rails_options
34
- end
35
-
36
- def process(&block)
37
- if compliant?
38
- handle_block(&block) if block_given?
39
- handle_model_methods
40
- return_json
41
- else
42
- nil
43
- end
44
- end
45
-
46
- def infowindow(string)
47
- @json_hash[:description] = string
48
- true
49
- end
50
-
51
- def title(string)
52
- @json_hash[:title] = string
53
- true
54
- end
55
-
56
- def sidebar(string)
57
- @json_hash[:sidebar] = string
58
- true
59
- end
60
-
61
- def json(json)
62
- return @json_hash.merge! json if json.is_a? Hash
63
- true
64
- end
65
-
66
- def picture(hash)
67
- @json_hash.merge! hash
68
- true
69
- end
70
-
71
- private
72
-
73
- def model_attributes
74
- {
75
- :description => :gmaps4rails_infowindow,
76
- :title => :gmaps4rails_title,
77
- :sidebar => :gmaps4rails_sidebar,
78
- :marker_picture => :gmaps4rails_marker_picture
79
- }.merge(coordinates_attributes)
80
- end
81
-
82
- def coordinates_attributes
83
- position_from_array? ? {:position => position } : {:lat => lat_column, :lng => lng_column}
84
- end
85
-
86
- def handle_model_methods
87
- model_attributes.each do |json_name, method_name|
88
- if @object.respond_to? method_name
89
- if json_name == :marker_picture
90
- @json_hash.merge!(@object.send(method_name)) unless @json_hash.has_key? "picture"
91
- elsif json_name == :position
92
- @json_hash.merge!(:lat => lat, :lng => lng)
93
- else
94
- @json_hash[json_name] = @object.send(method_name) unless @json_hash.has_key? json_name
95
- end
96
- end
97
- end
98
- end
99
-
100
- # returns the proper json
101
- # three cases here:
102
- # - no custom json provided
103
- # - custom json provided as a hash (marker.json { :id => user.id }) => merge hashes then create json
104
- # - custom json provided as string (marker.json {"\"id\": #{user.id}" } => create json from hash then insert string inside
105
- def return_json
106
- return @json_hash.to_json if @custom_json.nil?
107
- case @custom_json
108
- when Hash
109
- @json_hash.merge! @custom_json
110
- return @json_hash.to_json
111
- when String
112
- output = @json_hash.to_json
113
- return output.insert(1, @custom_json + ",")
114
- end
115
- end
116
-
117
- def compliant?
118
- !(lat.blank? && lng.blank?)
119
- end
120
-
121
- def handle_block(&block)
122
- block_result = yield(@object, self)
123
- @custom_json = block_result unless block_result == true
124
- end
125
-
126
- def position_from_array?
127
- position #if gmaps4rails_options[:position] is filled, means user is indicating an array
128
- end
129
-
130
- def lat
131
- position_from_array? ? @object.send("#{position}")[0] : @object.send("#{lat_column}")
132
- end
133
-
134
- def lng
135
- position_from_array? ? @object.send("#{position}")[1] : @object.send("#{lng_column}")
136
- end
137
-
138
- end
139
-
140
- end
@@ -1,101 +0,0 @@
1
- module Gmaps4rails
2
-
3
- class ModelHandler
4
-
5
- attr_accessor :options, :object
6
-
7
- delegate :process_geocoding, :check_process, :checker, :lat_column, :lng_column, :position, :msg, :validation,
8
- :language, :protocol, :address, :callback, :normalized_address,
9
- :to => :options
10
-
11
- def initialize(object, gmaps4rails_options)
12
- @options = ::OpenStruct.new(gmaps4rails_options)
13
- @object = object
14
- end
15
-
16
- # saves coordinates according to the various options
17
- def retrieve_coordinates
18
- return if prevent_geocoding?
19
- checked_coordinates do
20
- position? ? set_position : set_lat_lng
21
- # save normalized address if required
22
- object.send("#{normalized_address}=", coordinates.first[:matched_address]) if normalized_address
23
- # Call the callback method to let the user do what he wants with the data
24
- object.send callback, coordinates.first[:full_data] if callback
25
- # update checker if required
26
- object.send("#{checker}=", true) if check_geocoding?
27
- end
28
- end
29
-
30
- private
31
-
32
- # sets array for non relationnal db
33
- def set_position
34
- object.send("#{position}=", [lat, lng])
35
- end
36
-
37
- #sets regular columns
38
- def set_lat_lng
39
- object.send("#{lng_column}=", lng)
40
- object.send("#{lat_column}=", lat)
41
- end
42
-
43
- def lat
44
- coordinates.first[:lat]
45
- end
46
-
47
- def lng
48
- coordinates.first[:lng]
49
- end
50
-
51
- def position?
52
- position
53
- end
54
-
55
- def checked_coordinates(&block)
56
- yield if coordinates
57
- end
58
-
59
- def coordinates
60
- @coordinates ||= get_coordinates
61
- end
62
-
63
- def get_coordinates
64
- Gmaps4rails.geocode(object.send(address), language, false, protocol)
65
- rescue GeocodeStatus, GeocodeInvalidQuery => e #address was invalid, add error to address.
66
- Rails.logger.warn(e)
67
- object.errors[address] << msg if condition_eval(object, validation)
68
- false
69
- rescue GeocodeNetStatus => e #connection error, No need to prevent save.
70
- Rails.logger.warn(e)
71
- false
72
- end
73
-
74
- # to prevent geocoding each time a save is made
75
- # if process_geocoding is a TrueClass or a FalseClass, 'check_process' and 'checker' play an additional role
76
- # if process_geocoding is a Proc or a Symbol, 'check_process' and 'checker' are skipped since process_geocoding bears the whole logic
77
- def prevent_geocoding?
78
- if process_geocoding.is_a?(TrueClass) || process_geocoding.is_a?(FalseClass)
79
- return true if !condition_eval(object, process_geocoding)
80
- condition_eval(object, check_process) && object.send(checker)
81
- else
82
- !condition_eval(object, process_geocoding)
83
- end
84
- end
85
-
86
- # Do we have to check the geocoding
87
- def check_geocoding?
88
- if process_geocoding.is_a?(TrueClass) || process_geocoding.is_a?(FalseClass)
89
- condition_eval(object, check_process)
90
- else
91
- false
92
- end
93
- end
94
-
95
- def condition_eval(*args)
96
- Gmaps4rails.condition_eval(*args)
97
- end
98
-
99
- end
100
-
101
- end