rupee 0.2.6.1 → 0.2.7
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.
- data/lib/rupee.rb +2 -0
- data/lib/rupee/business_day.rb +2 -12
- data/lib/rupee/business_day/following.rb +1 -1
- data/lib/rupee/business_day/modified_following.rb +2 -2
- data/lib/rupee/business_day/modified_previous.rb +2 -2
- data/lib/rupee/business_day/previous.rb +1 -1
- data/lib/rupee/day_count.rb +6 -22
- data/lib/rupee/day_count/act_360.rb +1 -1
- data/lib/rupee/day_count/act_365.rb +1 -1
- data/lib/rupee/fixed_income.rb +66 -1
- data/lib/rupee/frequency.rb +49 -0
- data/lib/rupee/version.rb +1 -1
- data/spec/ruby/business_day_spec.rb +34 -33
- data/spec/ruby/day_count_spec.rb +21 -21
- data/spec/ruby/quote_spec.rb +2 -2
- metadata +8 -7
data/lib/rupee.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "rupee/rupee" # keep this as the first require
|
2
2
|
require "rupee/version"
|
3
|
+
require "date"
|
3
4
|
|
4
5
|
# Rupee aims to provide user-friendly tools for use in financial applications.
|
5
6
|
# The gem is in its development stages, but it currently offers:
|
@@ -25,6 +26,7 @@ module Rupee
|
|
25
26
|
autoload :Call, "rupee/option"
|
26
27
|
autoload :Currency, "rupee/currency"
|
27
28
|
autoload :DayCount, "rupee/day_count"
|
29
|
+
autoload :Frequency, "rupee/frequency"
|
28
30
|
autoload :Option, "rupee/option"
|
29
31
|
autoload :Put, "rupee/option"
|
30
32
|
autoload :Quote, "rupee/quote"
|
data/lib/rupee/business_day.rb
CHANGED
@@ -14,8 +14,6 @@ module Rupee
|
|
14
14
|
attr :description
|
15
15
|
# The formula for calculated the next business day
|
16
16
|
attr :block
|
17
|
-
# The calendar used for calculating holidays and days off
|
18
|
-
attr :calendar
|
19
17
|
|
20
18
|
# Create a new business day object
|
21
19
|
#
|
@@ -24,22 +22,14 @@ module Rupee
|
|
24
22
|
# * <tt>:calendar</tt> - The calendar to use for calculating holidays and
|
25
23
|
# days off
|
26
24
|
def initialize(description, opts = {}, &block)
|
27
|
-
opts = { :calendar => :us }.merge opts
|
28
|
-
|
29
25
|
@description = description
|
30
26
|
@block = block
|
31
|
-
|
32
|
-
self.calendar=(opts[:calendar])
|
33
|
-
end
|
34
|
-
|
35
|
-
def calendar=(calendar) # :nodoc:
|
36
|
-
@calendar = Calendar.find(calendar)
|
37
27
|
end
|
38
28
|
|
39
29
|
# Calculates the next business day according to the calendar and the date
|
40
30
|
# given
|
41
|
-
def next_day(date)
|
42
|
-
block.call date,
|
31
|
+
def next_day(date, calendar)
|
32
|
+
block.call date, calendar
|
43
33
|
end
|
44
34
|
|
45
35
|
class << self
|
data/lib/rupee/day_count.rb
CHANGED
@@ -23,29 +23,23 @@ module Rupee
|
|
23
23
|
@block = block
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
# Calculates the period in years between the <tt>from</tt> and
|
27
|
+
# <tt>true</tt> dates
|
28
|
+
def period(from, to)
|
27
29
|
block.call from, to
|
28
30
|
end
|
29
31
|
|
30
32
|
class << self
|
31
33
|
include FindInstance
|
32
34
|
|
33
|
-
# The number of seconds in a day (a difference of <tt>1</tt> between two
|
34
|
-
# dates in Ruby indicates a difference of one second)
|
35
|
-
SECONDS_PER_DAY = 86_400.0
|
36
|
-
|
37
35
|
private
|
38
36
|
|
39
37
|
def days(from, to)
|
40
|
-
|
38
|
+
to - from
|
41
39
|
end
|
42
40
|
|
43
41
|
def days_in_year(date)
|
44
|
-
|
45
|
-
366.0
|
46
|
-
else
|
47
|
-
365.0
|
48
|
-
end
|
42
|
+
date.leap? ? 366.0 : 365.0
|
49
43
|
end
|
50
44
|
|
51
45
|
def end_of_month?(date)
|
@@ -60,19 +54,9 @@ module Rupee
|
|
60
54
|
when 2
|
61
55
|
# Save February, with twenty-eight days clear
|
62
56
|
# And twenty-nine each leap year ;)
|
63
|
-
date.day ==
|
57
|
+
date.day == date.leap? ? 29 : 28
|
64
58
|
end
|
65
59
|
end
|
66
|
-
|
67
|
-
# Determines whether a date falls during a leap year. Leap years include
|
68
|
-
# all years divisible by 4, with the exception of years divisible by 100
|
69
|
-
# but not divisible by 400 (got that?). That is, 2004 is a leap year, as is
|
70
|
-
# 1904. But while 2000 is a leap year (divisible by 400), 1900 is not
|
71
|
-
# (divisible by 100 but not 400).
|
72
|
-
def leap_year?(date) # :doc:
|
73
|
-
year = date.year
|
74
|
-
year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
|
75
|
-
end
|
76
60
|
end
|
77
61
|
end
|
78
62
|
end
|
data/lib/rupee/fixed_income.rb
CHANGED
@@ -3,6 +3,8 @@ module Rupee
|
|
3
3
|
# discount curves, payout curves, calendars, currencies, daycounts, roll day
|
4
4
|
# conventions, etc.
|
5
5
|
class FixedIncome < Security
|
6
|
+
# The dates on which accruals start and end
|
7
|
+
attr :accrual_dates
|
6
8
|
# The security's business day convention
|
7
9
|
attr :business_day
|
8
10
|
# The calendar used for determining holidays
|
@@ -11,6 +13,24 @@ module Rupee
|
|
11
13
|
attr :currency
|
12
14
|
# The day count convention for determining payment and accrual dates
|
13
15
|
attr :day_count
|
16
|
+
# The date of the first coupon payment, if the security has irregular cash
|
17
|
+
# flows
|
18
|
+
attr :first_coupon
|
19
|
+
# The frequency of payment periods
|
20
|
+
attr :frequency
|
21
|
+
# The date of the last coupon payment, if the security has irregular cash
|
22
|
+
# flows
|
23
|
+
attr :last_coupon
|
24
|
+
# The maturity date of the security
|
25
|
+
attr :maturity
|
26
|
+
# The dates on which payments occur
|
27
|
+
attr :payment_dates
|
28
|
+
# The periods in years between accrual dates
|
29
|
+
attr :periods
|
30
|
+
# The settlement or issuance date of the security
|
31
|
+
attr :settlement
|
32
|
+
# The start date for accruals
|
33
|
+
attr :start_date
|
14
34
|
|
15
35
|
# Build a custom security
|
16
36
|
#
|
@@ -63,13 +83,28 @@ module Rupee
|
|
63
83
|
:business_day => :modified_following,
|
64
84
|
:calendar => :us,
|
65
85
|
:currency => :usd,
|
66
|
-
:day_count => :thirty_360
|
86
|
+
:day_count => :thirty_360,
|
87
|
+
:first_coupon => nil,
|
88
|
+
:frequency => [6, :months], # hands off Rails monkey-patching
|
89
|
+
:last_coupon => nil,
|
90
|
+
:maturity => Date.today.next_year,
|
91
|
+
:settlement => Date.today,
|
92
|
+
:start_date => nil
|
67
93
|
}.merge opts
|
68
94
|
|
69
95
|
self.business_day = opts[:business_day]
|
70
96
|
self.calendar = opts[:calendar]
|
71
97
|
self.currency = opts[:currency]
|
72
98
|
self.day_count = opts[:day_count]
|
99
|
+
self.frequency = opts[:frequency]
|
100
|
+
|
101
|
+
@first_coupon = opts[:first_coupon]
|
102
|
+
@last_coupon = opts[:last_coupon]
|
103
|
+
@maturity = opts[:maturity]
|
104
|
+
@settlement = opts[:settlement]
|
105
|
+
@start_date = opts[:start_date]
|
106
|
+
|
107
|
+
build_dates
|
73
108
|
end
|
74
109
|
|
75
110
|
def business_day=(business_day) # :nodoc:
|
@@ -87,5 +122,35 @@ module Rupee
|
|
87
122
|
def day_count=(day_count) # :nodoc:
|
88
123
|
@day_count = DayCount.find(day_count)
|
89
124
|
end
|
125
|
+
|
126
|
+
def frequency=(frequency) # :nodoc:
|
127
|
+
unit, amount = frequency
|
128
|
+
@frequency = Frequency.new(unit, amount)
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
# Builds the accrual and payment dates
|
134
|
+
def build_dates
|
135
|
+
from = @start_date || @settlement
|
136
|
+
temp = from
|
137
|
+
|
138
|
+
@accrual_dates = []
|
139
|
+
@payment_dates = []
|
140
|
+
@periods = []
|
141
|
+
|
142
|
+
unless @first_coupon_date.nil?
|
143
|
+
from = @first_coupon_date
|
144
|
+
@accrual_dates << from
|
145
|
+
end
|
146
|
+
|
147
|
+
@accrual_dates = @frequency.build(from, @maturity)
|
148
|
+
|
149
|
+
@accrual_dates.each do |date|
|
150
|
+
@periods << @day_count.period(temp, date)
|
151
|
+
@payment_dates << @business_day.next_day(date, @calendar)
|
152
|
+
temp = date
|
153
|
+
end
|
154
|
+
end
|
90
155
|
end
|
91
156
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Rupee
|
2
|
+
# A frequency
|
3
|
+
class Frequency
|
4
|
+
# The amount of units
|
5
|
+
attr :amount
|
6
|
+
# The units in which to count (<tt>:days</tt>, <tt>:months</tt>,
|
7
|
+
# <tt>:years</tt>, etc.
|
8
|
+
attr :unit
|
9
|
+
|
10
|
+
# Creates a new frequency object
|
11
|
+
def initialize(amount, unit)
|
12
|
+
@amount = amount
|
13
|
+
@unit = unit
|
14
|
+
end
|
15
|
+
|
16
|
+
def build(from, to)
|
17
|
+
results = []
|
18
|
+
temp = from
|
19
|
+
multiplier = 1
|
20
|
+
|
21
|
+
case @unit
|
22
|
+
when :day, :days
|
23
|
+
while temp < to
|
24
|
+
temp += @amount
|
25
|
+
results << temp
|
26
|
+
end
|
27
|
+
when :week, :weeks
|
28
|
+
while temp < to
|
29
|
+
temp += @amount * 7
|
30
|
+
results << temp
|
31
|
+
end
|
32
|
+
when :month, :months
|
33
|
+
while temp < to
|
34
|
+
temp = from.next_month(@amount * multiplier)
|
35
|
+
multiplier += 1
|
36
|
+
results << temp
|
37
|
+
end
|
38
|
+
when :year, :years
|
39
|
+
while temp < to
|
40
|
+
temp = from.next_year(@amount * multiplier)
|
41
|
+
multiplier += 1
|
42
|
+
results << temp
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
results
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/rupee/version.rb
CHANGED
@@ -2,113 +2,114 @@ require File.dirname(__FILE__) + "/../spec_helper"
|
|
2
2
|
|
3
3
|
describe BusinessDay do
|
4
4
|
before :each do
|
5
|
-
@new_years =
|
6
|
-
@new_years_eve =
|
7
|
-
@workday =
|
5
|
+
@new_years = Date.new(2012, 1, 1)
|
6
|
+
@new_years_eve = Date.new(2011, 12, 31)
|
7
|
+
@workday = Date.new(2011, 11, 23)
|
8
|
+
@calendar = Calendar::US
|
8
9
|
end
|
9
10
|
|
10
11
|
describe "for the actual convention" do
|
11
12
|
before :each do
|
12
13
|
@business_day = BusinessDay.find(:actual)
|
13
|
-
@month_begin_rolled =
|
14
|
-
@month_end_rolled =
|
15
|
-
@workday_rolled =
|
14
|
+
@month_begin_rolled = Date.new(2012, 1, 1)
|
15
|
+
@month_end_rolled = Date.new(2011, 12, 31)
|
16
|
+
@workday_rolled = Date.new(2011, 11, 23)
|
16
17
|
end
|
17
18
|
|
18
19
|
it "should be correct for the beginning of the month" do
|
19
|
-
@business_day.next_day(@new_years).should == @month_begin_rolled
|
20
|
+
@business_day.next_day(@new_years, @calendar).should == @month_begin_rolled
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should be correct for the end of the month" do
|
23
|
-
@business_day.next_day(@new_years_eve).should == @month_end_rolled
|
24
|
+
@business_day.next_day(@new_years_eve, @calendar).should == @month_end_rolled
|
24
25
|
end
|
25
26
|
|
26
27
|
it "should be correct for an actual workday" do
|
27
|
-
@business_day.next_day(@workday).should == @workday_rolled
|
28
|
+
@business_day.next_day(@workday, @calendar).should == @workday_rolled
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
32
|
describe "for the following convention" do
|
32
33
|
before :each do
|
33
34
|
@business_day = BusinessDay.find(:following)
|
34
|
-
@month_begin_rolled =
|
35
|
-
@month_end_rolled =
|
36
|
-
@workday_rolled =
|
35
|
+
@month_begin_rolled = Date.new(2012, 1, 3)
|
36
|
+
@month_end_rolled = Date.new(2012, 1, 3)
|
37
|
+
@workday_rolled = Date.new(2011, 11, 23)
|
37
38
|
end
|
38
39
|
|
39
40
|
it "should be correct for the beginning of the month" do
|
40
|
-
@business_day.next_day(@new_years).should == @month_begin_rolled
|
41
|
+
@business_day.next_day(@new_years, @calendar).should == @month_begin_rolled
|
41
42
|
end
|
42
43
|
|
43
44
|
it "should be correct for the end of the month" do
|
44
|
-
@business_day.next_day(@new_years_eve).should == @month_end_rolled
|
45
|
+
@business_day.next_day(@new_years_eve, @calendar).should == @month_end_rolled
|
45
46
|
end
|
46
47
|
|
47
48
|
it "should be correct for an actual workday" do
|
48
|
-
@business_day.next_day(@workday).should == @workday_rolled
|
49
|
+
@business_day.next_day(@workday, @calendar).should == @workday_rolled
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
53
|
describe "for the modified following convention" do
|
53
54
|
before :each do
|
54
55
|
@business_day = BusinessDay.find(:modified_following)
|
55
|
-
@month_begin_rolled =
|
56
|
-
@month_end_rolled =
|
57
|
-
@workday_rolled =
|
56
|
+
@month_begin_rolled = Date.new(2012, 1, 3)
|
57
|
+
@month_end_rolled = Date.new(2011, 12, 30)
|
58
|
+
@workday_rolled = Date.new(2011, 11, 23)
|
58
59
|
end
|
59
60
|
|
60
61
|
it "should be correct for the beginning of the month" do
|
61
|
-
@business_day.next_day(@new_years).should == @month_begin_rolled
|
62
|
+
@business_day.next_day(@new_years, @calendar).should == @month_begin_rolled
|
62
63
|
end
|
63
64
|
|
64
65
|
it "should be correct for the end of the month" do
|
65
|
-
@business_day.next_day(@new_years_eve).should == @month_end_rolled
|
66
|
+
@business_day.next_day(@new_years_eve, @calendar).should == @month_end_rolled
|
66
67
|
end
|
67
68
|
|
68
69
|
it "should be correct for an actual workday" do
|
69
|
-
@business_day.next_day(@workday).should == @workday_rolled
|
70
|
+
@business_day.next_day(@workday, @calendar).should == @workday_rolled
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
73
74
|
describe "for the modified previous convention" do
|
74
75
|
before :each do
|
75
76
|
@business_day = BusinessDay.find(:modified_previous)
|
76
|
-
@month_begin_rolled =
|
77
|
-
@month_end_rolled =
|
78
|
-
@workday_rolled =
|
77
|
+
@month_begin_rolled = Date.new(2012, 1, 3)
|
78
|
+
@month_end_rolled = Date.new(2011, 12, 30)
|
79
|
+
@workday_rolled = Date.new(2011, 11, 23)
|
79
80
|
end
|
80
81
|
|
81
82
|
it "should be correct for the beginning of the month" do
|
82
|
-
@business_day.next_day(@new_years).should == @month_begin_rolled
|
83
|
+
@business_day.next_day(@new_years, @calendar).should == @month_begin_rolled
|
83
84
|
end
|
84
85
|
|
85
86
|
it "should be correct for the end of the month" do
|
86
|
-
@business_day.next_day(@new_years_eve).should == @month_end_rolled
|
87
|
+
@business_day.next_day(@new_years_eve, @calendar).should == @month_end_rolled
|
87
88
|
end
|
88
89
|
|
89
90
|
it "should be correct for an actual workday" do
|
90
|
-
@business_day.next_day(@workday).should == @workday_rolled
|
91
|
+
@business_day.next_day(@workday, @calendar).should == @workday_rolled
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
94
95
|
describe "for the previous convention" do
|
95
96
|
before :each do
|
96
97
|
@business_day = BusinessDay.find(:previous)
|
97
|
-
@month_begin_rolled =
|
98
|
-
@month_end_rolled =
|
99
|
-
@workday_rolled =
|
98
|
+
@month_begin_rolled = Date.new(2011, 12, 30)
|
99
|
+
@month_end_rolled = Date.new(2011, 12, 30)
|
100
|
+
@workday_rolled = Date.new(2011, 11, 23)
|
100
101
|
end
|
101
102
|
|
102
103
|
it "should be correct for the beginning of the month" do
|
103
|
-
@business_day.next_day(@new_years).should == @month_begin_rolled
|
104
|
+
@business_day.next_day(@new_years, @calendar).should == @month_begin_rolled
|
104
105
|
end
|
105
106
|
|
106
107
|
it "should be correct for the end of the month" do
|
107
|
-
@business_day.next_day(@new_years_eve).should == @month_end_rolled
|
108
|
+
@business_day.next_day(@new_years_eve, @calendar).should == @month_end_rolled
|
108
109
|
end
|
109
110
|
|
110
111
|
it "should be correct for an actual workday" do
|
111
|
-
@business_day.next_day(@workday).should == @workday_rolled
|
112
|
+
@business_day.next_day(@workday, @calendar).should == @workday_rolled
|
112
113
|
end
|
113
114
|
end
|
114
115
|
end
|
data/spec/ruby/day_count_spec.rb
CHANGED
@@ -2,51 +2,51 @@ require File.dirname(__FILE__) + "/../spec_helper"
|
|
2
2
|
|
3
3
|
describe DayCount do
|
4
4
|
before :each do
|
5
|
-
@christmas =
|
6
|
-
@next_february =
|
7
|
-
@many_mays =
|
5
|
+
@christmas = Date.new(2011, 12, 25)
|
6
|
+
@next_february = Date.new(2012, 2, 29)
|
7
|
+
@many_mays = Date.new(2015, 5, 31)
|
8
8
|
@tolerance = 0.0000001
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "30/360" do
|
12
|
-
it "should produce a correct day count
|
13
|
-
DayCount::THIRTY_360.
|
14
|
-
DayCount::THIRTY_360.
|
12
|
+
it "should produce a correct day count period" do
|
13
|
+
DayCount::THIRTY_360.period(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
|
14
|
+
DayCount::THIRTY_360.period(@christmas, @many_mays).should be_within(@tolerance).of 1236 / 360.0
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "30E/360" do
|
19
|
-
it "should produce a correct day count
|
20
|
-
DayCount::THIRTY_E_360.
|
21
|
-
DayCount::THIRTY_E_360.
|
19
|
+
it "should produce a correct day count period" do
|
20
|
+
DayCount::THIRTY_E_360.period(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
|
21
|
+
DayCount::THIRTY_E_360.period(@christmas, @many_mays).should be_within(@tolerance).of 1235 / 360.0
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "30E+/360" do
|
26
|
-
it "should produce a correct day count
|
27
|
-
DayCount::THIRTY_E_PLUS_360.
|
28
|
-
DayCount::THIRTY_E_PLUS_360.
|
26
|
+
it "should produce a correct day count period" do
|
27
|
+
DayCount::THIRTY_E_PLUS_360.period(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
|
28
|
+
DayCount::THIRTY_E_PLUS_360.period(@christmas, @many_mays).should be_within(@tolerance).of 1236 / 360.0
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "Act/360" do
|
33
|
-
it "should produce a correct day count
|
34
|
-
DayCount::ACT_360.
|
35
|
-
DayCount::ACT_360.
|
33
|
+
it "should produce a correct day count period" do
|
34
|
+
DayCount::ACT_360.period(@christmas, @next_february).should be_within(@tolerance).of 66 / 360.0
|
35
|
+
DayCount::ACT_360.period(@christmas, @many_mays).should be_within(@tolerance).of 1253 / 360.0
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
describe "Act/365" do
|
40
|
-
it "should produce a correct day count
|
41
|
-
DayCount::ACT_365.
|
42
|
-
DayCount::ACT_365.
|
40
|
+
it "should produce a correct day count period" do
|
41
|
+
DayCount::ACT_365.period(@christmas, @next_february).should be_within(@tolerance).of 66 / 365.0
|
42
|
+
DayCount::ACT_365.period(@christmas, @many_mays).should be_within(@tolerance).of 1253 / 365.0
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
describe "Act/Act" do
|
47
|
-
it "should produce a correct day count
|
48
|
-
DayCount::ACT_ACT.
|
49
|
-
DayCount::ACT_ACT.
|
47
|
+
it "should produce a correct day count period" do
|
48
|
+
DayCount::ACT_ACT.period(@christmas, @next_february).should be_within(@tolerance).of 6 / 365.0 + 60 / 366.0
|
49
|
+
DayCount::ACT_ACT.period(@christmas, @many_mays).should be_within(@tolerance).of 887 / 365.0 + 1
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
data/spec/ruby/quote_spec.rb
CHANGED
@@ -55,7 +55,7 @@ describe Quote do
|
|
55
55
|
run_if_connected do
|
56
56
|
bb_price = Quote.new("GOOG").price
|
57
57
|
bb_price.should be_a_kind_of Float
|
58
|
-
@goog.price.should be_within(
|
58
|
+
@goog.price.should be_within(10).of bb_price
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -69,7 +69,7 @@ describe Quote do
|
|
69
69
|
run_if_connected do
|
70
70
|
bb_price = Quote.new("YHOO").price
|
71
71
|
bb_price.should be_a_kind_of Float
|
72
|
-
@yahoo.price.should be_within(
|
72
|
+
@yahoo.price.should be_within(1).of bb_price
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rupee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-03 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &74290000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *74290000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &74289630 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *74289630
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sdoc
|
38
|
-
requirement: &
|
38
|
+
requirement: &74289230 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0.3'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *74289230
|
47
47
|
description: ! " rupee aims to provide user-friendly tools for
|
48
48
|
use in\n financial gems and applications.\n"
|
49
49
|
email:
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- lib/rupee/day_count/act_365.rb
|
93
93
|
- lib/rupee/day_count/act_act.rb
|
94
94
|
- lib/rupee/fixed_income.rb
|
95
|
+
- lib/rupee/frequency.rb
|
95
96
|
- lib/rupee/mixins/find_instance.rb
|
96
97
|
- lib/rupee/option.rb
|
97
98
|
- lib/rupee/quote.rb
|