geocoder-sgonyea 1.1.6.1

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 (122) hide show
  1. data/.gitignore +5 -0
  2. data/.travis.yml +23 -0
  3. data/CHANGELOG.md +298 -0
  4. data/LICENSE +20 -0
  5. data/README.md +656 -0
  6. data/Rakefile +25 -0
  7. data/bin/geocode +5 -0
  8. data/examples/autoexpire_cache.rb +28 -0
  9. data/gemfiles/Gemfile.mongoid-2.4.x +15 -0
  10. data/lib/generators/geocoder/config/config_generator.rb +14 -0
  11. data/lib/generators/geocoder/config/templates/initializer.rb +21 -0
  12. data/lib/geocoder.rb +55 -0
  13. data/lib/geocoder/cache.rb +85 -0
  14. data/lib/geocoder/calculations.rb +319 -0
  15. data/lib/geocoder/cli.rb +114 -0
  16. data/lib/geocoder/configuration.rb +130 -0
  17. data/lib/geocoder/configuration_hash.rb +11 -0
  18. data/lib/geocoder/exceptions.rb +21 -0
  19. data/lib/geocoder/lookup.rb +82 -0
  20. data/lib/geocoder/lookups/base.rb +250 -0
  21. data/lib/geocoder/lookups/bing.rb +47 -0
  22. data/lib/geocoder/lookups/freegeoip.rb +47 -0
  23. data/lib/geocoder/lookups/geocoder_ca.rb +54 -0
  24. data/lib/geocoder/lookups/google.rb +62 -0
  25. data/lib/geocoder/lookups/google_premier.rb +47 -0
  26. data/lib/geocoder/lookups/mapquest.rb +43 -0
  27. data/lib/geocoder/lookups/maxmind.rb +88 -0
  28. data/lib/geocoder/lookups/nominatim.rb +45 -0
  29. data/lib/geocoder/lookups/ovi.rb +52 -0
  30. data/lib/geocoder/lookups/test.rb +38 -0
  31. data/lib/geocoder/lookups/yahoo.rb +84 -0
  32. data/lib/geocoder/lookups/yandex.rb +54 -0
  33. data/lib/geocoder/models/active_record.rb +46 -0
  34. data/lib/geocoder/models/base.rb +42 -0
  35. data/lib/geocoder/models/mongo_base.rb +60 -0
  36. data/lib/geocoder/models/mongo_mapper.rb +26 -0
  37. data/lib/geocoder/models/mongoid.rb +32 -0
  38. data/lib/geocoder/query.rb +103 -0
  39. data/lib/geocoder/railtie.rb +26 -0
  40. data/lib/geocoder/request.rb +23 -0
  41. data/lib/geocoder/results/base.rb +67 -0
  42. data/lib/geocoder/results/bing.rb +48 -0
  43. data/lib/geocoder/results/freegeoip.rb +45 -0
  44. data/lib/geocoder/results/geocoder_ca.rb +60 -0
  45. data/lib/geocoder/results/google.rb +106 -0
  46. data/lib/geocoder/results/google_premier.rb +6 -0
  47. data/lib/geocoder/results/mapquest.rb +51 -0
  48. data/lib/geocoder/results/maxmind.rb +136 -0
  49. data/lib/geocoder/results/nominatim.rb +94 -0
  50. data/lib/geocoder/results/ovi.rb +62 -0
  51. data/lib/geocoder/results/test.rb +16 -0
  52. data/lib/geocoder/results/yahoo.rb +55 -0
  53. data/lib/geocoder/results/yandex.rb +80 -0
  54. data/lib/geocoder/sql.rb +106 -0
  55. data/lib/geocoder/stores/active_record.rb +259 -0
  56. data/lib/geocoder/stores/base.rb +120 -0
  57. data/lib/geocoder/stores/mongo_base.rb +85 -0
  58. data/lib/geocoder/stores/mongo_mapper.rb +13 -0
  59. data/lib/geocoder/stores/mongoid.rb +13 -0
  60. data/lib/geocoder/version.rb +3 -0
  61. data/lib/hash_recursive_merge.rb +74 -0
  62. data/lib/oauth_util.rb +112 -0
  63. data/lib/tasks/geocoder.rake +25 -0
  64. data/test/active_record_test.rb +15 -0
  65. data/test/cache_test.rb +19 -0
  66. data/test/calculations_test.rb +195 -0
  67. data/test/configuration_test.rb +78 -0
  68. data/test/custom_block_test.rb +32 -0
  69. data/test/error_handling_test.rb +43 -0
  70. data/test/fixtures/bing_invalid_key +1 -0
  71. data/test/fixtures/bing_madison_square_garden +40 -0
  72. data/test/fixtures/bing_no_results +16 -0
  73. data/test/fixtures/bing_reverse +42 -0
  74. data/test/fixtures/freegeoip_74_200_247_59 +12 -0
  75. data/test/fixtures/freegeoip_no_results +1 -0
  76. data/test/fixtures/geocoder_ca_madison_square_garden +1 -0
  77. data/test/fixtures/geocoder_ca_no_results +1 -0
  78. data/test/fixtures/geocoder_ca_reverse +34 -0
  79. data/test/fixtures/google_garbage +456 -0
  80. data/test/fixtures/google_madison_square_garden +57 -0
  81. data/test/fixtures/google_no_city_data +44 -0
  82. data/test/fixtures/google_no_locality +51 -0
  83. data/test/fixtures/google_no_results +4 -0
  84. data/test/fixtures/mapquest_madison_square_garden +52 -0
  85. data/test/fixtures/mapquest_no_results +7 -0
  86. data/test/fixtures/maxmind_24_24_24_21 +1 -0
  87. data/test/fixtures/maxmind_24_24_24_22 +1 -0
  88. data/test/fixtures/maxmind_24_24_24_23 +1 -0
  89. data/test/fixtures/maxmind_24_24_24_24 +1 -0
  90. data/test/fixtures/maxmind_74_200_247_59 +1 -0
  91. data/test/fixtures/maxmind_invalid_key +1 -0
  92. data/test/fixtures/maxmind_no_results +1 -0
  93. data/test/fixtures/nominatim_madison_square_garden +150 -0
  94. data/test/fixtures/nominatim_no_results +1 -0
  95. data/test/fixtures/ovi_madison_square_garden +72 -0
  96. data/test/fixtures/ovi_no_results +8 -0
  97. data/test/fixtures/yahoo_error +1 -0
  98. data/test/fixtures/yahoo_invalid_key +2 -0
  99. data/test/fixtures/yahoo_madison_square_garden +52 -0
  100. data/test/fixtures/yahoo_no_results +10 -0
  101. data/test/fixtures/yahoo_over_limit +2 -0
  102. data/test/fixtures/yandex_invalid_key +1 -0
  103. data/test/fixtures/yandex_kremlin +48 -0
  104. data/test/fixtures/yandex_no_city_and_town +112 -0
  105. data/test/fixtures/yandex_no_results +16 -0
  106. data/test/geocoder_test.rb +59 -0
  107. data/test/https_test.rb +16 -0
  108. data/test/integration/smoke_test.rb +26 -0
  109. data/test/lookup_test.rb +116 -0
  110. data/test/method_aliases_test.rb +25 -0
  111. data/test/mongoid_test.rb +39 -0
  112. data/test/mongoid_test_helper.rb +43 -0
  113. data/test/near_test.rb +43 -0
  114. data/test/oauth_util_test.rb +30 -0
  115. data/test/proxy_test.rb +23 -0
  116. data/test/query_test.rb +51 -0
  117. data/test/request_test.rb +29 -0
  118. data/test/result_test.rb +42 -0
  119. data/test/services_test.rb +277 -0
  120. data/test/test_helper.rb +279 -0
  121. data/test/test_mode_test.rb +50 -0
  122. metadata +170 -0
