geocoder 1.5.1 → 1.6.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +45 -0
  3. data/LICENSE +1 -1
  4. data/README.md +16 -39
  5. data/bin/console +13 -0
  6. data/examples/autoexpire_cache_redis.rb +2 -0
  7. data/lib/easting_northing.rb +171 -0
  8. data/lib/geocoder/cache.rb +4 -0
  9. data/lib/geocoder/configuration.rb +2 -1
  10. data/lib/geocoder/configuration_hash.rb +4 -4
  11. data/lib/geocoder/ip_address.rb +2 -1
  12. data/lib/geocoder/lookup.rb +8 -3
  13. data/lib/geocoder/lookups/abstract_api.rb +46 -0
  14. data/lib/geocoder/lookups/ban_data_gouv_fr.rb +14 -1
  15. data/lib/geocoder/lookups/base.rb +2 -0
  16. data/lib/geocoder/lookups/esri.rb +6 -0
  17. data/lib/geocoder/lookups/freegeoip.rb +4 -4
  18. data/lib/geocoder/lookups/geocodio.rb +1 -1
  19. data/lib/geocoder/lookups/google.rb +7 -2
  20. data/lib/geocoder/lookups/google_places_details.rb +8 -14
  21. data/lib/geocoder/lookups/google_places_search.rb +28 -2
  22. data/lib/geocoder/lookups/google_premier.rb +4 -0
  23. data/lib/geocoder/lookups/here.rb +7 -16
  24. data/lib/geocoder/lookups/ip2location.rb +5 -13
  25. data/lib/geocoder/lookups/ipgeolocation.rb +51 -0
  26. data/lib/geocoder/lookups/ipregistry.rb +68 -0
  27. data/lib/geocoder/lookups/latlon.rb +1 -2
  28. data/lib/geocoder/lookups/maxmind_local.rb +7 -1
  29. data/lib/geocoder/lookups/nationaal_georegister_nl.rb +38 -0
  30. data/lib/geocoder/lookups/osmnames.rb +57 -0
  31. data/lib/geocoder/lookups/pickpoint.rb +1 -1
  32. data/lib/geocoder/lookups/smarty_streets.rb +6 -1
  33. data/lib/geocoder/lookups/telize.rb +1 -1
  34. data/lib/geocoder/lookups/tencent.rb +9 -9
  35. data/lib/geocoder/lookups/test.rb +4 -0
  36. data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +59 -0
  37. data/lib/geocoder/lookups/yandex.rb +3 -4
  38. data/lib/geocoder/results/abstract_api.rb +146 -0
  39. data/lib/geocoder/results/baidu.rb +0 -4
  40. data/lib/geocoder/results/ban_data_gouv_fr.rb +27 -2
  41. data/lib/geocoder/results/db_ip_com.rb +1 -1
  42. data/lib/geocoder/results/here.rb +4 -1
  43. data/lib/geocoder/results/ipgeolocation.rb +59 -0
  44. data/lib/geocoder/results/ipregistry.rb +304 -0
  45. data/lib/geocoder/results/nationaal_georegister_nl.rb +62 -0
  46. data/lib/geocoder/results/nominatim.rb +4 -0
  47. data/lib/geocoder/results/osmnames.rb +56 -0
  48. data/lib/geocoder/results/uk_ordnance_survey_names.rb +59 -0
  49. data/lib/geocoder/results/yandex.rb +217 -59
  50. data/lib/geocoder/sql.rb +4 -4
  51. data/lib/geocoder/util.rb +29 -0
  52. data/lib/geocoder/version.rb +1 -1
  53. data/lib/maxmind_database.rb +3 -3
  54. metadata +22 -16
  55. data/lib/geocoder/lookups/geocoder_us.rb +0 -51
  56. data/lib/geocoder/results/geocoder_us.rb +0 -39
  57. data/lib/hash_recursive_merge.rb +0 -74
@@ -16,7 +16,7 @@ module Geocoder::Result
16
16
  end
17
17
 
18
18
  def state_code
19
- @data['stateProv']
19
+ @data['stateProvCode']
20
20
  end
21
21
  alias_method :state, :state_code
22
22
 
@@ -27,7 +27,10 @@ module Geocoder::Result
27
27
  end
28
28
 
29
29
  def state
30
- address_data['County']
30
+ fail unless d = address_data['AdditionalData']
31
+ if v = d.find{|ad| ad['key']=='StateName'}
32
+ return v['value']
33
+ end
31
34
  end
32
35
 
33
36
  def province
