Class: BoletoBancario::Calculos::Modulo11 Abstract

Inherits:
String
  • Object
show all
Defined in:
lib/boleto_bancario/calculos/modulo11.rb

Overview

This class is abstract.

Precisa implementar { #fatores, #calculate } nas subclasses.

Classe que possue a convenção de calculo do modulo 11. O que muda para cada classe é a forma de verificar o total do cálculo.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number) ⇒ String

Parameters:

  • number (String ou Integer)

    (Corresponde ao número a ser calculado pelo Módulo 11)



16
17
18
19
20
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 16

def initialize(number)
  @number  = number

  super(calculate.to_s)
end

Instance Attribute Details

#numberObject (readonly)

Número que será feito o cálculo do módulo 11.



11
12
13
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 11

def number
  @number
end

Instance Method Details

#calculateFixnum

Returns:

  • (Fixnum)

Raises:

  • (NotImplementedError)

    Precisa implementar na subclasse



33
34
35
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 33

def calculate
  raise NotImplementedError, "Not implemented #calculate in subclass."
end

#fatoresArray

número passado como argumento no initialize.

Returns:

  • (Array)

    Fatores que serão multiplicados por cada digito do

Raises:

  • (NotImplementedError)

    Precisa implementar na subclasse



26
27
28
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 26

def fatores
  raise NotImplementedError, "Not implemented #fatores in subclass."
end

#mod_divisionFixnum

Realiza o cálculo retornando o resto da divisão do cálculo dos fatores por 11.

Returns:

  • (Fixnum)

    Resto da divisão por 11.



41
42
43
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 41

def mod_division
  @mod_division ||= FatoresDeMultiplicacao.new(@number, fatores: fatores).sum % 11
end

#totalFixnum

Subtrai 11 do resto da divisão para se ter o total do módulo 11.

Returns:

  • (Fixnum)


49
50
51
# File 'lib/boleto_bancario/calculos/modulo11.rb', line 49

def total
  @total ||= 11 - mod_division
end