br_documents 0.2.0 → 0.2.1

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