europe 0.0.19 → 0.0.20

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: 4ed6dabe018e89d9bbf23e67b0137974b05035aa1bbe684634b5f486cb080675
4
- data.tar.gz: 1d326773840b959bb92b198cc834ee1a90343c87ca5eed0f76b044f74cf5039e
3
+ metadata.gz: 55a8a248cfae6ade9980da4ea2e6b47938c5aa75c8936c8f010e35a50b6f2b86
4
+ data.tar.gz: 23920666bd00770ab722cfb8d6edc5e17b416f9d6d81c8ecb1ebfc9112d65338
5
5
  SHA512:
6
- metadata.gz: e54ce40bbfa5985395dddbf38498b2a22887ebe12d81de4004b39a2643f0015a3adae16d49239e8b8ae3806f5300de3fa8aa474d36e545c9dab63548c5282094
7
- data.tar.gz: 131df277ed531fe687f1f156d912d673f513e8806264572fb90343d5e0440cae6a4b20b8e1f0951bb964028d718d63a2b04f626070bddd375d784442ec7501d1
6
+ metadata.gz: cd703d1d1d8e534dc8ad46bb1051aa2cfe871e807215c0a417286bac7d23814bf7aba5d0f8f4bdb49fb88f1ed49992f5b6e24a30416c0f769f06d051970b9c78
7
+ data.tar.gz: ce9d7fd212fb5905a71598ab7545eb3ad80823a095e97af46101426c214ec592e3d4eacaf429bfaa21a7f2417072a5154c2e97a2b024f642d4fe9a346322f967
data/.travis.yml CHANGED
@@ -9,3 +9,4 @@ rvm:
9
9
  - 2.6.0
10
10
  - 2.6.2
11
11
  - 2.6.3
12
+ - 3.1.1
data/CHANGELOG.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
+ ## 0.0.20
5
+ - Added fallback VAT rates in case the EU website is down or unresponsive
6
+ - [Full Changelog](https://github.com/gem-shards/europe.rb/compare/v0.0.19...v0.0.20)
4
7
  ## 0.0.19
5
8
  - Fixed VAT validation call because XML response was updated
6
9
  - [Full Changelog](https://github.com/gem-shards/europe.rb/compare/v0.0.18...v0.0.19)
@@ -6,21 +6,33 @@ module Europe
6
6
  module Vat
7
7
  # Rates
8
8
  module Rates
9
+ FALLBACK_RATES = {
10
+ AT: 20.0, BE: 21.0, BG: 20.0, CY: 19.0, CZ: 21.0, DE: 19.0, DK: 25.0, EE: 20.0,
11
+ EL: 24.0, ES: 21.0, FI: 24.0, FR: 20.0, UK: 20.0, HR: 25.0, HU: 27.0, IE: 23.0,
12
+ IT: 22.0, LT: 21.0, LU: 17.0, LV: 21.0, MT: 18.0, NL: 21.0, PL: 23.0, PT: 23.0,
13
+ RO: 19.0, SE: 25.0, SI: 22.0, SK: 20.0
14
+ }.freeze
9
15
  RATES_URL = 'https://ec.europa.eu/taxation_customs/' \
10
16
  'business/vat/telecommunications-broadcasting' \
11
17
  '-electronic-services/vat-rates_en'
12
18
 
13
19
  def self.retrieve
14
20
  resp = fetch_rates
15
- return resp if resp == :failed
21
+ return FALLBACK_RATES if resp.nil?
16
22
 
17
23
  extract_rates(resp)
18
24
  end
19
25
 
26
+ # rubocop:disable Metrics/MethodLength
20
27
  def self.extract_rates(resp)
21
28
  rates = {}
22
29
 
23
- data = resp.scan(%r{\<tbody\>(.*)\<\/tbody\>}m).first.first.strip
30
+ begin
31
+ data = resp.scan(%r{\<tbody\>(.*)\<\/tbody\>}m).first.first.strip
32
+ rescue NoMethodError
33
+ return FALLBACK_RATES
34
+ end
35
+
24
36
  xml = REXML::Document.new("<root>#{data}</root>")
25
37
  xml.first.elements.each('tr') do |result|
26
38
  next if result[3].nil?
@@ -29,6 +41,7 @@ module Europe
29
41
  end
30
42
  rates
31
43
  end
44
+ # rubocop:enable Metrics/MethodLength
32
45
 
33
46
  def self.filter_rate(result, rates)
34
47
  country = result[0].text
@@ -40,7 +53,7 @@ module Europe
40
53
 
41
54
  def self.fetch_rates
42
55
  resp = Net::HTTP.get_response(URI.parse(RATES_URL))
43
- resp.code.to_i == 200 ? resp.body : :failed
56
+ resp.code.to_i == 200 ? resp.body : nil
44
57
  end
45
58
  end
46
59
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Europe version
4
4
  module Europe
5
- VERSION = '0.0.19'
5
+ VERSION = '0.0.20'
6
6
  end
@@ -14,11 +14,9 @@ module Europe
14
14
 
15
15
  def test_retrieval_of_vat_rates
16
16
  rates = Europe::Vat::Rates.retrieve
17
- if rates == :failed
18
- rates = { NL: 17, DE: 19, ES: 18 }
19
- else
20
- assert_equal rates.count, Europe::Countries::COUNTRIES.count
21
- end
17
+
18
+ assert_equal rates.count, Europe::Countries::COUNTRIES.count
19
+
22
20
  assert rates[:NL]
23
21
  assert rates[:DE]
24
22
  assert rates[:ES]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: europe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gem shards
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-15 00:00:00.000000000 Z
11
+ date: 2022-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug