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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f0f71683833379725ed955370cc85fd6c40c7f0
4
- data.tar.gz: 9052d4a3b8bc5cc70c031c4c9f09f5b82ec808db
3
+ metadata.gz: f37e42bdec94089e8afeeb382cdf5bc4fe4412a1
4
+ data.tar.gz: d28de620d78c6017aa983de9f041cb269684b42b
5
5
  SHA512:
6
- metadata.gz: 77d29b67ba5b337ee25d8170b4e8942568543b5d026dfbabf0bc250297f2ff82e0aef093ce8b1b00b1d16f774cfa672c0cd4e04e71007807e9a86632259667ff
7
- data.tar.gz: cc54b04a7d005c2045594e99f1bd75550250c4d1c10bb6ed40a279f08ec3c83c99fd9f189ba500d216ff79ad66ae0a495de80b7e016ecef345aefe8e668b484c
6
+ metadata.gz: 427dbfd8aac84b0990549022018ca8c94833f24343a569ccfb21e2c66cdce2ac29b68fb779950fcdead40f1401ed5ea5b46a73a26fb9c497fd9ccb8f70f85e43
7
+ data.tar.gz: 69b26e4cd30fc888662e3a36038c6a4a0059dc5ddbe9e2aa77425586b37a148fd6c86d055b50e908a0c555ddde9adb1dee3a7d8ca22a420855c209e2e2e6b49b
data/CHANGE_LOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## Version 0.3.0
2
+
3
+ * Moved XNPV function to C.
4
+
1
5
  ## Version 0.2.9
2
6
 
3
7
  * Cashflow validation excludes zeros
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
@@ -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
@@ -49,6 +49,5 @@ module Xirr
49
49
  nlsolve(func, rate)
50
50
  rate[0].round Xirr::PRECISION
51
51
  end
52
-
53
52
  end
54
- end
53
+ end
data/lib/xirr/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Xirr
2
2
  # Version of the Gem
3
- VERSION = "0.2.9"
3
+ VERSION = "0.3.0"
4
4
  end
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
- cf = Cashflow.new
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.2.9
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-08-21 00:00:00.000000000 Z
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.0.14
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