opencage-geocoder 2.1.2 → 3.0.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
- SHA1:
3
- metadata.gz: a6a598a219823445df392dd72c8170cd52f68c84
4
- data.tar.gz: 9eab3f4123c2b7cce317e1d4626166c27fd4ba11
2
+ SHA256:
3
+ metadata.gz: '082f17ef74c65a95d5be53745bf7e7eabca63bfdb0626298d3d94aee90d6b137'
4
+ data.tar.gz: 1d32135b1afe9ff62f94b51bf4482fd977d6d2ce66ed94a801c2007892b87e23
5
5
  SHA512:
6
- metadata.gz: 4218ec2294524d282e4e41adab2db257ee0ff24ab9706ae2c065c1554d832ef38f72176d0498551df60ece36b9d72afb9e8992c80804f303ca3fdfda2ab5ead4
7
- data.tar.gz: 51e6eede32ece544efa1b95e3a7e592dde5fbdfeca537609a296439c88db61b4c324117be17965ebc18b8f1ac7d843a889009a68d2c21e6ff49d0b337b34aed2
6
+ metadata.gz: 10e91e1565f255b6bda63b03c92f445b5725008b817d83dee0238a487621409d55c2451f805fb20321412cfe7a8e04fee46f57afe979b6b89dd89718e16963b7
7
+ data.tar.gz: 9d43d9e52e6cd40fd57826528ae59bb06e7a35e7dcdaf8aea256d1d9c80f8abebd37acf54655672a88b4f2509491d0c39b290c53da03c84ed4a95293feba04d9
@@ -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
@@ -36,6 +36,10 @@ module OpenCage
36
36
  def confidence
37
37
  @result['confidence']
38
38
  end
39
+
40
+ def bounds
41
+ @result['bounds']
42
+ end
39
43
  end
40
44
  end
41
45
  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.2'.freeze
2
+ VERSION = '3.0.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,23 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opencage-geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Scully
8
8
  - Marc Tobias
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-02-29 00:00:00.000000000 Z
12
+ date: 2022-11-01 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
@@ -27,7 +28,7 @@ licenses:
27
28
  - MIT
28
29
  metadata:
29
30
  source_code_uri: https://github.com/opencagedata/ruby-opencage-geocoder
30
- post_install_message:
31
+ post_install_message:
31
32
  rdoc_options: []
32
33
  require_paths:
33
34
  - lib
@@ -35,16 +36,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
35
36
  requirements:
36
37
  - - ">="
37
38
  - !ruby/object:Gem::Version
38
- version: '0'
39
+ version: '2.6'
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
- rubyforge_project:
46
- rubygems_version: 2.6.14.1
47
- signing_key:
46
+ rubygems_version: 3.3.11
47
+ signing_key:
48
48
  specification_version: 4
49
- summary: A client for the OpenCage Data geocoder API
49
+ summary: A client for the OpenCage geocoder API
50
50
  test_files: []