br_documents 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/config.yml +11 -25
  3. data/.rubocop.yml +29 -21
  4. data/.tool-versions +1 -0
  5. data/Gemfile.lock +6 -3
  6. data/Rakefile +1 -1
  7. data/br_documents.gemspec +3 -0
  8. data/lib/br_documents/cnpj_cpf/document.rb +1 -1
  9. data/lib/br_documents/{gtin/gtin.rb → gtin.rb} +2 -2
  10. data/lib/br_documents/ie/ba.rb +1 -1
  11. data/lib/br_documents/ie_validator.rb +1 -1
  12. data/lib/br_documents/suframa.rb +46 -0
  13. data/lib/br_documents/version.rb +1 -1
  14. data/spec/{cnpj_cpf → br_documents/cnpj_cpf}/cnpj_spec.rb +13 -13
  15. data/spec/{cnpj_cpf → br_documents/cnpj_cpf}/cpf_spec.rb +13 -13
  16. data/spec/br_documents/cnpj_validator_spec.rb +36 -0
  17. data/spec/br_documents/cpf_validator_spec.rb +36 -0
  18. data/spec/{gtin → br_documents}/gtin_spec.rb +2 -2
  19. data/spec/{gtin_validator_spec.rb → br_documents/gtin_validator_spec.rb} +3 -3
  20. data/spec/{ie → br_documents/ie}/ac_spec.rb +3 -3
  21. data/spec/{ie → br_documents/ie}/al_spec.rb +2 -2
  22. data/spec/{ie → br_documents/ie}/am_spec.rb +3 -3
  23. data/spec/{ie → br_documents/ie}/ap_spec.rb +2 -2
  24. data/spec/{ie → br_documents/ie}/ba_spec.rb +4 -4
  25. data/spec/{ie → br_documents/ie}/ce_spec.rb +0 -0
  26. data/spec/{ie → br_documents/ie}/df_spec.rb +3 -3
  27. data/spec/{ie → br_documents/ie}/es_spec.rb +0 -0
  28. data/spec/{ie → br_documents/ie}/factory_spec.rb +28 -28
  29. data/spec/{ie → br_documents/ie}/go_spec.rb +3 -3
  30. data/spec/{ie → br_documents/ie}/ma_spec.rb +0 -0
  31. data/spec/{ie → br_documents/ie}/mg_spec.rb +3 -3
  32. data/spec/{ie → br_documents/ie}/ms_spec.rb +0 -0
  33. data/spec/{ie → br_documents/ie}/mt_spec.rb +3 -3
  34. data/spec/{ie → br_documents/ie}/pa_spec.rb +3 -3
  35. data/spec/{ie → br_documents/ie}/pb_spec.rb +0 -0
  36. data/spec/{ie → br_documents/ie}/pe_spec.rb +4 -4
  37. data/spec/{ie → br_documents/ie}/pi_spec.rb +0 -0
  38. data/spec/{ie → br_documents/ie}/pr_spec.rb +2 -2
  39. data/spec/{ie → br_documents/ie}/rj_spec.rb +3 -3
  40. data/spec/{ie → br_documents/ie}/rn_spec.rb +4 -4
  41. data/spec/{ie → br_documents/ie}/ro_spec.rb +4 -4
  42. data/spec/{ie → br_documents/ie}/rr_spec.rb +3 -3
  43. data/spec/{ie → br_documents/ie}/rs_spec.rb +3 -3
  44. data/spec/{ie → br_documents/ie}/sc_spec.rb +3 -3
  45. data/spec/{ie → br_documents/ie}/se_spec.rb +0 -0
  46. data/spec/{ie → br_documents/ie}/shared_examples_for_pattern1.rb +3 -3
  47. data/spec/{ie → br_documents/ie}/shared_examples_for_to_remove_all_masks.rb +0 -0
  48. data/spec/{ie → br_documents/ie}/sp_spec.rb +2 -2
  49. data/spec/{ie → br_documents/ie}/to_spec.rb +6 -6
  50. data/spec/{ie_validator_spec.rb → br_documents/ie_validator_spec.rb} +7 -6
  51. data/spec/br_documents/suframa_spec.rb +73 -0
  52. data/spec/{suframa_validator_spec.rb → br_documents/suframa_validator_spec.rb} +4 -4
  53. metadata +97 -82
  54. data/lib/br_documents/suframa/suframa.rb +0 -60
  55. data/spec/cnpj_validator_spec.rb +0 -36
  56. data/spec/cpf_validator_spec.rb +0 -36
  57. data/spec/suframa/suframa_spec.rb +0 -109
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe BrDocuments::Suframa do
4
+ subject { described_class.new }
5
+
6
+ describe '#formatted' do
7
+ it 'returns the formatted number' do
8
+ value = '100698107'
9
+
10
+ subject = described_class.new(value)
11
+
12
+ expect(subject.formatted).to eql '10.0698.107'
13
+ end
14
+
15
+ context 'when number is invalid' do
16
+ it 'returns a empty string' do
17
+ value = '123'
18
+
19
+ subject = described_class.new(value)
20
+
21
+ expect(subject.formatted).to eql ''
22
+ end
23
+ end
24
+
25
+ it 'is invalid if number is malformed' do
26
+ ['121.23.4123', '5.50.309.012', '5.503.090.12'].each do |number|
27
+ suframa = described_class.new(number)
28
+
29
+ expect(suframa).not_to be_valid
30
+ end
31
+ end
32
+
33
+ it 'is invalid with a number longer than 9' do
34
+ ['1234567890', '12.3456.7890'].each do |number|
35
+ suframa = described_class.new(number)
36
+
37
+ expect(suframa).not_to be_valid
38
+ end
39
+ end
40
+
41
+ it 'is invalid with a number shorter than 9' do
42
+ ['12345678', '12.3456.78'].each do |number|
43
+ suframa = described_class.new(number)
44
+
45
+ expect(suframa).not_to be_valid
46
+ end
47
+ end
48
+
49
+ it 'is invalid with a sequence of the same number' do
50
+ ['11.1111.111', '111111111'].each do |number|
51
+ suframa = described_class.new(number)
52
+
53
+ expect(suframa).not_to be_valid
54
+ end
55
+ end
56
+
57
+ it 'is invalid with invalid verifying digit' do
58
+ ['55.0309.010', '550309010'].each do |number|
59
+ suframa = described_class.new(number)
60
+
61
+ expect(suframa).not_to be_valid
62
+ end
63
+ end
64
+
65
+ it 'is valid with correct number' do
66
+ ['11.1279.100', '10.1040.105', '100628109', '100698107'].each do |number|
67
+ suframa = described_class.new(number)
68
+
69
+ expect(suframa).to be_valid
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SuframaValidator do
4
- let(:mock) { double('mode') }
4
+ subject { described_class.new(attributes: 'suframa') }
5
+
6
+ let(:mock) { instance_double('mode') }
5
7
 
