br_documents 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/config.yml +54 -0
  3. data/.rubocop.yml +65 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +76 -42
  6. data/README.md +33 -0
  7. data/Rakefile +3 -3
  8. data/br_documents.gemspec +23 -19
  9. data/lib/br_documents.rb +3 -3
  10. data/lib/br_documents/cnpj_cpf/cnpj.rb +2 -2
  11. data/lib/br_documents/cnpj_cpf/cpf.rb +2 -2
  12. data/lib/br_documents/cnpj_cpf/document.rb +9 -9
  13. data/lib/br_documents/cnpj_validator.rb +4 -4
  14. data/lib/br_documents/commons/mod11.rb +1 -2
  15. data/lib/br_documents/commons/mod14.rb +1 -2
  16. data/lib/br_documents/cpf_validator.rb +4 -4
  17. data/lib/br_documents/gtin/gtin.rb +1 -1
  18. data/lib/br_documents/gtin_validator.rb +6 -6
  19. data/lib/br_documents/ie/ac.rb +3 -2
  20. data/lib/br_documents/ie/al.rb +2 -1
  21. data/lib/br_documents/ie/am.rb +3 -2
  22. data/lib/br_documents/ie/ap.rb +20 -16
  23. data/lib/br_documents/ie/ba.rb +28 -25
  24. data/lib/br_documents/ie/base.rb +1 -1
  25. data/lib/br_documents/ie/ce.rb +3 -2
  26. data/lib/br_documents/ie/df.rb +3 -2
  27. data/lib/br_documents/ie/es.rb +2 -1
  28. data/lib/br_documents/ie/factory.rb +3 -3
  29. data/lib/br_documents/ie/go.rb +3 -2
  30. data/lib/br_documents/ie/ma.rb +2 -1
  31. data/lib/br_documents/ie/mg.rb +14 -17
  32. data/lib/br_documents/ie/ms.rb +2 -1
  33. data/lib/br_documents/ie/mt.rb +6 -5
  34. data/lib/br_documents/ie/pa.rb +3 -2
  35. data/lib/br_documents/ie/pattern1.rb +10 -7
  36. data/lib/br_documents/ie/pattern2.rb +9 -8
  37. data/lib/br_documents/ie/pb.rb +3 -2
  38. data/lib/br_documents/ie/pe.rb +10 -10
  39. data/lib/br_documents/ie/pi.rb +2 -1
  40. data/lib/br_documents/ie/pr.rb +3 -2
  41. data/lib/br_documents/ie/rj.rb +3 -2
  42. data/lib/br_documents/ie/rn.rb +19 -16
  43. data/lib/br_documents/ie/ro.rb +16 -13
  44. data/lib/br_documents/ie/rr.rb +4 -3
  45. data/lib/br_documents/ie/rs.rb +3 -2
  46. data/lib/br_documents/ie/sc.rb +3 -2
  47. data/lib/br_documents/ie/se.rb +3 -2
  48. data/lib/br_documents/ie/sp.rb +17 -14
  49. data/lib/br_documents/ie/to.rb +6 -5
  50. data/lib/br_documents/ie_validator.rb +7 -7
  51. data/lib/br_documents/suframa/suframa.rb +60 -0
  52. data/lib/br_documents/suframa_validator.rb +8 -0
  53. data/lib/br_documents/version.rb +1 -1
  54. data/spec/cnpj_cpf/cnpj_spec.rb +21 -21
  55. data/spec/cnpj_cpf/cpf_spec.rb +21 -21
  56. data/spec/cnpj_validator_spec.rb +12 -12
  57. data/spec/cpf_validator_spec.rb +12 -12
  58. data/spec/gtin/gtin_spec.rb +2 -2
  59. data/spec/gtin_validator_spec.rb +13 -13
  60. data/spec/ie/ac_spec.rb +16 -16
  61. data/spec/ie/al_spec.rb +14 -14
  62. data/spec/ie/am_spec.rb +16 -16
  63. data/spec/ie/ap_spec.rb +14 -14
  64. data/spec/ie/ba_spec.rb +28 -28
  65. data/spec/ie/ce_spec.rb +9 -9
  66. data/spec/ie/df_spec.rb +16 -16
  67. data/spec/ie/es_spec.rb +9 -9
  68. data/spec/ie/factory_spec.rb +88 -89
  69. data/spec/ie/go_spec.rb +16 -16
  70. data/spec/ie/ma_spec.rb +9 -9
  71. data/spec/ie/mg_spec.rb +16 -16
  72. data/spec/ie/ms_spec.rb +9 -9
  73. data/spec/ie/mt_spec.rb +17 -17
  74. data/spec/ie/pa_spec.rb +16 -16
  75. data/spec/ie/pb_spec.rb +9 -9
  76. data/spec/ie/pe_spec.rb +27 -27
  77. data/spec/ie/pi_spec.rb +9 -9
  78. data/spec/ie/pr_spec.rb +14 -14
  79. data/spec/ie/rj_spec.rb +16 -16
  80. data/spec/ie/rn_spec.rb +27 -27
  81. data/spec/ie/ro_spec.rb +27 -27
  82. data/spec/ie/rr_spec.rb +16 -16
  83. data/spec/ie/rs_spec.rb +16 -16
  84. data/spec/ie/sc_spec.rb +16 -16
  85. data/spec/ie/se_spec.rb +9 -9
  86. data/spec/ie/shared_examples_for_pattern1.rb +11 -11
  87. data/spec/ie/shared_examples_for_to_remove_all_masks.rb +7 -8
  88. data/spec/ie/sp_spec.rb +19 -19
  89. data/spec/ie/to_spec.rb +35 -35
  90. data/spec/ie_validator_spec.rb +7 -5
  91. data/spec/spec_helper.rb +6 -6
  92. data/spec/suframa/suframa_spec.rb +109 -0
  93. data/spec/suframa_validator_spec.rb +36 -0
  94. data/spec/support/utilities.rb +2 -2
  95. metadata +86 -23
  96. data/.circleci/config.yml +0 -42
