business-days 1.0.1 → 3.1.2
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 +5 -5
- data/lib/business-days.rb +27 -11
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1d65a0be7582b342cb6bd352d97d5bdfa2c381b28a8d965bc2c8a7310e327a5d
|
4
|
+
data.tar.gz: 6c4895bf46e75de6658bfe874b5642702961ef957d24672985ad75c2059ca149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f59925ea7d0bcfe194e385a2648acbf69f77719d90ec5cac59c9bb9934eabe47044fa7c004189a382837c2afa4f7a2195e41566ba6a798f853aefc5d1b2b3735
|
7
|
+
data.tar.gz: f7e2f7f5b34f709c1a742853feae4cac45d82083fc359d62b3b1de972640c3dcfff77cff4375865b6bd0127f9bf14fba0e71500e72ffb9458bf6ac8d895585b1
|
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
|
|
@@ -33,16 +33,10 @@ class BusinessDaysSingleton
|
|
33
33
|
#
|
34
34
|
# @param days [Integer] how many business days to add to given time.
|
35
35
|
# @param time [Time] the start time in UTC from which the business days will be added.
|
36
|
-
# @param reference [Time] the reference time in UTC from which we will compute daylight saving.
|
37
36
|
# @return [Time] the computed business day in UTC time (at midnight in Brasilia time)
|
38
|
-
def business_days_from_utc_time(days, time
|
39
|
-
# Set reference to given time if no reference is passed
|
40
|
-
if reference.nil?
|
41
|
-
reference = time
|
42
|
-
end
|
43
|
-
|
37
|
+
def business_days_from_utc_time(days, time)
|
44
38
|
# Get offset from reference data (based on Brasilia timezone)
|
45
|
-
offset =
|
39
|
+
offset = time.in_time_zone('Brasilia').formatted_offset()
|
46
40
|
|
47
41
|
# Get date from time in reference offset
|
48
42
|
date = (time + offset.to_i.hours).to_date
|
@@ -50,7 +44,10 @@ class BusinessDaysSingleton
|
|
50
44
|
# Add days until we reach the specified business days
|
51
45
|
count = 0
|
52
46
|
while count < days
|
53
|
-
|
47
|
+
time += 24*60*60
|
48
|
+
|
49
|
+
offset = time.in_time_zone('Brasilia').formatted_offset()
|
50
|
+
date = (time + offset.to_i.hours).to_date
|
54
51
|
if business_day?(date)
|
55
52
|
count +=1
|
56
53
|
end
|
@@ -79,6 +76,24 @@ class BusinessDaysSingleton
|
|
79
76
|
@holidays.push(date)
|
80
77
|
end
|
81
78
|
|
79
|
+
# Remove given date from holidays list for all commands after this.
|
80
|
+
#
|
81
|
+
# @param date [Date] the non-holiday date to be add.
|
82
|
+
def remove_holiday(date)
|
83
|
+
raise ArgumentError.new('Not a date') unless date.kind_of?(Date)
|
84
|
+
|
85
|
+
@holidays.delete(date)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Remove latest holiday for each year
|
89
|
+
def remove_latest_non_bank_business_days
|
90
|
+
years = Set.new(@holidays.map { |d| d.year })
|
91
|
+
years.each do |year|
|
92
|
+
max_date = @holidays.select { |d| d.year == year }.max
|
93
|
+
self.remove_holiday(max_date)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
82
97
|
# Returns the first business day after the given date.
|
83
98
|
#
|
84
99
|
# @param date [Date] the reference date.
|
@@ -108,9 +123,10 @@ class BusinessDaysSingleton
|
|
108
123
|
|
109
124
|
date
|
110
125
|
end
|
126
|
+
|
111
127
|
private
|
112
128
|
|
113
|
-
def
|
129
|
+
def latest_non_bank_business_day(year)
|
114
130
|
d = Date.civil(year, 12, 31)
|
115
131
|
while !self.business_day?(d)
|
116
132
|
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: 1.
|
4
|
+
version: 3.1.2
|
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: 2020-01-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.6.11
|
99
|
+
rubygems_version: 3.0.3
|
101
100
|
signing_key:
|
102
101
|
specification_version: 4
|
103
102
|
summary: Business Days
|