brcobranca 6.5.0 → 6.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 907cfdce6c44ef1b78b3604dbafc18a8a2a49879
4
- data.tar.gz: fa8e9b84175ae7b4b416414ef3cfd1cc031e2829
3
+ metadata.gz: dde684f4e1747019a423680e7f4fd10d5d66ece6
4
+ data.tar.gz: 5ed7b52056973139c8cc2187906cfa0276ccce69
5
5
  SHA512:
6
- metadata.gz: e20b14a665c2324eae8ffe214dcf5007756dcfe5488a55dd0eaf306ca871c356608f6ed9779d94ce2022d6ebc789856b2c25f52fecdfcc16351623bf87ff2be8
7
- data.tar.gz: 4914a11cf648f7c1d197dd719ff1957383f5454f5a4a92835c474ea3967037b498e6cd62c775f06d0153d33452218c5846ef5504180500834709140539c99846
6
+ metadata.gz: 4063569215fcff25384c5f107653fa3ae10e2fb7f7ab0c67bca214423fc0fad591b6ea6a378c825c58769653ebdb0111d59f999bd25bb4ecd28ef3390e6263b5
7
+ data.tar.gz: f887d0a6a6fd852ea3189521ffd2d312f21e42379421c5b0128e6657d113371696038f10ce3f64b5e7a43e0bf6c93a1cb646751a7b9d6653e95350cf63b5a535
data/lib/brcobranca.rb CHANGED
@@ -95,6 +95,7 @@ module Brcobranca
95
95
  # Módulo para classes de boletos
96
96
  module Boleto
97
97
  autoload :Base, 'brcobranca/boleto/base'
98
+ autoload :BancoNordeste, 'brcobranca/boleto/banco_nordeste'
98
99
  autoload :BancoBrasil, 'brcobranca/boleto/banco_brasil'
99
100
  autoload :Itau, 'brcobranca/boleto/itau'
100
101
  autoload :Hsbc, 'brcobranca/boleto/hsbc'
@@ -0,0 +1,92 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Brcobranca
3
+ module Boleto
4
+ class BancoNordeste < Base # Banco do Nordeste
5
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
6
+ validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
7
+ validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
8
+ validates_length_of :numero_documento, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
9
+
10
+ # Nova instancia do Banco do Nordeste
11
+ # @param (see Brcobranca::Boleto::Base#initialize)
12
+ def initialize(campos = {})
13
+ campos = { carteira: '21' }.merge!(campos)
14
+ super(campos)
15
+ end
16
+
17
+ # Codigo do banco emissor (3 dígitos sempre)
18
+ #
19
+ # @return [String] 3 caracteres numéricos.
20
+ def banco
21
+ '004'
22
+ end
23
+
24
+ # Número da conta corrente
25
+ # @return [String] 7 caracteres numéricos.
26
+ def conta_corrente=(valor)
27
+ @conta_corrente = valor.to_s.rjust(7, '0') if valor
28
+ end
29
+
30
+ # Número do convênio/contrato do cliente junto ao banco.
31
+ # @return [String] 7 caracteres numéricos.
32
+ def convenio=(valor)
33
+ @convenio = valor.to_s.rjust(7, '0') if valor
34
+ end
35
+
36
+ # Número sequencial utilizado para identificar o boleto.
37
+ # @return [String] 8 caracteres numéricos.
38
+ def numero_documento=(valor)
39
+ @numero_documento = valor.to_s.rjust(7, '0') if valor
40
+ end
41
+
42
+ # Dígito verificador do nosso número.
43
+ # @return [String] 1 caracteres numéricos.
44
+ def nosso_numero_dv
45
+ nosso_numero = numero_documento.to_s.rjust(7, '0') unless numero_documento.nil?
46
+ nosso_numero.modulo11(
47
+ multiplicador: (2..8).to_a,
48
+ mapeamento: { 10 => 0, 11 => 0 }
49
+ ) { |total| 11 - (total % 11) }
50
+ end
51
+
52
+ # Nosso número para exibir no boleto.
53
+ # @return [String]
54
+ # @example
55
+ # boleto.nosso_numero_boleto #=> "0020572-9"
56
+ def nosso_numero_boleto
57
+ nosso_numero = numero_documento.to_s.rjust(7, '0') unless numero_documento.nil?
58
+ "#{nosso_numero}-#{nosso_numero_dv} #{carteira}"
59
+ end
60
+
61
+ # Agência + codigo do cedente do cliente para exibir no boleto.
62
+ # @return [String]
63
+ # @example
64
+ # boleto.agencia_conta_boleto #=> "0059/1899775"
65
+ def agencia_conta_boleto
66
+ "#{agencia}/#{convenio_com_dv}"
67
+ end
68
+
69
+ # Dígito verificador da convênio
70
+ # @return [Integer] 1 caracteres numéricos.
71
+ def convenio_dv
72
+ convenio.modulo11
73
+ end
74
+
75
+ def convenio_com_dv
76
+ "#{convenio}-#{convenio_dv}"
77
+ end
78
+
79
+ # Segunda parte do código de barras.
80
+ # 9(04) | Agência <br/>
81
+ # 9(08) | Convenio com DV <br/>
82
+ # 9(08) | Nosso Numero Com DV<br/>
83
+ # 9(02) | Carteira<br/>
84
+ # 9(03) | Zeros<br/>
85
+ #
86
+ # @return [String] 25 caracteres numéricos.
87
+ def codigo_barras_segunda_parte
88
+ "#{agencia}#{convenio}#{convenio_dv}#{numero_documento}#{nosso_numero_dv}#{carteira}000"
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module Brcobranca
4
- VERSION = '6.5.0'
4
+ VERSION = '6.6.0'
5
5
  end
