br_documents 0.1.3 → 0.2.2

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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/config.yml +40 -0
  3. data/.rubocop.yml +73 -0
  4. data/.tool-versions +1 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +79 -42
  7. data/README.md +33 -0
  8. data/Rakefile +4 -4
  9. data/br_documents.gemspec +26 -19
  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 → gtin.rb} +3 -3
  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.rb +46 -0
  52. data/lib/br_documents/suframa_validator.rb +8 -0
  53. data/lib/br_documents/version.rb +1 -1
  54. data/lib/br_documents.rb +3 -3
  55. data/spec/br_documents/cnpj_cpf/cnpj_spec.rb +59 -0
  56. data/spec/br_documents/cnpj_cpf/cpf_spec.rb +59 -0
  57. data/spec/br_documents/cnpj_validator_spec.rb +36 -0
  58. data/spec/br_documents/cpf_validator_spec.rb +36 -0
  59. data/spec/{gtin → br_documents}/gtin_spec.rb +4 -4
  60. data/spec/{gtin_validator_spec.rb → br_documents/gtin_validator_spec.rb} +14 -14
  61. data/spec/br_documents/ie/ac_spec.rb +43 -0
  62. data/spec/br_documents/ie/al_spec.rb +36 -0
  63. data/spec/br_documents/ie/am_spec.rb +43 -0
  64. data/spec/br_documents/ie/ap_spec.rb +36 -0
  65. data/spec/br_documents/ie/ba_spec.rb +69 -0
  66. data/spec/br_documents/ie/ce_spec.rb +16 -0
  67. data/spec/br_documents/ie/df_spec.rb +43 -0
  68. data/spec/br_documents/ie/es_spec.rb +16 -0
  69. data/spec/br_documents/ie/factory_spec.rb +202 -0
  70. data/spec/br_documents/ie/go_spec.rb +43 -0
  71. data/spec/br_documents/ie/ma_spec.rb +16 -0
  72. data/spec/br_documents/ie/mg_spec.rb +43 -0
  73. data/spec/br_documents/ie/ms_spec.rb +16 -0
  74. data/spec/br_documents/ie/mt_spec.rb +49 -0
  75. data/spec/br_documents/ie/pa_spec.rb +43 -0
  76. data/spec/br_documents/ie/pb_spec.rb +16 -0
  77. data/spec/br_documents/ie/pe_spec.rb +62 -0
  78. data/spec/br_documents/ie/pi_spec.rb +16 -0
  79. data/spec/br_documents/ie/pr_spec.rb +36 -0
  80. data/spec/br_documents/ie/rj_spec.rb +43 -0
  81. data/spec/br_documents/ie/rn_spec.rb +62 -0
  82. data/spec/br_documents/ie/ro_spec.rb +62 -0
  83. data/spec/br_documents/ie/rr_spec.rb +43 -0
  84. data/spec/br_documents/ie/rs_spec.rb +41 -0
  85. data/spec/br_documents/ie/sc_spec.rb +43 -0
  86. data/spec/br_documents/ie/se_spec.rb +16 -0
  87. data/spec/br_documents/ie/shared_examples_for_pattern1.rb +33 -0
  88. data/spec/br_documents/ie/shared_examples_for_to_remove_all_masks.rb +16 -0
  89. data/spec/br_documents/ie/sp_spec.rb +45 -0
  90. data/spec/br_documents/ie/to_spec.rb +100 -0
  91. data/spec/{ie_validator_spec.rb → br_documents/ie_validator_spec.rb} +12 -9
  92. data/spec/br_documents/suframa_spec.rb +73 -0
  93. data/spec/br_documents/suframa_validator_spec.rb +36 -0
  94. data/spec/spec_helper.rb +6 -6
  95. data/spec/support/utilities.rb +2 -2
  96. metadata +177 -99
  97. data/.circleci/config.yml +0 -42
  98. data/spec/cnpj_cpf/cnpj_spec.rb +0 -59
  99. data/spec/cnpj_cpf/cpf_spec.rb +0 -59
  100. data/spec/cnpj_validator_spec.rb +0 -36
  101. data/spec/cpf_validator_spec.rb +0 -36
  102. data/spec/ie/ac_spec.rb +0 -43
  103. data/spec/ie/al_spec.rb +0 -36
  104. data/spec/ie/am_spec.rb +0 -43
  105. data/spec/ie/ap_spec.rb +0 -36
  106. data/spec/ie/ba_spec.rb +0 -69
  107. data/spec/ie/ce_spec.rb +0 -16
  108. data/spec/ie/df_spec.rb +0 -43
  109. data/spec/ie/es_spec.rb +0 -16
  110. data/spec/ie/factory_spec.rb +0 -203
  111. data/spec/ie/go_spec.rb +0 -43
  112. data/spec/ie/ma_spec.rb +0 -16
  113. data/spec/ie/mg_spec.rb +0 -43
  114. data/spec/ie/ms_spec.rb +0 -16
  115. data/spec/ie/mt_spec.rb +0 -44
  116. data/spec/ie/pa_spec.rb +0 -43
  117. data/spec/ie/pb_spec.rb +0 -16
  118. data/spec/ie/pe_spec.rb +0 -62
  119. data/spec/ie/pi_spec.rb +0 -16
  120. data/spec/ie/pr_spec.rb +0 -36
  121. data/spec/ie/rj_spec.rb +0 -43
  122. data/spec/ie/rn_spec.rb +0 -62
  123. data/spec/ie/ro_spec.rb +0 -62
  124. data/spec/ie/rr_spec.rb +0 -43
  125. data/spec/ie/rs_spec.rb +0 -41
  126. data/spec/ie/sc_spec.rb +0 -43
  127. data/spec/ie/se_spec.rb +0 -16
  128. data/spec/ie/shared_examples_for_pattern1.rb +0 -33
  129. data/spec/ie/shared_examples_for_to_remove_all_masks.rb +0 -17
  130. data/spec/ie/sp_spec.rb +0 -45
  131. data/spec/ie/to_spec.rb +0 -100
