valvat 1.1.1 → 1.1.4

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: a46ea169067e8ad3077440f355850677b7da8d8a2ce4cf64f66f6ab00f53094d
4
- data.tar.gz: e3e3155fc732de64002519b5b542f4f9d663f0d8fa868c4233aa03ad90e1cb65
3
+ metadata.gz: dc72697b0c9176fc5204b1434efb9acb303e70f37ba894518a92ef964e22111b
4
+ data.tar.gz: 879918277a1fdee158ae2d45d5ba12c06ed9ce2f3a61143f8ae737cb079f4f8a
5
5
  SHA512:
6
- metadata.gz: 4ddb01f926a6d1c6e05e653aff20e81eaaa9249e70ea63fbd6a06f0519863ae410e6873a1948947c90bf4ad64787478a0f8c3ff74ffb0f16fe08705a1e5d5c3b
7
- data.tar.gz: 9a1dd08067a21ce1f0b1663a4cdc8e92cc91a2edc9bf959c294674f5a97dc1bd87375ca27c0f88330bedaf628886cc2cfc27ae3ec71c74e2077068d3db7e1052
6
+ metadata.gz: fd117658d26b50836714888ddc58b0a1155b380d874887af56b299226120164a7730b44cf76599f281bc51ab87dc4ce535dada233dbf2a99b62f84502b418fe0
7
+ data.tar.gz: 7c452101dc8994424f4e3af668834f16e7fe1297b71f634f42e0ea4f25fe2678cafb33b154ca9d3ffa9de9b578cb20869fcb251464393f67aec98ac24543273c
checksums.yaml.gz.sig CHANGED
Binary file
@@ -17,11 +17,17 @@ jobs:
17
17
  BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
18
18
  strategy:
19
19
  matrix:
20
- ruby-version: ['2.5', '2.6', '2.7', '3.0', 'jruby-head', 'truffleruby-head']
21
- gemfile: [ 'standalone', 'activemodel-5', 'activemodel-6' ]
20
+ ruby-version: ['2.6', '2.7', '3.0', '3.1', 'truffleruby-head', 'jruby-9.3.2.0']
21
+ gemfile: [ 'standalone', 'activemodel-5', 'activemodel-6', 'activemodel-7' ]
22
22
  exclude:
23
23
  - ruby-version: '3.0'
24
24
  gemfile: 'activemodel-5'
25
+ - ruby-version: '3.1'
26
+ gemfile: 'activemodel-5'
27
+ - ruby-version: '2.6'
28
+ gemfile: 'activemodel-7'
29
+ - ruby-version: 'jruby-9.3.2.0'
30
+ gemfile: 'activemodel-7'
25
31
 
26
32
  steps:
27
33
  - uses: actions/checkout@v2
data/CHANGES.md CHANGED
@@ -1,9 +1,28 @@
1
1
 
2
2
  ### dev
3
3
 
4
- [full changelog](http://github.com/yolk/valvat/compare/v1.1.1...master)
4
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.4...master)
5
5
 
