opencage-geocoder 2.1.4 → 3.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b8be287da65d2934bc08b6eb4d698c57bd258e99f12fc20785d0581afcd6137f
4
- data.tar.gz: 839691909669db6d059b0a5411b5f2a87c53d064ac100b902eee020aefb40798
3
+ metadata.gz: 0a45377335fbcf348c4f6028d9d0554dfb0d8558cf0274f3304b2b2614c63088
4
+ data.tar.gz: 67a68426b4382d5e76df2a1cd90a1be71ef7d2e9086b1874b83d7ace166530d9
5
5
  SHA512:
6
- metadata.gz: ce06b91a45a853bb28912dea17b23f4ca860ac11fb904226a910c6af4bbcbb330a4d8539a554beb1c87dc32228286fa7a628674c6dbec513fe8ca9085daa8c0a
7
- data.tar.gz: 1526237436579aef61667d50a7616172d30a124398b920d7b0ca72a47f9c8bcf7a3c73950becdbd6a6ecf198256131d1093f1b58f24a1f2b4c2e50583a183834
6
+ metadata.gz: 6ab099dc219724c8fb6768894dee3f6ebadd4d6adea2e65c0d0cf491c82d182d7cc52874018f4d8c9f1d10b0b284b09b99bc0a0ddd0e7578aa611df34ba81bad
7
+ data.tar.gz: 708c82535fb1decb99c9b4f81faf7093e172e466bfe6def5dfd5b9d2271bc17039bfa804b1efa7a00d8d2b3dd05cbe5c6ec80063aabad9ae688ababaed96ebde
@@ -0,0 +1,40 @@
1
+ module OpenCage
2
+ class Error < StandardError
3
+ attr_reader :code
4
+
5
+ InvalidRequest = Class.new(self)
6
+ AuthenticationError = Class.new(self)
7
+ QuotaExceeded = Class.new(self)
8
+ Forbidden = Class.new(self)
9
+ InvalidEndpoint = Class.new(self)
10
+ NotAllowedMethod = Class.new(self)
11
+ Timeout = Class.new(self)
12
+ RequestTooLong = Class.new(self)
13
+ UpgradeRequired = Class.new(self)
14
+ TooManyRequests = Class.new(self)
15
+ InternalServer = Class.new(self)
16
+
17
+ def initialize(message:, code: nil)
18
+ super(message)
19
+ @code = code
20
+ end
21
+
22
+ ERRORS = {
23
+ 0 => OpenCage::Error,
24
+ 400 => OpenCage::Error::InvalidRequest,
25
+ 401 => OpenCage::Error::AuthenticationError,
26
+ 402 => OpenCage::Error::QuotaExceeded,
27
+ 403 => OpenCage::Error::Forbidden,
28
+ 404 => OpenCage::Error::InvalidEndpoint,
29
+ 405 => OpenCage::Error::NotAllowedMethod,
30
+ 408 => OpenCage::Error::Timeout,
31
+ 410 => OpenCage::Error::RequestTooLong,
32
+ 426 => OpenCage::Error::UpgradeRequired,
33
+ 429 => OpenCage::Error::TooManyRequests,
34
+ 500 => OpenCage::Error::InternalServer,
35
+ 502 => OpenCage::Error::InternalServer,
36
+ 503 => OpenCage::Error::InternalServer,
37
+ 504 => OpenCage::Error::InternalServer
38
+ }.freeze
39
+ end
40
+ end
@@ -1,14 +1,13 @@
1
1
  require 'opencage/geocoder/location'
2
2
  require 'opencage/geocoder/request'
3
+ require 'opencage/error'
3
4
  require 'open-uri'
4
5
  require 'json'
5
6
 
6
7
  module OpenCage
7
8
  class Geocoder
8
- GeocodingError = Class.new(StandardError)
9
-
10
9
  def initialize(default_options = {})
11
- @api_key = default_options.fetch(:api_key) { raise GeocodingError, 'missing API key' }
10
+ @api_key = default_options.fetch(:api_key) { raise_error('401 Missing API key') }
12
11
  end
13
12
 
14
13
  def geocode(location, options = {})
@@ -22,7 +21,7 @@ module OpenCage
22
21
 
23
22
  def reverse_geocode(lat, lng, options = {})
24
23
  if [lat, lng].any? { |coord| !coord.is_a?(Numeric) }
25
- raise GeocodingError, "not valid numeric coordinates: #{lat.inspect}, #{lng.inspect}"
24
+ raise_error("400 Not valid numeric coordinates: #{lat.inspect}, #{lng.inspect}")
26
25
  end
27
26
 
28
27
  geocode("#{lat},#{lng}", options).first
@@ -33,18 +32,13 @@ module OpenCage
33
32
  def fetch(url)
34
33
  JSON.parse(URI(url).open.read)['results']
35
34
  rescue OpenURI::HTTPError => e
36
- raise GeocodingError, error_message(e)
35
+ raise_error(e)
37
36
  end
38
37
 
39
- def error_message(error)
40
- case String(error)
41
- when /^403/
42
- 'invalid API key'
43
- when /^402/
44
- 'out of quota'
45
- else
46
- error
47
- end
38
+ def raise_error(error)
39
+ code = String(error).slice(0, 3)
40
+ klass = OpenCage::Error::ERRORS[code.to_i]
41
+ raise klass.new(message: String(error), code: code.to_i)
48
42
  end
49
43
  end
50
44
  end
@@ -1,3 +1,3 @@
1
1
  module OpenCage
2
- VERSION = '2.1.4'.freeze
2
+ VERSION = '3.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opencage-geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Scully
@@ -9,15 +9,16 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-02-15 00:00:00.000000000 Z
12
+ date: 2023-01-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: A client for the OpenCage Data geocoding API - https://opencagedata.com/
14
+ description: A client for the OpenCage geocoding API - https://opencagedata.com/
15
15
  email: support@opencagedata.com
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/opencage.rb
21
+ - lib/opencage/error.rb
21
22
  - lib/opencage/geocoder.rb
22
23
  - lib/opencage/geocoder/location.rb
23
24
  - lib/opencage/geocoder/request.rb
@@ -35,15 +36,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
35
36
  requirements:
36
37
  - - ">="
37
38
  - !ruby/object:Gem::Version
38
- version: '2.4'
39
+ version: '2.7'
39
40
  required_rubygems_version: !ruby/object:Gem::Requirement
40
41
  requirements:
41
42
  - - ">="
42
43
  - !ruby/object:Gem::Version
43
44
  version: '0'
44
45
  requirements: []
45
- rubygems_version: 3.0.3
46
+ rubygems_version: 3.4.3
46
47
  signing_key:
47
48
  specification_version: 4
48
- summary: A client for the OpenCage Data geocoder API
49
+ summary: A client for the OpenCage geocoder API
49
50
  test_files: []