class PaymentSchedule::Schedule

Constants

Error

Attributes

instruction[RW]
component_memory[RW]
helper_memory[RW]
input[RW]

Public Class Methods

new(**input) click to toggle source
# File lib/payment_schedule/schedule.rb, line 15
def initialize(**input)
  self.input            = input
  self.helper_memory    = {}
  self.component_memory = {}

  validate_input
end

Public Instance Methods

[](name, row_no = nil) click to toggle source
# File lib/payment_schedule/schedule.rb, line 23
def [](name, row_no = nil)
  if row_no
    component_get(name, row_no)
  else
    input[name] || helper_get(name)
  end
end
component_names() click to toggle source
# File lib/payment_schedule/schedule.rb, line 49
def component_names
  components.keys
end
row_numbers() click to toggle source
# File lib/payment_schedule/schedule.rb, line 35
    def row_numbers
      first_row_number = self[:first_row_number]
      last_row_number  = self[:last_row_number]

      unless first_row_number && last_row_number
        raise Error, <<~EOS.tr("\n", ' ')
          Please define helpers :first_row_number and
          :last_row_number for using #{self.class}#row_numbers.
        EOS
      end

      (first_row_number..last_row_number)
    end
sum(component_name) click to toggle source
# File lib/payment_schedule/schedule.rb, line 31
def sum(component_name)
  row_numbers.sum { |n| self[component_name, n] }
end
to_s() click to toggle source
# File lib/payment_schedule/schedule.rb, line 53
def to_s
  Output.to_s(self)
end

Private Instance Methods

component_get(name, row_no) click to toggle source
# File lib/payment_schedule/schedule.rb, line 71
def component_get(name, row_no)
  return unless components.key?(name)

  memory_key     = [name, row_no].join(':')
  memoized_value = component_memory[memory_key]
  return memoized_value if memoized_value

  component_memory[memory_key] = instance_exec(
    row_no,
    &components[name][row_no]
  )
end
components() click to toggle source
# File lib/payment_schedule/schedule.rb, line 63
def components
  instruction.components
end
helper_get(name) click to toggle source
# File lib/payment_schedule/schedule.rb, line 84
def helper_get(name)
  return unless helpers.key?(name)

  memoized_value = helper_memory[name]
  return memoized_value if memoized_value

  helper_memory[name] = instance_exec(&helpers[name])
end
helpers() click to toggle source
# File lib/payment_schedule/schedule.rb, line 67
def helpers
  instruction.helpers
end
instruction() click to toggle source
# File lib/payment_schedule/schedule.rb, line 59
def instruction
  self.class.instruction
end
validate_input() click to toggle source
# File lib/payment_schedule/schedule.rb, line 93
def validate_input
  missing_keys = instruction.required_input.reject do |required_key|
    input.key?(required_key)
  end

  return if missing_keys.empty?

  raise Error, "Missing required input key(s) :#{missing_keys.join(', :')}"
end