geocoder 1.1.3 → 1.1.6

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 (98) hide show
  1. data/.travis.yml +4 -0
  2. data/{CHANGELOG.rdoc → CHANGELOG.md} +109 -35
  3. data/README.md +645 -0
  4. data/examples/autoexpire_cache.rb +28 -0
  5. data/lib/generators/geocoder/config/templates/initializer.rb +18 -22
  6. data/lib/geocoder/cache.rb +2 -1
  7. data/lib/geocoder/calculations.rb +13 -13
  8. data/lib/geocoder/cli.rb +17 -19
  9. data/lib/geocoder/configuration.rb +68 -42
  10. data/lib/geocoder/configuration_hash.rb +11 -0
  11. data/lib/geocoder/exceptions.rb +3 -0
  12. data/lib/geocoder/lookup.rb +81 -0
  13. data/lib/geocoder/lookups/base.rb +106 -56
  14. data/lib/geocoder/lookups/bing.rb +25 -11
  15. data/lib/geocoder/lookups/freegeoip.rb +11 -7
  16. data/lib/geocoder/lookups/geocoder_ca.rb +17 -9
  17. data/lib/geocoder/lookups/google.rb +29 -8
  18. data/lib/geocoder/lookups/google_premier.rb +20 -11
  19. data/lib/geocoder/lookups/mapquest.rb +29 -19
  20. data/lib/geocoder/lookups/maxmind.rb +72 -0
  21. data/lib/geocoder/lookups/nominatim.rb +21 -13
  22. data/lib/geocoder/lookups/test.rb +12 -6
  23. data/lib/geocoder/lookups/yahoo.rb +63 -13
  24. data/lib/geocoder/lookups/yandex.rb +26 -11
  25. data/lib/geocoder/models/mongoid.rb +1 -2
  26. data/lib/geocoder/query.rb +103 -0
  27. data/lib/geocoder/request.rb +7 -1
  28. data/lib/geocoder/results/base.rb +8 -2
  29. data/lib/geocoder/results/google.rb +6 -0
  30. data/lib/geocoder/results/mapquest.rb +19 -34
  31. data/lib/geocoder/results/maxmind.rb +136 -0
  32. data/lib/geocoder/results/nominatim.rb +14 -3
  33. data/lib/geocoder/results/yahoo.rb +9 -2
  34. data/lib/geocoder/sql.rb +106 -0
  35. data/lib/geocoder/stores/active_record.rb +75 -142
  36. data/lib/geocoder/stores/base.rb +3 -2
  37. data/lib/geocoder/stores/mongo_base.rb +2 -2
  38. data/lib/geocoder/version.rb +1 -1
  39. data/lib/geocoder.rb +11 -89
  40. data/lib/hash_recursive_merge.rb +74 -0
  41. data/lib/oauth_util.rb +112 -0
  42. data/test/active_record_test.rb +15 -0
  43. data/test/cache_test.rb +19 -0
  44. data/test/calculations_test.rb +11 -4
  45. data/test/configuration_test.rb +26 -51
  46. data/test/error_handling_test.rb +15 -11
  47. data/test/fixtures/bing_invalid_key +1 -0
  48. data/test/fixtures/mapquest_madison_square_garden +52 -0
  49. data/test/fixtures/mapquest_no_results +7 -0
  50. data/test/fixtures/maxmind_24_24_24_21 +1 -0
  51. data/test/fixtures/maxmind_24_24_24_22 +1 -0
  52. data/test/fixtures/maxmind_24_24_24_23 +1 -0
  53. data/test/fixtures/maxmind_24_24_24_24 +1 -0
  54. data/test/fixtures/maxmind_74_200_247_59 +1 -0
  55. data/test/fixtures/maxmind_invalid_key +1 -0
  56. data/test/fixtures/maxmind_no_results +1 -0
  57. data/test/fixtures/yahoo_error +1 -0
  58. data/test/fixtures/yahoo_invalid_key +2 -0
  59. data/test/fixtures/yahoo_madison_square_garden +52 -0
  60. data/test/fixtures/yahoo_no_results +10 -0
  61. data/test/fixtures/yahoo_over_limit +2 -0
  62. data/test/https_test.rb +3 -3
  63. data/test/integration/smoke_test.rb +8 -6
  64. data/test/lookup_test.rb +92 -13
  65. data/test/near_test.rb +11 -0
  66. data/test/oauth_util_test.rb +30 -0
  67. data/test/proxy_test.rb +2 -2
  68. data/test/query_test.rb +42 -0
  69. data/test/result_test.rb +4 -3
  70. data/test/services_test.rb +164 -26
  71. data/test/test_helper.rb +93 -112
  72. data/test/test_mode_test.rb +3 -4
  73. metadata +52 -35
  74. data/README.rdoc +0 -552
  75. data/test/fixtures/mapquest_madison_square_garden.json +0 -27
  76. data/test/fixtures/mapquest_no_results.json +0 -1
  77. data/test/fixtures/yahoo_garbage.json +0 -50
  78. data/test/fixtures/yahoo_madison_square_garden.json +0 -46
  79. data/test/fixtures/yahoo_no_results.json +0 -10
  80. data/test/input_handling_test.rb +0 -43
  81. /data/test/fixtures/{bing_madison_square_garden.json → bing_madison_square_garden} +0 -0
  82. /data/test/fixtures/{bing_no_results.json → bing_no_results} +0 -0
  83. /data/test/fixtures/{bing_reverse.json → bing_reverse} +0 -0
  84. /data/test/fixtures/{freegeoip_74_200_247_59.json → freegeoip_74_200_247_59} +0 -0
  85. /data/test/fixtures/{freegeoip_no_results.json → freegeoip_no_results} +0 -0
  86. /data/test/fixtures/{geocoder_ca_madison_square_garden.json → geocoder_ca_madison_square_garden} +0 -0
  87. /data/test/fixtures/{geocoder_ca_no_results.json → geocoder_ca_no_results} +0 -0
  88. /data/test/fixtures/{geocoder_ca_reverse.json → geocoder_ca_reverse} +0 -0
  89. /data/test/fixtures/{google_garbage.json → google_garbage} +0 -0
  90. /data/test/fixtures/{google_madison_square_garden.json → google_madison_square_garden} +0 -0
  91. /data/test/fixtures/{google_no_city_data.json → google_no_city_data} +0 -0
  92. /data/test/fixtures/{google_no_locality.json → google_no_locality} +0 -0
  93. /data/test/fixtures/{google_no_results.json → google_no_results} +0 -0
  94. /data/test/fixtures/{nominatim_madison_square_garden.json → nominatim_madison_square_garden} +0 -0
  95. /data/test/fixtures/{nominatim_no_results.json → nominatim_no_results} +0 -0
  96. /data/test/fixtures/{yandex_invalid_key.json → yandex_invalid_key} +0 -0
  97. /data/test/fixtures/{yandex_kremlin.json → yandex_kremlin} +0 -0
  98. /data/test/fixtures/{yandex_no_results.json → yandex_no_results} +0 -0