6
8
  before do
7
9
  allow(mock).to receive(:errors).and_return([])
@@ -11,8 +13,6 @@ describe SuframaValidator do
11
13
  end
12
14
  end
13
15
 
14
- subject { SuframaValidator.new(attributes: 'suframa') }
15
-
16
16
  context 'when SUFRAMA is valid' do
17
17
  it "doesn't add errors in model" do
18
18
  subject.validate_each(mock, 'suframa', '600215105')
@@ -30,7 +30,7 @@ describe SuframaValidator do
30
30
  context 'when SUFRAMA is invalid' do
31
31
  it 'adds errors in model' do
32
32
  subject.validate_each(mock, 'suframa', '01233254121')
33
- expect(mock.errors.messages).to_not be_empty
33
+ expect(mock.errors.messages).not_to be_empty
34
34
  end
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: br_documents
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ASSEINFO - Sistemas de Informação
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-08 00:00:00.000000000 Z
11
+ date: 2021-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 2.10.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 0.5.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 0.5.1
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rubocop-rspec
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -189,6 +203,7 @@ files:
189
203
  - ".gitignore"
190
204
  - ".rspec"
191
205
  - ".rubocop.yml"
206
+ - ".tool-versions"
192
207
  - Gemfile
193
208
  - Gemfile.lock
194
209
  - README.md
@@ -203,7 +218,7 @@ files:
203
218
  - lib/br_documents/commons/mod11.rb
204
219
  - lib/br_documents/commons/mod14.rb
205
220
  - lib/br_documents/cpf_validator.rb
206
- - lib/br_documents/gtin/gtin.rb
221
+ - lib/br_documents/gtin.rb
207
222
  - lib/br_documents/gtin_validator.rb
208
223
  - lib/br_documents/ie/ac.rb
209
224
  - lib/br_documents/ie/al.rb
@@ -237,49 +252,49 @@ files:
237
252
  - lib/br_documents/ie/sp.rb
238
253
  - lib/br_documents/ie/to.rb
239
254
  - lib/br_documents/ie_validator.rb
240
- - lib/br_documents/suframa/suframa.rb
255
+ - lib/br_documents/suframa.rb
241
256
  - lib/br_documents/suframa_validator.rb
242
257
  - lib/br_documents/version.rb
