boleto_bancario 0.0.1.beta → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -2
  3. data/.travis.yml +10 -0
  4. data/Changelog.markdown +4 -0
  5. data/Gemfile +1 -1
  6. data/Planning.markdown +18 -86
  7. data/README.markdown +107 -55
  8. data/Rakefile +7 -1
  9. data/TODO.markdown +15 -1
  10. data/boleto_bancario.gemspec +7 -3
  11. data/lib/boleto_bancario.rb +27 -15
  12. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2.rb +65 -0
  13. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +5 -51
  14. data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
  15. data/lib/boleto_bancario/core/banco_brasil.rb +30 -5
  16. data/lib/boleto_bancario/core/banrisul.rb +182 -0
  17. data/lib/boleto_bancario/core/boleto.rb +67 -34
  18. data/lib/boleto_bancario/core/bradesco.rb +28 -16
  19. data/lib/boleto_bancario/core/caixa.rb +233 -0
  20. data/lib/boleto_bancario/core/hsbc.rb +170 -0
  21. data/lib/boleto_bancario/core/itau.rb +20 -10
  22. data/lib/boleto_bancario/core/real.rb +177 -0
  23. data/lib/boleto_bancario/core/santander.rb +19 -22
  24. data/lib/boleto_bancario/core/sicoob.rb +172 -0
  25. data/lib/boleto_bancario/core/sicredi.rb +290 -0
  26. data/lib/boleto_bancario/version.rb +1 -2
  27. data/spec/boleto_bancario/calculos/modulo10_spec.rb +4 -0
  28. data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +6 -0
  29. data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_spec.rb +31 -0
  30. data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
  31. data/spec/boleto_bancario/core/banco_brasil_spec.rb +59 -65
  32. data/spec/boleto_bancario/core/banrisul_spec.rb +129 -0
  33. data/spec/boleto_bancario/core/boleto_spec.rb +148 -32
  34. data/spec/boleto_bancario/core/bradesco_spec.rb +29 -36
  35. data/spec/boleto_bancario/core/caixa_spec.rb +111 -0
  36. data/spec/boleto_bancario/core/hsbc_spec.rb +72 -0
  37. data/spec/boleto_bancario/core/itau_spec.rb +33 -36
  38. data/spec/boleto_bancario/core/real_spec.rb +104 -0
  39. data/spec/boleto_bancario/core/santander_spec.rb +26 -24
  40. data/spec/boleto_bancario/core/sicoob_spec.rb +111 -0
  41. data/spec/boleto_bancario/core/sicredi_spec.rb +149 -0
  42. data/spec/inheritance/banco_brasil_spec.rb +22 -0
  43. data/spec/inheritance/banrisul_spec.rb +22 -0
  44. data/spec/inheritance/boleto_spec.rb +15 -0
  45. data/spec/inheritance/bradesco_spec.rb +22 -0
  46. data/spec/inheritance/caixa_spec.rb +22 -0
  47. data/spec/inheritance/hsbc_spec.rb +22 -0
  48. data/spec/inheritance/itau_spec.rb +22 -0
  49. data/spec/inheritance/real_spec.rb +22 -0
  50. data/spec/inheritance/santander_spec.rb +22 -0
  51. data/spec/inheritance/sicoob_spec.rb +22 -0
  52. data/spec/inheritance/sicredi_spec.rb +22 -0
  53. data/spec/shared_examples/boleto_bancario_shared_example.rb +21 -34
  54. data/spec/spec_helper.rb +2 -2
  55. metadata +119 -47
  56. data/.rvmrc +0 -1
@@ -16,19 +16,22 @@ module BoletoBancario
16
16
  it { should have_valid(:numero_documento).when('1', '12', '123', '123456789112') }
17
17
  it { should_not have_valid(:numero_documento).when('1234567891123', nil, '') }
18
18
 
19
- it { should have_valid(:carteira).when('1', '12', '123') }
20
- it { should_not have_valid(:carteira).when('1234', nil, '') }
19
+ it { should have_valid(:carteira).when('101', '102', '121', 101, 102, 121) }
20
+ it { should_not have_valid(:carteira).when(nil, '', '05', '20', '100', '120') }
21
+
22
+ it { should have_valid(:valor_documento).when(1, 1.99, 100.99, 99_999_999.99, '100.99') }
23
+ it { should_not have_valid(:valor_documento).when(nil, '', '100,99', 100_000_000.99) }
21
24
  end