@@ -1,9 +1,10 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
5
5
  class MS < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
9
  number
9
10
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -12,14 +12,15 @@ module BrDocuments
12
12
  end
13
13
 
14
14
  private
15
+
15
16
  def generate_zeros(number)
16
- just_numbers = number.gsub(/[\.\/-]/, "")
17
- zeros = ("0" * 11).slice(just_numbers.length, 11)
18
- yield "#{zeros}" if block_given?
17
+ just_numbers = number.gsub(/[\.\/-]/, '')
18
+ zeros = ('0' * 11).slice(just_numbers.length, 11)
19
+ yield zeros.to_s if block_given?
19
20
  end
20
21
 
21
22
  def format_ie(number)
22
- number.sub(/(\d{10})(\d{1})/, "\\1-\\2")
23
+ number.sub(/(\d{10})(\d{1})/, '\\1-\\2')
23
24
  end
24
25
  end
25
26
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -9,8 +9,9 @@ module BrDocuments
9
9
  end
10
10
 
11
11
  private
12
+
12
13
  def format_ie(number)
13
- number.sub(/(\d{2})(\d{6})(\d{1})/, "\\1-\\2-\\3")
14
+ number.sub(/(\d{2})(\d{6})(\d{1})/, '\\1-\\2-\\3')
14
15
  end
15
16
  end
16
17
  end
@@ -1,5 +1,5 @@
1
- require_relative "base"
2
- require_relative "../commons/mod11"
1
+ require_relative 'base'
2
+ require_relative '../commons/mod11'
3
3
 
4
4
  module BrDocuments
5
5
  module IE
@@ -12,20 +12,23 @@ module BrDocuments
12
12
  @weight = [9, 8, 7, 6, 5, 4, 3, 2]
13
13
  end
14
14
 
15
- private
15
+ protected
16
+
16
17
  def valid_format?