@@ -0,0 +1,279 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+
7
+ class MysqlConnection
8
+ def adapter_name
9
+ "mysql"
10
+ end
11
+ end
12
+
13
+ ##
14
+ # Simulate enough of ActiveRecord::Base that objects can be used for testing.
15
+ #
16
+ module ActiveRecord
17
+ class Base
18
+
19
+ def initialize
20
+ @attributes = {}
21
+ end
22
+
23
+ def read_attribute(attr_name)
24
+ @attributes[attr_name.to_sym]
25
+ end
26
+
27
+ def write_attribute(attr_name, value)
28
+ @attributes[attr_name.to_sym] = value
29
+ end
30
+
31
+ def update_attribute(attr_name, value)
32
+ write_attribute(attr_name.to_sym, value)
33
+ end
34
+
35
+ def self.scope(*args); end
36
+
37
+ def self.connection
38
+ MysqlConnection.new
39
+ end
40
+
41
+ def method_missing(name, *args, &block)
42
+ if name.to_s[-1..-1] == "="
43
+ write_attribute name.to_s[0...-1], *args
44
+ else
45
+ read_attribute name
46
+ end
47
+ end
48
+
49
+ class << self
50
+ def table_name
51
+ 'test_table_name'
52
+ end
53
+
54
+ def primary_key
55
+ :id
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+
62
+ # simulate Rails module so Railtie gets loaded
63
+ module Rails
64
+ end
65
+
66
+ # Require Geocoder after ActiveRecord simulator.
67
+ require 'geocoder'
68
+ require "geocoder/lookups/base"
69
+
70
+ ##
71
+ # Mock HTTP request to geocoding service.
72
+ #
73
+ module Geocoder
74
+ module Lookup
75
+ class Base
76
+ private
77
+ def fixture_exists?(filename)
78
+ File.exist?(File.join("test", "fixtures", filename))
79
+ end
80
+
81
+ def read_fixture(file)
82
+ filepath = File.join("test", "fixtures", file)
83
+ s = File.read(filepath).strip.gsub(/\n\s*/, "")
84
+ s.instance_eval do
85
+ def body; self; end
86
+ def code; "200"; end
87
+ end
88
+ s
89
+ end
90
+
91
+ ##
92
+ # Fixture to use if none match the given query.
93
+ #
94
+ def default_fixture_filename
95
+ "#{fixture_prefix}_madison_square_garden"
96
+ end
97
+
98
+ def fixture_prefix
99
+ handle
100
+ end
101
+
102
+ def fixture_for_query(query)
103
+ label = query.reverse_geocode? ? "reverse" : query.text.gsub(/[ \.]/, "_")
104
+ filename = "#{fixture_prefix}_#{label}"
105
+ fixture_exists?(filename) ? filename : default_fixture_filename
106
+ end
107
+
108
+ def make_api_request(query)
109
+ raise TimeoutError if query.text == "timeout"
110
+ raise SocketError if query.text == "socket_error"
111
+ read_fixture fixture_for_query(query)
112
+ end
113
+ end
114
+
115
+ class GooglePremier
116
+ private
117
+ def fixture_prefix
118
+ "google"
119
+ end
120
+ end
121
+
122
+ class Yandex
123
+ private
124
+ def default_fixture_filename
125
+ "yandex_kremlin"
126
+ end
127
+ end
128
+
129
+ class Freegeoip
130
+ private
131
+ def default_fixture_filename
132
+ "freegeoip_74_200_247_59"
133
+ end
134
+ end
135
+
136
+ class Maxmind
137
+ private
138
+ def default_fixture_filename
139
+ "maxmind_74_200_247_59"
140
+ end
141
+ end
142
+
143
+ end
144
+ end
145
+
146
+ ##
147
+ # Geocoded model.
148
+ #
149
+ class Venue < ActiveRecord::Base
150
+ geocoded_by :address
151
+
152
+ def initialize(name, address)
153
+ super()
154
+ write_attribute :name, name
155
+ write_attribute :address, address
156
+ end
157
+ end
158
+
159
+ ##
160
+ # Geocoded model.
161
+ # - Has user-defined primary key (not just 'id')
162
+ #
163
+ class VenuePlus < Venue
164
+
165
+ class << self
166
+ def primary_key
167
+ :custom_primary_key_id
168
+ end
169
+ end
170
+
171
+ end
172
+
173
+ ##
174
+ # Reverse geocoded model.
175
+ #
176
+ class Landmark < ActiveRecord::Base
177
+ reverse_geocoded_by :latitude, :longitude
178
+
179
+ def initialize(name, latitude, longitude)
180
+ super()
181
+ write_attribute :name, name
182
+ write_attribute :latitude, latitude
183
+ write_attribute :longitude, longitude
184
+ end
185
+ end
186
+
187
+ ##
188
+ # Geocoded model with block.
189
+ #
190
+ class Event < ActiveRecord::Base
191
+ geocoded_by :address do |obj,results|
192
+ if result = results.first
193
+ obj.coords_string = "#{result.latitude},#{result.longitude}"
194
+ else
195
+ obj.coords_string = "NOT FOUND"
196
+ end
197
+ end
198
+
199
+ def initialize(name, address)
200
+ super()
201
+ write_attribute :name, name
202
+ write_attribute :address, address
203
+ end
204
+ end
205
+
206
+ ##
207
+ # Reverse geocoded model with block.
208
+ #
209
+ class Party < ActiveRecord::Base
210
+ reverse_geocoded_by :latitude, :longitude do |obj,results|
211
+ if result = results.first
212
+ obj.country = result.country_code
213
+ end
214
+ end
215
+
216
+ def initialize(name, latitude, longitude)
217
+ super()
218
+ write_attribute :name, name
219
+ write_attribute :latitude, latitude
220
+ write_attribute :longitude, longitude
221
+ end
222
+ end
223
+
224
+ ##
225
+ # Forward and reverse geocoded model.
226
+ # Should fill in whatever's missing (coords or address).
227
+ #
228
+ class GasStation < ActiveRecord::Base
229
+ geocoded_by :address, :latitude => :lat, :longitude => :lon
230
+ reverse_geocoded_by :lat, :lon, :address => :location
231
+
232
+ def initialize(name)
233
+ super()
234
+ write_attribute :name, name
235
+ end
236
+ end
237
+
238
+
239
+ class Test::Unit::TestCase
240
+
241
+ def setup
242
+ Geocoder.configure(:maxmind => {:service => :city_isp_org})
243
+ end
244
+
245
+ def teardown
246
+ Geocoder.send(:remove_const, :Configuration)
247
+ load "geocoder/configuration.rb"
248
+ end
249
+
250
+ def venue_params(abbrev)
251
+ {
252
+ :msg => ["Madison Square Garden", "4 Penn Plaza, New York, NY"]
253
+ }[abbrev]
254
+ end
255
+
256
+ def landmark_params(abbrev)
257
+ {
258
+ :msg => ["Madison Square Garden", 40.750354, -73.993371]
259
+ }[abbrev]
260
+ end
261
+
262
+ def is_nan_coordinates?(coordinates)
263
+ return false unless coordinates.respond_to? :size # Should be an array
264
+ return false unless coordinates.size == 2 # Should have dimension 2
265
+ coordinates[0].nan? && coordinates[1].nan? # Both coordinates should be NaN
266
+ end
267
+
268
+ def set_api_key!(lookup_name)
269
+ lookup = Geocoder::Lookup.get(lookup_name)
270
+ if lookup.required_api_key_parts.size == 1
271
+ key = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
272
+ elsif lookup.required_api_key_parts.size > 1
273
+ key = lookup.required_api_key_parts
274
+ else
275
+ key = nil
276
+ end
277
+ Geocoder.configure(:api_key => key)
278
+ end
279
+ end
@@ -0,0 +1,50 @@
1
+ require 'test_helper'
2
+
3
+ class TestModeTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @_original_lookup = Geocoder.config.lookup
7
+ Geocoder.configure(:lookup => :test)
8
+ end
9
+
10
+ def teardown
11
+ Geocoder::Lookup::Test.reset
12
+ Geocoder.configure(:lookup => @_original_lookup)
13
+ end
14
+
15
+ def test_search_with_known_stub
16
+ coordinates = [40.7143528, -74.0059731]
17
+ attributes = {
18
+ 'coordinates' => coordinates,
19
+ 'latitude' => coordinates[0],
20
+ 'longitude' => coordinates[1],
21
+ 'address' => 'New York, NY, USA',
22
+ 'state' => 'New York',
23
+ 'state_code' => 'NY',
24
+ 'country' => 'United States',
25
+ 'country_code' => 'US',
26
+ }
27
+
28
+ Geocoder::Lookup::Test.add_stub("New York, NY", [attributes])
29
+
30
+ results = Geocoder.search("New York, NY")
31
+ assert_equal 1, results.size
32
+
33
+ result = results.first
34
+ assert_equal coordinates, result.coordinates
35
+ assert_equal attributes['latitude'], result.latitude
36
+ assert_equal attributes['longitude'], result.longitude
37
+ assert_equal attributes['address'], result.address
38
+ assert_equal attributes['state'], result.state
39
+ assert_equal attributes['state_code'], result.state_code
40
+ assert_equal attributes['country'], result.country
41
+ assert_equal attributes['country_code'], result.country_code
42
+ end
43
+
44
+ def test_search_with_unknown_stub
45
+ assert_raise ArgumentError do
46
+ Geocoder.search("New York, NY")
47
+ end
48
+ end
49
+
50
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: geocoder-sgonyea
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.6.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Reisner
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Provides object geocoding (by street or IP address), reverse geocoding
15
+ (coordinates to street address), distance queries for ActiveRecord and Mongoid,
16
+ result caching, and more. Designed for Rails but works with Sinatra and other Rack
17
+ frameworks too.
18
+ email:
19
+ - alex@alexreisner.com
20
+ executables:
21
+ - geocode
22
+ extensions: []
23
+ extra_rdoc_files: []
24
+ files:
25
+ - .gitignore
26
+ - .travis.yml
27
+ - CHANGELOG.md
28
+ - LICENSE
29
+ - README.md
30
+ - Rakefile
31
+ - bin/geocode
32
+ - examples/autoexpire_cache.rb
33
+ - gemfiles/Gemfile.mongoid-2.4.x
34
+ - lib/generators/geocoder/config/config_generator.rb
35
+ - lib/generators/geocoder/config/templates/initializer.rb
36
+ - lib/geocoder.rb
37
+ - lib/geocoder/cache.rb
38
+ - lib/geocoder/calculations.rb
39
+ - lib/geocoder/cli.rb
40
+ - lib/geocoder/configuration.rb
41
+ - lib/geocoder/configuration_hash.rb
42
+ - lib/geocoder/exceptions.rb
43
+ - lib/geocoder/lookup.rb
44
+ - lib/geocoder/lookups/base.rb
45
+ - lib/geocoder/lookups/bing.rb
46
+ - lib/geocoder/lookups/freegeoip.rb
47
+ - lib/geocoder/lookups/geocoder_ca.rb
48
+ - lib/geocoder/lookups/google.rb
49
+ - lib/geocoder/lookups/google_premier.rb
50
+ - lib/geocoder/lookups/mapquest.rb
51
+ - lib/geocoder/lookups/maxmind.rb
52
+ - lib/geocoder/lookups/nominatim.rb
53
+ - lib/geocoder/lookups/ovi.rb
54
+ - lib/geocoder/lookups/test.rb
55
+ - lib/geocoder/lookups/yahoo.rb
56
+ - lib/geocoder/lookups/yandex.rb
57
+ - lib/geocoder/models/active_record.rb
58
+ - lib/geocoder/models/base.rb
59
+ - lib/geocoder/models/mongo_base.rb
60
+ - lib/geocoder/models/mongo_mapper.rb
61
+ - lib/geocoder/models/mongoid.rb
62
+ - lib/geocoder/query.rb
63
+ - lib/geocoder/railtie.rb
64
+ - lib/geocoder/request.rb
65
+ - lib/geocoder/results/base.rb
66
+ - lib/geocoder/results/bing.rb
67
+ - lib/geocoder/results/freegeoip.rb
68
+ - lib/geocoder/results/geocoder_ca.rb
69
+ - lib/geocoder/results/google.rb
70
+ - lib/geocoder/results/google_premier.rb
71
+ - lib/geocoder/results/mapquest.rb
72
+ - lib/geocoder/results/maxmind.rb
73
+ - lib/geocoder/results/nominatim.rb
74
+ - lib/geocoder/results/ovi.rb
75
+ - lib/geocoder/results/test.rb
76
+ - lib/geocoder/results/yahoo.rb
77
+ - lib/geocoder/results/yandex.rb
78
+ - lib/geocoder/sql.rb
79
+ - lib/geocoder/stores/active_record.rb
80
+ - lib/geocoder/stores/base.rb
81
+ - lib/geocoder/stores/mongo_base.rb
82
+ - lib/geocoder/stores/mongo_mapper.rb
83
+ - lib/geocoder/stores/mongoid.rb
84
+ - lib/geocoder/version.rb
85
+ - lib/hash_recursive_merge.rb
86
+ - lib/oauth_util.rb
87
+ - lib/tasks/geocoder.rake
88
+ - test/active_record_test.rb
89
+ - test/cache_test.rb
90
+ - test/calculations_test.rb
91
+ - test/configuration_test.rb
92
+ - test/custom_block_test.rb
93
+ - test/error_handling_test.rb
94
+ - test/fixtures/bing_invalid_key
95
+ - test/fixtures/bing_madison_square_garden
96
+ - test/fixtures/bing_no_results
97
+ - test/fixtures/bing_reverse
98
+ - test/fixtures/freegeoip_74_200_247_59
99
+ - test/fixtures/freegeoip_no_results
100
+ - test/fixtures/geocoder_ca_madison_square_garden
101
+ - test/fixtures/geocoder_ca_no_results
102
+ - test/fixtures/geocoder_ca_reverse
103
+ - test/fixtures/google_garbage
104
+ - test/fixtures/google_madison_square_garden
105
+ - test/fixtures/google_no_city_data
106
+ - test/fixtures/google_no_locality
107
+ - test/fixtures/google_no_results
108
+ - test/fixtures/mapquest_madison_square_garden
109
+ - test/fixtures/mapquest_no_results
110
+ - test/fixtures/maxmind_24_24_24_21
111
+ - test/fixtures/maxmind_24_24_24_22
112
+ - test/fixtures/maxmind_24_24_24_23
113
+ - test/fixtures/maxmind_24_24_24_24
114
+ - test/fixtures/maxmind_74_200_247_59
115
+ - test/fixtures/maxmind_invalid_key
116
+ - test/fixtures/maxmind_no_results
117
+ - test/fixtures/nominatim_madison_square_garden
118
+ - test/fixtures/nominatim_no_results
119
+ - test/fixtures/ovi_madison_square_garden
120
+ - test/fixtures/ovi_no_results
121
+ - test/fixtures/yahoo_error
122
+ - test/fixtures/yahoo_invalid_key
123
+ - test/fixtures/yahoo_madison_square_garden
124
+ - test/fixtures/yahoo_no_results
125
+ - test/fixtures/yahoo_over_limit
126
+ - test/fixtures/yandex_invalid_key
127
+ - test/fixtures/yandex_kremlin
128
+ - test/fixtures/yandex_no_city_and_town
129
+ - test/fixtures/yandex_no_results
130
+ - test/geocoder_test.rb
131
+ - test/https_test.rb
132
+ - test/integration/smoke_test.rb
133
+ - test/lookup_test.rb
134
+ - test/method_aliases_test.rb
135
+ - test/mongoid_test.rb
136
+ - test/mongoid_test_helper.rb
137
+ - test/near_test.rb
138
+ - test/oauth_util_test.rb
139
+ - test/proxy_test.rb
140
+ - test/query_test.rb
141
+ - test/request_test.rb
142
+ - test/result_test.rb
143
+ - test/services_test.rb
144
+ - test/test_helper.rb
145
+ - test/test_mode_test.rb
146
+ homepage: http://www.rubygeocoder.com
147
+ licenses: []
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubyforge_project:
166
+ rubygems_version: 1.8.23
167
+ signing_key:
168
+ specification_version: 3
169
+ summary: Complete geocoding solution for Ruby.
170
+ test_files: []