finance_rb 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d76ff15f6be262332aa729708a548d775f1caaaefaa3135c1d545660c34717ca
4
- data.tar.gz: 2d75e526b34bf1704686e3fb9bf5198b4b2d302f05e714207d8d06833ce96acf
3
+ metadata.gz: 52d806b7797622aa42c8a3d13197ddd3e66817dd41199751cc402d2e2ede4741
4
+ data.tar.gz: 3404f5b73ededdd707d82f976a61bed2b575a3e00b448c1b056a06c92169bd5a
5
5
  SHA512:
6
- metadata.gz: 9545eebb0c540d6e5f3d75cdbf8a5b7fabe0ed75860601dd278f2c0b13ca05285a9d0865d978837532c92c2fb70815c5f450a10d6ff7bd008330ae81ac4d915b
7
- data.tar.gz: bffcb93c73279bea34db04dbc39d0b6747e9d609e91a3a5f8006aaefe6ca08be2a4109b033b622a3382a4232a4e3ffba4d1a2eb168fbf6f1e6fe73fd971ab20c
6
+ metadata.gz: b2114092617e4120fc0b4e61d5e98cd0c227c882605e10fb0bfafdeb761f8c6dc8124a82ac729b548f4365f1a7fa17b061ad14a1e8d1befb6608ced7f4d68634
7
+ data.tar.gz: c42f87903359390b44fdb6472baacf24f6fc60934961cd16c007675e1adb231c0122bfca514c4ceffab7506f66b13b95736474c85ae23b4d4d103259f747f718
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## [0.2.1] - 2021-05-01
2
+
3
+ ### Added
4
+ * Implement `Finance::Loan#nper`
5
+
6
+ ## [0.2.0] - 2021-04-30
7
+
8
+ ### Added
9
+ * Implement `Finance::Loan#ppmt`
10
+
11
+ ### Changed
12
+ * By default `Finance::Loan#pmt` returns negative values.
13
+
1
14
  ## [0.1.2] - 2021-04-05
2
15
 
3
16
  ### Added
data/README.md CHANGED
@@ -15,7 +15,7 @@ which are as follows:
15
15
  | ipmt | ✅ | Computes interest payment for a loan|
16
16
  | pmt | ✅ | Computes the fixed periodic payment(principal + interest) made against a loan amount|
17
17
  | ppmt | ✅ | Computes principal payment for a loan|
18
- | nper | | Computes the number of periodic payments|
18
+ | nper || Computes the number of periodic payments|
19
19
  | pv | | Computes the present value of a payment|
20
20
  | rate | | Computes the rate of interest per period|
21
21
  | irr | ✅ | Computes the internal rate of return|
data/lib/finance/loan.rb CHANGED
@@ -132,6 +132,22 @@ module Finance
132
132
  pmt - ipmt
133
133
  end
134
134
 
135
+ # Nper computes the number of periodic payments.
136
+ #
137
+ # Required Loan arguments: payment, nominal_rate, period, amount, future_value*
138
+ #
139
+ # @return [Float] Number of periodic payments.
140
+ #
141
+ # @example
142
+ # require 'finance_rb'
143
+ # Finance::Loan.new(nominal_rate: 0.07, amount: 8000, payment: -150).nper
144
+ # #=> 64.0733487706618586
145
+ def nper
146
+ z = payment * (1.0 + monthly_rate * ptype) / monthly_rate
147
+
148
+ Math.log(-future_value + z / (amount + z)) / Math.log(1.0 + monthly_rate)
149
+ end
150
+
135
151
  # Fv computes future value at the end of some periods (duration).
136
152
  # Required Loan arguments: nominal_rate, duration, payment, amount*
137
153
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Finance
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
@@ -146,4 +146,24 @@ RSpec.describe Finance::Loan do
146
146
  end
147
147
  end
148
148
  end
149
+
150
+ describe '#nper' do
151
+ context 'with normal arguments' do
152
+ it 'calculates correct nper value' do
153
+ loan = Finance::Loan.new(
154
+ nominal_rate: 0.07, amount: 8000, payment: -150, future_value: 0
155
+ )
156
+ expect(loan.nper).to eq(64.0733487706618586)
157
+ end
158
+ end
159
+
160
+ context 'with incorrect arguments' do
161
+ it 'raises Math::DomainError' do
162
+ loan = Finance::Loan.new(
163
+ nominal_rate: 1e100, amount: 8000, payment: -150, future_value: 0
164
+ )
165
+ expect { loan.nper }.to raise_error(Math::DomainError)
166
+ end
167
+ end
168
+ end
149
169
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finance_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Dyachenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-30 00:00:00.000000000 Z
11
+ date: 2021-05-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A ruby port of numpy-financial functions. This library provides a Ruby
14
14
  interface for working with interest rates, mortgage amortization, and cashflows