opencage-geocoder 2.1.4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b8be287da65d2934bc08b6eb4d698c57bd258e99f12fc20785d0581afcd6137f
4
- data.tar.gz: 839691909669db6d059b0a5411b5f2a87c53d064ac100b902eee020aefb40798
3
+ metadata.gz: '082f17ef74c65a95d5be53745bf7e7eabca63bfdb0626298d3d94aee90d6b137'
4
+ data.tar.gz: 1d32135b1afe9ff62f94b51bf4482fd977d6d2ce66ed94a801c2007892b87e23
5
5
  SHA512:
6
- metadata.gz: ce06b91a45a853bb28912dea17b23f4ca860ac11fb904226a910c6af4bbcbb330a4d8539a554beb1c87dc32228286fa7a628674c6dbec513fe8ca9085daa8c0a
7
- data.tar.gz: 1526237436579aef61667d50a7616172d30a124398b920d7b0ca72a47f9c8bcf7a3c73950becdbd6a6ecf198256131d1093f1b58f24a1f2b4c2e50583a183834
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
@@ -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.0.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.0.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: 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
@@ -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.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
- rubygems_version: 3.0.3
46
+ rubygems_version: 3.3.11
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: []