Class: BillingLogic::ProrationCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/billing_logic/proration_calculator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ ProrationCalculator

Returns a new instance of ProrationCalculator.



4
5
6
7
8
# File 'lib/billing_logic/proration_calculator.rb', line 4

def initialize(opts = {})
  self.billing_cycle = opts[:billing_cycle]
  self.price = opts[:price]
  self.date  = opts[:date]
end

Instance Attribute Details

#billing_cycleObject

Returns the value of attribute billing_cycle.



3
4
5
# File 'lib/billing_logic/proration_calculator.rb', line 3

def billing_cycle
  @billing_cycle
end

#dateObject

Returns the value of attribute date.



3
4
5
# File 'lib/billing_logic/proration_calculator.rb', line 3

def date
  @date
end

#priceObject

Returns the value of attribute price.



3
4
5
# File 'lib/billing_logic/proration_calculator.rb', line 3

def price
  @price
end

Instance Method Details

#average_daily_price_for_billing_cycle(date = self.date) ⇒ Object



20
21
22
# File 'lib/billing_logic/proration_calculator.rb', line 20

def average_daily_price_for_billing_cycle(date = self.date)
  (self.price / (self.billing_cycle.days_in_billing_cycle_including(date)))
end

#distance_from_date_in_days(date = self.date) ⇒ Object



16
17
18
# File 'lib/billing_logic/proration_calculator.rb', line 16

def distance_from_date_in_days(date = self.date)
  (date - self.billing_cycle.anniversary).abs
end

#prorate_from(date = self.date) ⇒ Object Also known as: prorate



10
11
12
13
# File 'lib/billing_logic/proration_calculator.rb', line 10

def prorate_from(date = self.date)
  return price if date == self.billing_cycle.anniversary
  average_daily_price_for_billing_cycle(date) * distance_from_date_in_days(date)
end