Class: BoletoBancario::Calculos::FatoresDeMultiplicacao

Inherits:
Array
  • Object
show all
Defined in:
lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb

Overview

Classe responsável por multiplicar cada dígito pelos fatores de multiplicação passado como argumento.

Imagine que temos o número ‘2468’ e os fatores de multiplicação [2, 1].

Será calculado da seguinte maneira:

2   4   6   8
*   *   *   * ===> Multiplicação
1   2   1   2

#=> [2,  8,  6,  16]

Você pode passar outros fatores de multiplicação se você precisar. Por exemplo, dado o número ‘1234567890’ e os fatores de multiplicação: [2, 3, 4, 5, 6, 7, 8, 9]. Será calculado da seguinte maneira:

1   2    3   4   5   6   7   8   9   0
*   *    *   *   *   *   *   *   *   *
3   2    9   8   7   6   5   4   3   2

#=> [3,  4,  27, 32, 35, 36, 35, 32, 27,  0]

Examples:

Calculo


BoletoBancario::Calculos::FatoresDeMultiplicacao.new(123, fatores: [2, 1])
# => [1, 2, 6]

BoletoBancario::Calculos::FatoresDeMultiplicacao.new(123, fatores: [2, 3, 4, 5, 6, 7, 8, 9])
# => [4, 6, 6]

BoletoBancario::Calculos::FatoresDeMultiplicacao.new(809070608090, fatores: [9, 8, 7, 6, 5, 4, 3, 2])
# => [48, 0, 72, 0, 14, 0, 24, 0, 48, 0, 72, 0]

Instance Method Summary collapse

Constructor Details

#initialize(number, options) ⇒ Array

Examples:


FatoresDeMultiplicacao.new(12, fatores: [2, 1])
# => [1, 4]

FatoresDeMultiplicacao.new(1864, fatores: [2, 3, 4, 5, 6, 7, 8, 9])
# => [5, 32, 18, 8]

Parameters:

  • number (String || Integer)
  • options (Hash)

Options Hash (options):

  • :fatores (Array)


53
54
55
56
57
# File 'lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb', line 53

def initialize(number, options)
  @number  = number.to_s.reverse.split('')
  @factors = options.fetch(:fatores).cycle.take(@number.size)
  super(calculate)
end

Instance Method Details

#calculateArray

Para cada número realiza a multiplicação para cada dígito.

Returns:

  • (Array)


62
63
64
# File 'lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb', line 62

def calculate
  @number.collect.each_with_index { |n, index| n.to_i * @factors[index] }.reverse
end