data/test/test_helper.rb CHANGED
@@ -4,6 +4,12 @@ require 'test/unit'
4
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
6
 
7
+ class MysqlConnection
8
+ def adapter_name
9
+ "mysql"
10
+ end
11
+ end
12
+
7
13
  ##
8
14
  # Simulate enough of ActiveRecord::Base that objects can be used for testing.
9
15
  #
@@ -28,6 +34,10 @@ module ActiveRecord
28
34
 
29
35
  def self.scope(*args); end
30
36
 
37
+ def self.connection
38
+ MysqlConnection.new
39
+ end
40
+
31
41
  def method_missing(name, *args, &block)
32
42
  if name.to_s[-1..-1] == "="
33
43
  write_attribute name.to_s[0...-1], *args
@@ -35,6 +45,17 @@ module ActiveRecord
35
45
  read_attribute name
36
46
  end
37
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
+
38
59
  end
39
60
  end
40
61
 
@@ -52,127 +73,70 @@ require "geocoder/lookups/base"
52
73
  module Geocoder
53
74
  module Lookup
54
75
  class Base
55
- private #-----------------------------------------------------------------
56
- def read_fixture(file)
57
- File.read(File.join("test", "fixtures", file)).strip.gsub(/\n\s*/, "")
76
+ private
77
+ def fixture_exists?(filename)
78
+ File.exist?(File.join("test", "fixtures", filename))
58
79
  end
