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.
@@ -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