243
- - spec/cnpj_cpf/cnpj_spec.rb
244
- - spec/cnpj_cpf/cpf_spec.rb
245
- - spec/cnpj_validator_spec.rb
246
- - spec/cpf_validator_spec.rb
247
- - spec/gtin/gtin_spec.rb
248
- - spec/gtin_validator_spec.rb
249
- - spec/ie/ac_spec.rb
250
- - spec/ie/al_spec.rb
251
- - spec/ie/am_spec.rb
252
- - spec/ie/ap_spec.rb
253
- - spec/ie/ba_spec.rb
254
- - spec/ie/ce_spec.rb
255
- - spec/ie/df_spec.rb
256
- - spec/ie/es_spec.rb
257
- - spec/ie/factory_spec.rb
258
- - spec/ie/go_spec.rb
259
- - spec/ie/ma_spec.rb
260
- - spec/ie/mg_spec.rb
261
- - spec/ie/ms_spec.rb
262
- - spec/ie/mt_spec.rb
263
- - spec/ie/pa_spec.rb
264
- - spec/ie/pb_spec.rb
265
- - spec/ie/pe_spec.rb
266
- - spec/ie/pi_spec.rb
267
- - spec/ie/pr_spec.rb
268
- - spec/ie/rj_spec.rb
269
- - spec/ie/rn_spec.rb
270
- - spec/ie/ro_spec.rb
271
- - spec/ie/rr_spec.rb
272
- - spec/ie/rs_spec.rb
273
- - spec/ie/sc_spec.rb
274
- - spec/ie/se_spec.rb
275
- - spec/ie/shared_examples_for_pattern1.rb
276
- - spec/ie/shared_examples_for_to_remove_all_masks.rb
277
- - spec/ie/sp_spec.rb
278
- - spec/ie/to_spec.rb
279
- - spec/ie_validator_spec.rb
258
+ - spec/br_documents/cnpj_cpf/cnpj_spec.rb
259
+ - spec/br_documents/cnpj_cpf/cpf_spec.rb
260
+ - spec/br_documents/cnpj_validator_spec.rb
261
+ - spec/br_documents/cpf_validator_spec.rb
262
+ - spec/br_documents/gtin_spec.rb
263
+ - spec/br_documents/gtin_validator_spec.rb
264
+ - spec/br_documents/ie/ac_spec.rb
265
+ - spec/br_documents/ie/al_spec.rb
266
+ - spec/br_documents/ie/am_spec.rb
267
+ - spec/br_documents/ie/ap_spec.rb
268
+ - spec/br_documents/ie/ba_spec.rb
269
+ - spec/br_documents/ie/ce_spec.rb
270
+ - spec/br_documents/ie/df_spec.rb
271
+ - spec/br_documents/ie/es_spec.rb
272
+ - spec/br_documents/ie/factory_spec.rb
273
+ - spec/br_documents/ie/go_spec.rb
274
+ - spec/br_documents/ie/ma_spec.rb
275
+ - spec/br_documents/ie/mg_spec.rb
276
+ - spec/br_documents/ie/ms_spec.rb
277
+ - spec/br_documents/ie/mt_spec.rb
278
+ - spec/br_documents/ie/pa_spec.rb
279
+ - spec/br_documents/ie/pb_spec.rb
280
+ - spec/br_documents/ie/pe_spec.rb
281
+ - spec/br_documents/ie/pi_spec.rb
282
+ - spec/br_documents/ie/pr_spec.rb
283
+ - spec/br_documents/ie/rj_spec.rb
284
+ - spec/br_documents/ie/rn_spec.rb
285
+ - spec/br_documents/ie/ro_spec.rb
286
+ - spec/br_documents/ie/rr_spec.rb
287
+ - spec/br_documents/ie/rs_spec.rb
288
+ - spec/br_documents/ie/sc_spec.rb
289
+ - spec/br_documents/ie/se_spec.rb
290
+ - spec/br_documents/ie/shared_examples_for_pattern1.rb
291
+ - spec/br_documents/ie/shared_examples_for_to_remove_all_masks.rb
292
+ - spec/br_documents/ie/sp_spec.rb
293
+ - spec/br_documents/ie/to_spec.rb
294
+ - spec/br_documents/ie_validator_spec.rb
295
+ - spec/br_documents/suframa_spec.rb
296
+ - spec/br_documents/suframa_validator_spec.rb
280
297
  - spec/spec_helper.rb
281
- - spec/suframa/suframa_spec.rb
282
- - spec/suframa_validator_spec.rb
283
298
  - spec/support/utilities.rb
284
299
  homepage: http://github.com/asseinfo/br_documents