22
25
 
23
26
  describe "#agencia" do
24
27
  context "when have a value" do
25
28
  subject { Santander.new(agencia: '2') }
26
29
 
27
- its(:agencia) { should eq '0002' }
30
+ it { expect(subject.agencia).to eq '0002' }
28
31
  end
29
32
 
30
33
  context "when is nil" do
31
- its(:agencia) { should be nil }
34
+ it { expect(subject.agencia).to be nil }
32
35
  end
33
36
  end
34
37
 
@@ -36,11 +39,11 @@ module BoletoBancario
36
39
  context "when have a value" do
37
40
  subject { Santander.new(codigo_cedente: '1') }
38
41
 
39
- its(:codigo_cedente) { should eq '0000001' }
42
+ it { expect(subject.codigo_cedente).to eq '0000001' }
40
43
  end
41
44
 
42
45
  context "when is nil" do
43
- its(:codigo_cedente) { should be nil }
46
+ it { expect(subject.codigo_cedente).to be nil }
44
47
  end
45
48
  end
46
49
 
@@ -48,23 +51,23 @@ module BoletoBancario
48
51
  context "when have a value" do
49
52
  subject { Santander.new(numero_documento: '1') }
50
53
 
51
- its(:numero_documento) { should eq '000000000001' }
54
+ it { expect(subject.numero_documento).to eq '000000000001' }
52
55
  end
53
56
 
54
57
  context "when is nil" do
55
- its(:numero_documento) { should be nil }
58
+ it { expect(subject.numero_documento).to be nil }
56
59
  end
57
60
  end
58
61
 
59
62
  describe "#carteira" do
60
63
  context "when have a value" do
61
- subject { Santander.new(carteira: '1') }
64
+ subject { Santander.new(carteira: '101') }
62
65
 
63
- its(:carteira) { should eq '001' }
66
+ it { expect(subject.carteira).to eq '101' }
64
67
  end
65
68
 
66
69
  context "when is nil" do
67
- its(:carteira) { should be nil }
70
+ it { expect(subject.carteira).to be nil }
68
71
  end
69
72
  end
70
73
 
@@ -72,34 +75,34 @@ module BoletoBancario
72
75
  context "when is registered" do
73
76
  subject { Santander.new(:carteira => 101) }
74
77
 
75
- its(:carteira_formatada) { should eq 'COBRANÇA SIMPLES ECR' }
78
+ it { expect(subject.carteira_formatada).to eq 'COBRANÇA SIMPLES ECR' }
76
79
  end
77
80
 
78
81
  context "when isn't registered" do
79
82
  subject { Santander.new(:carteira => 102) }
80
83
 
81
- its(:carteira_formatada) { should eq 'COBRANÇA SIMPLES CSR' }
84
+ it { expect(subject.carteira_formatada).to eq 'COBRANÇA SIMPLES CSR' }
82
85
  end
83
86
  end
84
87
 
85
88
  describe "#codigo_banco" do
86
- its(:codigo_banco) { should eq '033' }
89
+ it { expect(subject.codigo_banco).to eq '033' }
87
90
  end
88
91
 
89
92
  describe "#digito_codigo_banco" do
90
- its(:digito_codigo_banco) { should eq '7' }
93
+ it { expect(subject.digito_codigo_banco).to eq '7' }
91
94
  end
92
95
 
93
96
  describe "#agencia_codigo_cedente" do
94
- subject { Santander.new(agencia: '0235', digito_agencia: '6', codigo_cedente: '1625462') }
97
+ subject { Santander.new(agencia: '0235', codigo_cedente: '1625462') }
95
98
 
96
- its(:agencia_codigo_cedente) { should eq '0235-6 / 1625462' }
99
+ it { expect(subject.agencia_codigo_cedente).to eq '0235 / 1625462' }
97
100
  end
98
101
 
99
102
  describe "#nosso_numero" do
100
103
  subject { Santander.new(numero_documento: '566612457800') }
101
104
 
102
- its(:nosso_numero) { should eq '566612457800-2' }
105
+ it { expect(subject.nosso_numero).to eq '566612457800-2' }
103
106
  end