6
- ### 1.1.0 / 2021-07-15
6
+ ### 1.1.4 / 2022-05-05
7
+
8
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.3...v1.1.4)
9
+
10
+ * Support BE 1-series format (by [Cashaca](https://github.com/Cashaca))
11
+ * Removed duplication on french error messages (by [Sunny Ripert](https://github.com/sunny))
12
+
13
+ ### 1.1.3 / 2022-01-26
14
+
15
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.2...v1.1.3)
16
+
17
+ * Handle Savon::HTTPError and Savon::UnknownOperationError as ViesError and throw Valvat::HTTPError and Valvat::OperationUnknown instead.
18
+
19
+ ### 1.1.2 / 2021-10-29
20
+
21
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.1...v1.1.2)
22
+
23
+ * Fixed SOAPAction error (#105) (by [Ľubo ](https://github.com/lubosch))
24
+
25
+ ### 1.1.1 / 2021-07-15
7
26
 
8
27
  [full changelog](http://github.com/yolk/valvat/compare/v1.1.0...v1.1.1)
9
28
 
data/README.md CHANGED
@@ -20,7 +20,7 @@ Northern Ireland received its own VAT number prefix - XI which is supported by V
20
20
  * I18n locales for language specific error messages in English, German, French, Spanish, Italian, Portuguese, Polish, Swedish, Dutch, Danish, Czech, Slovakian, Hungarian, Bulgarian, Romanian, Latvian, Catalan, Norwegian, and Finnish.
21
21
  * *Experimental* checksum verification
22
22
 
23
- valvat is tested and works with ruby MRI 2.5/2.6/2.7/3.0, jruby-head, truffleruby-head and ActiveModel 5/6. If you need support for ruby down to 1.9.3 and ActiveModel 3 and 4 use [v1.0.1](https://github.com/yolk/valvat/tree/v1.0.1).
23
+ valvat is tested and works with ruby MRI 2.6/2.7/3.0/3.1, jruby, truffleruby-head and ActiveModel 5/6/7. If you need support for ruby down to 1.9.3 and ActiveModel 3 and 4 use [v1.0.1](https://github.com/yolk/valvat/tree/v1.0.1).
24
24
 
25
25
  ## Installation
26
26
 
@@ -258,7 +258,7 @@ https://github.com/yolk/valvat/graphs/contributors
258
258
 
259
259
  ## BlaBla
260
260
 
261
- Copyright (c) 2011-2020 Yolk Sebastian Munz & Julia Soergel GbR
261
+ Copyright (c) 2011-2022 Yolk Sebastian Munz & Julia Soergel GbR
262
262
 
263
263
  Beyond that, the implementation is licensed under the MIT License.
264
264
 
data/certs/yolk.pem CHANGED
@@ -1,25 +1,26 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIELDCCApSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAgMR4wHAYDVQQDDBVzZWJh
3
- c3RpYW4vREM9eW8vREM9bGswHhcNMjEwMTA2MTAzMDU3WhcNMjIwMTA2MTAzMDU3
4
- WjAgMR4wHAYDVQQDDBVzZWJhc3RpYW4vREM9eW8vREM9bGswggGiMA0GCSqGSIb3
5
- DQEBAQUAA4IBjwAwggGKAoIBgQC1KB7VOGa6pr926eaL2xCrnbnTxadpjq+6JoFj
6
- 6rvDpmgD8wkdfU7aFTwBiEK9JKzhqCoW86Rt/8wOrEJRMXz1QBbpMBSrubtMB+0/
7
- N59hKPLwgBkhbxY7BwGnujxnTICgiGzkhjlgBe/MisoabfK5Tn84GWVk5e0/LUp1
8
- qTRkSgcaDlnKs2/dAUo1lXHa13TJeemgz76TYx4p4J2w7VGh7WS2ax5SNWKw+J+q
9
- HVSHT2Chc+a7As2cJyU/r2jX0oqSfvyg09CmF0inUBykeiuB9aeP/Me29hvg13/D
10
- r1gaQ3/Vyfuqjs8lrwIZCWLU607g5q3+UM884WWpvApsZwzajNM2+9l5jay7Dnan
11
- m05PcDtMYbPHiMyvuN9Vp4YIRqSBXP/DPGMnIYXbpzAQgtZymPQ8I3k8doj9q4+E
12
- 2Cf+x/nqvF09r/+gJj4ybzNW23zU6mhZ+xzBTDWrWBDetz+Y3wdbU5X6j08jLuEg
13
- mMHmtgFdr/4VQxeaon7kHPR3DUsCAwEAAaNxMG8wCQYDVR0TBAIwADALBgNVHQ8E
14
- BAMCBLAwHQYDVR0OBBYEFG8VE8+yijOldghb3w0MpSQnrslxMBoGA1UdEQQTMBGB
15
- D3NlYmFzdGlhbkB5by5sazAaBgNVHRIEEzARgQ9zZWJhc3RpYW5AeW8ubGswDQYJ
16
- KoZIhvcNAQELBQADggGBAIky67U9hnB8d4qMKwXHGb3Ne7JLvEigtEhjqGlDVecb
17
- C94vQ8Jg7lYB3kKVjvFN2drptq/JUpxmAxPQIqfx39gKcKyv0BjkroVFE8MS1324
18
- khMOZFOoSPMd9pkpm7oJ1M+sCYcUM+tPKnU8Ojq6r9j5b5XrbxG8YSpwahva3Vap
19
- 1g0+3KzuWPpFjFen1VbS/Sb1cyE5uQtUj7lVcdhF3EFvzXkUMUUtJ4xsk114znFO
20
- 986sKab5AjlJ7TnsmPphCv/UXans7rAVB2lnozlt/kw6dcct5JD4kz1tD6AmO5Qd
21
- jWRuKNZs66GBglRvseKoypXz1XDCCu1m/uI1IGmKnq8Ry+IeRq9RnlvbfPvSxRIx
22
- 9aowoL79T9plhcEcEX/KYRp8ht1z+3Vyk2UVZP8Xl5x+K44co5xdhljYi1gtw0w8
23
- KzzULF0bF9oNpXwBEamlH2myNb19u1W8ijobQ7Y19ca8UFHr5LI32ZW5Zlmep8je
24
- vb+o07oLRx3t2T/EO4DZ1w==
25
- -----END CERTIFICATE-----
2
+ MIIEZDCCAsygAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MRIwEAYDVQQDDAlzZWJh
3
+ c3RpYW4xEjAQBgoJkiaJk/IsZAEZFgJ5bzESMBAGCgmSJomT8ixkARkWAmxrMB4X
4
+ DTIyMDEyNjE4MjIxNFoXDTIzMDEyNjE4MjIxNFowPDESMBAGA1UEAwwJc2ViYXN0
5
+ aWFuMRIwEAYKCZImiZPyLGQBGRYCeW8xEjAQBgoJkiaJk/IsZAEZFgJsazCCAaIw
6
+ DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAM8Gdm81LvuqMyJr9sO+KtJz+PhM
7
+ x75w6uc5q3J8sTHGhOtWJlXiBFf8gbBkxUsQwDMEEbJ+WV63oqq9InVBrMHg9FxH
8
+ 415dC0UlCv5IjKij4N5OVRnUTZDoxXczVVscNFyQcRhJO1TqORw6uOF8gd/MVWl4
9
+ 6gJapzkLBMTIaqRUVbX3hTJpiGc1RV2zJmLkkvBtJ+lzqza0bklXh52LLs2UpTc1
10
+ e5ADVoq9K09G5QXES/GlFMYerQbtdXl0KpUQugXtRFAOoOrFKQFLETZSDq80lC7p
11
+ +zN+wNOEAuHtJP7EZVk/gU8hEkSDMexW5NRndgeQb+N/JH8DIRBbhOytZbAo19Pq
12
+ LEZBucHheI0xstLWuIP+ktwa/rIWv5v4gv3JZ/4H3q6tGPHigLKneRmaXo3e6jna
13
+ RFDxQLXbJgI37qusk4Qyl/iBVSBZ+TABBvA/jPXnHdd29qkuMTXvWLIiBDM6H0+2
14
+ SUabsieR1CqNZs/6YLO7nQHwFudHqzo8OB4+3QIDAQABo3EwbzAJBgNVHRMEAjAA
15
+ MAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUfC99QRDzqEe0tw1Da+XR9u4dmjEwGgYD
16
+ VR0RBBMwEYEPc2ViYXN0aWFuQHlvLmxrMBoGA1UdEgQTMBGBD3NlYmFzdGlhbkB5
17
+ by5sazANBgkqhkiG9w0BAQsFAAOCAYEAwYCyAFFXgYXWgaO8vQEZoQSjp5v6g1v/
18
+ t9TcO8JmX6UqEgoRHsdxPEyCK9RroYIv7X5GDyJ12ZdiGpzCqJiBIC9Gz3cCWAbp
19
+ LtnkhO8SQbz5B0NMOvo4o6XnbAr+rhVihuJmf0zXInnm1KZW/Yi+4JNAebPqwF1S
20
+ VZ/2Dz2BtTuTFhqlHOGxV2NxcnZjFff9kfUOLwl/oNUKgBecsMP5aW74zSOmc2fO
21
+ 3sykOkKf5mWSY/KSuaCmAP1Ou3UUXOQmxiPUW9SDAzhYGKS63yPMkzJAziDP9ewI
22
+ zmOE2OJr0NuCmH9ykqlJZU4wnmloCnE1+8kHCl4+76cgBnN5gnYnzUb4RDM3J4EI
23
+ Jdm7+JxQbgAP/HJ2C2ara+uwc9jwhw2s1b2+TPnVCZdh9uBttHWfk0wgDoeFwky1
24
+ BUdT7mtr41GgvWnIjaGWAldSuabxx5H+PKS5FzjNDMHThRZWuvYp/nP2RXDh4gIa
25
+ 7hV09P+XxvS96G+petG5KmC/lev8VqKu
26
+ -----END CERTIFICATE-----
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "activemodel", "~> 7.0"
4
+
5
+ gem 'rack'
6
+
7
+ gemspec path: "../"
@@ -72,7 +72,7 @@ module ActiveModel
72
72
  def add_invalid_vat_error(record, attribute, iso_country_code)
73
73
  record.errors.add(attribute, :invalid_vat,
74
74
  message: options[:message],
75
- country_adjective: I18n.t(
75
+ country_adjective: I18n.translate(
76
76
  :"valvat.country_adjectives.#{iso_country_code.downcase}",
77
77
  default: [:"valvat.country_adjectives.eu", 'european']
78
78
  ))
data/lib/valvat/error.rb CHANGED
@@ -4,9 +4,10 @@ class Valvat
4
4
  Error = Class.new(RuntimeError)
5
5
 
6
6
  class ViesError < Error
7
- def initialize(faultstring = 'UNKNOWN')
8
- @faultstring = faultstring
9
- super
7
+ def initialize(faultstring = 'UNKNOWN', exception = nil)
8
+ @faultstring = faultstring || exception.inspect
9
+ @exception = exception
10
+ super(faultstring)
10
11
  end
11
12
 
12
13
  def to_s
@@ -22,6 +23,8 @@ class Valvat
22
23
  ServiceUnavailable = Class.new(ViesMaintenanceError)
23
24
  MemberStateUnavailable = Class.new(ViesMaintenanceError)
24
25
 
26
+ OperationUnknown = Class.new(ViesError)
27
+ HTTPError = Class.new(ViesError)
25
28
  Timeout = Class.new(ViesError)
26
29
  InvalidRequester = Class.new(ViesError)
27
30
  BlockedError = Class.new(ViesError)
@@ -1,7 +1,7 @@
1
1
  fr:
2
2
  errors:
3
3
  messages:
4
- invalid_vat: "Numéro de TVA %{country_adjective} invalide"
4
+ invalid_vat: "n’est pas un numéro de TVA %{country_adjective} valide"
5
5
  vies_down: "Impossible de valider votre numéro de TVA : le service de validation VIES est indisponible. Merci de réessayer ultérieurement."
6
6
  valvat:
7
7
  country_adjectives:
@@ -3,11 +3,22 @@
3
3
  class Valvat
4
4
  class Lookup
5
5
  class Fault < Response
6
- def self.cleanup(hash)
7
- fault = hash[:fault][:faultstring]
8
- return { valid: false } if fault == 'INVALID_INPUT'
6
+ def to_hash
7
+ @to_hash ||= case @raw
8
+ when Savon::HTTPError
9
+ { error: HTTPError.new(nil, @raw) }
10
+ when Savon::UnknownOperationError
11
+ { error: OperationUnknown.new(nil, @raw) }
12
+ else
13
+ fault = @raw.to_hash[:fault][:faultstring]
9
14
 
10
- { error: fault_to_error(fault) }
15
+ if fault == 'INVALID_INPUT'
16
+ { valid: false }
17
+ else
18
+ error = (FAULTS[fault] || UnknownViesError).new(fault)
19
+ { error: error }
20
+ end
21
+ end
11
22
  end
12
23
 
13
24
  FAULTS = {
@@ -22,10 +33,6 @@ class Valvat
22
33
  'MS_MAX_CONCURRENT_REQ' => RateLimitError,
23
34
  'MS_MAX_CONCURRENT_REQ_TIME' => RateLimitError
24
35
  }.freeze
25
-
26
- def self.fault_to_error(fault)
27
- (FAULTS[fault] || UnknownViesError).new(fault)
28
- end
29
36
  end
30
37
  end
31
38
  end
@@ -15,9 +15,9 @@ class Valvat
15
15
 
16
16
  def perform
17
17
  Response.new(
18
- client.call(action, message: message, message_tag: message_tag)
18
+ client.call(action, message: message, message_tag: message_tag, soap_action: nil)
19
19
  )
20
- rescue Savon::SOAPFault => e
20
+ rescue Savon::SOAPFault, Savon::HTTPError, Savon::UnknownOperationError => e
21
21
  Fault.new(e)
22
22
  end
23
23
 
data/lib/valvat/syntax.rb CHANGED
@@ -4,7 +4,7 @@ class Valvat
4
4
  module Syntax
5
5
  VAT_PATTERNS = {
6
6
  'AT' => /\AATU[0-9]{8}\Z/, # Austria
7
- 'BE' => /\ABE0[0-9]{9}\Z/, # Belgium
7
+ 'BE' => /\ABE[0-1][0-9]{9}\Z/, # Belgium
8
8
  'BG' => /\ABG[0-9]{9,10}\Z/, # Bulgaria
9
9
  'CY' => /\ACY(?!12)[0-59][0-9]{7}[A-Z]\Z/, # Cyprus
10
10
  'CZ' => /\ACZ[0-9]{8,10}\Z/, # Czech Republic
data/lib/valvat/utils.rb CHANGED
@@ -8,7 +8,7 @@ class Valvat
8
8
  SUPPORTED_STATES = EU_MEMBER_STATES + %w[GB]
9
9
  EU_COUNTRIES = EU_MEMBER_STATES # TODO: Remove constant
10
10
  COUNTRY_PATTERN = /\A([A-Z]{2})(.+)\Z/.freeze
11
- NORMALIZE_PATTERN = /[[:space:][:punct:][:cntrl:]]+/.freeze
11
+ NORMALIZE_PATTERN = /([[:punct:][:cntrl:]]|[[:space:]])+/.freeze
12
12
  CONVERT_VAT_TO_ISO_COUNTRY = { 'EL' => 'GR', 'XI' => 'GB' }.freeze
13
13
  CONVERT_ISO_TO_VAT_COUNTRY = CONVERT_VAT_TO_ISO_COUNTRY.invert.freeze
14
14
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Valvat
4
- VERSION = '1.1.1'
4
+ VERSION = '1.1.4'
5
5
  end
@@ -16,4 +16,17 @@ describe Valvat::Lookup::Request do
16
16
  expect(response).to be_a(Valvat::Lookup::Fault)
17
17
  expect(response.to_hash).to eql({ valid: false })
18
18
  end
19
+
20
+ context 'when Savon::UnknownOperationError is (wrongly) thrown' do
21
+ before do
22
+ dbl = double(Savon::Client)
23
+ allow(Savon::Client).to receive(:new).and_return(dbl)
24
+ allow(dbl).to receive(:call).and_raise(Savon::UnknownOperationError.new('from stub'))
25
+ end
26
+
27
+ it "does handle it like vies down" do
28
+ response = described_class.new('IE6388047V', {}).perform
29
+ expect(response.to_hash[:error]).to be_a(Valvat::OperationUnknown)
30
+ end
31
+ end
19
32
  end
@@ -239,5 +239,39 @@ describe Valvat::Lookup do
239
239
  expect(described_class.validate('DE601', options.merge(raise_error: false))).to be(nil)
240
240
  end
241
241
  end
242
+
243
+ describe 'Error : Savon::UnknownOperationError' do
244
+ before do
245
+ dbl = double(Savon::Client)
246
+ allow(Savon::Client).to receive(:new).and_return(dbl)
247
+ allow(dbl).to receive(:call).and_raise(Savon::UnknownOperationError.new('from stub'))
248
+ end
249
+ subject(:result) { described_class.validate('DE601', options) }
250
+
251
+ it 'raises error' do
252
+ expect { result }.to raise_error(Valvat::OperationUnknown, /#<Savon::UnknownOperationError: from stub>/)
253
+ end
254
+
255
+ it 'returns nil with raise_error set to false' do
256
+ expect(described_class.validate('DE601', options.merge(raise_error: false))).to be(nil)
257
+ end
258
+ end
259
+
260
+ describe 'Error : Savon::HTTPError' do
261
+ before do
262
+ dbl = double(Savon::Client)
263
+ allow(Savon::Client).to receive(:new).and_return(dbl)
264
+ allow(dbl).to receive(:call).and_raise(Savon::HTTPError.new(Struct.new(:code, :body).new(403, 'from stub')))
265
+ end
266
+ subject(:result) { described_class.validate('DE601', options) }
267
+
268
+ it 'raises error' do
269
+ expect { result }.to raise_error(Valvat::HTTPError, /#<Savon::HTTPError: HTTP error \(403\): from stub>/)
270
+ end
271
+
272
+ it 'returns nil with raise_error set to false' do
273
+ expect(described_class.validate('DE601', options.merge(raise_error: false))).to be(nil)
274
+ end
275
+ end
242
276
  end
243
277
  end
@@ -19,7 +19,7 @@ end
19
19
  describe Valvat::Syntax do
20
20
  describe '#validate' do
21
21
  it_validates(%w[ATU03458890], %w[ATU034588908 ATU0345908 ATU0345889Y])
22
- it_validates(%w[BE0817331995], %w[BE081733199 BE08173319944 BE081733199H BE1817331999])
22
+ it_validates(%w[BE0817331995 BE1817331999], %w[BE081733199 BE08173319944 BE081733199H BE2817331999])
23
23
  it_validates(%w[BG468134789 BG4681347897], %w[BG46813478979 BG4681347897C BG46813478G BG46813478])
24
24
  it_validates(%w[CY36579347A CY36579347C], %w[CY36579347 CY365793478 CY365793478A CY365793G])
25
25
  it_validates(%w[CZ56389267 CZ563892670 CZ5638926790], %w[CZ5638926 CZ56389268901])
@@ -55,7 +55,9 @@ describe Valvat::Utils do
55
55
 
56
56
  it 'removes special chars' do
57
57
  expect(described_class.normalize('DE.345-889_00:3,;')).to eql('DE345889003')
58
- expect(described_class.normalize("→ DE·Ö34588 9003\0 ☺")).to eql('→DEÖ345889003☺')
58
+ expect(described_class.normalize("→ DE·Ö34588 9003\0 ☺")).to eql(
59
+ RUBY_ENGINE == 'truffleruby' ? 'DEÖ345889003' : '→DEÖ345889003☺'
60
+ )
59
61
  end
60
62
  end
61
63
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valvat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Munz
@@ -10,31 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIELDCCApSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAgMR4wHAYDVQQDDBVzZWJh
14
- c3RpYW4vREM9eW8vREM9bGswHhcNMjEwMTA2MTAzMDU3WhcNMjIwMTA2MTAzMDU3
15
- WjAgMR4wHAYDVQQDDBVzZWJhc3RpYW4vREM9eW8vREM9bGswggGiMA0GCSqGSIb3
16
- DQEBAQUAA4IBjwAwggGKAoIBgQC1KB7VOGa6pr926eaL2xCrnbnTxadpjq+6JoFj
17
- 6rvDpmgD8wkdfU7aFTwBiEK9JKzhqCoW86Rt/8wOrEJRMXz1QBbpMBSrubtMB+0/
18
- N59hKPLwgBkhbxY7BwGnujxnTICgiGzkhjlgBe/MisoabfK5Tn84GWVk5e0/LUp1
19
- qTRkSgcaDlnKs2/dAUo1lXHa13TJeemgz76TYx4p4J2w7VGh7WS2ax5SNWKw+J+q
20
- HVSHT2Chc+a7As2cJyU/r2jX0oqSfvyg09CmF0inUBykeiuB9aeP/Me29hvg13/D
21
- r1gaQ3/Vyfuqjs8lrwIZCWLU607g5q3+UM884WWpvApsZwzajNM2+9l5jay7Dnan
22
- m05PcDtMYbPHiMyvuN9Vp4YIRqSBXP/DPGMnIYXbpzAQgtZymPQ8I3k8doj9q4+E
23
- 2Cf+x/nqvF09r/+gJj4ybzNW23zU6mhZ+xzBTDWrWBDetz+Y3wdbU5X6j08jLuEg
24
- mMHmtgFdr/4VQxeaon7kHPR3DUsCAwEAAaNxMG8wCQYDVR0TBAIwADALBgNVHQ8E
25
- BAMCBLAwHQYDVR0OBBYEFG8VE8+yijOldghb3w0MpSQnrslxMBoGA1UdEQQTMBGB
26
- D3NlYmFzdGlhbkB5by5sazAaBgNVHRIEEzARgQ9zZWJhc3RpYW5AeW8ubGswDQYJ
27
- KoZIhvcNAQELBQADggGBAIky67U9hnB8d4qMKwXHGb3Ne7JLvEigtEhjqGlDVecb
28
- C94vQ8Jg7lYB3kKVjvFN2drptq/JUpxmAxPQIqfx39gKcKyv0BjkroVFE8MS1324
29
- khMOZFOoSPMd9pkpm7oJ1M+sCYcUM+tPKnU8Ojq6r9j5b5XrbxG8YSpwahva3Vap
30
- 1g0+3KzuWPpFjFen1VbS/Sb1cyE5uQtUj7lVcdhF3EFvzXkUMUUtJ4xsk114znFO
31
- 986sKab5AjlJ7TnsmPphCv/UXans7rAVB2lnozlt/kw6dcct5JD4kz1tD6AmO5Qd
32
- jWRuKNZs66GBglRvseKoypXz1XDCCu1m/uI1IGmKnq8Ry+IeRq9RnlvbfPvSxRIx
33
- 9aowoL79T9plhcEcEX/KYRp8ht1z+3Vyk2UVZP8Xl5x+K44co5xdhljYi1gtw0w8
34
- KzzULF0bF9oNpXwBEamlH2myNb19u1W8ijobQ7Y19ca8UFHr5LI32ZW5Zlmep8je
35
- vb+o07oLRx3t2T/EO4DZ1w==
13
+ MIIEZDCCAsygAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MRIwEAYDVQQDDAlzZWJh
14
+ c3RpYW4xEjAQBgoJkiaJk/IsZAEZFgJ5bzESMBAGCgmSJomT8ixkARkWAmxrMB4X
15
+ DTIyMDEyNjE4MjIxNFoXDTIzMDEyNjE4MjIxNFowPDESMBAGA1UEAwwJc2ViYXN0
16
+ aWFuMRIwEAYKCZImiZPyLGQBGRYCeW8xEjAQBgoJkiaJk/IsZAEZFgJsazCCAaIw
17
+ DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAM8Gdm81LvuqMyJr9sO+KtJz+PhM
18
+ x75w6uc5q3J8sTHGhOtWJlXiBFf8gbBkxUsQwDMEEbJ+WV63oqq9InVBrMHg9FxH
19
+ 415dC0UlCv5IjKij4N5OVRnUTZDoxXczVVscNFyQcRhJO1TqORw6uOF8gd/MVWl4
20
+ 6gJapzkLBMTIaqRUVbX3hTJpiGc1RV2zJmLkkvBtJ+lzqza0bklXh52LLs2UpTc1
21
+ e5ADVoq9K09G5QXES/GlFMYerQbtdXl0KpUQugXtRFAOoOrFKQFLETZSDq80lC7p
22
+ +zN+wNOEAuHtJP7EZVk/gU8hEkSDMexW5NRndgeQb+N/JH8DIRBbhOytZbAo19Pq
23
+ LEZBucHheI0xstLWuIP+ktwa/rIWv5v4gv3JZ/4H3q6tGPHigLKneRmaXo3e6jna
24
+ RFDxQLXbJgI37qusk4Qyl/iBVSBZ+TABBvA/jPXnHdd29qkuMTXvWLIiBDM6H0+2
25
+ SUabsieR1CqNZs/6YLO7nQHwFudHqzo8OB4+3QIDAQABo3EwbzAJBgNVHRMEAjAA
26
+ MAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUfC99QRDzqEe0tw1Da+XR9u4dmjEwGgYD
27
+ VR0RBBMwEYEPc2ViYXN0aWFuQHlvLmxrMBoGA1UdEgQTMBGBD3NlYmFzdGlhbkB5
28
+ by5sazANBgkqhkiG9w0BAQsFAAOCAYEAwYCyAFFXgYXWgaO8vQEZoQSjp5v6g1v/
29
+ t9TcO8JmX6UqEgoRHsdxPEyCK9RroYIv7X5GDyJ12ZdiGpzCqJiBIC9Gz3cCWAbp
30
+ LtnkhO8SQbz5B0NMOvo4o6XnbAr+rhVihuJmf0zXInnm1KZW/Yi+4JNAebPqwF1S
31
+ VZ/2Dz2BtTuTFhqlHOGxV2NxcnZjFff9kfUOLwl/oNUKgBecsMP5aW74zSOmc2fO
32
+ 3sykOkKf5mWSY/KSuaCmAP1Ou3UUXOQmxiPUW9SDAzhYGKS63yPMkzJAziDP9ewI
33
+ zmOE2OJr0NuCmH9ykqlJZU4wnmloCnE1+8kHCl4+76cgBnN5gnYnzUb4RDM3J4EI
34
+ Jdm7+JxQbgAP/HJ2C2ara+uwc9jwhw2s1b2+TPnVCZdh9uBttHWfk0wgDoeFwky1
35
+ BUdT7mtr41GgvWnIjaGWAldSuabxx5H+PKS5FzjNDMHThRZWuvYp/nP2RXDh4gIa
36
+ 7hV09P+XxvS96G+petG5KmC/lev8VqKu
36
37
  -----END CERTIFICATE-----
37
- date: 2021-07-15 00:00:00.000000000 Z
38
+ date: 2022-05-05 00:00:00.000000000 Z
38
39
  dependencies:
39
40
  - !ruby/object:Gem::Dependency
40
41
  name: savon
@@ -112,6 +113,7 @@ files:
112
113
  - certs/yolk.pem
113
114
  - gemfiles/activemodel-5
114
115
  - gemfiles/activemodel-6
116
+ - gemfiles/activemodel-7
115
117
  - gemfiles/standalone
116
118
  - lib/active_model/validations/valvat_validator.rb
117
119
  - lib/valvat.rb
@@ -225,8 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
227
  - !ruby/object:Gem::Version
226
228
  version: '0'
227
229
  requirements: []
228
- rubyforge_project:
229
- rubygems_version: 2.7.6.2
230
+ rubygems_version: 3.3.3
230
231
  signing_key:
231
232
  specification_version: 4
232
233
  summary: Validates european vat numbers. Standalone or as a ActiveModel validator.
metadata.gz.sig CHANGED
Binary file