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