class Formulas::Salary
Calculate basic salary in frequency salary = Formulas::Salary.new
(pay: 52_000, Salary::ANNUAL)
salary.pay(:monthly)
Provide a way to calculate salary in different frequencies It provide summaries of salary breakdown after deductions such as withholding tax, super, health care and methods to get the take home pay
Attributes
frequency[R]
Public Class Methods
new(pay:, frequency:)
click to toggle source
# File lib/formulas/salary.rb, line 18 def initialize(pay:, frequency:) @pay = pay @frequency = frequency.to_sym invalid_frequency unless FREQUENCIES.include?(@frequency) raise ArgumentError, 'Gross pay must be numeric' unless Numeric === pay end
Public Instance Methods
pay(request_frequency: @frequency)
click to toggle source
# File lib/formulas/salary.rb, line 26 def pay(request_frequency: @frequency) invalid_frequency unless FREQUENCIES.include?(frequency) return @pay if @frequency == request_frequency convert_pay_to(request_frequency).round(2) end
Private Instance Methods
convert_pay_to(request_frequency)
click to toggle source
# File lib/formulas/salary.rb, line 39 def convert_pay_to(request_frequency) send("convert_#{@frequency}_to_#{request_frequency}", @pay) end
invalid_frequency()
click to toggle source
# File lib/formulas/salary.rb, line 35 def invalid_frequency raise ArgumentError, "Invalid frequency, frequency are: #{FREQUENCIES.join(', ')}" end