@@ -0,0 +1,118 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Boleto::BancoNordeste do #:nodoc:[all]
5
+ before do
6
+ @valid_attributes = {
7
+ valor: 25.0,
8
+ local_pagamento: 'QUALQUER BANCO ATÉ O VENCIMENTO',
9
+ cedente: 'Kivanio Barbosa',
10
+ documento_cedente: '12345678912',
11
+ sacado: 'Claudio Pozzebom',
12
+ sacado_documento: '12345678900',
13
+ agencia: '0016',
14
+ conta_corrente: '0001193',
15
+ convenio: '0001193',
16
+ numero_documento: '0000053'
17
+ }
18
+ end
19
+
20
+ it 'Criar nova instancia com atributos padrões' do
21
+ boleto_novo = described_class.new
22
+ expect(boleto_novo.banco).to eql('004')
23
+ expect(boleto_novo.especie_documento).to eql('DM')
24
+ expect(boleto_novo.especie).to eql('R$')
25
+ expect(boleto_novo.moeda).to eql('9')
26
+ expect(boleto_novo.data_documento).to eql(Date.today)
27
+ expect(boleto_novo.data_vencimento).to eql(Date.today)
28
+ expect(boleto_novo.aceite).to eql('S')
29
+ expect(boleto_novo.quantidade).to eql(1)
30
+ expect(boleto_novo.valor).to eql(0.0)
31
+ expect(boleto_novo.valor_documento).to eql(0.0)
32
+ expect(boleto_novo.local_pagamento).to eql('QUALQUER BANCO ATÉ O VENCIMENTO')
33
+ expect(boleto_novo.carteira).to eql('21')
34
+ end
35
+
36
+ it 'Criar nova instancia com atributos válidos' do
37
+ boleto_novo = described_class.new(@valid_attributes)
38
+ expect(boleto_novo.banco).to eql('004')
39
+ expect(boleto_novo.especie_documento).to eql('DM')
40
+ expect(boleto_novo.especie).to eql('R$')
41
+ expect(boleto_novo.moeda).to eql('9')
42
+ expect(boleto_novo.data_documento).to eql(Date.today)
43
+ expect(boleto_novo.data_vencimento).to eql(Date.today)
44
+ expect(boleto_novo.aceite).to eql('S')
45
+ expect(boleto_novo.quantidade).to eql(1)
46
+ expect(boleto_novo.valor).to eql(25.0)
47
+ expect(boleto_novo.valor_documento).to eql(25.0)
48
+ expect(boleto_novo.local_pagamento).to eql('QUALQUER BANCO ATÉ O VENCIMENTO')
49
+ expect(boleto_novo.cedente).to eql('Kivanio Barbosa')
50
+ expect(boleto_novo.documento_cedente).to eql('12345678912')
51
+ expect(boleto_novo.sacado).to eql('Claudio Pozzebom')
52
+ expect(boleto_novo.sacado_documento).to eql('12345678900')
53
+ expect(boleto_novo.agencia).to eql('0016')
54
+ expect(boleto_novo.convenio).to eql('0001193')
55
+ expect(boleto_novo.numero_documento).to eql('0000053')
56
+ expect(boleto_novo.carteira).to eql('21')
57
+ end
58
+
59
+ it 'Gerar boleto' do
60
+ @valid_attributes[:valor] = 1000.00
61
+ @valid_attributes[:data_vencimento] = Date.parse('2009/10/21')
62
+ boleto_novo = described_class.new(@valid_attributes)
63
+ expect(boleto_novo.codigo_barras_segunda_parte).to eql('0016000119320000053121000')
64
+ expect(boleto_novo.codigo_barras).to eql('00491439700001000000016000119320000053121000')
65
+ expect(boleto_novo.codigo_barras.linha_digitavel).to eql('00490.01605 00119.320000 00531.210003 1 43970000100000')
66
+
67
+ @valid_attributes[:valor] = 54.00
68
+ @valid_attributes[:numero_documento] = '0002720'
69
+ @valid_attributes[:data_vencimento] = Date.parse('2012/09/08')
70
+ boleto_novo = described_class.new(@valid_attributes)
71
+ expect(boleto_novo.codigo_barras_segunda_parte).to eql('0016000119320002720021000')
72
+ expect(boleto_novo.codigo_barras).to eql('00497545000000054000016000119320002720021000')
73
+ expect(boleto_novo.codigo_barras.linha_digitavel).to eql('00490.01605 00119.320000 27200.210006 7 54500000005400')
74
+ end
75
+
76
+ it 'Não permitir gerar boleto com atributos inválido' do
77
+ boleto_novo = described_class.new
78
+ expect { boleto_novo.codigo_barras }.to raise_error(Brcobranca::BoletoInvalido)
79
+ expect(boleto_novo.errors.count).to eql(3)
80
+ end
81
+
82
+ it 'Montar nosso_numero_dv' do
83
+ @valid_attributes[:numero_documento] = '0000010'
84
+ boleto_novo = described_class.new(@valid_attributes)
85
+ expect(boleto_novo.nosso_numero_dv).to eql(8)
86
+
87
+ @valid_attributes[:numero_documento] = '0020572'
88
+ boleto_novo = described_class.new(@valid_attributes)
89
+ expect(boleto_novo.nosso_numero_dv).to eql(9)
90
+
91
+ @valid_attributes[:numero_documento] = '1961005'
92
+ boleto_novo = described_class.new(@valid_attributes)
93
+ expect(boleto_novo.nosso_numero_dv).to eql(0)
94
+
95
+ @valid_attributes[:numero_documento] = '0000053'
96
+ boleto_novo = described_class.new(@valid_attributes)
97
+ expect(boleto_novo.nosso_numero_dv).to eql(1)
98
+
99
+ end
100
+
101
+ it 'Montar nosso_numero_boleto' do
102
+ @valid_attributes[:numero_documento] = '0000010'
103
+ boleto_novo = described_class.new(@valid_attributes)
104
+ expect(boleto_novo.nosso_numero_boleto).to eql('0000010-8 21')
105
+
106
+ @valid_attributes[:numero_documento] = '0020572'
107
+ boleto_novo = described_class.new(@valid_attributes)
108
+ expect(boleto_novo.nosso_numero_boleto).to eql('0020572-9 21')
109
+ end
110
+
111
+ describe 'Busca logotipo do banco' do
112
+ it_behaves_like 'busca_logotipo'
113
+ end
114
+
115
+ describe 'Formato do boleto' do
116
+ it_behaves_like 'formatos_validos'
117
+ end
118
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ shared_examples_for 'formatos_validos' do
3
+ it 'válido com método to_' do
4
+ @valid_attributes[:data_documento] = Date.parse('2009/08/13')
5
+ boleto_novo = described_class.new(@valid_attributes)
6
+
7
+ %w(pdf jpg tif png).each do |format|
8
+ file_body = boleto_novo.send("to_#{format}".to_sym)
9
+ tmp_file = Tempfile.new('foobar.' << format)
10
+ tmp_file.puts file_body
11
+ tmp_file.close
12
+ expect(File.exist?(tmp_file.path)).to be_truthy
13
+ expect(File.stat(tmp_file.path).zero?).to be_falsey
14
+ expect(File.delete(tmp_file.path)).to eql(1)
15
+ expect(File.exist?(tmp_file.path)).to be_falsey
16
+ end
17
+ end
18
+
19
+ it 'válido' do
20
+ @valid_attributes[:data_documento] = Date.parse('2009/08/13')
21
+ boleto_novo = described_class.new(@valid_attributes)
22
+
23
+ %w(pdf jpg tif png).each do |format|
24
+ file_body = boleto_novo.to(format)
25
+ tmp_file = Tempfile.new('foobar.' << format)
26
+ tmp_file.puts file_body
27
+ tmp_file.close
28
+ expect(File.exist?(tmp_file.path)).to be_truthy
29
+ expect(File.stat(tmp_file.path).zero?).to be_falsey
30
+ expect(File.delete(tmp_file.path)).to eql(1)
31
+ expect(File.exist?(tmp_file.path)).to be_falsey
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brcobranca
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.5.0
4
+ version: 6.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kivanio Barbosa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-11 00:00:00.000000000 Z
11
+ date: 2016-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rghost
@@ -105,6 +105,8 @@ files:
105
105
  - lib/brcobranca.rb
