class Splittable::Division

Attributes

precision[R]
quantity[R]
value[R]

Public Class Methods

new(value:, quantity:, precision: 2) click to toggle source
# File lib/splittable/division.rb, line 4
def initialize(value:, quantity:, precision: 2)
  @precision = precision
  @value = BigDecimal(value, 15).truncate(precision)
  @quantity = BigDecimal(quantity.to_i, 15)

  check_quantity_as_positive_value!
end

Public Instance Methods

call() click to toggle source
# File lib/splittable/division.rb, line 12
def call
  partial_value = (value / quantity).truncate(precision)
  installments = [partial_value] * quantity
  installments[0] += value - installments.sum.to_d

  installments
end

Private Instance Methods

check_quantity_as_positive_value!() click to toggle source
# File lib/splittable/division.rb, line 24
def check_quantity_as_positive_value!
  return if quantity.positive?

  raise ArgumentError, 'quantity should be positive'
end