interest_days 0.2.0 → 0.4.0
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 +4 -4
- data/.github/workflows/main.yml +4 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +33 -1
- data/Gemfile +6 -3
- data/Gemfile.lock +14 -2
- data/README.md +12 -8
- data/interest_days-0.2.0.gem +0 -0
- data/interest_days.gemspec +2 -2
- data/lib/interest_days/calculation/base.rb +13 -0
- data/lib/interest_days/calculation/isda_act_364.rb +14 -0
- data/lib/interest_days/calculation/isda_act_act.rb +45 -0
- data/lib/interest_days/calculator.rb +2 -0
- data/lib/interest_days/version.rb +1 -1
- data/lib/interest_days.rb +2 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97730e964a0b67a09476d0b44df33c0aecd8a81025f4e7892a375806938b1796
|
4
|
+
data.tar.gz: 5782b2a88733b57f74bb892a9c187807993ee07bd7f4445831284c281e54a808
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70e35e27e4b0716f331fd537359e102b44459eaca401e8591f6c7d978d82cf79f10192fb899cc305faa15c1ec31b51c2a1d4d1bccf7a881275d611f8069bdcb2
|
7
|
+
data.tar.gz: b76ea900e8087b538da8829c745b899bb861a93e7ee6441816bee1f4a11e4716a4f434d11ed7bf36d5a9b3df96fd5307714e0310ece92aaaec029d5b0f4d2ed5
|
data/.github/workflows/main.yml
CHANGED
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,36 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
## [0.4.0] / 2022-03-22
|
3
|
+
==================
|
4
|
+
|
5
|
+
* Update readme file.
|
6
|
+
* Bump version to 0.4.0.
|
7
|
+
* Add Isda Act Act strategy. #11
|
8
|
+
|
9
|
+
## [0.3.0] / 2022-02-03
|
10
|
+
==================
|
11
|
+
|
12
|
+
* Bump version to 0.3.0
|
13
|
+
* Finish including isda act 364 (#11)
|
14
|
+
|
15
|
+
## [0.2.1] / 2022-02-03
|
16
|
+
==================
|
17
|
+
|
18
|
+
* Bump version to 0.2.1
|
19
|
+
* Change the gemspec metadata.
|
20
|
+
* Setup siplecov.
|
21
|
+
* Add spec for act 364 strategy.
|
22
|
+
* Add act 364 calculation strategy.
|
23
|
+
* Tests isda 30 e 360 (#5)
|
24
|
+
* Add codecov integration.
|
25
|
+
|
26
|
+
## [0.2.0] / 2021-10-08
|
27
|
+
==================
|
28
|
+
|
29
|
+
* Feature/#2 30 360 bond basis (#4)
|
30
|
+
* Merge pull request #1 from eugenmueller/FIX/readme_typo
|
31
|
+
* FIX: indention in README
|
32
|
+
* FIX: fix readme typo
|
33
|
+
* add .history dir to gitignore
|
2
34
|
|
3
35
|
## [0.1.0] - 2021-10-03
|
4
36
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
interest_days (0.
|
4
|
+
interest_days (0.4.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ast (2.4.2)
|
10
|
+
codecov (0.6.0)
|
11
|
+
simplecov (>= 0.15, < 0.22)
|
10
12
|
diff-lcs (1.4.4)
|
13
|
+
docile (1.4.0)
|
11
14
|
parallel (1.20.1)
|
12
15
|
parser (3.0.2.0)
|
13
16
|
ast (~> 2.4.1)
|
@@ -45,19 +48,28 @@ GEM
|
|
45
48
|
rubocop (~> 1.0)
|
46
49
|
rubocop-ast (>= 1.1.0)
|
47
50
|
ruby-progressbar (1.11.0)
|
51
|
+
simplecov (0.21.2)
|
52
|
+
docile (~> 1.1)
|
53
|
+
simplecov-html (~> 0.11)
|
54
|
+
simplecov_json_formatter (~> 0.1)
|
55
|
+
simplecov-html (0.12.3)
|
56
|
+
simplecov_json_formatter (0.1.3)
|
48
57
|
unicode-display_width (2.0.0)
|
49
58
|
|
50
59
|
PLATFORMS
|
60
|
+
x86_64-darwin-19
|
51
61
|
x86_64-darwin-20
|
52
62
|
x86_64-linux
|
53
63
|
|
54
64
|
DEPENDENCIES
|
65
|
+
codecov (~> 0.6.0)
|
55
66
|
interest_days!
|
56
67
|
rake (~> 13.0)
|
57
68
|
rspec (~> 3.0)
|
58
69
|
rubocop (~> 1.7)
|
59
70
|
rubocop-rake
|
60
71
|
rubocop-rspec
|
72
|
+
simplecov (~> 0.21.2)
|
61
73
|
|
62
74
|
BUNDLED WITH
|
63
|
-
2.2.
|
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
|
|
@@ -23,19 +24,22 @@ Or install it yourself as:
|
|
23
24
|
|
24
25
|
You can simple use the InterestDays::Calculator like:
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
```ruby
|
28
|
+
calculator = InterestDays::Calculator.new(start_date: start, end_date: end, strategy: :isda_act_360)
|
29
|
+
|
30
|
+
calculator.interest_day_count_factor
|
31
|
+
```
|
31
32
|
|
32
|
-
currently there a
|
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.
|
39
43
|
|
40
44
|
## Development
|
41
45
|
|
@@ -45,7 +49,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
45
49
|
|
46
50
|
## Contributing
|
47
51
|
|
48
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/eugenmueller/interest_days.
|
52
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/eugenmueller/interest_days. ;)
|
49
53
|
|
50
54
|
## License
|
51
55
|
|
Binary file
|
data/interest_days.gemspec
CHANGED
@@ -5,7 +5,7 @@ require_relative "lib/interest_days/version"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "interest_days"
|
7
7
|
spec.version = InterestDays::VERSION
|
8
|
-
spec.authors = ["Eugen Mueller"]
|
8
|
+
spec.authors = ["Eugen Mueller", "Kevin Liebholz"]
|
9
9
|
spec.email = ["eugen.mllr@gmail.com"]
|
10
10
|
|
11
11
|
spec.summary = "Interest day calculation"
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
20
20
|
spec.metadata["source_code_uri"] = "https://github.com/eugenmueller/interest_days"
|
21
|
-
spec.metadata["changelog_uri"] = "https://github.com/eugenmueller/interest_days/CHANGELOG.md"
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/eugenmueller/interest_days/blob/v0.2.0/CHANGELOG.md"
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -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
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module InterestDays
|
4
|
+
module Calculation
|
5
|
+
# ISDA 30 E 365 Convention calculation
|
6
|
+
class IsdaAct364 < Base
|
7
|
+
RELEVANT_DAYS_IN_YEAR = 364
|
8
|
+
|
9
|
+
def day_count_factor
|
10
|
+
days.fdiv(RELEVANT_DAYS_IN_YEAR)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -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
|
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,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interest_days
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugen Mueller
|
8
|
+
- Kevin Liebholz
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2022-03-29 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rspec
|
@@ -71,12 +72,15 @@ files:
|
|
71
72
|
- Rakefile
|
72
73
|
- bin/console
|
73
74
|
- bin/setup
|
75
|
+
- interest_days-0.2.0.gem
|
74
76
|
- interest_days.gemspec
|
75
77
|
- lib/interest_days.rb
|
76
78
|
- lib/interest_days/calculation/base.rb
|
77
79
|
- lib/interest_days/calculation/isda_30_e_360.rb
|
78
80
|
- lib/interest_days/calculation/isda_act_360.rb
|
81
|
+
- lib/interest_days/calculation/isda_act_364.rb
|
79
82
|
- lib/interest_days/calculation/isda_act_365.rb
|
83
|
+
- lib/interest_days/calculation/isda_act_act.rb
|
80
84
|
- lib/interest_days/calculation/thirty_threesixty_base.rb
|
81
85
|
- lib/interest_days/calculation/us_eom_30_360.rb
|
82
86
|
- lib/interest_days/calculator.rb
|
@@ -87,7 +91,7 @@ licenses:
|
|
87
91
|
metadata:
|
88
92
|
homepage_uri: https://github.com/eugenmueller/interest_days
|
89
93
|
source_code_uri: https://github.com/eugenmueller/interest_days
|
90
|
-
changelog_uri: https://github.com/eugenmueller/interest_days/CHANGELOG.md
|
94
|
+
changelog_uri: https://github.com/eugenmueller/interest_days/blob/v0.2.0/CHANGELOG.md
|
91
95
|
post_install_message:
|
92
96
|
rdoc_options: []
|
93
97
|
require_paths:
|