285
300
  licenses:
@@ -306,44 +321,44 @@ specification_version: 4
306
321
  summary: Validates brazilian documents like CPF, CNPJ and IE. It can be used with
307
322
  active record or just in ruby.
308
323
  test_files:
309
- - spec/cnpj_cpf/cnpj_spec.rb
310
- - spec/cnpj_cpf/cpf_spec.rb
311
- - spec/cnpj_validator_spec.rb
312
- - spec/cpf_validator_spec.rb
313
- - spec/gtin/gtin_spec.rb
314
- - spec/gtin_validator_spec.rb
315
- - spec/ie/ac_spec.rb
316
- - spec/ie/al_spec.rb
317
- - spec/ie/am_spec.rb
318
- - spec/ie/ap_spec.rb
319
- - spec/ie/ba_spec.rb
320
- - spec/ie/ce_spec.rb
321
- - spec/ie/df_spec.rb
322
- - spec/ie/es_spec.rb
323
- - spec/ie/factory_spec.rb
324
- - spec/ie/go_spec.rb
325
- - spec/ie/ma_spec.rb
326
- - spec/ie/mg_spec.rb
327
- - spec/ie/ms_spec.rb
328
- - spec/ie/mt_spec.rb
329
- - spec/ie/pa_spec.rb
330
- - spec/ie/pb_spec.rb
331
- - spec/ie/pe_spec.rb
332
- - spec/ie/pi_spec.rb
333
- - spec/ie/pr_spec.rb
334
- - spec/ie/rj_spec.rb
335
- - spec/ie/rn_spec.rb
336
- - spec/ie/ro_spec.rb
337
- - spec/ie/rr_spec.rb
338
- - spec/ie/rs_spec.rb
339
- - spec/ie/sc_spec.rb
340
- - spec/ie/se_spec.rb
341
- - spec/ie/shared_examples_for_pattern1.rb
342
- - spec/ie/shared_examples_for_to_remove_all_masks.rb
343
- - spec/ie/sp_spec.rb
344
- - spec/ie/to_spec.rb
345
- - spec/ie_validator_spec.rb
324
+ - spec/br_documents/cnpj_cpf/cnpj_spec.rb
325
+ - spec/br_documents/cnpj_cpf/cpf_spec.rb
326
+ - spec/br_documents/cnpj_validator_spec.rb
327
+ - spec/br_documents/cpf_validator_spec.rb
328
+ - spec/br_documents/gtin_spec.rb
329
+ - spec/br_documents/gtin_validator_spec.rb
330
+ - spec/br_documents/ie/ac_spec.rb
331
+ - spec/br_documents/ie/al_spec.rb
332
+ - spec/br_documents/ie/am_spec.rb
333
+ - spec/br_documents/ie/ap_spec.rb
334
+ - spec/br_documents/ie/ba_spec.rb
335
+ - spec/br_documents/ie/ce_spec.rb
336
+ - spec/br_documents/ie/df_spec.rb
337
+ - spec/br_documents/ie/es_spec.rb
338
+ - spec/br_documents/ie/factory_spec.rb
339
+ - spec/br_documents/ie/go_spec.rb
340
+ - spec/br_documents/ie/ma_spec.rb
341
+ - spec/br_documents/ie/mg_spec.rb
342
+ - spec/br_documents/ie/ms_spec.rb
343
+ - spec/br_documents/ie/mt_spec.rb
344
+ - spec/br_documents/ie/pa_spec.rb
345
+ - spec/br_documents/ie/pb_spec.rb
346
+ - spec/br_documents/ie/pe_spec.rb
347
+ - spec/br_documents/ie/pi_spec.rb
348
+ - spec/br_documents/ie/pr_spec.rb
349
+ - spec/br_documents/ie/rj_spec.rb
350
+ - spec/br_documents/ie/rn_spec.rb
351
+ - spec/br_documents/ie/ro_spec.rb
352
+ - spec/br_documents/ie/rr_spec.rb
353
+ - spec/br_documents/ie/rs_spec.rb
354
+ - spec/br_documents/ie/sc_spec.rb
355
+ - spec/br_documents/ie/se_spec.rb
356
+ - spec/br_documents/ie/shared_examples_for_pattern1.rb
357
+ - spec/br_documents/ie/shared_examples_for_to_remove_all_masks.rb
358
+ - spec/br_documents/ie/sp_spec.rb
359
+ - spec/br_documents/ie/to_spec.rb
360
+ - spec/br_documents/ie_validator_spec.rb
361
+ - spec/br_documents/suframa_spec.rb
362
+ - spec/br_documents/suframa_validator_spec.rb
346
363
  - spec/spec_helper.rb
