kivanio / brcobranca

Emissão de bloquetos de cobrança para bancos brasileiros
https://brcobranca.herokuapp.com/
MIT License
373 stars 240 forks source link

Refatorar cálculo de módulos #86

Closed efmiglioranza closed 9 years ago

efmiglioranza commented 9 years ago

Eu precisei arrumar uns detalhes no cálculo do dígito verificador para o Bradesco no meu repo local e vi que existem vários métodos fazendo isso sem muita flexibilidade. Minha sugestão é fazer apenas um método para o modulo 10 e 11 e passar o resto por parâmetro e adicionar um bloco para alterar o cálculo final também:

 def modulo11(options={}, &block )
   options[:mapeamento] ||= {}
   options[:multiplicador] ||= [9, 8, 7, 6, 5, 4, 3, 2]

   total = multiplicador(options[:multiplicador])
   valor = block_given? ? yield(total) : (11 - (total % 11))

   options[:mapeamento][valor] || valor                                                                                                        
 end

Ex Bradesco:

"12345".modulo11(multiplicador: [2,3,4,5,6,7], mapeamento: { 10 => "P"})

Ex com block:

"12345".modulo11(mapeamento: { 10 => "X"}) { |total| (total % 11) + 1 }

Assim podemos elimitar os métodos:

modulo11_2to9
modulo11_2to9_caixa
modulo11_9to2
modulo11_9to2_10_como_x
modulo11_9to2_10_como_zero

O que acham? Abraço!

kivanio commented 9 years ago

Taca o pau! +1 :D

Kivanio Barbosa boletosimples Profissionalize sua cobrança com boleto bancário! BoletoSimples.com.br http://boletosimples.com.br/ | CobreGratis.com.br http://cobregratis.com.br/

2015-05-19 14:51 GMT-04:00 efmiglioranza notifications@github.com:

Eu precisei arrumar uns detalhes no cálculo do dígito verificador para o Bradesco no meu repo local e vi que existem vários métodos fazendo isso sem muita flexibilidade. Minha sugestão é fazer apenas um método para o modulo 10 e 11 e passar o resto por parâmetro e adicionar um bloco para alterar o cálculo final também:

def modulo11(options={}, &block ) options[:mapeamento] ||= {} options[:multiplicador] ||= [9, 8, 7, 6, 5, 4, 3, 2]

total = multiplicador(options[:multiplicador]) valor = block_given? ? yield(total) : (11 - (total % 11))

options[:mapeamento][valor] || valor end

Ex Bradesco:

"12345".modulo11(multiplicador: [2,3,4,5,6,7], mapeamento: { 10 => "P"})

Ex com block:

"12345".modulo11(mapeamento: { 10 => "X"}) { |total| (total % 11) + 1 }

Assim podemos elimitar os métodos:

modulo11_2to9 modulo11_2to9_caixa modulo11_9to2 modulo11_9to2_10_como_x modulo11_9to2_10_como_zero

O que acham? Abraço!

— Reply to this email directly or view it on GitHub https://github.com/kivanio/brcobranca/issues/86.