59
- end
60
80
 
61
- class Google < Base
62
- private #-----------------------------------------------------------------
63
- def fetch_raw_data(query, reverse = false)
64
- raise TimeoutError if query == "timeout"
65
- raise SocketError if query == "socket_error"
66
- file = case query
67
- when "no results"; :no_results
68
- when "no locality"; :no_locality
69
- when "no city data"; :no_city_data
70
- else :madison_square_garden
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
71
87
  end
72
- read_fixture "google_#{file}.json"
88
+ s
73
89
  end
74
- end
75
90
 
76
- class GooglePremier < Google
77
- end
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
78
97
 
79
- class Yahoo < Base
80
- private #-----------------------------------------------------------------
81
- def fetch_raw_data(query, reverse = false)
82
- raise TimeoutError if query == "timeout"
83
- raise SocketError if query == "socket_error"
84
- file = case query
85
- when "no results"; :no_results
86
- else :madison_square_garden
87
- end
88
- read_fixture "yahoo_#{file}.json"
98
+ def fixture_prefix
99
+ handle
89
100
  end
90
- end
91
101
 
92
- class Yandex < Base
93
- private #-----------------------------------------------------------------
94
- def fetch_raw_data(query, reverse = false)
95
- raise TimeoutError if query == "timeout"
96
- raise SocketError if query == "socket_error"
97
- file = case query
98
- when "no results"; :no_results
99
- when "invalid key"; :invalid_key
100
- else :kremlin
101
- end
102
- read_fixture "yandex_#{file}.json"
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
103
106
  end
104
- end
105
107
 
106
- class GeocoderCa < Base
107
- private #-----------------------------------------------------------------
108
- def fetch_raw_data(query, reverse = false)
109
- raise TimeoutError if query == "timeout"
110
- raise SocketError if query == "socket_error"
111
- if reverse
112
- read_fixture "geocoder_ca_reverse.json"
113
- else
114
- file = case query
115
- when "no results"; :no_results
116
- else :madison_square_garden
117
- end
118
- read_fixture "geocoder_ca_#{file}.json"
119
- end
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)
120
112
  end
121
113
  end
122
114
 
123
- class Freegeoip < Base
124
- private #-----------------------------------------------------------------
125
- def fetch_raw_data(query, reverse = false)
126
- raise TimeoutError if query == "timeout"
127
- raise SocketError if query == "socket_error"
128
- file = case query
129
- when "no results"; :no_results
130
- else "74_200_247_59"
131
- end
132
- read_fixture "freegeoip_#{file}.json"
115
+ class GooglePremier
116
+ private
117
+ def fixture_prefix
118
+ "google"
133
119
  end
134
120
  end
135
121
 
136
- class Bing < Base
137
- private #-----------------------------------------------------------------
138
- def fetch_raw_data(query, reverse = false)
139
- raise TimeoutError if query == "timeout"
140
- raise SocketError if query == "socket_error"
141
- if reverse
142
- read_fixture "bing_reverse.json"
143
- else
144
- file = case query
145
- when "no results"; :no_results
146
- else :madison_square_garden
147
- end
148
- read_fixture "bing_#{file}.json"
149
- end
122
+ class Yandex
123
+ private
124
+ def default_fixture_filename
125
+ "yandex_kremlin"
150
126
  end