17
18
  regex = @mask
18
19
  regex.match(@number).present?
19
20
  end
20
21
 
21
- def valid_digital_check?
22
- calculated_check_digit = generate_digital_check(only_numbers, @weight).to_s
23
- check_digit_valid = check_digit.eql? calculated_check_digit
22
+ def valid_check_digit?
23
+ calculated_check_digit = generate_check_digit(only_numbers, @weight).to_s
24
+ check_digit_valid = check_digit == calculated_check_digit
24
25
  remove_mask_of_number if check_digit_valid
25
26
 
26
27
  check_digit_valid
27
28
  end
28
29
 
30
+ private
31
+
29
32
  def check_digit
30
33
  only_numbers[-1]
31
34
  end
@@ -35,7 +38,7 @@ module BrDocuments
35
38
  end
36
39
 
37
40
  def only_numbers
38
- @number.gsub(/[\.\/-]/, "")
41
+ @number.gsub(/[\.\/-]/, '')
39
42
  end
40
43
  end
41
44
  end
@@ -1,5 +1,5 @@
1
- require_relative "base"
2
- require_relative "../commons/mod11"
1
+ require_relative 'base'
2
+ require_relative '../commons/mod11'
3
3
 
4
4
  module BrDocuments
5
5
  module IE
@@ -12,19 +12,20 @@ module BrDocuments
12
12
  @weight2 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
13
13
  end
14
14
 
15
- private
15
+ protected
16
+
16
17
  def valid_format?
17
18
  regex = @mask
18
19
  regex.match(@number).present?
19
20
  end
20
21
 
21
- def valid_digital_check?
22
- @number.gsub!(/[\.\/-]/, "")
22
+ def valid_check_digit?
23
+ @number.gsub!(/[\.\/-]/, '')
23
24
 
24
- digital_check1 = generate_digital_check(@number, @weight1)
25
- digital_check2 = generate_digital_check(@number, @weight2)
25
+ digital_check1 = generate_check_digit(@number, @weight1)
26
+ digital_check2 = generate_check_digit(@number, @weight2)
26
27
 
27
- @number[-2, 2].eql? "#{digital_check1}#{digital_check2}"
28
+ @number[-2, 2] == "#{digital_check1}#{digital_check2}"
28
29
  end
29
30
  end
30
31
  end
@@ -1,11 +1,12 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
5
5
  class PB < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
- number.sub(/(\d{8})(\d{1})/, "\\1-\\2")
9
+ number.sub(/(\d{8})(\d{1})/, '\\1-\\2')
9
10
  end
10
11
  end
11
12
  end
@@ -1,15 +1,11 @@
1
- require_relative "pattern1"
2
- require_relative "pattern2"
1
+ require_relative 'pattern1'
2
+ require_relative 'pattern2'
3
3
 
4
4
  module BrDocuments
5
5
  module IE
6
6
  class PE
7
7
  def initialize(number)
8
- if number.gsub(/[\.\/-]/, "").length <= 9
9
- @validator = PE9.new(number)
10
- else
11
- @validator = PE14.new(number)
12
- end
8
+ @validator = number.gsub(/[\.\/-]/, '').length <= 9 ? PE9.new(number) : PE14.new(number)
13
9
  end
14
10
 
15
11
  def valid?
@@ -20,7 +16,6 @@ module BrDocuments
20
16
  @validator.formatted
21
17
  end
22
18
 
23
- private
24
19
  class PE14 < Pattern1
25
20
  def initialize(number)
26
21
  super
@@ -29,10 +24,12 @@ module BrDocuments
29
24
  end
30
25
 
31
26
  private
27
+
32
28
  def format_ie(number)
33
- number.sub(/(\d{2})(\d{1})(\d{3})(\d{7})(\d{1})/, "\\1.\\2.\\3.\\4-\\5")
29
+ number.sub(/(\d{2})(\d{1})(\d{3})(\d{7})(\d{1})/, '\\1.\\2.\\3.\\4-\\5')
34
30
  end