@@ -1,12 +1,13 @@
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 AP < Base
7
7
  include Commons::Mod11
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
12
  number
12
13
  end
@@ -16,29 +17,32 @@ module BrDocuments
16
17
  regex.match(@number).present?
17
18
  end
18
19
 
19
- def valid_digital_check?
20
+ def valid_check_digit?
20
21
  weight = [9, 8, 7, 6, 5, 4, 3, 2]
21
22
  detect_range_digits
22
- @number[-1].eql? generate_digital_check(@number, weight).to_s
23
+ @number[-1] == generate_check_digit(@number, weight).to_s
23
24
  end
24
25
 
26
+ private
27
+
28
+ # rubocop:disable Metrics/MethodLength
25
29
  def detect_range_digits
26
- number = @number[0, 8]
27
- if number.to_i >= 3000001 and number.to_i <= 3017000
30
+ number = @number[0, 8].to_i
31
+
32
+ if number >= 3_000_001 && number <= 3_017_000
28
33
  @p = 5
29
34
  @d = 0
30
- else
31
- if number.to_i >= 3017001 and number.to_i <= 3019022
32
- @p = 9
33
- @d = 1
34
- else
35
- @p = 0
36
- @d = 0
37
- end
35
+ elsif number >= 3_017_001 && number <= 3_019_022
36
+ @p = 9
37
+ @d = 1
38
+ elsif number >= 3_019_023
39
+ @p = 0
40
+ @d = 0
38
41
  end
39
42
  end
43
+ # rubocop:enable Metrics/MethodLength
40
44
 
41
- def generate_digital_check(values, weights)
45
+ def generate_check_digit(values, weights)
42
46
  sum = reduce_weights(values, weights)
43
47
  sum += @p
44
48
  mod = sum % 11
@@ -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 BA < Base
7
7
  include Commons::Mod11
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
- if number.gsub(/-/, "").length == 8
12
- number.sub(/(\d{6})(\d{2})/, "\\1-\\2")
12
+ if number.delete('-').length == 8
13
+ number.sub(/(\d{6})(\d{2})/, '\\1-\\2')
13
14
  else
14
- number.sub(/(\d{7})(\d{2})/, "\\1-\\2")
15
+ number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
15
16
  end
16
17
  end
17
18
 
@@ -19,19 +20,8 @@ module BrDocuments
19
20
  valid_8_digits_format || valid_9_digits_format
20
21
  end
21
22
 
22
- def valid_9_digits_format
23
- regex_mask_1 = /^(\d{7}\-\d{2})$|^(\d{9})$/
24
- regex_mask_2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
25
- regex_mask_1.match(@number).present? || regex_mask_2.match(@number).present?
26
- end
27
-
28
- def valid_8_digits_format
29
- regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
30
- regex.match(@number).present?
31
- end
32
-
33
- def valid_digital_check?
34
- @number.gsub!(/[\.\/-]/, "")
23
+ def valid_check_digit?
24
+ @number.gsub!(/[\.\/-]/, '')
35
25
 
36
26
  weight1 = make_weight(total_size)
37
27
  weight2 = make_weight(total_size - 1)
@@ -40,7 +30,20 @@ module BrDocuments
40
30
  number = "#{@number[0, body_size]}#{digital_check2}"
41
31
  digital_check1 = digital_check_generator(number, weight1)
42
32
 
43
- @number[-2, 2].eql? "#{digital_check1}#{digital_check2}"
33
+ @number[-2, 2] == "#{digital_check1}#{digital_check2}"
34
+ end
35
+
36
+ private
37
+
38
+ def valid_9_digits_format
39
+ regex_mask1 = /^(\d{7}\-\d{2})$|^(\d{9})$/
40
+ regex_mask2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
41
+ regex_mask1.match(@number).present? || regex_mask2.match(@number).present?
42
+ end
43
+
44
+ def valid_8_digits_format
45
+ regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
46
+ regex.match(@number).present?
44
47
  end
45
48
 
46
49
  def make_weight(size)
@@ -51,7 +54,7 @@ module BrDocuments
51
54
  end