106
106
  - lib/brcobranca/arquivos/logos/bancobrasil.eps
107
107
  - lib/brcobranca/arquivos/logos/bancobrasil_carne.eps
108
+ - lib/brcobranca/arquivos/logos/banconordeste.eps
109
+ - lib/brcobranca/arquivos/logos/banconordeste_carne.eps
108
110
  - lib/brcobranca/arquivos/logos/banestes.eps
109
111
  - lib/brcobranca/arquivos/logos/banestes_carne.eps
110
112
  - lib/brcobranca/arquivos/logos/bradesco.eps
@@ -126,6 +128,7 @@ files:
126
128
  - lib/brcobranca/arquivos/templates/modelo_carne.eps
127
129
  - lib/brcobranca/arquivos/templates/modelo_generico.eps
128
130
  - lib/brcobranca/boleto/banco_brasil.rb
131
+ - lib/brcobranca/boleto/banco_nordeste.rb
129
132
  - lib/brcobranca/boleto/banestes.rb
130
133
  - lib/brcobranca/boleto/base.rb
131
134
  - lib/brcobranca/boleto/bradesco.rb
@@ -179,6 +182,7 @@ files:
179
182
  - spec/arquivos/CNAB400ITAU.RET
180
183
  - spec/brcobranca/base_spec.rb
