Class: FinancialCalculator::Xnpv
- Inherits:
-
Object
- Object
- FinancialCalculator::Xnpv
- Defined in:
- lib/financial_calculator/xnpv.rb
Overview
Calculate the net present value of a series of unequally spaced, (potentially) unequal cashflows
Instance Attribute Summary collapse
-
#cashflows ⇒ Array<Numeric>
readonly
An array of cashflow amounts.
-
#dates ⇒ Array<Date>
readonly
An array of dates on which the cashflows occur.
-
#rate ⇒ Numeric
readonly
The rates used for calculating the present value.
-
#result ⇒ DecNum
readonly
Result of the XNPV calculation.
Class Method Summary collapse
-
.with_transactions(rate, transactions) ⇒ FinancialCalculator::Xnpv
Allows for creating an XNPV calculation with an array of any objects that respond to #amount and #date.
Instance Method Summary collapse
-
#initialize(rate, cashflows, dates) ⇒ FinancialCalculator::Xnpv
constructor
Create a new XNPV calculation.
- #inspect ⇒ Object
Constructor Details
#initialize(rate, cashflows, dates) ⇒ FinancialCalculator::Xnpv
Create a new XNPV calculation
45 46 47 48 49 50 51 52 53 |
# File 'lib/financial_calculator/xnpv.rb', line 45 def initialize(rate, cashflows, dates) validate_cashflows_dates_size(cashflows, dates) validate_dates(dates) @rate = Flt::DecNum(rate.to_s) @cashflows = cashflows.map { |cashflow| Flt::DecNum(cashflow.to_s) }.freeze @dates = dates.freeze @result = solve(rate, cashflows, dates) end |
Instance Attribute Details
#cashflows ⇒ Array<Numeric> (readonly)
Returns An array of cashflow amounts.
10 11 12 |
# File 'lib/financial_calculator/xnpv.rb', line 10 def cashflows @cashflows end |
#dates ⇒ Array<Date> (readonly)
Returns An array of dates on which the cashflows occur.
14 15 16 |
# File 'lib/financial_calculator/xnpv.rb', line 14 def dates @dates end |
#rate ⇒ Numeric (readonly)
Returns The rates used for calculating the present value.
6 7 8 |
# File 'lib/financial_calculator/xnpv.rb', line 6 def rate @rate end |
#result ⇒ DecNum (readonly)
Returns Result of the XNPV calculation.
18 19 20 |
# File 'lib/financial_calculator/xnpv.rb', line 18 def result @result end |
Class Method Details
.with_transactions(rate, transactions) ⇒ FinancialCalculator::Xnpv
Allows for creating an XNPV calculation with an array of any objects that respond to #amount and #date
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/financial_calculator/xnpv.rb', line 25 def self.with_transactions(rate, transactions) raise ArgumentError.new("Argument \"rate\" must be a Numeric. Got #{rate.class} instead") unless rate.is_a? Numeric unless transactions.all? { |t| t.is_a? Transaction } raise ArgumentError.new("Argument \"transactions\" must be an array of Transaction") end cashflows = transactions.map(&:amount) dates = transactions.map(&:date) self.new(rate, cashflows, dates) end |
Instance Method Details
#inspect ⇒ Object
56 57 58 |
# File 'lib/financial_calculator/xnpv.rb', line 56 def inspect "XNPV(#{result})" end |