brcobranca 6.5.0 → 6.6.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.
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