br_documents 0.1.3 → 0.2.0

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 (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,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 SP < Base
7
7
  include Commons::Mod11
8
8
 
9
- private
9
+ protected
10
+
10
11
  def format_ie(number)
11
- if number.gsub(/(\-)|(\.)|(\/)/, "").length == 13
12
- number.sub(/(\w{1})(\d{8})(\d{1})(\d{3})/, "\\1-\\2.\\3/\\4")
12
+ if number.gsub(/(\-)|(\.)|(\/)/, '').length == 13
13
+ number.sub(/(\w{1})(\d{8})(\d{1})(\d{3})/, '\\1-\\2.\\3/\\4')
13
14
  else
14
- number.sub(/(\d{3})(\d{3})(\d{3})(\d{3})/, "\\1.\\2.\\3.\\4")
15
+ number.sub(/(\d{3})(\d{3})(\d{3})(\d{3})/, '\\1.\\2.\\3.\\4')
15
16
  end
16
17
  end
17
18
 
@@ -20,33 +21,35 @@ module BrDocuments
20
21
  regex.match(@number).present?
21
22
  end
22
23
 
23
- def valid_digital_check?
24
- if @number[0].eql? "P"
24
+ def valid_check_digit?
25
+ if @number[0] == 'P'
25
26
  valid_rural_producer_digital_check?
26
27
  else
27
28
  valid_standard_digital_check?
28
29
  end
29
30
  end
30
31
 
32
+ private
33
+
31
34
  def valid_standard_digital_check?
32
- @number.gsub!(/[\.\/P-]/, "")
35
+ @number.gsub!(/[\.\/P-]/, '')
33
36
 
34
37
  weight1 = [1, 3, 4, 5, 6, 7, 8, 10]
35
38
  weight2 = [3, 2, 10, 9, 8, 7, 6, 5, 4, 3, 2]
36
39
 
37
- dc1 = generate_digital_check(weight1)
38
- dc2 = generate_digital_check(weight2)
40
+ dc1 = generate_check_digit(weight1)
41
+ dc2 = generate_check_digit(weight2)
39
42
 
40
43
  (@number[8] == dc1) and (@number[11] == dc2)
41
44
  end
42
45
 
43
46
  def valid_rural_producer_digital_check?
44
- @number.gsub!(/[\.\/P-]/, "")
47
+ @number.gsub!(/[\.\/P-]/, '')
45
48
  weight9 = [1, 3, 4, 5, 6, 7, 8, 10]
46
- @number[8] == generate_digital_check(weight9)
49
+ @number[8] == generate_check_digit(weight9)
47
50
  end
48
51
 
49
- def generate_digital_check(weights)
52
+ def generate_check_digit(weights)
50
53
  sum = reduce_weights(@number, weights)
51
54
  mod = sum % 11
52
55
  mod.to_s[-1]
@@ -1,11 +1,11 @@
1
- require_relative "pattern1"
1
+ require_relative 'pattern1'
2
2
 
3
3
  module BrDocuments
4
4
  module IE
5
5
  class TO < Pattern1
6
6
  def initialize(number)
7
7
  super
8
- if number.gsub(/(\.)|(\-)/, "").length == 9
8
+ if number.gsub(/(\.)|(\-)/, '').length == 9
9
9
  @mask = /^(\d{2}\.\d{6}\-\d{1})$|^(\d{9})$/
10
10
  @weight = [9, 8, 7, 6, 5, 4, 3, 2]
11
11
  else
@@ -15,11 +15,12 @@ module BrDocuments
15
15
  end
16
16
 
17
17
  private
18
+
18
19
  def format_ie(number)
19
- if number.gsub(/(\.)|(\-)/, "").length == 9
20
- number.sub(/(\d{2})(\d{6})(\d{1})/, "\\1.\\2-\\3")
20
+ if number.gsub(/(\.)|(\-)/, '').length == 9
21
+ number.sub(/(\d{2})(\d{6})(\d{1})/, '\\1.\\2-\\3')
21
22
  else
22
- number.sub(/(\d{2})(\d{2})(\d{6})(\d{1})/, "\\1.\\2.\\3-\\4")
23
+ number.sub(/(\d{2})(\d{2})(\d{6})(\d{1})/, '\\1.\\2.\\3-\\4')
23
24
  end
24
25
  end
25
26
  end
@@ -7,13 +7,13 @@ class IeValidator < ActiveModel::EachValidator
7
7
  end
8
8
 
9
9
  private
10
+
10
11
  def ie_present?(value)
11
12
  value.present?
12
13
  end
13
14
 
14
15
  def attribute_uf_was_configured_at_validator?(record)
15
- record.errors.add(:base,
16
- I18n.t("validator.ie.uf.no_configured")) unless options[:uf].present?
16
+ record.errors.add(:base, I18n.t('validator.ie.uf.no_configured')) unless options[:uf].present?
17
17
 
18
18
  options[:uf].present?
19
19
  end
@@ -22,8 +22,8 @@ class IeValidator < ActiveModel::EachValidator
22
22
  begin
23
23
  uf = read_uf(record)
24
24
  rescue NoMethodError
25
- record.errors.add(:base, I18n.t("validator.ie.uf.no_present",
26
- uf: options[:uf])
25
+ record.errors.add(
26
+ :base, I18n.t('validator.ie.uf.no_present', uf: options[:uf])
27
27
  )
28
28
  end
29
29
 
@@ -33,8 +33,8 @@ class IeValidator < ActiveModel::EachValidator
33
33
  def ie_valid?(record, attribute, value)
34
34
  begin
35
35
  record.errors.add(attribute, :invalid) unless number_valid?(record, value)
36
- rescue ArgumentError => ex
37
- record.errors.add(attribute, ex.message)
36
+ rescue ArgumentError => e
37
+ record.errors.add(attribute, e.message)
38
38
  end
39
39
  record.errors.messages.empty?
40
40
  end
@@ -47,7 +47,7 @@ class IeValidator < ActiveModel::EachValidator
47
47
 
48
48
  def read_uf(record)
49
49
  attribute = record
50
- options[:uf].split("#").each do | field |
50
+ options[:uf].split('#').each do |field|
51
51
  attribute = attribute.send(field)
52
52
  end
53
53
  attribute
@@ -0,0 +1,60 @@
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
@@ -0,0 +1,8 @@
1
+ class SuframaValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ return if value.blank?
4
+
5
+ suframa = BrDocuments::Suframa.new(value)
6
+ record.errors.add(attribute, :invalid) unless suframa.valid?
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module BrDocuments
2
- VERSION = '0.1.3'
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -1,57 +1,57 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe BrDocuments::CnpjCpf::Cnpj do
4
- describe "#formatted" do
5
- it "returns a formatted number" do
6
- cnpj = BrDocuments::CnpjCpf::Cnpj.new("04001155000101")
7
- expect(cnpj.formatted).to eq "04.001.155/0001-01"
4
+ describe '#formatted' do
5
+ it 'returns a formatted number' do
6
+ cnpj = BrDocuments::CnpjCpf::Cnpj.new('04001155000101')
7
+ expect(cnpj.formatted).to eq '04.001.155/0001-01'
8
8
  end
9
9
 
10
- context "when is invalid" do
11
- it "returns an empty string" do
12
- cnpj = BrDocuments::CnpjCpf::Cnpj.new("123")
13
- expect(cnpj.formatted).to eq ""
10
+ context 'when is invalid' do
11
+ it 'returns an empty string' do
12
+ cnpj = BrDocuments::CnpjCpf::Cnpj.new('123')
13
+ expect(cnpj.formatted).to eq ''
14
14
  end
15
15
  end
16
16
  end
17
17
 
18
- it "is invalid with malformed number" do
19
- ["242.2818/50001-54", "35.611.011/000192"].each do |number|
18
+ it 'is invalid with malformed number' do
19
+ ['242.2818/50001-54', '35.611.011/000192'].each do |number|
20
20
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
21
21
  expect(cnpj).to_not be_valid
22
22
  end
23
23
  end
24
24
 
25
- it "is invalid with a number longer than 14" do
26
- ["24.228.185/0001-544", "936710360001881"].each do |number|
25
+ it 'is invalid with a number longer than 14' do
26
+ ['24.228.185/0001-544', '936710360001881'].each do |number|
27
27
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
28
28
  expect(cnpj).to_not be_valid
29
29
  end
30
30
  end
31
31
 
32
- it "is invalid with a number shorter than 14" do
33
- ["24.228.185/0001-5", "9367103600018"].each do |number|
32
+ it 'is invalid with a number shorter than 14' do
33
+ ['24.228.185/0001-5', '9367103600018'].each do |number|
34
34
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
35
35
  expect(cnpj).to_not be_valid
36
36
  end
37
37
  end
38
38
 
39
- it "is invalid with a sequence of the same number" do
40
- ["11.111.111/1111-11", "22222222222222"].each do |number|
39
+ it 'is invalid with a sequence of the same number' do
40
+ ['11.111.111/1111-11', '22222222222222'].each do |number|
41
41
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
42
42
  expect(cnpj).to_not be_valid
43
43
  end
44
44
  end
45
45
 
46
- it "is invalid with invalid check number" do
47
- ["04.001.155/0001-03", "85961757000101"].each do |number|
46
+ it 'is invalid with invalid check number' do
47
+ ['04.001.155/0001-03', '85961757000101'].each do |number|
48
48
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
49
49
  expect(cnpj).to_not be_valid
50
50
  end
51
51
  end
52
52
 
53
- it "is valid with correct number" do
54
- ["04.001.155/0001-01", "85961757000102"].each do |number|
53
+ it 'is valid with correct number' do
54
+ ['04.001.155/0001-01', '85961757000102'].each do |number|
55
55
  cnpj = BrDocuments::CnpjCpf::Cnpj.new(number)
56
56
  expect(cnpj).to be_valid
57
57
  end
@@ -1,57 +1,57 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe BrDocuments::CnpjCpf::Cpf do
4
- describe "#formatted" do
5
- it "returns a formatted number" do
6
- cpf = BrDocuments::CnpjCpf::Cpf.new("11144477735")
7
- expect(cpf.formatted).to eq "111.444.777-35"
4
+ describe '#formatted' do
5
+ it 'returns a formatted number' do
6
+ cpf = BrDocuments::CnpjCpf::Cpf.new('11144477735')
7
+ expect(cpf.formatted).to eq '111.444.777-35'
8
8
  end
9
9
 
10
- context "when is invalid" do
11
- it "returns an empty string" do
12
- cpf = BrDocuments::CnpjCpf::Cpf.new("123")
13
- expect(cpf.formatted).to eq ""
10
+ context 'when is invalid' do
11
+ it 'returns an empty string' do
12
+ cpf = BrDocuments::CnpjCpf::Cpf.new('123')
13
+ expect(cpf.formatted).to eq ''
14
14
  end
15
15
  end
16
16
  end
17
17
 
18
- it "is invalid with malformed number" do
19
- ["111.126.491.07", "482.261.15-663", "111444.777-35"].each do |number|
18
+ it 'is invalid with malformed number' do
19
+ ['111.126.491.07', '482.261.15-663', '111444.777-35'].each do |number|
20
20
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
21
21
  expect(cpf).to_not be_valid
22
22
  end
23
23
  end
24
24
 
25
- it "is invalid with a number longer than 11" do
26
- ["045.769.421-150", "308514217766"].each do |number|
25
+ it 'is invalid with a number longer than 11' do
26
+ ['045.769.421-150', '308514217766'].each do |number|
27
27
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
28
28
  expect(cpf).to_not be_valid
29
29
  end
30
30
  end
31
31
 
32
- it "is invalid with a number shorter than 11" do
33
- ["111.444.777-3", "1234567890"].each do |number|
32
+ it 'is invalid with a number shorter than 11' do
33
+ ['111.444.777-3', '1234567890'].each do |number|
34
34
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
35
35
  expect(cpf).to_not be_valid
36
36
  end
37
37
  end
38
38
 
39
- it "is invalid with a sequence of the same number" do
40
- ["111.111.111-11", "22222222222"].each do |number|
39
+ it 'is invalid with a sequence of the same number' do
40
+ ['111.111.111-11', '22222222222'].each do |number|
41
41
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
42
42
  expect(cpf).to_not be_valid
43
43
  end
44
44
  end
45
45
 
46
- it "is invalid with invalid check number" do
47
- ["111.111.111-22", "2222222233"].each do |number|
46
+ it 'is invalid with invalid check number' do
47
+ ['111.111.111-22', '2222222233'].each do |number|
48
48
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
49
49
  expect(cpf).to_not be_valid
50
50
  end
51
51
  end
52
52
 
53
- it "is valid with correct number" do
54
- ["111.444.777-35", "01233254120"].each do |number|
53
+ it 'is valid with correct number' do
54
+ ['111.444.777-35', '01233254120'].each do |number|
55
55
  cpf = BrDocuments::CnpjCpf::Cpf.new(number)
56
56
  expect(cpf).to be_valid
57
57
  end
@@ -1,35 +1,35 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe CnpjValidator do
4
4
  before(:each) do
5
- @validator = CnpjValidator.new(attributes: "cnpj")
6
- @mock = double("model")
5
+ @validator = CnpjValidator.new(attributes: 'cnpj')
6
+ @mock = double('model')
7
7
  allow(@mock).to receive(:errors).and_return([])
8
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]
9
+ allow(@mock.errors).to receive(:add) do |attribute, error|
10
+ @mock.errors.messages[attribute] = [error]
11
11
  end
12
12
  end
13
13
 
14
14
  subject { @validator }
15
15
 
16
- context "when Cnpj is valid" do
16
+ context 'when Cnpj is valid' do
17
17
  it "doesn't add errors in model" do
18
- subject.validate_each(@mock, "cnpj", "85961757000102")
18
+ subject.validate_each(@mock, 'cnpj', '85961757000102')
19
19
  expect(@mock.errors.messages).to be_empty
20
20
  end
21
21
  end
22
22
 
23
- context "when Cnpj is blank" do
23
+ context 'when Cnpj is blank' do
24
24
  it "doesn't add errors in model" do
25
- subject.validate_each(@mock, "cnpj", "")
25
+ subject.validate_each(@mock, 'cnpj', '')
26
26
  expect(@mock.errors.messages).to be_empty
27
27
  end
28
28
  end
29
29
 
30
- context "when Cnpj is invalid" do
31
- it "adds errors in model" do
32
- subject.validate_each(@mock, "cnpj", "85961757000103")
30
+ context 'when Cnpj is invalid' do
31
+ it 'adds errors in model' do
32
+ subject.validate_each(@mock, 'cnpj', '85961757000103')
33
33
  expect(@mock.errors.messages).to_not be_empty
34
34
  end
35
35
  end
@@ -1,35 +1,35 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe CpfValidator do
4
4
  before(:each) do
5
- @validator = CpfValidator.new(attributes: "cpf")
6
- @mock = double("model")
5
+ @validator = CpfValidator.new(attributes: 'cpf')
6
+ @mock = double('model')
7
7
  allow(@mock).to receive(:errors).and_return([])
8
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]
9
+ allow(@mock.errors).to receive(:add) do |attribute, error|
10
+ @mock.errors.messages[attribute] = [error]
11
11
  end
12
12
  end
13
13
 
14
14
  subject { @validator }
15
15
 
16
- context "when Cpf is valid" do
16
+ context 'when Cpf is valid' do
17
17
  it "doesn't add errors in model" do
18
- subject.validate_each(@mock, "cpf", "01233254120")
18
+ subject.validate_each(@mock, 'cpf', '01233254120')
19
19
  expect(@mock.errors.messages).to be_empty
20
20
  end
21
21
  end
22
22
 
23
- context "when Cpf is blank" do
23
+ context 'when Cpf is blank' do
24
24
  it "doesn't add errors in model" do
25
- subject.validate_each(@mock, "cpf", "")
25
+ subject.validate_each(@mock, 'cpf', '')
26
26
  expect(@mock.errors.messages).to be_empty
27
27
  end
28
28
  end
29
29
 
30
- context "when Cpf is invalid" do
31
- it "adds errors in model" do
32
- subject.validate_each(@mock, "cpf", "01233254121")
30
+ context 'when Cpf is invalid' do
31
+ it 'adds errors in model' do
32
+ subject.validate_each(@mock, 'cpf', '01233254121')
33
33
  expect(@mock.errors.messages).to_not be_empty
34
34
  end
35
35
  end