35
31
  end
32
+ private_constant :PE14
36
33
 
37
34
  class PE9 < Pattern2
38
35
  def initialize(number)
@@ -43,10 +40,13 @@ module BrDocuments
43
40
  end
44
41
 
45
42
  private
43
+
46
44
  def format_ie(number)
47
- number.sub(/(\d{7})(\d{2})/, "\\1-\\2")
45
+ number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
48
46
  end
49
47
  end
48
+
49
+ private_constant :PE9
50
50
  end
51
51
  end
52
52
  end
@@ -1,9 +1,10 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
5
5
  class PI < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
9
  number
9
10
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern2"
1
+ require_relative 'pattern2'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -11,8 +11,9 @@ module BrDocuments
11
11
  end
12
12
 
13
13
  private
14
+
14
15
  def format_ie(number)
15
- number.sub(/(\d{8})(\d{2})/, "\\1-\\2")
16
+ number.sub(/(\d{8})(\d{2})/, '\\1-\\2')
16
17
  end
17
18
  end
18
19
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -10,8 +10,9 @@ module BrDocuments
10
10
  end
11
11
 
12
12
  private
13
+
13
14
  def format_ie(number)
14
- number.sub(/(\d{2})(\d{3})(\d{2})(\d{1})/, "\\1.\\2.\\3-\\4")
15
+ number.sub(/(\d{2})(\d{3})(\d{2})(\d{1})/, '\\1.\\2.\\3-\\4')
15
16
  end
16
17
  end
17
18
  end
@@ -1,17 +1,18 @@
1
- require_relative "base"
2
- require_relative "../commons/mod11"
1
+ require_relative 'base'
2
+ require_relative '../commons/mod11'
3
3
 
4
4
  module BrDocuments
5
5
  module IE
6
6
  class RN < Base
7
7
  include Commons::Mod11
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
- if number.gsub(/(\.)|(\-)/, "").length == 9
12
- number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, "\\1.\\2.\\3-\\4")
12
+ if number.gsub(/(\.)|(\-)/, '').length == 9
13
+ number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3-\\4')
13
14
  else
