geocoder 1.6.7 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,54 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder
4
+ module Result
5
+ class Ipqualityscore < Base
6
+
7
+ def self.key_method_mappings
8
+ {
9
+ 'request_id' => :request_id,
10
+ 'success' => :success?,
11
+ 'message' => :message,
12
+ 'city' => :city,
13
+ 'region' => :state,
14
+ 'country_code' => :country_code,
15
+ 'mobile' => :mobile?,
16
+ 'fraud_score' => :fraud_score,
17
+ 'ISP' => :isp,
18
+ 'ASN' => :asn,
19
+ 'organization' => :organization,
20
+ 'is_crawler' => :crawler?,
21
+ 'host' => :host,
22
+ 'proxy' => :proxy?,
23
+ 'vpn' => :vpn?,
24
+ 'tor' => :tor?,
25
+ 'active_vpn' => :active_vpn?,
26
+ 'active_tor' => :active_tor?,
27
+ 'recent_abuse' => :recent_abuse?,
28
+ 'bot_status' => :bot?,
29
+ 'connection_type' => :connection_type,
30
+ 'abuse_velocity' => :abuse_velocity,
31
+ 'timezone' => :timezone,
32
+ }
33
+ end
34
+
35
+ key_method_mappings.each_pair do |key, meth|
36
+ define_method meth do
37
+ @data[key]
38
+ end
39
+ end
40
+
41
+ alias_method :state_code, :state
42
+ alias_method :country, :country_code
43
+
44
+ def postal_code
45
+ '' # No suitable fallback
46
+ end
47
+
48
+ def address
49
+ [city, state, country_code].compact.reject(&:empty?).join(', ')
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -23,7 +23,10 @@ module Geocoder::Result
23
23
  context_part('region')
24
24
  end
25
25
 
26
- alias_method :state_code, :state
26
+ def state_code
27
+ value = context_part('region', 'short_code')
28
+ value.split('-').last unless value.nil?
29
+ end
27
30
 
28
31
  def postal_code
29
32
  context_part('postcode')
@@ -33,7 +36,10 @@ module Geocoder::Result
33
36
  context_part('country')
34
37
  end
35
38
 
36
- alias_method :country_code, :country
39
+ def country_code
40
+ value = context_part('country', 'short_code')
41
+ value.upcase unless value.nil?
42
+ end
37
43
 
38
44
  def neighborhood
39
45
  context_part('neighborhood')
@@ -45,8 +51,8 @@ module Geocoder::Result
45
51
 
46
52
  private
47
53
 
48
- def context_part(name)
49
- context.map { |c| c['text'] if c['id'] =~ Regexp.new(name) }.compact.first
54
+ def context_part(name, key = 'text')
55
+ (context.detect { |c| c['id'] =~ Regexp.new(name) } || {})[key]
50
56
  end
51
57
 
52
58
  def context
@@ -0,0 +1,46 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class MelissaStreet < Base
5
+ def address(format = :full)
6
+ @data['FormattedAddress']
7
+ end
8
+
9
+ def street_address
10
+ @data['AddressLine1']
11
+ end
12
+
13
+ def suffix
14
+ @data['ThoroughfareTrailingType']
15
+ end
16
+
17
+ def number
18
+ @data['PremisesNumber']
19
+ end
20
+
21
+ def city
22
+ @data['Locality']
23
+ end
24
+
25
+ def state_code
26
+ @data['AdministrativeArea']
27
+ end
28
+ alias_method :state, :state_code
29
+
30
+ def country
31
+ @data['CountryName']
32
+ end
33
+
34
+ def country_code
35
+ @data['CountryISO3166_1_Alpha2']
36
+ end
37
+
38
+ def postal_code
39
+ @data['PostalCode']
40
+ end
41
+
42
+ def coordinates
43
+ [@data['Latitude'].to_f, @data['Longitude'].to_f]
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,119 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Photon < Base
5
+ def name
6
+ properties['name']
7
+ end
8
+
9
+ def address(_format = :full)
10
+ parts = []
11
+ parts << name if name
12
+ parts << street_address if street_address
13
+ parts << city
14
+ parts << state if state
15
+ parts << postal_code
16
+ parts << country
17
+
18
+ parts.join(', ')
19
+ end
20
+
21
+ def street_address
22
+ return unless street
23
+ return street unless house_number
24
+
25
+ "#{house_number} #{street}"
26
+ end
27
+
28
+ def house_number
29
+ properties['housenumber']
30
+ end
31
+
32
+ def street
33
+ properties['street']
34
+ end
35
+
36
+ def postal_code
37
+ properties['postcode']
38
+ end
39
+
40
+ def city
41
+ properties['city']
42
+ end
43
+
44
+ def state
45
+ properties['state']
46
+ end
47
+
48
+ def state_code
49
+ ''
50
+ end
51
+
52
+ def country
53
+ properties['country']
54
+ end
55
+
56
+ def country_code
57
+ ''
58
+ end
59
+
60
+ def coordinates
61
+ return unless geometry
62
+ return unless geometry[:coordinates]
63
+
64
+ geometry[:coordinates].reverse
65
+ end
66
+
67
+ def geometry
68
+ return unless data['geometry']
69
+
70
+ symbol_hash data['geometry']
71
+ end
72
+
73
+ def bounds
74
+ properties['extent']
75
+ end
76
+
77
+ # Type of the result (OSM object type), one of:
78
+ #
79
+ # :node
80
+ # :way
81
+ # :relation
82
+ #
83
+ def type
84
+ {
85
+ 'N' => :node,
86
+ 'W' => :way,
87
+ 'R' => :relation
88
+ }[properties['osm_type']]
89
+ end
90
+
91
+ def osm_id
92
+ properties['osm_id']
93
+ end
94
+
95
+ # See: https://wiki.openstreetmap.org/wiki/Tags
96
+ def osm_tag
97
+ return unless properties['osm_key']
98
+ return properties['osm_key'] unless properties['osm_value']
99
+
100
+ "#{properties['osm_key']}=#{properties['osm_value']}"
101
+ end
102
+
103
+ private
104
+
105
+ def properties
106
+ @properties ||= data['properties'] || {}
107
+ end
108
+
109
+ def symbol_hash(orig_hash)
110
+ {}.tap do |result|
111
+ orig_hash.each_key do |key|
112
+ next unless orig_hash[key]
113
+
114
+ result[key.to_sym] = orig_hash[key]
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -1,3 +1,3 @@
1
1
  module Geocoder