@@ -0,0 +1,59 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Ipgeolocation < Base
5
+
6
+ def coordinates
7
+ [@data['latitude'].to_f, @data['longitude'].to_f]
8
+ end
9
+
10
+ def address(format = :full)
11
+ "#{city}, #{state} #{postal_code}, #{country_name}".sub(/^[ ,]*/, "")
12
+ end
13
+
14
+ def state
15
+ @data['state_prov']
16
+ end
17
+
18
+ def state_code
19
+ @data['state_prov']
20
+ end
21
+
22
+ def country
23
+ @data['country_name']
24
+ end
25
+
26
+ def country_code
27
+ @data['country_code2']
28
+ end
29
+
30
+ def postal_code
31
+ @data['zipcode']
32
+ end
33
+
34
+ def self.response_attributes
35
+ [
36
+ ['ip', ''],
37
+ ['hostname', ''],
38
+ ['continent_code', ''],
39
+ ['continent_name', ''],
40
+ ['country_code2', ''],
41
+ ['country_code3', ''],
42
+ ['country_name', ''],
43
+ ['country_capital',''],
44
+ ['district',''],
45
+ ['state_prov',''],
46
+ ['city', ''],
47
+ ['zipcode', ''],
48
+ ['time_zone', {}],
49
+ ['currency', {}]
50
+ ]
51
+ end
52
+
53
+ response_attributes.each do |attr, default|
54
+ define_method attr do
55
+ @data[attr] || default
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,304 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Ipregistry < Base
5
+
6
+ def initialize(data)
7
+ super
8
+
9
+ @data = flatten_hash(data)
10
+ end
11
+
12
+ def coordinates
13
+ [@data['location_latitude'], @data['location_longitude']]
14
+ end
15
+
16
+ def flatten_hash(hash)
17
+ hash.each_with_object({}) do |(k, v), h|
18
+ if v.is_a? Hash
19
+ flatten_hash(v).map do |h_k, h_v|
20
+ h["#{k}_#{h_k}".to_s] = h_v
21
+ end
22
+ else
23
+ h[k] = v
24
+ end
25
+ end
26
+ end
27
+
28
+ private :flatten_hash
29
+
30
+ def city
31
+ @data['location_city']
32
+ end
33
+
34
+ def country
35
+ @data['location_country_name']
36
+ end
37
+
38
+ def country_code
39
+ @data['location_country_code']
40
+ end
41
+
42
+ def postal_code
43
+ @data['location_postal']
44
+ end
45
+
46
+ def state
47
+ @data['location_region_name']
48
+ end
49
+
50
+ def state_code
51
+ @data['location_region_code']
52
+ end
53
+
54
+ # methods for fields specific to Ipregistry
55
+
56
+ def ip
57
+ @data["ip"]
58
+ end
59
+
60
+ def type
61
+ @data["type"]
62
+ end
63
+
64
+ def hostname
65
+ @data["hostname"]
66
+ end
67
+
68
+ def carrier_name
69
+ @data["carrier_name"]
70
+ end
71
+
72
+ def carrier_mcc
73
+ @data["carrier_mcc"]
74
+ end
75
+
76
+ def carrier_mnc
77
+ @data["carrier_mnc"]
78
+ end
79
+
80
+ def connection_asn
81
+ @data["connection_asn"]
82
+ end
83
+
84
+ def connection_domain
85
+ @data["connection_domain"]
86
+ end
87
+
88
+ def connection_organization
89
+ @data["connection_organization"]
90
+ end
91
+
92
+ def connection_type
93
+ @data["connection_type"]
94
+ end
95
+
96
+ def currency_code
97
+ @data["currency_code"]
98
+ end
99
+
100
+ def currency_name
101
+ @data["currency_name"]
102
+ end
103
+
104
+ def currency_plural
105
+ @data["currency_plural"]
106
+ end
107
+
108
+ def currency_symbol
109
+ @data["currency_symbol"]
110
+ end
111
+
112
+ def currency_symbol_native
113
+ @data["currency_symbol_native"]
114
+ end
115
+
116
+ def currency_format_negative_prefix
117
+ @data["currency_format_negative_prefix"]
118
+ end
119
+
120
+ def currency_format_negative_suffix
121
+ @data["currency_format_negative_suffix"]
122
+ end
123
+
124
+ def currency_format_positive_prefix
125
+ @data["currency_format_positive_prefix"]
126
+ end
127
+
128
+ def currency_format_positive_suffix
129
+ @data["currency_format_positive_suffix"]
130
+ end
131
+
132
+ def location_continent_code
133
+ @data["location_continent_code"]
134
+ end
135
+
136
+ def location_continent_name
137
+ @data["location_continent_name"]
138
+ end
139
+
140
+ def location_country_area
141
+ @data["location_country_area"]
142
+ end
143
+
144
+ def location_country_borders
145
+ @data["location_country_borders"]
146
+ end
147
+
148
+ def location_country_calling_code
149
+ @data["location_country_calling_code"]
150
+ end
151
+
152
+ def location_country_capital
153
+ @data["location_country_capital"]
154
+ end
155
+
156
+ def location_country_code
157
+ @data["location_country_code"]
158
+ end
159
+
160
+ def location_country_name
161
+ @data["location_country_name"]
162
+ end
163
+
164
+ def location_country_population
165
+ @data["location_country_population"]
166
+ end
167
+
168
+ def location_country_population_density
169
+ @data["location_country_population_density"]
170
+ end
171
+
172
+ def location_country_flag_emoji
173
+ @data["location_country_flag_emoji"]
174
+ end
175
+
176
+ def location_country_flag_emoji_unicode
177
+ @data["location_country_flag_emoji_unicode"]
178
+ end
179
+
180
+ def location_country_flag_emojitwo
181
+ @data["location_country_flag_emojitwo"]
182
+ end
183
+
184
+ def location_country_flag_noto
185
+ @data["location_country_flag_noto"]
186
+ end
187
+
188
+ def location_country_flag_twemoji
189
+ @data["location_country_flag_twemoji"]
190
+ end
191
+
192
+ def location_country_flag_wikimedia
193
+ @data["location_country_flag_wikimedia"]
194
+ end
195
+
196
+ def location_country_languages
197
+ @data["location_country_languages"]
198
+ end
199
+
200
+ def location_country_tld
201
+ @data["location_country_tld"]
202
+ end
203
+
204
+ def location_region_code
205
+ @data["location_region_code"]
206
+ end
207
+
208
+ def location_region_name
209
+ @data["location_region_name"]
210
+ end
211
+
212
+ def location_city
213
+ @data["location_city"]
214
+ end
215
+
216
+ def location_postal
217
+ @data["location_postal"]
218
+ end
219
+
220
+ def location_latitude
221
+ @data["location_latitude"]
222
+ end
223
+
224
+ def location_longitude
225
+ @data["location_longitude"]
226
+ end
227
+
228
+ def location_language_code
229
+ @data["location_language_code"]
230
+ end
231
+
232
+ def location_language_name
233
+ @data["location_language_name"]
234
+ end
235
+
236
+ def location_language_native
237
+ @data["location_language_native"]
238
+ end
239
+
240
+ def location_in_eu
241
+ @data["location_in_eu"]
242
+ end
243
+
244
+ def security_is_bogon
245
+ @data["security_is_bogon"]
246
+ end
247
+
248
+ def security_is_cloud_provider
249
+ @data["security_is_cloud_provider"]
250
+ end
251
+
252
+ def security_is_tor
253
+ @data["security_is_tor"]
254
+ end
255
+
256
+ def security_is_tor_exit
257
+ @data["security_is_tor_exit"]
258
+ end
259
+
260
+ def security_is_proxy
261
+ @data["security_is_proxy"]
262
+ end
263
+
264
+ def security_is_anonymous
265
+ @data["security_is_anonymous"]
266
+ end
267
+
268
+ def security_is_abuser
269
+ @data["security_is_abuser"]
270
+ end
271
+
272
+ def security_is_attacker
273
+ @data["security_is_attacker"]
274
+ end
275
+
276
+ def security_is_threat
277
+ @data["security_is_threat"]
278
+ end
279
+
280
+ def time_zone_id
281
+ @data["time_zone_id"]
282
+ end
283
+
284
+ def time_zone_abbreviation
285
+ @data["time_zone_abbreviation"]
286
+ end
287
+
288
+ def time_zone_current_time
289
+ @data["time_zone_current_time"]
290
+ end
291
+
292
+ def time_zone_name
293
+ @data["time_zone_name"]
294
+ end
295
+
296
+ def time_zone_offset
297
+ @data["time_zone_offset"]
298
+ end
299
+
300
+ def time_zone_in_daylight_saving
301
+ @data["time_zone_in_daylight_saving"]
302
+ end
303
+ end
304
+ end
@@ -0,0 +1,62 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class NationaalGeoregisterNl < Base
5
+
6
+ def response_attributes
7
+ @data
8
+ end
9
+
10
+ def coordinates
11
+ @data['centroide_ll'][6..-2].split(' ').map(&:to_f).reverse
12
+ end
13
+
14
+ def formatted_address
15
+ @data['weergavenaam']
16
+ end
17
+
18
+ alias_method :address, :formatted_address
19
+
20
+ def province
21
+ @data['provincienaam']
22
+ end
23
+
24
+ alias_method :state, :province
25
+
26
+ def city
27
+ @data['woonplaatsnaam']
28
+ end
29
+
30
+ def district
31
+ @data['gemeentenaam']
32
+ end
33
+
34
+ def street
35
+ @data['straatnaam']
36
+ end
37
+
38
+ def street_number
39
+ @data['huis_nlt']
40
+ end
41
+
42
+ def address_components
43
+ @data
44
+ end
45
+
46
+ def state_code
47
+ @data['provinciecode']
48
+ end
49
+
50
+ def postal_code
51
+ @data['postcode']
52
+ end
53
+
54
+ def country
55
+ "Netherlands"
56
+ end
57
+
58
+ def country_code
59
+ "NL"
60
+ end
61
+ end
62
+ end