valvat 1.1.2 → 1.1.3

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: c16a7d36925ce61bf367e4770331dff3e41b76b5cfe21699f04379086e73d55b
4
- data.tar.gz: bd011d1f238122ffe21ebfc882707e54de6e56a9fb97c90a2836d4e5d20ee189
3
+ metadata.gz: 92de431f5777b0b5115169e30bac0233ce3d9047c1bc74b9d42fe02acb2b460d
4
+ data.tar.gz: 0146a80725a3dce432002a456b8e9f10e3a65ee5d36b27dac5c6d646dc48fa70
5
5
  SHA512:
6
- metadata.gz: 45c3632f628083f4113e90eef117cef893cc4a9742fbbfaacdffa2106c6585964949143af2591d0ad13c81a7657222d591a67119a3b4a1cc3c9e61a17765607a
7
- data.tar.gz: 2ef6fe227f4726abbd3952befeabb82abffad26ce8f70e30da394956d14818208e45bd05a42870c68fc9d17b716c112fa304a16fbec12f9cf53fc7331d29c05d
6
+ metadata.gz: b6d08a4d98163bd195d861c83a837042e93bfebe13606c0fce10a703bf702296eb406f75d39349e46e7078289b74d2779f511b3d3a77a49e4d4fb5e585fb01cc
7
+ data.tar.gz: c2190c0f729188281e4894fb1d7e2b4b771171215da07329b0fc92fcda8806f5ac8fe3d7d1eb2d2c1f1e941a06b3d3c22a975369d5617589702a86d727166d4b
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,15 +1,21 @@
1
1
 
2
2
  ### dev
3
3
 
4
- [full changelog](http://github.com/yolk/valvat/compare/v1.1.2...master)
4
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.3...master)
5
5
 
6
- ### 1.1.0 / 2021-10-29
6
+ ### 1.1.3 / 2022-01-26
7
+
8
+ [full changelog](http://github.com/yolk/valvat/compare/v1.1.2...v1.1.3)
9
+
10
+ * Handle Savon::HTTPError and Savon::UnknownOperationError as ViesError and throw Valvat::HTTPError and Valvat::OperationUnknown instead.
11
+
12
+ ### 1.1.2 / 2021-10-29
7
13
 
8
14
  [full changelog](http://github.com/yolk/valvat/compare/v1.1.1...v1.1.2)
9
15
 
10
16
  * Fixed SOAPAction error (#105) (by [Ľubo ](https://github.com/lubosch))
11
17
 
12
- ### 1.1.0 / 2021-07-15
18
+ ### 1.1.1 / 2021-07-15
13
19
 
14
20
  [full changelog](http://github.com/yolk/valvat/compare/v1.1.0...v1.1.1)
15
21
 
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)
@@ -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
@@ -17,7 +17,7 @@ class Valvat
17
17
  Response.new(
18
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/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.2'
4
+ VERSION = '1.1.3'
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
data.tar.gz.sig CHANGED
@@ -1,3 +1 @@
1
- �|^�^�( q0����a&)�T�m� �������_�]�ͺ[�S#�Dlſ�ꏾ�oL� }�q���P�m[��R�����Ű����֏(f3%�@p �������[��C�\���C'g��2��Lie[$u�%��dG�����uek9���pb��t�/�+�_�$#���tD'Y��b�����ރA�>E�u��Fh]�2�E^�xYg\�:L^'I]������E�lx�(q��0�o��G���s�pB�D��W��u�_�7d�‚k>��Bi���6� �(��{��1�����U2{=�����p4
2
- n���S��������%�2l������_�!�L����O�:��
3
- �K�?�aJmW�x´�L-�F� �
1
+ XR��oy����+�� ���kd���/�P�je�?�C�5�����S���cQfۆ���=4 f�À�nQ��Y�t8�u�f瑘}
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.2
4
+ version: 1.1.3
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-10-29 00:00:00.000000000 Z
38
+ date: 2022-01-26 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