151
127
  end
152
128
 
153
- class Nominatim < Base
154
- private #-----------------------------------------------------------------
155
- def fetch_raw_data(query, reverse = false)
156
- raise TimeoutError if query == "timeout"
157
- raise SocketError if query == "socket_error"
158
- file = case query
159
- when "no results"; :no_results
160
- else :madison_square_garden
161
- end
162
- read_fixture "nominatim_#{file}.json"
129
+ class Freegeoip
130
+ private
131
+ def default_fixture_filename
132
+ "freegeoip_74_200_247_59"
163
133
  end
164
134
  end
165
135
 
166
- class Mapquest < Base
167
- private #-----------------------------------------------------------------
168
- def fetch_raw_data(query, reverse = false)
169
- raise TimeoutError if query == "timeout"
170
- raise SocketError if query == "socket_error"
171
- file = case query
172
- when "no results"; :no_results
173
- else :madison_square_garden
174
- end
175
- read_fixture "mapquest_#{file}.json"
136
+ class Maxmind
137
+ private
138
+ def default_fixture_filename
139
+ "maxmind_74_200_247_59"
176
140
  end
177
141
  end
178
142
 
@@ -192,6 +156,20 @@ class Venue < ActiveRecord::Base
192
156
  end
193
157
  end
194
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
+
195
173
  ##
196
174
  # Reverse geocoded model.
197
175
  #
@@ -260,6 +238,10 @@ end
260
238
 
261
239
  class Test::Unit::TestCase
262
240
 
241
+ def setup
242
+ Geocoder.configure(:maxmind => {:service => :omni})
243
+ end
244
+
263
245
  def teardown
264
246
  Geocoder.send(:remove_const, :Configuration)
265
247
  load "geocoder/configuration.rb"
@@ -277,22 +259,21 @@ class Test::Unit::TestCase
277
259
  }[abbrev]
278
260
  end
279
261
 
280
- def all_lookups
281
- Geocoder.valid_lookups
282
- end
283
-
284
- def all_lookups_except_test
285
- Geocoder.valid_lookups - [:test]
286
- end
287
-
288
- def street_lookups
289
- all_lookups - [:freegeoip]
290
- end
291
-
292
262
  def is_nan_coordinates?(coordinates)
293
263
  return false unless coordinates.respond_to? :size # Should be an array
294
264
  return false unless coordinates.size == 2 # Should have dimension 2
295
265
  coordinates[0].nan? && coordinates[1].nan? # Both coordinates should be NaN
296
266
  end
297
- end
298
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
@@ -1,16 +1,15 @@
1
1
  require 'test_helper'
2
- require 'geocoder/lookups/test'
3
2
 
4
3
  class TestModeTest < Test::Unit::TestCase
5
4
 
6
5
  def setup
7
- @_original_lookup = Geocoder::Configuration.lookup
8
- Geocoder::Configuration.lookup = :test
6
+ @_original_lookup = Geocoder.config.lookup
7
+ Geocoder.configure(:lookup => :test)
9
8
  end
10
9
 
11
10
  def teardown
12
11
  Geocoder::Lookup::Test.reset
13
- Geocoder::Configuration.lookup = @_original_lookup
12
+ Geocoder.configure(:lookup => @_original_lookup)
14
13
  end
15
14
 
16
15
  def test_search_with_known_stub
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-26 00:00:00.000000000 Z
12
+ date: 2012-12-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Provides object geocoding (by street or IP address), reverse geocoding
15
15
  (coordinates to street address), distance queries for ActiveRecord and Mongoid,
@@ -24,11 +24,12 @@ extra_rdoc_files: []
24
24
  files:
25
25
  - .gitignore
26
26
  - .travis.yml
27
- - CHANGELOG.rdoc
27
+ - CHANGELOG.md
28
28
  - LICENSE