104
107
 
105
108
  describe "#codigo_de_barras" do
@@ -110,26 +113,25 @@ module BoletoBancario
110
113
  santander.valor_documento = 2952.95
111
114
  santander.carteira = '102'
112
115
  santander.agencia = 1333
113
- santander.digito_agencia = 1
114
116
  santander.data_vencimento = Date.parse('2012-12-28')
115
117
  end
116
118
  end
117
119
 
118
- its(:codigo_de_barras) { should eq '03391556100002952959070707700000123456790102' }
119
- its(:linha_digitavel) { should eq '03399.07073 07700.000123 34567.901029 1 55610000295295' }
120
+ it { expect(subject.codigo_de_barras).to eq '03391556100002952959070707700000123456790102' }
121
+ it { expect(subject.linha_digitavel).to eq '03399.07073 07700.000123 34567.901029 1 55610000295295' }
120
122
  end
121
123
 
122
124
  describe "#iof" do
123
125
  context "default iof" do
124
- its(:iof) { should eq '0' }
126
+ it { expect(subject.iof).to eq '0' }
125
127
  end
126
128
 
127
129
  context "setting iof" do
128
130
  subject { Santander.new(iof: 7) }
129
131
 
130
- its(:iof) { should eq '7' }
132
+ it { expect(subject.iof).to eq '7' }
131
133
  end
132
134
  end
133
135
  end
134
136
  end
