valvat 1.1.2 → 1.1.3

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: 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