interest_days 0.2.1 → 0.4.1

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
  SHA256:
3
- metadata.gz: ca962567dc653cf2dd4c735476b0e06b55f702bf1a3b982c66fb0c61304389cc
4
- data.tar.gz: e9ceabbe93ca424b1c6f14fbee19cb7cec8cc8ec424c8cad6cfd48f958318d8a
3
+ metadata.gz: 953488e1e6675656aa813e1755e726a45ba0d7541bfd0368008bd70fd7642cd5
4
+ data.tar.gz: 2275c9d7678db7a25bacfcac4de27e33b4f1119d8dc4fa8ae9aef7c73f70f790
5
5
  SHA512:
6
- metadata.gz: 1e4530bdc1365fbeb9910d9fe0c0cc5b69a3cb63324cd8e03a57b0fa72d00441f61c37288df4f417b2458464f20ff3c5adceee1c6bb5e4dd9e76f7f530d61afa
7
- data.tar.gz: 545e7cd8d63020090ad70c631b78e1a5ac51218f27c2e73b23064694dcbc1f10e90a8d53df7c6b55995def2756612e8ca8791f8728eaa2965360f3f302de540d
6
+ metadata.gz: 6639f9a66b367755cd8e8126dce225d246dd106e32286fc4152392da20bbc86cf39ecd1350c19c80af971373fd58e8f44659637d8babf83003f37d4c3b5828fc
7
+ data.tar.gz: 250f46d051b56af3674187d9043c0cd3958b6778826aa66139db6f23508b2f10eab830442fc76eba5d039f7a712d7625dc62568141fc847e7739259c2e530b93
data/CHANGELOG.md CHANGED
@@ -1,4 +1,27 @@
1
1
 