2
- VERSION = "1.6.7"
2
+ VERSION = "1.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.7
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Reisner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-17 00:00:00.000000000 Z
11
+ date: 2021-10-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Object geocoding (by street or IP address), reverse geocoding (coordinates
14
14
  to street address), distance queries for ActiveRecord and Mongoid, result caching,
@@ -51,6 +51,7 @@ files:
51
51
  - lib/geocoder/lookup.rb
52
52
  - lib/geocoder/lookups/abstract_api.rb
53
53
  - lib/geocoder/lookups/amap.rb
54
+ - lib/geocoder/lookups/amazon_location_service.rb
54
55
  - lib/geocoder/lookups/baidu.rb
55
56
  - lib/geocoder/lookups/baidu_ip.rb
56
57
  - lib/geocoder/lookups/ban_data_gouv_fr.rb
@@ -60,6 +61,7 @@ files:
60
61
  - lib/geocoder/lookups/dstk.rb
61
62
  - lib/geocoder/lookups/esri.rb
62
63
  - lib/geocoder/lookups/freegeoip.rb
64
+ - lib/geocoder/lookups/geoapify.rb
63
65
  - lib/geocoder/lookups/geocoder_ca.rb
64
66
  - lib/geocoder/lookups/geocodio.rb
65
67
  - lib/geocoder/lookups/geoip2.rb
@@ -74,6 +76,7 @@ files:
74
76
  - lib/geocoder/lookups/ipdata_co.rb
75
77
  - lib/geocoder/lookups/ipgeolocation.rb
76
78
  - lib/geocoder/lookups/ipinfo_io.rb
79
+ - lib/geocoder/lookups/ipqualityscore.rb
77
80
  - lib/geocoder/lookups/ipregistry.rb
78
81
  - lib/geocoder/lookups/ipstack.rb
79
82
  - lib/geocoder/lookups/latlon.rb
@@ -83,11 +86,13 @@ files:
83
86
  - lib/geocoder/lookups/maxmind.rb
84
87
  - lib/geocoder/lookups/maxmind_geoip2.rb
85
88
  - lib/geocoder/lookups/maxmind_local.rb
89
+ - lib/geocoder/lookups/melissa_street.rb
86
90
  - lib/geocoder/lookups/nationaal_georegister_nl.rb
87
91
  - lib/geocoder/lookups/nominatim.rb
88
92
  - lib/geocoder/lookups/opencagedata.rb
89
93
  - lib/geocoder/lookups/osmnames.rb
90
94
  - lib/geocoder/lookups/pelias.rb
95
+ - lib/geocoder/lookups/photon.rb
91
96
  - lib/geocoder/lookups/pickpoint.rb
92
97
  - lib/geocoder/lookups/pointpin.rb
93
98
  - lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -108,6 +113,7 @@ files:
108
113
  - lib/geocoder/request.rb
109
114
  - lib/geocoder/results/abstract_api.rb
110
115
  - lib/geocoder/results/amap.rb
116
+ - lib/geocoder/results/amazon_location_service.rb
111
117
  - lib/geocoder/results/baidu.rb
112
118
  - lib/geocoder/results/baidu_ip.rb
113
119
  - lib/geocoder/results/ban_data_gouv_fr.rb
@@ -117,6 +123,7 @@ files:
117
123
  - lib/geocoder/results/dstk.rb
118
124
  - lib/geocoder/results/esri.rb
119
125
  - lib/geocoder/results/freegeoip.rb
126
+ - lib/geocoder/results/geoapify.rb
120
127
  - lib/geocoder/results/geocoder_ca.rb
121
128
  - lib/geocoder/results/geocodio.rb
122
129
  - lib/geocoder/results/geoip2.rb
@@ -131,6 +138,7 @@ files:
131
138
  - lib/geocoder/results/ipdata_co.rb
132
139
  - lib/geocoder/results/ipgeolocation.rb
133
140
  - lib/geocoder/results/ipinfo_io.rb
141
+ - lib/geocoder/results/ipqualityscore.rb
134
142
  - lib/geocoder/results/ipregistry.rb
135
143
  - lib/geocoder/results/ipstack.rb
136
144
  - lib/geocoder/results/latlon.rb
@@ -140,11 +148,13 @@ files:
140
148
  - lib/geocoder/results/maxmind.rb
141
149
  - lib/geocoder/results/maxmind_geoip2.rb
142
150
  - lib/geocoder/results/maxmind_local.rb
151
+ - lib/geocoder/results/melissa_street.rb
143
152
  - lib/geocoder/results/nationaal_georegister_nl.rb
144
153
  - lib/geocoder/results/nominatim.rb
145
154
  - lib/geocoder/results/opencagedata.rb
146
155
  - lib/geocoder/results/osmnames.rb
147
156
  - lib/geocoder/results/pelias.rb
157
+ - lib/geocoder/results/photon.rb
148
158
  - lib/geocoder/results/pickpoint.rb
149
159
  - lib/geocoder/results/pointpin.rb
150
160
  - lib/geocoder/results/postcode_anywhere_uk.rb