rupee 0.2.6.1 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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"
@@ -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, @calendar
31
+ def next_day(date, calendar)
32
+ block.call date, calendar
43
33
  end
44
34
 
45
35
  class << self
@@ -3,7 +3,7 @@ module Rupee
3
3
  # Following business day convention
4
4
  FOLLOWING = BusinessDay.new "Roll to following business day" do |date, calendar|
5
5
  while calendar.day_off?(date)
6
- date += 86_400
6
+ date += 1
7
7
  end
8
8
 
9
9
  date
@@ -6,12 +6,12 @@ module Rupee
6
6
  month = date.month
7
7
 
8
8
  while calendar.day_off?(date) && date.month == month
9
- date += 86_400
9
+ date += 1
10
10
  end
11
11
 
12
12
  if date.month != month
13
13
  while calendar.day_off?(date)
14
- date -= 86_400
14
+ date -= 1
15
15
  end
16
16
  else
17
17
  date
@@ -6,12 +6,12 @@ module Rupee
6
6
  month = date.month
7
7
 
8
8
  while calendar.day_off?(date) && date.month == month
9
- date -= 86_400
9
+ date -= 1
10
10
  end
11
11
 
12
12
  if date.month != month
13
13
  while calendar.day_off?(date)
14
- date += 86_400
14
+ date += 1
15
15
  end
16
16
  else
17
17
  date
@@ -3,7 +3,7 @@ module Rupee
3
3
  # Previous business day convention
4
4
  PREVIOUS = BusinessDay.new "Roll to previous business day" do |date, calendar|
5
5
  while calendar.day_off?(date)
6
- date -= 86_400
6
+ date -= 1
7
7
  end
8
8
 
9
9
  date
@@ -23,29 +23,23 @@ module Rupee
23
23
  @block = block
24
24
  end
25
25
 
26
- def factor(from, to)
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
- (to - from) / SECONDS_PER_DAY
38
+ to - from
41
39
  end
42
40
 
43
41
  def days_in_year(date)
44
- if leap_year?(date)
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 == (date.year % 4 == 0 && (date.year % 100 != 0 || date.year % 400 == 0)) ? 29 : 28
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
@@ -2,7 +2,7 @@ module Rupee
2
2
  class DayCount
3
3
  # Actual/360
4
4
  ACT_360 = DayCount.new "Actual/360, typical LIBOR convention" do |from, to|
5
- days(from, to) / 360.0
5
+ (to - from) / 360.0
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module Rupee
2
2
  class DayCount
3
3
  # Actual/365
4
4
  ACT_365 = DayCount.new "Actual/365" do |from, to|
5
- days(from, to) / 365.0
5
+ (to - from) / 365.0
6
6
  end
7
7
  end
8
8
  end
@@ -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
@@ -1,4 +1,4 @@
1
1
  module Rupee
2
2
  # The current version
3
- VERSION = "0.2.6.1"
3
+ VERSION = "0.2.7"
4
4
  end
@@ -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 = Time.new(2012, 1, 1)
6
- @new_years_eve = Time.new(2011, 12, 31)
7
- @workday = Time.new(2011, 11, 23)
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 = Time.new(2012, 1, 1)
14
- @month_end_rolled = Time.new(2011, 12, 31)
15
- @workday_rolled = Time.new(2011, 11, 23)
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 = Time.new(2012, 1, 3)
35
- @month_end_rolled = Time.new(2012, 1, 3)
36
- @workday_rolled = Time.new(2011, 11, 23)
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 = Time.new(2012, 1, 3)
56
- @month_end_rolled = Time.new(2011, 12, 30)
57
- @workday_rolled = Time.new(2011, 11, 23)
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 = Time.new(2012, 1, 3)
77
- @month_end_rolled = Time.new(2011, 12, 30)
78
- @workday_rolled = Time.new(2011, 11, 23)
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 = Time.new(2011, 12, 30)
98
- @month_end_rolled = Time.new(2011, 12, 30)
99
- @workday_rolled = Time.new(2011, 11, 23)
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
@@ -2,51 +2,51 @@ require File.dirname(__FILE__) + "/../spec_helper"
2
2
 
3
3
  describe DayCount do
4
4
  before :each do
5
- @christmas = Time.new(2011, 12, 25)
6
- @next_february = Time.new(2012, 2, 29)
7
- @many_mays = Time.new(2015, 5, 31)
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 factor" do
13
- DayCount::THIRTY_360.factor(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
14
- DayCount::THIRTY_360.factor(@christmas, @many_mays).should be_within(@tolerance).of 1236 / 360.0
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 factor" do
20
- DayCount::THIRTY_E_360.factor(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
21
- DayCount::THIRTY_E_360.factor(@christmas, @many_mays).should be_within(@tolerance).of 1235 / 360.0
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 factor" do
27
- DayCount::THIRTY_E_PLUS_360.factor(@christmas, @next_february).should be_within(@tolerance).of 64 / 360.0
28
- DayCount::THIRTY_E_PLUS_360.factor(@christmas, @many_mays).should be_within(@tolerance).of 1236 / 360.0
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 factor" do
34
- DayCount::ACT_360.factor(@christmas, @next_february).should be_within(@tolerance).of 66 / 360.0
35
- DayCount::ACT_360.factor(@christmas, @many_mays).should be_within(@tolerance).of 1253 / 360.0
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 factor" do
41
- DayCount::ACT_365.factor(@christmas, @next_february).should be_within(@tolerance).of 66 / 365.0
42
- DayCount::ACT_365.factor(@christmas, @many_mays).should be_within(@tolerance).of 1253 / 365.0
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 factor" do
48
- DayCount::ACT_ACT.factor(@christmas, @next_february).should be_within(@tolerance).of 6 / 365.0 + 60 / 366.0
49
- DayCount::ACT_ACT.factor(@christmas, @many_mays).should be_within(@tolerance).of 887 / 365.0 + 1
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
@@ -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(0.05).of bb_price
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(0.05).of bb_price
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.6.1
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: &82312150 !ruby/object:Gem::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: *82312150
24
+ version_requirements: *74290000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &82311900 !ruby/object:Gem::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: *82311900
35
+ version_requirements: *74289630
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sdoc
38
- requirement: &82311670 !ruby/object:Gem::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: *82311670
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