2
+ ## [0.4.1] / 2022-04-12
3
+ ==================
4
+
5
+ * Fix start_date_after_end_date method considering the case that start_date and end_date are equal.
6
+
7
+ ## [0.4.0] / 2022-03-22
8
+ ==================
9
+
10
+ * Update readme file.
11
+ * Bump version to 0.4.0.
12
+ * Add Isda Act Act strategy. #11
13
+
14
+ ## [0.3.0] / 2022-02-03
15
+ ==================
16
+
17
+ * Bump version to 0.2.1
18
+ * Change the gemspec metadata.
19
+ * Setup siplecov.
20
+ * Add spec for act 364 strategy.
21
+ * Add act 364 calculation strategy.
22
+ * Tests isda 30 e 360 (#5)
23
+ * Add codecov integration.
24
+
2
25
  ## [0.2.0] / 2021-10-08
3
26
  ==================
4
27
 
data/Gemfile CHANGED
@@ -8,11 +8,8 @@ gemspec
8
8
  gem "rake", "~> 13.0"
9
9
 
10
10
  group :test, :development do
11
+ gem "codecov", "~> 0.6.0"
11
12
  gem "rspec", "~> 3.0"
12
-
13
13
  gem "rubocop", "~> 1.7"
14
-
15
14
  gem "simplecov", "~> 0.21.2"
16
-
17
- gem "codecov", "~> 0.6.0"
18
15
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- interest_days (0.2.1)
4
+ interest_days (0.4.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -72,4 +72,4 @@ DEPENDENCIES
72
72
  simplecov (~> 0.21.2)
73
73
 
74
74
  BUNDLED WITH
75
- 2.2.21
75
+ 2.2.33
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # InterestDays
2
2
 
3
3
  This gem provide interest day factor calculation based on ISDA conventions e.g. Isda Act 360.
4
- Since version 0.2 interest_day gem support 30/360 US EOM and 30/360 Bond Basis conventions.
4
+ - Since version 0.2 interest_day gem support 30/360 US EOM and 30/360 Bond Basis conventions.
5
+ - Since version 0.3 the gem also supports Isda Act 364
5
6
 
6
7
  ## Installation
7
8
 
@@ -31,11 +32,15 @@ calculator.interest_day_count_factor
31
32
 
32
33
  currently there a five supported conventions:
33
34
  - :isda_act_360
35
+ - :isda_act_364
34
36
  - :isda_act_365
37
+ - :isda_act_act
35
38
  - :isda_30_e_360
36
39
  - :us_eom_30_360
37
40
  - :bond_basis_30_360
38
41
 
42
+ As often, [Wikipedia](https://en.wikipedia.org/wiki/Day_count_convention) is the best resource, so check it out to get more insights into these conventions.
43
+
39
44
  ## Development
40
45
 
41
46
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -2,6 +2,13 @@
2
2
 
3
3
  module InterestDays
4
4
  module Calculation
5
+ # StartDateBeforeEndDateError class
6
+ class StartDateBeforeEndDateError < StandardError
7
+ def initialize(msg = "End date have to be after start date!")
8
+ super(msg)
9
+ end
10
+ end
11
+
5
12
  # Base calculation class
6
13
  class Base
7
14
  attr_reader :start_date, :end_date
@@ -9,6 +16,8 @@ module InterestDays
9
16
  def initialize(start_date:, end_date:)
10
17
  @start_date = start_date
11
18
  @end_date = end_date
19
+
20
+ raise StartDateBeforeEndDateError if start_date_after_end_date?
12
21
  end
13
22
 
14
23
  def day_count_factor
@@ -17,6 +26,10 @@ module InterestDays
17
26
 
18
27
  private
19
28
 
29
+ def start_date_after_end_date?
30
+ start_date > end_date
31
+ end
32
+
20
33
  def days
21
34
  @end_date - @start_date
22
35
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module InterestDays
4
4
  module Calculation
5
- # ISDA Act 360 Convention calculation
5
+ # ISDA 30 E 365 Convention calculation
6
6
  class IsdaAct364 < Base
7
7
  RELEVANT_DAYS_IN_YEAR = 364
8
8
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module InterestDays
4
+ module Calculation
5
+ # ISDA Act Act Convention calculation
6
+ class IsdaActAct < Base
7
+ RELEVANT_DAYS_IN_YEAR = 365
8
+ RELEVANT_DAYS_IN_LEAP_YEAR = 366
9
+
10
+ def day_count_factor
11
+ return days.fdiv(stard_date_days_in_year) if start_date_and_end_date_in_same_year?
12
+
13
+ end_date_days.fdiv(end_date_days_in_year) +
14
+ start_date_days.fdiv(stard_date_days_in_year) +
15
+ full_years_between_start_and_end_date
16
+ end
17
+
18
+ private
19
+
20
+ def full_years_between_start_and_end_date
21
+ (end_date.year - start_date.year) - 1
22
+ end
23
+
24
+ def start_date_and_end_date_in_same_year?
25
+ start_date.year.eql?(end_date.year)
26
+ end
27
+
28
+ def stard_date_days_in_year
29
+ start_date.leap? ? RELEVANT_DAYS_IN_LEAP_YEAR : RELEVANT_DAYS_IN_YEAR
30
+ end
31
+
32
+ def end_date_days_in_year
33
+ end_date.leap? ? RELEVANT_DAYS_IN_LEAP_YEAR : RELEVANT_DAYS_IN_YEAR
34
+ end
35
+
36
+ def start_date_days
37
+ stard_date_days_in_year - start_date.yday
38
+ end
39
+
40
+ def end_date_days
41
+ end_date.yday
42
+ end
43
+ end
44
+ end
45
+ end
@@ -22,7 +22,9 @@ module InterestDays
22
22
  def strategies
23
23
  @strategies ||= {
24
24
  isda_act_360: InterestDays::Calculation::IsdaAct360,
25
+ isda_act_364: InterestDays::Calculation::IsdaAct364,
25
26
  isda_act_365: InterestDays::Calculation::IsdaAct365,
27
+ isda_act_act: InterestDays::Calculation::IsdaActAct,
26
28
  isda_30_e_360: InterestDays::Calculation::Isda30e360,
27
29
  bond_basis_30_360: InterestDays::Calculation::Isda30e360,
28
30
  us_eom_30_360: InterestDays::Calculation::UsEom30360
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InterestDays
4
- VERSION = "0.2.1"
4
+ VERSION = "0.4.1"
5
5
  end
data/lib/interest_days.rb CHANGED
@@ -6,7 +6,9 @@ require "interest_days/calculation/base"
6
6
  require "interest_days/calculation/thirty_threesixty_base"
7
7
  require "interest_days/calculation/us_eom_30_360"
8
8
  require "interest_days/calculation/isda_act_360"
9
+ require "interest_days/calculation/isda_act_364"
9
10
  require "interest_days/calculation/isda_act_365"
11
+ require "interest_days/calculation/isda_act_act"
10
12
  require "interest_days/calculation/isda_30_e_360"
11
13
 
12
14
  module InterestDays
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interest_days
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugen Mueller
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-02-03 00:00:00.000000000 Z
12
+ date: 2022-04-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -72,7 +72,6 @@ files:
72
72
  - Rakefile
73
73
  - bin/console
74
74
  - bin/setup
75
- - interest_days-0.2.0.gem
76
75
  - interest_days.gemspec
77
76
  - lib/interest_days.rb
78
77
  - lib/interest_days/calculation/base.rb
@@ -80,6 +79,7 @@ files:
80
79
  - lib/interest_days/calculation/isda_act_360.rb
81
80
  - lib/interest_days/calculation/isda_act_364.rb
82
81
  - lib/interest_days/calculation/isda_act_365.rb
82
+ - lib/interest_days/calculation/isda_act_act.rb
83
83
  - lib/interest_days/calculation/thirty_threesixty_base.rb
84
84
  - lib/interest_days/calculation/us_eom_30_360.rb
85
85
  - lib/interest_days/calculator.rb
Binary file