347
- - spec/suframa/suframa_spec.rb
348
- - spec/suframa_validator_spec.rb
349
364
  - spec/support/utilities.rb
@@ -1,60 +0,0 @@
1
- require_relative '../commons/mod11'
2
-
3
- # rubocop:disable Style/ClassAndModuleChildren
4
- class BrDocuments::Suframa
5
- include BrDocuments::Commons::Mod11
6
-
7
- def initialize(number)
8
- @number = number
9
- end
10
-
11
- def formatted
12
- valid? ? format_number : ''
13
- end
14
-
15
- def valid?
16
- valid_pattern? &&
17
- !sequence_of_equal_numbers? &&
18
- valid_check_digit? &&
19
- valid_activity_sector? &&
20
- valid_administrative_unit?
21
- end
22
-
23
- private
24
-
25
- def valid_pattern?
26
- /^(\d{2}\.\d{4}\.\d{3})$|^(\d{9})$/.match(@number).present?
27
- end
28
-
29
- def sequence_of_equal_numbers?
30
- number_without_mask.split('').uniq.length == 1
31
- end
32
-
33
- def number_without_mask
34
- @number_without_mask ||= @number.gsub('.', '')
35
- end
36
-
37
- def valid_check_digit?
38
- weights = [9, 8, 7, 6, 5, 4, 3, 2]
39
-
40
- check_digit = generate_check_digit(number_without_mask, weights)
41
- number_without_mask[8] == check_digit.to_s
42
- end
43
-
44
- def valid_activity_sector?
45
- activity_sector = number_without_mask[0] + number_without_mask[1]
46
-
47
- ['01', '02', '10', '11', '20', '60'].include?(activity_sector)
48
- end
49
-
50
- def valid_administrative_unit?
51
- administrative_unit = number_without_mask[6] + number_without_mask[7]
52
-
53
- ['01', '10', '30'].include?(administrative_unit)
54
- end
55
-
56
- def format_number
57
- @number.sub(/(\d{2})(\d{4})(\d{3})/, '\\1.\\2.\\3')
58
- end
59
- end
60
- # rubocop:enable Style/ClassAndModuleChildren
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CnpjValidator do
4
- before(:each) do
5
- @validator = CnpjValidator.new(attributes: 'cnpj')
6
- @mock = double('model')
7
- allow(@mock).to receive(:errors).and_return([])
8
- allow(@mock.errors).to receive(:messages).and_return({})
9
- allow(@mock.errors).to receive(:add) do |attribute, error|
10
- @mock.errors.messages[attribute] = [error]
11
- end
12
- end
13
-
14
- subject { @validator }
15
-
16
- context 'when Cnpj is valid' do
17
- it "doesn't add errors in model" do
18
- subject.validate_each(@mock, 'cnpj', '85961757000102')
19
- expect(@mock.errors.messages).to be_empty
20
- end
21
- end
22
-
23
- context 'when Cnpj is blank' do
24
- it "doesn't add errors in model" do
25
- subject.validate_each(@mock, 'cnpj', '')
26
- expect(@mock.errors.messages).to be_empty
27
- end
28
- end
29
-
30
- context 'when Cnpj is invalid' do
31
- it 'adds errors in model' do
32
- subject.validate_each(@mock, 'cnpj', '85961757000103')
33
- expect(@mock.errors.messages).to_not be_empty
34
- end
35
- end
36
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CpfValidator do
4
- before(:each) do
5
- @validator = CpfValidator.new(attributes: 'cpf')
6
- @mock = double('model')
7
- allow(@mock).to receive(:errors).and_return([])
8
- allow(@mock.errors).to receive(:messages).and_return({})
9
- allow(@mock.errors).to receive(:add) do |attribute, error|
10
- @mock.errors.messages[attribute] = [error]
11
- end
12
- end
13
-
14
- subject { @validator }
15
-
16
- context 'when Cpf is valid' do
17
- it "doesn't add errors in model" do
18
- subject.validate_each(@mock, 'cpf', '01233254120')
19
- expect(@mock.errors.messages).to be_empty
20
- end
21
- end
22
-
23
- context 'when Cpf is blank' do
24
- it "doesn't add errors in model" do
25
- subject.validate_each(@mock, 'cpf', '')
26
- expect(@mock.errors.messages).to be_empty
27
- end
28
- end
29
-
30
- context 'when Cpf is invalid' do
31
- it 'adds errors in model' do
32
- subject.validate_each(@mock, 'cpf', '01233254121')
33
- expect(@mock.errors.messages).to_not be_empty
34
- end
35
- end
36
- end