excel_functions 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/excel_functions/financial.rb +18 -12
- data/lib/excel_functions/lookup.rb +13 -6
- data/lib/excel_functions/version.rb +1 -1
- data/lib/excel_functions.rb +3 -0
- metadata +13 -4
- checksums.yaml +0 -15
data/README.md
CHANGED
@@ -25,7 +25,7 @@ This gem can be used in 2 ways.
|
|
25
25
|
2. Use the `Excel.<function>` style anywhere.
|
26
26
|
|
27
27
|
#TODO
|
28
|
-
- more docs about the functions themselves, for now, you can take a look at the code
|
28
|
+
- more docs about the functions themselves, for now, you can take a look at the code, or the [Yard Documentation](http://rubydoc.info/gems/excel_functions/)
|
29
29
|
|
30
30
|
## Contributing
|
31
31
|
|
@@ -1,24 +1,30 @@
|
|
1
1
|
#file containing the financial functions
|
2
2
|
module ExcelFunctions
|
3
|
-
#
|
3
|
+
#Calculates the net present value of an investment by using a discount rate and a series of future payments (negative values) and income (positive values).
|
4
|
+
# @param rate is the rate of discount over the length of one period.
|
5
|
+
# @param *values are 1 to 29 arguments representing the payments and income.
|
6
|
+
# @return net present value of an investment
|
7
|
+
# @see http://office.microsoft.com/en-sg/excel-help/npv-HP005209199.aspx Specification
|
4
8
|
def npv(rate,*values)
|
5
9
|
#If n is the number of cash flows in the list of values, the formula for NPV is:
|
6
10
|
# sum upto n (values[i]/(1+rate)^i)
|
7
11
|
values.each_with_index.inject(0){|sum,(val, index)| sum + val/((1.0+rate)**(index+1))}
|
8
12
|
end
|
9
13
|
|
10
|
-
#http://office.microsoft.com/en-sg/excel-help/pmt-HP005209215.aspx
|
11
14
|
#Calculates the payment for a loan based on constant payments and a constant interest rate.
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
15
|
+
# @param rate is the interest rate for the loan.
|
16
|
+
# @param nper is the total number of payments for the loan.
|
17
|
+
# @param pv is the present value, or the total amount that a series of future payments is worth now; also known as the principal.
|
18
|
+
# @param fv is the future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (zero), that is, the future value of a loan is 0.
|
19
|
+
# @param type is the number 0 (zero) or 1 and indicates when payments are due.
|
20
|
+
#
|
21
|
+
# Set type equal to
|
22
|
+
# 0 or omitted If payments are due At the end of the period or
|
23
|
+
# 1 If payments are due At the beginning of the period
|
24
|
+
# @return [Float] payment for a loan based on the inputs
|
25
|
+
# @see http://office.microsoft.com/en-sg/excel-help/pmt-HP005209215.aspx Specification
|
26
|
+
# @see http://answers.yahoo.com/question/index?qid=20080822070859AAY94ZT formula using first 3 params
|
27
|
+
# @see http://www.getobjects.com/Components/Finance/TVM/formulas.html Full Formula
|
22
28
|
def pmt(rate,nper,pv,fv =0,type = 0)
|
23
29
|
#- pv/((1 - (1 / (1 + rate)**nper )) / rate)
|
24
30
|
pv = -pv
|
@@ -1,23 +1,30 @@
|
|
1
1
|
#file containing the lookup based functions
|
2
2
|
module ExcelFunctions
|
3
|
-
#
|
3
|
+
#The LOOKUP function searches for the value in the lookup_range and returns the value from the same position in the result_range.
|
4
|
+
#If this parameter is omitted, the LOOKUP function will return the first column of data.
|
5
|
+
#In Syntax #2, the LOOKUP function searches for the value in the first row or column of the array and returns the corresponding value in the last row or column of the array.
|
6
|
+
#@param value the value to be searched for
|
7
|
+
#@param [Array] lookup_array the array in which the value is looked for, and possibly the result is fetched from
|
8
|
+
#@param [Array] output_array If given, the result is fetched from this array
|
9
|
+
# @return Returns the value in the output_array or the last column of the lookup_array from the same position in the result_range
|
10
|
+
# @return If the LOOKUP function can not find an exact match, it chooses the largest value in the lookup_range that is less than or equal to the value.
|
11
|
+
# @return If the value is smaller than all of the values in the lookup_range, then the LOOKUP function will return #N/A(nil in our case).
|
12
|
+
# @return If the values in the LOOKUP_range are not sorted in ascending order, the LOOKUP function will return the incorrect value (raise error in our case).
|
13
|
+
# @see http://www.techonthenet.com/excel/formulas/lookup.php Specification
|
4
14
|
def lookup(value, lookup_array, output_array = nil)
|
5
|
-
#The LOOKUP function searches for the value in the lookup_range and returns the value from the same position in the result_range. If this parameter is omitted, the LOOKUP function will return the first column of data.
|
6
|
-
#In Syntax #2, the LOOKUP function searches for the value in the first row or column of the array and returns the corresponding value in the last row or column of the array.
|
7
15
|
#combining both syntaxes here by taking 1st col of lookup_array to lookup
|
8
16
|
# and the output_array or the last column of the lookup_array to output
|
9
17
|
output_array = output_array || lookup_array.map{|arr| Array(arr)[-1]}
|
10
18
|
|
11
19
|
lookup_array = lookup_array.map{|arr| Array(arr)[0]}
|
12
20
|
|
13
|
-
|
21
|
+
|
14
22
|
raise "lookup_array must be sorted" unless lookup_array.sort == lookup_array #better way to check sorted?
|
15
23
|
|
16
24
|
index = lookup_array.find_index(value)
|
17
25
|
return output_array[index] if index
|
18
26
|
|
19
|
-
|
20
|
-
# If the value is smaller than all of the values in the lookup_range, then the LOOKUP function will return #N/A.
|
27
|
+
|
21
28
|
first_greater_index = lookup_array.find_index{|look| look > value} || lookup_array.count
|
22
29
|
less_than_index = first_greater_index - 1
|
23
30
|
less_than_index >=0 ? output_array[less_than_index] : nil
|
data/lib/excel_functions.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require "excel_functions/version"
|
2
2
|
require "excel_functions/financial"
|
3
3
|
require "excel_functions/lookup"
|
4
|
+
|
5
|
+
#module to be included in a client class
|
4
6
|
module ExcelFunctions
|
5
7
|
|
6
8
|
end
|
7
9
|
|
10
|
+
#class which provides all the methods as class methods
|
8
11
|
class Excel
|
9
12
|
extend ExcelFunctions
|
10
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: excel_functions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Karthik T
|
@@ -13,6 +14,7 @@ dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -74,26 +81,28 @@ files:
|
|
74
81
|
homepage: https://github.com/ktaragorn/excel_functions
|
75
82
|
licenses:
|
76
83
|
- MIT
|
77
|
-
metadata: {}
|
78
84
|
post_install_message:
|
79
85
|
rdoc_options: []
|
80
86
|
require_paths:
|
81
87
|
- lib
|
82
88
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
83
90
|
requirements:
|
84
91
|
- - ! '>='
|
85
92
|
- !ruby/object:Gem::Version
|
86
93
|
version: '0'
|
87
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
88
96
|
requirements:
|
89
97
|
- - ! '>='
|
90
98
|
- !ruby/object:Gem::Version
|
91
99
|
version: '0'
|
92
100
|
requirements: []
|
93
101
|
rubyforge_project:
|
94
|
-
rubygems_version:
|
102
|
+
rubygems_version: 1.8.23
|
95
103
|
signing_key:
|
96
|
-
specification_version:
|
104
|
+
specification_version: 3
|
97
105
|
summary: This gem can be used if you need to reverse engineer any excel spreadsheets.
|
98
106
|
test_files:
|
99
107
|
- spec/excelfunctions_spec.rb
|
108
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
OTg4NmNlZDk3MmNhODRhYzZkM2IyOTc1NjAxZTU3MjQ2MzNhYTIzYQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTNjYjhkNmJiMThlYWIwYTU3N2U3ZTBiYTBlZGNhZDI2MWI2NmVlOA==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzUzNTE4ZDNjZGZmN2U5ZjAxZjFlN2I2ZThkZWIyYzFlZjhhOGU5YTdjOTIw
|
10
|
-
NTg4YTkxYjZhYzQ3OGEwZDAxMGQzN2MxZDk4NTE2NTFmYjFjNTRhNDUxNTU5
|
11
|
-
NTlkZDhhZGEzNmY1ZTYwMzM3ZDMzNzA2ODU3NjllNDYzNTQzYTk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTQxZGI5YzZlOGE2ZjMxYzRjYWFmODUxMDlmZWI0NTBmMzNlOGYyN2ZjMmZi
|
14
|
-
MGIzZGY1NTM0YmM4NTQxMmUzNTZhMWQyZTFiYjdlMzhhYjg2Y2Y2MGE0NWIw
|
15
|
-
NjJjNTFkOWVlZTZjMzk0M2M0MzI5YjAxYTYzOWU2YzkwNzUyYjI=
|