29
- - README.rdoc
29
+ - README.md
30
30
  - Rakefile
31
31
  - bin/geocode
32
+ - examples/autoexpire_cache.rb
32
33
  - gemfiles/Gemfile.mongoid-2.4.x
33
34
  - lib/generators/geocoder/config/config_generator.rb
34
35
  - lib/generators/geocoder/config/templates/initializer.rb
@@ -37,7 +38,9 @@ files:
37
38
  - lib/geocoder/calculations.rb
38
39
  - lib/geocoder/cli.rb
39
40
  - lib/geocoder/configuration.rb
41
+ - lib/geocoder/configuration_hash.rb
40
42
  - lib/geocoder/exceptions.rb
43
+ - lib/geocoder/lookup.rb
41
44
  - lib/geocoder/lookups/base.rb
42
45
  - lib/geocoder/lookups/bing.rb
43
46
  - lib/geocoder/lookups/freegeoip.rb
@@ -45,6 +48,7 @@ files:
45
48
  - lib/geocoder/lookups/google.rb
46
49
  - lib/geocoder/lookups/google_premier.rb
47
50
  - lib/geocoder/lookups/mapquest.rb
51
+ - lib/geocoder/lookups/maxmind.rb
48
52
  - lib/geocoder/lookups/nominatim.rb
49
53
  - lib/geocoder/lookups/test.rb
50
54
  - lib/geocoder/lookups/yahoo.rb
@@ -54,6 +58,7 @@ files:
54
58
  - lib/geocoder/models/mongo_base.rb
55
59
  - lib/geocoder/models/mongo_mapper.rb
56
60
  - lib/geocoder/models/mongoid.rb
61
+ - lib/geocoder/query.rb
57
62
  - lib/geocoder/railtie.rb
58
63
  - lib/geocoder/request.rb
59
64
  - lib/geocoder/results/base.rb
@@ -63,53 +68,71 @@ files:
63
68
  - lib/geocoder/results/google.rb
64
69
  - lib/geocoder/results/google_premier.rb
65
70
  - lib/geocoder/results/mapquest.rb
71
+ - lib/geocoder/results/maxmind.rb
66
72
  - lib/geocoder/results/nominatim.rb
67
73
  - lib/geocoder/results/test.rb
68
74
  - lib/geocoder/results/yahoo.rb
69
75
  - lib/geocoder/results/yandex.rb
76
+ - lib/geocoder/sql.rb
70
77
  - lib/geocoder/stores/active_record.rb
71
78
  - lib/geocoder/stores/base.rb
72
79
  - lib/geocoder/stores/mongo_base.rb
73
80
  - lib/geocoder/stores/mongo_mapper.rb
74
81
  - lib/geocoder/stores/mongoid.rb
75
82
  - lib/geocoder/version.rb
83
+ - lib/hash_recursive_merge.rb
84
+ - lib/oauth_util.rb
76
85
  - lib/tasks/geocoder.rake
86
+ - test/active_record_test.rb
87
+ - test/cache_test.rb
77
88
  - test/calculations_test.rb
78
89
  - test/configuration_test.rb
79
90
  - test/custom_block_test.rb
80
91
  - test/error_handling_test.rb
