finance 0.0.1 → 0.1.0

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.
@@ -0,0 +1,10 @@
1
+ class Numeric
2
+ def months
3
+ self
4
+ end
5
+
6
+ # Return the number of months.
7
+ def years
8
+ self * 12
9
+ end
10
+ end
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'finance'
3
+ require 'flt/d'
4
+ require 'test/unit'
5
+
6
+ class TestBasicAmortization < Test::Unit::TestCase
7
+ def setup
8
+ @rate = Rate.new(0.0375, :apr, :duration => 30.years)
9
+ @amortization = Amortization.new(D(200000), @rate)
10
+ end
11
+
12
+ def test_balance
13
+ assert_equal D(0), @amortization.balance
14
+ end
15
+
16
+ def test_interest_sum
17
+ assert_equal D('133443.53'), @amortization.interest.sum
18
+ end
19
+
20
+ def test_payment
21
+ assert_equal D('-926.23'), @amortization.payment
22
+ end
23
+
24
+ def test_payments
25
+ payments = [ D('-926.23') ] * @rate.duration
26
+ # Account for rounding errors in last payment.
27
+ payments[-1] = D('-926.96')
28
+ assert_equal payments, @amortization.payments
29
+ end
30
+
31
+ def test_payments_sum
32
+ assert_equal D('-333443.53'), @amortization.payments.sum
33
+ end
34
+
35
+ def test_principal
36
+ assert_equal D(200000), @amortization.principal
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ require 'cashflows'
2
+ require 'test/unit'
3
+
4
+ class TestIRR < Test::Unit::TestCase
5
+ def test_simple
6
+ assert_in_delta(0.143, [-4000,1200,1410,1875,1050].irr, 0.001)
7
+ end
8
+ end
9
+
10
+ class TestNPV < Test::Unit::TestCase
11
+ def test_simple
12
+ assert_in_delta(49.211, [-100.0, 60, 60, 60].npv(0.1), 0.001)
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'finance'
3
+ require 'flt/d'
4
+ require 'test/unit'
5
+
6
+ class TestRates < Test::Unit::TestCase
7
+ def test_apr
8
+ rate = Rate.new(0.0375, :apr)
9
+ assert_equal D('0.03687'), rate.nominal.round(5)
10
+ end
11
+
12
+ def test_duration
13
+ rate = Rate.new(0.0375, :effective, :duration => 30.years)
14
+ assert_equal 360, rate.duration
15
+ end
16
+
17
+ def test_effective
18
+ rate = Rate.new(0.03687, :nominal)
19
+ assert_equal D('0.0375'), rate.effective.round(4)
20
+ end
21
+
22
+ def test_monthly
23
+ rate = Rate.new(0.0375, :effective)
24
+ assert_equal D('0.003125'), rate.monthly
25
+ end
26
+
27
+ def test_nominal
28
+ rate = Rate.new(0.0375, :effective)
29
+ assert_equal D('0.03687'), rate.nominal.round(5)
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ require 'finance'
2
+ require 'test/unit'
3
+
4
+ class TestTime < Test::Unit::TestCase
5
+ def test_months
6
+ assert_equal 360, 360.months
7
+ end
8
+
9
+ def test_years
10
+ assert_equal 360, 30.years
11
+ end
12
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finance
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bill Kranec
@@ -15,10 +15,25 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-15 00:00:00 Z
19
- dependencies: []
20
-
21
- description: The goal of the finance library is to provide Ruby implementations of common financial formulas, with a function syntax similar to most modern spreadsheet programs.
18
+ date: 2011-06-21 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: flt
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 27
29
+ segments:
30
+ - 1
31
+ - 3
32
+ - 0
33
+ version: 1.3.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: The finance library provides a Ruby interface for working with interest rates, mortgage amortization, and cashflows (NPV, IRR, etc.).
22
37
  email: wkranec@gmail.com
23
38
  executables: []
24
39
 
@@ -27,9 +42,19 @@ extensions: []
27
42
  extra_rdoc_files:
28
43
  - README
29
44
  files:
30
- - lib/finance.rb
31
45
  - README
32
- homepage: http://finance.rubyforge.org
46
+ - COPYING
47
+ - COPYING.LESSER
48
+ - lib/amortization.rb
49
+ - lib/cashflows.rb
50
+ - lib/finance.rb
51
+ - lib/rates.rb
52
+ - lib/timespan.rb
53
+ - test/test_amortization.rb
54
+ - test/test_cashflows.rb
55
+ - test/test_rates.rb
56
+ - test/test_timespan.rb
57
+ homepage: https://rubygems.org/gems/finance
33
58
  licenses: []
34
59
 
35
60
  post_install_message:
@@ -57,10 +82,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
82
  version: "0"
58
83
  requirements: []
59
84
 
60
- rubyforge_project: finance
85
+ rubyforge_project:
61
86
  rubygems_version: 1.8.5
62
87
  signing_key:
63
88
  specification_version: 3
64
- summary: Ruby implementations of common financial formulas.
89
+ summary: a library for financial calculations in Ruby.
65
90
  test_files: []
66
91