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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ruby.yml +8 -2
- data/CHANGES.md +21 -2
- data/README.md +2 -2
- data/certs/yolk.pem +25 -24
- data/gemfiles/activemodel-7 +7 -0
- data/lib/active_model/validations/valvat_validator.rb +1 -1
- data/lib/valvat/error.rb +6 -3
- data/lib/valvat/locales/fr.yml +1 -1
- data/lib/valvat/lookup/fault.rb +15 -8
- data/lib/valvat/lookup/request.rb +2 -2
- data/lib/valvat/syntax.rb +1 -1
- data/lib/valvat/utils.rb +1 -1
- data/lib/valvat/version.rb +1 -1
- data/spec/valvat/lookup/request_spec.rb +13 -0
- data/spec/valvat/lookup_spec.rb +34 -0
- data/spec/valvat/syntax_spec.rb +1 -1
- data/spec/valvat/utils_spec.rb +3 -1
- data.tar.gz.sig +0 -0
- metadata +28 -27
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc72697b0c9176fc5204b1434efb9acb303e70f37ba894518a92ef964e22111b
|
4
|
+
data.tar.gz: 879918277a1fdee158ae2d45d5ba12c06ed9ce2f3a61143f8ae737cb079f4f8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd117658d26b50836714888ddc58b0a1155b380d874887af56b299226120164a7730b44cf76599f281bc51ab87dc4ce535dada233dbf2a99b62f84502b418fe0
|
7
|
+
data.tar.gz: 7c452101dc8994424f4e3af668834f16e7fe1297b71f634f42e0ea4f25fe2678cafb33b154ca9d3ffa9de9b578cb20869fcb251464393f67aec98ac24543273c
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.github/workflows/ruby.yml
CHANGED
@@ -17,11 +17,17 @@ jobs:
|
|
17
17
|
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
18
18
|
strategy:
|
19
19
|
matrix:
|
20
|
-
ruby-version: ['2.
|
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.
|
4
|
+
[full changelog](http://github.com/yolk/valvat/compare/v1.1.4...master)
|
5
5
|
|
6
|
-
### 1.1.
|
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.
|
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-
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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-----
|
@@ -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.
|
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
|
-
|
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)
|
data/lib/valvat/locales/fr.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
fr:
|
2
2
|
errors:
|
3
3
|
messages:
|
4
|
-
invalid_vat: "
|
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:
|
data/lib/valvat/lookup/fault.rb
CHANGED
@@ -3,11 +3,22 @@
|
|
3
3
|
class Valvat
|
4
4
|
class Lookup
|
5
5
|
class Fault < Response
|
6
|
-
def
|
7
|
-
|
8
|
-
|
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
|
-
|
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' => /\
|
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 = /[[:
|
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
|
|
data/lib/valvat/version.rb
CHANGED
@@ -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
|
data/spec/valvat/lookup_spec.rb
CHANGED
@@ -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/spec/valvat/syntax_spec.rb
CHANGED
@@ -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
|
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])
|
data/spec/valvat/utils_spec.rb
CHANGED
@@ -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(
|
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.
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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:
|
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
|
-
|
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
|