14
- number.sub(/(\d{2})(\d{1})(\d{3})(\d{3})(\d{1})/, "\\1.\\2.\\3.\\4-\\5")
15
+ number.sub(/(\d{2})(\d{1})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3.\\4-\\5')
15
16
  end
16
17
  end
17
18
 
@@ -19,6 +20,17 @@ module BrDocuments
19
20
  valid_old_format or valid_new_format
20
21
  end
21
22
 
23
+ def valid_check_digit?
24
+ @number.gsub!(/[\.\/-]/, '')
25
+
26
+ weight = []
27
+ @number.length.downto(2).each { |w| weight << w }
28
+
29
+ @number[-1] == generate_check_digit(@number, weight).to_s
30
+ end
31
+
32
+ private
33
+
22
34
  def valid_old_format
23
35
  regex = /^(\d{2}\.\d{3}\.\d{3}\-\d{1})$|^(\d{9})$/
24
36
  regex.match(@number).present?
@@ -29,16 +41,7 @@ module BrDocuments
29
41
  regex.match(@number).present?
30
42
  end
31
43
 
32
- def valid_digital_check?
33
- @number.gsub!(/[\.\/-]/, "")
34
-
35
- weight = []
36
- @number.length.downto(2).each {|w| weight << w }
37
-
38
- @number[-1].eql? generate_digital_check(@number, weight).to_s
39
- end
40
-
41
- def generate_digital_check(values, weights)
44
+ def generate_check_digit(values, weights)
42
45
  sum = reduce_weights(values, weights)
43
46
  mod = sum * 10 % 11
44
47
  mod == 10 ? 0 : mod
@@ -1,17 +1,18 @@
1
- require_relative "base"
2
- require_relative "../commons/mod14"
1
+ require_relative 'base'
2
+ require_relative '../commons/mod14'
3
3
 
4
4
  module BrDocuments
5
5
  module IE
6
6
  class RO < Base
7
7
  include Commons::Mod14
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
- if number.gsub(/(\.)|(\-)/, "").length == 9
12
- number.sub(/(\d{3})(\d{5})(\d{1})/, "\\1.\\2-\\3")
12
+ if number.gsub(/(\.)|(\-)/, '').length == 9
13
+ number.sub(/(\d{3})(\d{5})(\d{1})/, '\\1.\\2-\\3')
13
14
  else
14
- number.sub(/(\d{13})(\d{1})/, "\\1-\\2")
15
+ number.sub(/(\d{13})(\d{1})/, '\\1-\\2')
15
16
  end
16
17
  end
17
18
 
@@ -19,6 +20,12 @@ module BrDocuments
19
20
  valid_old_format or valid_new_format
20
21
  end
21
22
 
23
+ def valid_check_digit?
24
+ valid_old_digital_check or valid_new_digital_check
25
+ end
26
+
27
+ private
28
+
22
29
  def valid_old_format
23
30
  regex = /^(\d{3}\.\d{5}\-\d{1})$|^(\d{9})$/
24
31
  regex.match(@number).present?
@@ -29,24 +36,20 @@ module BrDocuments
29
36
  regex.match(@number).present?
30
37
  end
31
38
 
32
- def valid_digital_check?
33
- valid_old_digital_check or valid_new_digital_check
34
- end
35
-
36
39
  def valid_old_digital_check
37
40
  weight = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
38
41
  remove_mask!
39
- @number[-1].eql? generate_digital_check(@number[-6, 6], weight).to_s
42
+ @number[-1] == generate_check_digit(@number[-6, 6], weight).to_s
40
43
  end
41
44
 
42
45
  def valid_new_digital_check
43
46
  weight = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
44
47
  remove_mask!
45
- @number[-1].eql? generate_digital_check(@number, weight).to_s
48
+ @number[-1] == generate_check_digit(@number, weight).to_s
46
49
  end
47
50
 
48
51
  def remove_mask!
49
- @number.gsub!(/[\.\/-]/, "")
52
+ @number.gsub!(/[\.\/-]/, '')
50
53
  end
51
54
  end
52
55
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -10,11 +10,12 @@ module BrDocuments
10
10
  end
11
11
 
12
12
  private
13
+
13
14
  def format_ie(number)
14
- number.sub(/(\d{8})(\d{1})/, "\\1-\\2")
15
+ number.sub(/(\d{8})(\d{1})/, '\\1-\\2')
15
16
  end
16
17
 
17
- def generate_digital_check(values, weights)
18
+ def generate_check_digit(values, weights)
18
19
  sum = reduce_weights(values, weights)
19
20
  sum % 9
20
21
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -10,8 +10,9 @@ module BrDocuments
10
10
  end
11
11
 
12
12
  private
13
+
13
14
  def format_ie(number)
14
- number.sub(/(\d{3})(\d{7})/, "\\1/\\2")
15
+ number.sub(/(\d{3})(\d{7})/, '\\1/\\2')
15
16
  end
16
17
  end
17
18
  end
@@ -1,4 +1,4 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
@@ -9,8 +9,9 @@ module BrDocuments
9
9
  end
10
10
 
11
11
  private
12
+
12
13
  def format_ie(number)
13
- number.sub(/(\d{3})(\d{3})(\d{3})/, "\\1.\\2.\\3")
14
+ number.sub(/(\d{3})(\d{3})(\d{3})/, '\\1.\\2.\\3')
14
15
  end
15
16
  end
16
17
  end
@@ -1,11 +1,12 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
5
5
  class SE < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
- number.sub(/(\d{8})(\d{1})/, "\\1-\\2")
9
+ number.sub(/(\d{8})(\d{1})/, '\\1-\\2')
9
10
  end
10
11
  end
11
12
  end