181
184
  - spec/brcobranca/boleto/banco_brasil_spec.rb
185
+ - spec/brcobranca/boleto/banco_nordeste_spec.rb
182
186
  - spec/brcobranca/boleto/banestes_spec.rb
183
187
  - spec/brcobranca/boleto/bradesco_spec.rb
184
188
  - spec/brcobranca/boleto/caixa_spec.rb
@@ -234,6 +238,7 @@ files:
234
238
  - spec/support/shared_examples/busca_logotipo.rb
235
239
  - spec/support/shared_examples/cnab240.rb
236
240
  - spec/support/shared_examples/cnab400.rb
241
+ - spec/support/shared_examples/formatos_validos.rb
237
242
  homepage: http://rubygems.org/gems/brcobranca
238
243
  licenses: []
239
244
  metadata: {}
@@ -268,6 +273,7 @@ test_files:
268
273
  - spec/arquivos/CNAB400ITAU.RET
269
274
  - spec/brcobranca/base_spec.rb
270
275
  - spec/brcobranca/boleto/banco_brasil_spec.rb
276
+ - spec/brcobranca/boleto/banco_nordeste_spec.rb
271
277
  - spec/brcobranca/boleto/banestes_spec.rb
272
278
  - spec/brcobranca/boleto/bradesco_spec.rb
273
279
  - spec/brcobranca/boleto/caixa_spec.rb
@@ -323,3 +329,4 @@ test_files:
323
329
  - spec/support/shared_examples/busca_logotipo.rb
324
330
  - spec/support/shared_examples/cnab240.rb
325
331
  - spec/support/shared_examples/cnab400.rb
332
+ - spec/support/shared_examples/formatos_validos.rb