135
- end
137
+ end
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ module BoletoBancario
5
+ module Core
6
+ describe Sicoob do
7
+ it_should_behave_like 'boleto bancario'
8
+
9
+ describe "on validations" do
10
+ it { should have_valid(:agencia).when('1', '12', '123', '1234') }
11
+ it { should_not have_valid(:agencia).when('12345', '123456', nil, '') }
12
+
13
+ it { should have_valid(:codigo_cedente).when('1', 12345, '1234567') }
14
+ it { should_not have_valid(:codigo_cedente).when('12345678', 123456789, nil, '') }
15
+
16
+ it { should have_valid(:numero_documento).when('1', 12345, '123456') }
17
+ it { should_not have_valid(:numero_documento).when('1234567', nil, '') }
18
+
19
+ it { should have_valid(:carteira).when('1', 1, '9', 9) }
20
+ it { should_not have_valid(:carteira).when(nil, '', 2, '6') }
21
+
22
+ it { should have_valid(:valor_documento).when(1, 1.99, 100.99, 99_999_999.99, '100.99') }
23
+ it { should_not have_valid(:valor_documento).when(nil, '', '100,99', 100_000_000.99) }
24
+ end
25
+
26
+ describe "#agencia" do
27
+ context "when have a value" do
28
+ subject { Sicoob.new(agencia: '215') }
29
+
30
+ it { expect(subject.agencia).to eq '0215' }
31
+ end
32
+
33
+ context "when is nil" do
34
+ it { expect(subject.agencia).to be nil }
35
+ end
36
+ end
37
+
38
+ describe "#conta_corrente" do
39
+ context "when have a value" do
40
+ subject { Sicoob.new(codigo_cedente: '9201') }
41
+
42
+ it { expect(subject.codigo_cedente).to eq '0009201' }
43
+ end
44
+
45
+ context "when is nil" do
46
+ it { expect(subject.codigo_cedente).to be nil }
47
+ end
48
+ end
49
+
50
+ describe "#numero_documento" do
51
+ context "when have a value" do
52
+ subject { Sicoob.new(numero_documento: '1') }
53
+
54
+ it { expect(subject.numero_documento).to eq '000001' }
55
+ end
56
+
57
+ context "when is nil" do
58
+ it { expect(subject.numero_documento).to be nil }
59
+ end
60
+ end
61
+
62
+ describe "#carteira" do
63
+ context "when have a value" do
64
+ subject { Sicoob.new(carteira: '1') }
65
+
66
+ it { expect(subject.carteira).to eq '1' }
67
+ end
68
+
69
+ context "when is nil" do
70
+ it { expect(subject.carteira).to be nil }
71
+ end
72
+ end
73
+
74
+ describe "#codigo_banco" do
75
+ it { expect(subject.codigo_banco).to eq '756' }
76
+ end
77
+
78
+ describe "#digito_codigo_banco" do
79
+ it { expect(subject.digito_codigo_banco).to eq '0' }
80
+ end
81
+
82
+ describe "#agencia_codigo_beneficiario" do
83
+ subject { Sicoob.new(agencia: 48, codigo_cedente: '7368') }
84
+
85
+ it { expect(subject.agencia_codigo_cedente).to eq '0048 / 0007368' }
86
+ end
87
+
88
+ describe "#nosso_numero" do
89
+ subject { Sicoob.new(numero_documento: '68315') }
90
+
91
+ it { expect(subject.nosso_numero).to eq '15068315' }
92
+ end
93
+
94
+ describe "#codigo_de_barras" do
95
+ subject do
96
+ Sicoob.new do |sicoob|
97
+ sicoob.agencia = 95
98
+ sicoob.codigo_cedente = 6532
99
+ sicoob.numero_documento = 1101
100
+ sicoob.carteira = 1
101
+ sicoob.valor_documento = 93015.78
102
+ sicoob.data_vencimento = Date.parse('2019-02-17')
103
+ end
104
+ end
105
+
106
+ it { expect(subject.codigo_de_barras).to eq '75692780300093015781009501000653215001101001' }
107
+ it { expect(subject.linha_digitavel).to eq '75691.00956 01000.653210 50011.010019 2 78030009301578' }
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,149 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ module BoletoBancario
5
+ module Core
6
+ describe Sicredi do
7
+ it_should_behave_like 'boleto bancario'
8
+
9
+ describe "on validations" do
10
+ it { should have_valid(:agencia).when('1', '12', '123', '1234') }
11
+ it { should_not have_valid(:agencia).when('12345', '123456', nil, '') }
12
+
13
+ it { should have_valid(:conta_corrente).when('1', '12', '123', '12345') }
14
+ it { should_not have_valid(:conta_corrente).when('123456', '1234567', nil, '') }
15
+
16
+ it { should have_valid(:numero_documento).when('1', '12', '123', '12345') }
17
+ it { should_not have_valid(:numero_documento).when('123456', nil, '') }
18
+
19
+ it { should have_valid(:carteira).when('03', 'C') }
20
+ it { should_not have_valid(:carteira).when(nil, '', '05', '20', '100', '120') }
21
+
22
+ it { should have_valid(:posto).when('1', '56', 34, 99) }
23
+ it { should_not have_valid(:posto).when(nil, '', '100', 100) }
24
+
25
+ it { should have_valid(:byte_id).when('2', 2, 5, '9') }
26
+ it { should_not have_valid(:byte_id).when(nil, '', '1', 1, 10, '100') }
27
+
28
+ it { should have_valid(:valor_documento).when(1, 1.99, 100.99, 99_999_999.99, '100.99') }
29
+ it { should_not have_valid(:valor_documento).when(nil, '', '100,99', 100_000_000.99) }
30
+ end
31
+
32
+ describe "#agencia" do
33
+ context "when have a value" do
34
+ subject { Sicredi.new(agencia: '530') }
35
+
36
+ it { expect(subject.agencia).to eq '0530' }
37
+ end
38
+
39
+ context "when is nil" do
40
+ it { expect(subject.agencia).to be nil }
41
+ end
42
+ end
43
+
44
+ describe "#conta_corrente" do
45
+ context "when have a value" do
46
+ subject { Sicredi.new(conta_corrente: '96') }
47
+
48
+ it { expect(subject.conta_corrente).to eq '00096' }
49
+ end
50
+
51
+ context "when is nil" do
52
+ it { expect(subject.conta_corrente).to be nil }
53
+ end
54
+ end
55
+
56
+ describe "#numero_documento" do
57
+ context "when have a value" do
58
+ subject { Sicredi.new(numero_documento: '1') }
59
+
60
+ it { expect(subject.numero_documento).to eq '00001' }
61
+ end
62
+
63
+ context "when is nil" do
64
+ it { expect(subject.numero_documento).to be nil }
65
+ end
66
+ end
67
+
68
+ describe "#carteira" do
69
+ context "when have a value" do
70
+ subject { Sicredi.new(carteira: '03') }
71
+
72
+ it { expect(subject.carteira).to eq '03' }
73
+ end
74
+
75
+ context "when is nil" do
76
+ it { expect(subject.carteira).to be nil }
77
+ end
78
+ end
79
+
80
+ describe "#carteira_formatada" do
81
+ context "when is registered" do
82
+ subject { Sicredi.new(carteira: '03') }
83
+
84
+ it { expect(subject.carteira_formatada).to eq '1' }
85
+ end
86
+
87
+ context "when isn't registered" do
88
+ subject { Sicredi.new(carteira: 'C') }
89
+
90
+ it { expect(subject.carteira_formatada).to eq '1' }
91
+ end
92
+ end
93
+
94
+ describe "#codigo_banco" do
95
+ it { expect(subject.codigo_banco).to eq '748' }
96
+ end
97
+
98
+ describe "#digito_codigo_banco" do
99
+ it { expect(subject.digito_codigo_banco).to eq 'X' }
100
+ end
101
+
102
+ describe "#tipo_cobranca" do
103
+ it { expect(subject.tipo_cobranca).to eq '3' }
104
+ end
105
+
106
+ describe "#tipo_carteira" do
107
+ it { expect(subject.tipo_carteira).to eq '1' }
108
+ end
109
+
110
+ describe "#agencia_codigo_beneficiario" do
111
+ subject { Sicredi.new(agencia: '7190', posto: 2, conta_corrente: '25439') }
112
+
113
+ it { expect(subject.agencia_codigo_cedente).to eq '7190.02.25439' }
114
+ end
115
+
116
+ describe "#nosso_numero" do
117
+ subject do
118
+ Sicredi.new do |sicredi|
119
+ sicredi.agencia = 4927
120
+ sicredi.posto = '99'
121
+ sicredi.conta_corrente = 24837
122
+ sicredi.byte_id = '9'
123
+ sicredi.numero_documento = '72815'
124
+ end
125
+ end
126
+
127
+ it { expect(subject.nosso_numero).to eq '15/972815-9' }
128
+ end
129
+
130
+ describe "#codigo_de_barras" do
131
+ subject do
132
+ Sicredi.new do |sicredi|
133
+ sicredi.agencia = '8136'
134
+ sicredi.conta_corrente = '62918'
135
+ sicredi.posto = 34
136
+ sicredi.byte_id = 3
137
+ sicredi.carteira = '03'
138
+ sicredi.numero_documento = 87264
139
+ sicredi.valor_documento = 8013.65
140
+ sicredi.data_vencimento = Date.parse('2006-10-29')
141
+ end
142
+ end
143
+
144
+ it { expect(subject.codigo_de_barras).to eq '74894330900008013653115387264581363462918104' }
145
+ it { expect(subject.linha_digitavel).to eq '74893.11535 87264.581361 34629.181040 4 33090000801365' }
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ class BancoBrasil < BoletoBancario::BancoBrasil
5
+ def self.valor_documento_tamanho_maximo
6
+ 100 # Default 99999999.99
7
+ end
8
+
9
+ def self.carteiras_suportadas
10
+ %w[12 17] # Default %w[12 16 17 18]
11
+ end
12
+ end
13
+
14
+ describe BancoBrasil do
15
+ describe "on validations" do
16
+ it { should have_valid(:valor_documento).when(99, 99.99, 25) }
17
+ it { should_not have_valid(:valor_documento).when(100.01, 150) }
18
+
19
+ it { should have_valid(:carteira).when(12, 17) }
20
+ it { should_not have_valid(:carteira).when(16, 18, 20) }
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ class Banrisul < BoletoBancario::Banrisul
5
+ def self.valor_documento_tamanho_maximo
6
+ 250 # Default 99999999.99
7
+ end
8
+
9
+ def self.carteiras_suportadas
10
+ %w[00] # Default %w[00 08]
11
+ end
12
+ end
13
+
14
+ describe Banrisul do
15
+ describe "on validations" do
16
+ it { should have_valid(:valor_documento).when(99, 249, 250) }
17
+ it { should_not have_valid(:valor_documento).when(250.01, 260) }
18
+
19
+ it { should have_valid(:carteira).when('00', 0) }
20
+ it { should_not have_valid(:carteira).when('08', 8, 10) }
21
+ end
22
+ end