52
55
 
53
56
  def total_size
54
- @number.gsub(/[\.\/-]/, "").length
57
+ @number.gsub(/[\.\/-]/, '').length
55
58
  end
56
59
 
57
60
  def body_size
@@ -61,9 +64,9 @@ module BrDocuments
61
64
 
62
65
  def digital_check_generator(number, weight)
63
66
  if use_digital_check_mod10
64
- generate_digital_check_mod10(number, weight)
67
+ generate_check_digit_mod10(number, weight)
65
68
  else
66
- generate_digital_check(number, weight)
69
+ generate_check_digit(number, weight)
67
70
  end
68
71
  end
69
72
 
@@ -80,10 +83,10 @@ module BrDocuments
80
83
  end
81
84
  end
82
85
 
83
- def generate_digital_check_mod10(values, weights)
86
+ def generate_check_digit_mod10(values, weights)
84
87
  sum = reduce_weights(values, weights)
85
88
  mod = sum % 10
86
- mod == 0 ? 0 : (10 - mod)
89
+ mod.zero? ? 0 : (10 - mod)
87
90
  end
88
91
  end
89
92
  end
@@ -6,7 +6,7 @@ module BrDocuments
6
6
  end
7
7
 
8
8
  def valid?
9
- valid_format? and valid_digital_check?
9
+ valid_format? and valid_check_digit?
10
10
  end
11
11
 
12
12
  def formatted
@@ -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 CE < 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,4 +1,4 @@
1
- require_relative "pattern2"
1
+ require_relative 'pattern2'
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{11})(\d{2})/, "\\1-\\2")
14
+ number.sub(/(\d{11})(\d{2})/, '\\1-\\2')
14
15
  end
15
16
  end
16
17
  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 ES < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
9
  number
9
10
  end
@@ -1,11 +1,11 @@
1
1
  module BrDocuments
2
2
  module IE
3
3
  class Factory
4
- def self.create(uf, number)
5
- klass = IE.const_get("#{uf}")
4
+ def self.create(uf_symbol, number)
5
+ klass = IE.const_get(uf_symbol.to_s)
6
6
  klass.new(number)
7
7
  rescue NameError
8
- raise(ArgumentError, I18n.t("validator.ie.uf.invalid"))
8
+ raise(ArgumentError, I18n.t('validator.ie.uf.invalid'))
9
9
  end
10
10
  end
11
11
  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{3})(\d{3})(\d{1})/, "\\1.\\2.\\3-\\4")
14
+ number.sub(/(\d{2})(\d{3})(\d{3})(\d{1})/, '\\1.\\2.\\3-\\4')
14
15
  end
15
16
  end
16
17
  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 MA < Pattern1
6
6
  private
7
+
7
8
  def format_ie(number)
8
9
  number
9
10
  end
@@ -1,14 +1,15 @@
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 MG < Base
7
7
  include Commons::Mod11
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
- number.sub(/(\d{3})(\d{3})(\d{3})(\d{4})/, "\\1.\\2.\\3/\\4")
12
+ number.sub(/(\d{3})(\d{3})(\d{3})(\d{4})/, '\\1.\\2.\\3/\\4')
12
13
  end
13
14
 
14
15
  def valid_format?
@@ -16,37 +17,33 @@ module BrDocuments
16
17
  regex.match(@number).present?
17
18
  end
18
19
 
19
- def valid_digital_check?
20
- @number.gsub!(/[\.\/-]/, "")
20
+ def valid_check_digit?
21
+ @number.gsub!(/[\.\/-]/, '')
21
22
 
22
- number1 = @number[0, 3] + "0" + @number[3..10]
23
+ number1 = "#{@number[0, 3]}0#{@number[3..10]}"
23
24
  weight1 = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
24
25
  digital_check1 = generate_first_digital_check(number1, weight1)
25
26
 
26
27
  number2 = "#{@number[0, 11]}#{digital_check1}"
27
28
  weight2 = [3, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
28
- digital_check2 = generate_digital_check(number2, weight2)
29
+ digital_check2 = generate_check_digit(number2, weight2)
29
30
 
30
- @number[-2, 2].eql? "#{digital_check1}#{digital_check2}"
31
+ @number[-2, 2] == "#{digital_check1}#{digital_check2}"
31
32
  end
32
33
 
34
+ private
35
+
33
36
  def generate_first_digital_check(values, weights)
34
37
  sum = 0
35
38
  weights.each_index do |i|
36
39
  number = weights[i] * values[i].to_i
37
- if number < 10
38
- sum += number
39
- else
40
- sum += number.to_s[0].to_i + number.to_s[1].to_i
41
- end
40
+ sum += number < 10 ? number : number.to_s[0].to_i + number.to_s[1].to_i
42
41
  end
43
42
  next_dozen(sum) - sum
44
43
  end
45
44
 
46
45
  def next_dozen(number)
47
- while number % 10 != 0
48
- number = number + 1
49
- end
46
+ number += 1 while number % 10 != 0
50
47
  number
51
48
  end
52
49
  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 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) if just_numbers.present?
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