xirr 0.2.9 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGE_LOG.md +4 -0
- data/lib/xirr/base.rb +11 -1
- data/lib/xirr/bisection.rb +2 -1
- data/lib/xirr/newton_method.rb +1 -2
- data/lib/xirr/version.rb +1 -1
- data/test/test_helper.rb +8 -1
- data/xirr.gemspec +1 -0
- metadata +32 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f37e42bdec94089e8afeeb382cdf5bc4fe4412a1
|
4
|
+
data.tar.gz: d28de620d78c6017aa983de9f041cb269684b42b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 427dbfd8aac84b0990549022018ca8c94833f24343a569ccfb21e2c66cdce2ac29b68fb779950fcdead40f1401ed5ea5b46a73a26fb9c497fd9ccb8f70f85e43
|
7
|
+
data.tar.gz: 69b26e4cd30fc888662e3a36038c6a4a0059dc5ddbe9e2aa77425586b37a148fd6c86d055b50e908a0c555ddde9adb1dee3a7d8ca22a420855c209e2e2e6b49b
|
data/CHANGE_LOG.md
CHANGED
data/lib/xirr/base.rb
CHANGED
@@ -3,6 +3,7 @@ module Xirr
|
|
3
3
|
# Base module for XIRR calculation Methods
|
4
4
|
module Base
|
5
5
|
extend ActiveSupport::Concern
|
6
|
+
require 'inline'
|
6
7
|
attr_reader :cf
|
7
8
|
|
8
9
|
# @param cf [Cashflow]
|
@@ -22,9 +23,18 @@ module Xirr
|
|
22
23
|
# @param rate [BigDecimal]
|
23
24
|
def xnpv(rate)
|
24
25
|
cf.inject(0) do |sum, t|
|
25
|
-
sum += t.amount / (1 + rate) ** t_in_days(t.date)
|
26
|
+
# sum += t.amount / (1 + rate) ** t_in_days(t.date)
|
27
|
+
sum += xnpv_c rate, t.amount, t_in_days(t.date)
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
31
|
+
inline do |builder|
|
32
|
+
builder.include "<math.h>"
|
33
|
+
builder.c "
|
34
|
+
double xnpv_c(double rate, double amount, double days) {
|
35
|
+
return amount / pow(1 + rate, days);
|
36
|
+
}"
|
37
|
+
end
|
38
|
+
|
29
39
|
end
|
30
40
|
end
|
data/lib/xirr/bisection.rb
CHANGED
@@ -8,7 +8,8 @@ module Xirr
|
|
8
8
|
# @return [BigDecimal]
|
9
9
|
# @param midpoint [Float]
|
10
10
|
# An initial guess rate will override the {Cashflow#irr_guess}
|
11
|
-
def xirr(midpoint = nil)
|
11
|
+
def xirr(midpoint = nil, c_method = :normal)
|
12
|
+
@c_method = c_method
|
12
13
|
|
13
14
|
# Initial values
|
14
15
|
left = [BigDecimal.new(-0.99, Xirr::PRECISION), cf.irr_guess].min
|
data/lib/xirr/newton_method.rb
CHANGED
data/lib/xirr/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -25,7 +25,14 @@ require_relative 'lib/xirr/newton_method.rb'
|
|
25
25
|
require_relative 'lib/xirr/cashflow.rb'
|
26
26
|
require_relative 'lib/xirr/transaction.rb'
|
27
27
|
include Xirr
|
28
|
-
|
28
|
+
@x = Cashflow.new
|
29
|
+
@x << Transaction.new(-10000.0, :date => Date.new(2014,4,15))
|
30
|
+
@x << Transaction.new(-10000.0, :date => Date.new(2014,04,16))
|
31
|
+
@x << Transaction.new(305.6, :date => Date.new(2014,05,16))
|
32
|
+
@x << Transaction.new(9800.07, :date => Date.new(2014,06,15))
|
33
|
+
@x << Transaction.new(5052.645, :date => Date.new(2014,06,15))
|
34
|
+
@x.xirr
|
35
|
+
|
29
36
|
cf << Transaction.new(1000000, date: Date.today - 180)
|
30
37
|
cf << Transaction.new(-2200000, date: Date.today - 60)
|
31
38
|
cf << Transaction.new(-800000, date: Date.today - 30)
|
data/xirr.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.required_ruby_version = '>=2.0'
|
25
25
|
spec.add_dependency 'activesupport', '~> 4.0'
|
26
|
+
spec.add_dependency 'RubyInline', '> 3'
|
26
27
|
spec.add_development_dependency 'minitest', '~> 5.4'
|
27
28
|
spec.add_development_dependency 'coveralls', '~> 0'
|
28
29
|
|
metadata
CHANGED
@@ -1,83 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xirr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tubedude
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activesupport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '4.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '4.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: RubyInline
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: minitest
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - ~>
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '5.4'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - ~>
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '5.4'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: coveralls
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - ~>
|
87
|
+
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - ~>
|
94
|
+
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
description: Calculates IRR of a Cashflow, simillar to Excels, XIRR formula, but using
|
@@ -88,9 +102,9 @@ executables: []
|
|
88
102
|
extensions: []
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
|
-
- .coveralls.yml
|
92
|
-
- .gitignore
|
93
|
-
- .travis.yml
|
105
|
+
- ".coveralls.yml"
|
106
|
+
- ".gitignore"
|
107
|
+
- ".travis.yml"
|
94
108
|
- CHANGE_LOG.md
|
95
109
|
- Gemfile
|
96
110
|
- LICENSE.txt
|
@@ -118,17 +132,17 @@ require_paths:
|
|
118
132
|
- lib
|
119
133
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
134
|
requirements:
|
121
|
-
- -
|
135
|
+
- - ">="
|
122
136
|
- !ruby/object:Gem::Version
|
123
137
|
version: '2.0'
|
124
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
139
|
requirements:
|
126
|
-
- -
|
140
|
+
- - ">="
|
127
141
|
- !ruby/object:Gem::Version
|
128
142
|
version: '0'
|
129
143
|
requirements: []
|
130
144
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.
|
145
|
+
rubygems_version: 2.2.2
|
132
146
|
signing_key:
|
133
147
|
specification_version: 4
|
134
148
|
summary: Calculates XIRR (Bisection and Newton method) of a cashflow
|