geocoder-sgonyea 1.1.6.1

Sign up to get free protection for your applications and to get access to all the features.
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: []