business-days 3.0.0 → 3.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/business-days.rb +40 -2
  3. metadata +11 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85d737eb758a6c5a511e1cc346cb326011a9e89e716da4e840e56fcbbac4a298
4
- data.tar.gz: fa7af8ede7e626c94e9a578bb461dd833428485378699ab5809f1ca4a302716a
3
+ metadata.gz: a0c1a113899eb0ef5659e2103ff90c391eb161d124db444fe21cbebb4885cb18
4
+ data.tar.gz: 12ae667e4f542e33230b6b86be1ecc526beb8b81cc238121ac4d0e794d5b85c3
5
5
  SHA512:
6
- metadata.gz: 8642e33b22067472d6a1bbb59bc920e38d5faf08c874ca590a06ace9104befd7ed22e1a14a7df022d06ed0c3697f34bb34606cac1da11726a946785d0364f38b
7
- data.tar.gz: 4cd9e7a6c4270df657ad4c3e79378ff2b95bd01eb3a0875e6a0aab740e5e1aedda7d9bed8a7bc041d6cd09fdf29ff640385c53fb48ae99cf1a90513543d553e7
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(latest_non_bank_businness_day(year))
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 latest_non_bank_businness_day(year)
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.0.0
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: 2019-04-18 00:00:00.000000000 Z
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: '5.1'
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: '5.1'
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.5
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.5
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: 6.3.0
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: 6.3.0
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
- rubyforge_project:
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