81
- - test/fixtures/bing_madison_square_garden.json
82
- - test/fixtures/bing_no_results.json
83
- - test/fixtures/bing_reverse.json
84
- - test/fixtures/freegeoip_74_200_247_59.json
85
- - test/fixtures/freegeoip_no_results.json
86
- - test/fixtures/geocoder_ca_madison_square_garden.json
87
- - test/fixtures/geocoder_ca_no_results.json
88
- - test/fixtures/geocoder_ca_reverse.json
89
- - test/fixtures/google_garbage.json
90
- - test/fixtures/google_madison_square_garden.json
91
- - test/fixtures/google_no_city_data.json
92
- - test/fixtures/google_no_locality.json
93
- - test/fixtures/google_no_results.json
94
- - test/fixtures/mapquest_madison_square_garden.json
95
- - test/fixtures/mapquest_no_results.json
96
- - test/fixtures/nominatim_madison_square_garden.json
97
- - test/fixtures/nominatim_no_results.json
98
- - test/fixtures/yahoo_garbage.json
99
- - test/fixtures/yahoo_madison_square_garden.json
100
- - test/fixtures/yahoo_no_results.json
101
- - test/fixtures/yandex_invalid_key.json
102
- - test/fixtures/yandex_kremlin.json
103
- - test/fixtures/yandex_no_results.json
92
+ - test/fixtures/bing_invalid_key
93
+ - test/fixtures/bing_madison_square_garden
94
+ - test/fixtures/bing_no_results
95
+ - test/fixtures/bing_reverse
96
+ - test/fixtures/freegeoip_74_200_247_59
97
+ - test/fixtures/freegeoip_no_results
98
+ - test/fixtures/geocoder_ca_madison_square_garden
99
+ - test/fixtures/geocoder_ca_no_results
100
+ - test/fixtures/geocoder_ca_reverse
101
+ - test/fixtures/google_garbage
102
+ - test/fixtures/google_madison_square_garden
103
+ - test/fixtures/google_no_city_data
104
+ - test/fixtures/google_no_locality
105
+ - test/fixtures/google_no_results
106
+ - test/fixtures/mapquest_madison_square_garden
107
+ - test/fixtures/mapquest_no_results
108
+ - test/fixtures/maxmind_24_24_24_21
109
+ - test/fixtures/maxmind_24_24_24_22
110
+ - test/fixtures/maxmind_24_24_24_23
111
+ - test/fixtures/maxmind_24_24_24_24
112
+ - test/fixtures/maxmind_74_200_247_59
113
+ - test/fixtures/maxmind_invalid_key
114
+ - test/fixtures/maxmind_no_results
115
+ - test/fixtures/nominatim_madison_square_garden
116
+ - test/fixtures/nominatim_no_results
117
+ - test/fixtures/yahoo_error
118
+ - test/fixtures/yahoo_invalid_key
119
+ - test/fixtures/yahoo_madison_square_garden
120
+ - test/fixtures/yahoo_no_results
121
+ - test/fixtures/yahoo_over_limit
122
+ - test/fixtures/yandex_invalid_key
123
+ - test/fixtures/yandex_kremlin
124
+ - test/fixtures/yandex_no_results
104
125
  - test/geocoder_test.rb
105
126
  - test/https_test.rb
106
- - test/input_handling_test.rb
107
127
  - test/integration/smoke_test.rb
108
128
  - test/lookup_test.rb
109
129
  - test/method_aliases_test.rb
110
130
  - test/mongoid_test.rb
111
131
  - test/mongoid_test_helper.rb
132
+ - test/near_test.rb
133
+ - test/oauth_util_test.rb
112
134
  - test/proxy_test.rb
135
+ - test/query_test.rb
113
136
  - test/result_test.rb
114
137
  - test/services_test.rb
115
138
  - test/test_helper.rb
@@ -126,21 +149,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
149
  - - ! '>='
127
150
  - !ruby/object:Gem::Version
128
151
  version: '0'
129
- segments:
130
- - 0
131
- hash: 585705263
132
152
  required_rubygems_version: !ruby/object:Gem::Requirement
133
153
  none: false
134
154
  requirements:
135
155
  - - ! '>='
136
156
  - !ruby/object:Gem::Version
137
157
  version: '0'
138
- segments:
139
- - 0
140
- hash: 585705263
141
158
  requirements: []
142
159
  rubyforge_project:
143
- rubygems_version: 1.8.24
160
+ rubygems_version: 1.8.23
144
161
  signing_key:
145
162
  specification_version: 3
146
163
  summary: Complete geocoding solution for Ruby.