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