business-days 3.0.0 → 3.1.4
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/lib/business-days.rb +40 -2
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0c1a113899eb0ef5659e2103ff90c391eb161d124db444fe21cbebb4885cb18
|
4
|
+
data.tar.gz: 12ae667e4f542e33230b6b86be1ecc526beb8b81cc238121ac4d0e794d5b85c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4fdc0b05efc376817fb1ec0340ae9e9ab8655e2988eeddc41e87a2d87d180271fa7f1bd5820795f7c5681a70368d51fc9b09b464adbe18f96ccd7994bb55e95
|
7
|
+
data.tar.gz: 79bbd734e3e885af5d9a2c670fb70756ed8b3d1d075dedeb3d5f6bf68b6f6345322c2582053ddf0c0657e1bc23d78ee14aacb755c6b89e1bdab40936449c2ae6
|
data/lib/business-days.rb
CHANGED
@@ -25,7 +25,7 @@ class BusinessDaysSingleton
|
|
25
25
|
|
26
26
|
# 3. Add the latest business day in each year (it's a bank holiday)
|
27
27
|
(from..to).each do |year|
|
28
|
-
@holidays.push(
|
28
|
+
@holidays.push(latest_non_bank_business_day(year))
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -56,6 +56,25 @@ class BusinessDaysSingleton
|
|
56
56
|
(date.to_time.utc.midnight - offset.to_i.hours)
|
57
57
|
end
|
58
58
|
|
59
|
+
# Count business days between two dates.
|
60
|
+
#
|
61
|
+
# @param from [Date] the starting date (inclusive)
|
62
|
+
# @param to [Date] the ending date (inclusive)
|
63
|
+
|
64
|
+
# @return [Integer] number of business days between the two dates
|
65
|
+
def business_days(from, to)
|
66
|
+
raise ArgumentError.new('Not a date: from') unless from.kind_of?(Date)
|
67
|
+
raise ArgumentError.new('Not a date: to') unless to.kind_of?(Date)
|
68
|
+
count = 0
|
69
|
+
|
70
|
+
while from <= to
|
71
|
+
count +=1 if self.business_day?(from)
|
72
|
+
from = from + 1.day
|
73
|
+
end
|
74
|
+
|
75
|
+
count
|
76
|
+
end
|
77
|
+
|
59
78
|
# Check if the given date is a business day
|
60
79
|
#
|
61
80
|
# @param date [Date] the non-business date to be add.
|
@@ -76,6 +95,24 @@ class BusinessDaysSingleton
|
|
76
95
|
@holidays.push(date)
|
77
96
|
end
|
78
97
|
|
98
|
+
# Remove given date from holidays list for all commands after this.
|
99
|
+
#
|
100
|
+
# @param date [Date] the non-holiday date to be add.
|
101
|
+
def remove_holiday(date)
|
102
|
+
raise ArgumentError.new('Not a date') unless date.kind_of?(Date)
|
103
|
+
|
104
|
+
@holidays.delete(date)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Remove latest holiday for each year
|
108
|
+
def remove_latest_non_bank_business_days
|
109
|
+
years = Set.new(@holidays.map { |d| d.year })
|
110
|
+
years.each do |year|
|
111
|
+
max_date = @holidays.select { |d| d.year == year }.max
|
112
|
+
self.remove_holiday(max_date) if max_date.strftime('%m%d') >= "1229"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
79
116
|
# Returns the first business day after the given date.
|
80
117
|
#
|
81
118
|
# @param date [Date] the reference date.
|
@@ -105,9 +142,10 @@ class BusinessDaysSingleton
|
|
105
142
|
|
106
143
|
date
|
107
144
|
end
|
145
|
+
|
108
146
|
private
|
109
147
|
|
110
|
-
def
|
148
|
+
def latest_non_bank_business_day(year)
|
111
149
|
d = Date.civil(year, 12, 31)
|
112
150
|
while !self.business_day?(d)
|
113
151
|
d = d - 1.day
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: business-days
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allan Costa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: tzinfo
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.2.
|
33
|
+
version: 1.2.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.2.
|
40
|
+
version: 1.2.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: tzinfo-data
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: holidays
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '7.1'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '7.1'
|
69
69
|
description: Methods to check if a given date is a business days and to perform computations
|
70
70
|
based on Business days.
|
71
71
|
email: allan@cloudwalk.io
|
@@ -96,8 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
requirements: []
|
99
|
-
|
100
|
-
rubygems_version: 2.7.8
|
99
|
+
rubygems_version: 3.0.3
|
101
100
|
signing_key:
|
102
101
|
specification_version: 4
|
103
102
|
summary: Business Days
|