business 2.0.0 → 2.1.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/CHANGELOG.md +4 -0
- data/README.md +14 -0
- data/lib/business/calendar.rb +14 -6
- data/lib/business/version.rb +1 -1
- data/spec/calendar_spec.rb +56 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1e6ab03fc3769877d942e77c54647175c8b8554e016fb8c2fb491c4596db07d
|
4
|
+
data.tar.gz: e76c9f5de45c78dc790866d841da5eb234ea8d308e8ba9c9d292b01eb49cb182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c416c3a2845f6ea9b5016d173a8e30b0308a57021c163ad996407e20dae627d5fe10542f30e43fbf4d4e994b4fb99f967c7fb86842eedac89529e81698e5727
|
7
|
+
data.tar.gz: 0c163bd5dc87ff5246022b63e472829924ad9c41468287ef811e700d5b52e503278301c02968c0602933bca8d633d176a2ed90a36be332e590712b68ea4d8ea7
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -131,6 +131,20 @@ calendar.business_day?(Date.parse("Sunday, 8 June 2014"))
|
|
131
131
|
# => false
|
132
132
|
```
|
133
133
|
|
134
|
+
More specifically you can check if a given `business_day?` is either a `working_day?` or a `holiday?` using methods on `Business::Calendar`.
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
# Assuming "Monday, 9 June 2014" is a holiday
|
138
|
+
calendar.working_day?(Date.parse("Monday, 9 June 2014"))
|
139
|
+
# => true
|
140
|
+
calendar.holiday?(Date.parse("Monday, 9 June 2014"))
|
141
|
+
# => true
|
142
|
+
# Monday is a working day, but we have a holiday so it's not
|
143
|
+
# a business day
|
144
|
+
calendar.business_day?(Date.parse("Monday, 9 June 2014"))
|
145
|
+
# => false
|
146
|
+
```
|
147
|
+
|
134
148
|
## Business day arithmetic
|
135
149
|
|
136
150
|
The `add_business_days` and `subtract_business_days` are used to perform business day arithmetic on dates.
|
data/lib/business/calendar.rb
CHANGED
@@ -57,16 +57,26 @@ module Business
|
|
57
57
|
set_extra_working_dates(config[:extra_working_dates])
|
58
58
|
set_working_days(config[:working_days])
|
59
59
|
set_holidays(config[:holidays])
|
60
|
+
|
61
|
+
unless (@holidays & @extra_working_dates).none?
|
62
|
+
raise ArgumentError, 'Holidays cannot be extra working dates'
|
63
|
+
end
|
60
64
|
end
|
61
65
|
|
62
66
|
# Return true if the date given is a business day (typically that means a
|
63
67
|
# non-weekend day) and not a holiday.
|
64
68
|
def business_day?(date)
|
65
69
|
date = date.to_date
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
+
working_day?(date) && !holiday?(date)
|
71
|
+
end
|
72
|
+
|
73
|
+
def working_day?(date)
|
74
|
+
date = date.to_date
|
75
|
+
extra_working_dates.include?(date) || working_days.include?(date.strftime('%a').downcase)
|
76
|
+
end
|
77
|
+
|
78
|
+
def holiday?(date)
|
79
|
+
holidays.include?(date.to_date)
|
70
80
|
end
|
71
81
|
|
72
82
|
# Roll forward to the next business day. If the date given is a business
|
@@ -191,8 +201,6 @@ module Business
|
|
191
201
|
# Internal method for assigning holidays from a calendar config.
|
192
202
|
def set_holidays(holidays)
|
193
203
|
@holidays = parse_dates(holidays)
|
194
|
-
return if (@holidays & @extra_working_dates).none?
|
195
|
-
raise ArgumentError, 'Holidays cannot be extra working dates'
|
196
204
|
end
|
197
205
|
|
198
206
|
def set_extra_working_dates(extra_working_dates)
|
data/lib/business/version.rb
CHANGED
data/spec/calendar_spec.rb
CHANGED
@@ -202,6 +202,62 @@ describe Business::Calendar do
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
+
describe "#working_day?" do
|
206
|
+
let(:calendar) do
|
207
|
+
Business::Calendar.new(holidays: ["9am, Tuesday 1st Jan, 2013"],
|
208
|
+
extra_working_dates: ["9am, Sunday 6th Jan, 2013"])
|
209
|
+
end
|
210
|
+
subject { calendar.working_day?(day) }
|
211
|
+
|
212
|
+
context "when given a working day" do
|
213
|
+
let(:day) { date_class.parse("9am, Wednesday 2nd Jan, 2013") }
|
214
|
+
it { is_expected.to be_truthy }
|
215
|
+
end
|
216
|
+
|
217
|
+
context "when given a non-working day" do
|
218
|
+
let(:day) { date_class.parse("9am, Saturday 5th Jan, 2013") }
|
219
|
+
it { is_expected.to be_falsey }
|
220
|
+
end
|
221
|
+
|
222
|
+
context "when given a working day that is a holiday" do
|
223
|
+
let(:day) { date_class.parse("9am, Tuesday 1st Jan, 2013") }
|
224
|
+
it { is_expected.to be_truthy }
|
225
|
+
end
|
226
|
+
|
227
|
+
context "when given a non-business day that is a working date" do
|
228
|
+
let(:day) { date_class.parse("9am, Sunday 6th Jan, 2013") }
|
229
|
+
it { is_expected.to be_truthy }
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe "#holiday?" do
|
234
|
+
let(:calendar) do
|
235
|
+
Business::Calendar.new(holidays: ["9am, Tuesday 1st Jan, 2013"],
|
236
|
+
extra_working_dates: ["9am, Sunday 6th Jan, 2013"])
|
237
|
+
end
|
238
|
+
subject { calendar.holiday?(day) }
|
239
|
+
|
240
|
+
context "when given a working day that is not a holiday" do
|
241
|
+
let(:day) { date_class.parse("9am, Wednesday 2nd Jan, 2013") }
|
242
|
+
it { is_expected.to be_falsey }
|
243
|
+
end
|
244
|
+
|
245
|
+
context "when given a non-working day that is not a holiday day" do
|
246
|
+
let(:day) { date_class.parse("9am, Saturday 5th Jan, 2013") }
|
247
|
+
it { is_expected.to be_falsey }
|
248
|
+
end
|
249
|
+
|
250
|
+
context "when given a day that is a holiday" do
|
251
|
+
let(:day) { date_class.parse("9am, Tuesday 1st Jan, 2013") }
|
252
|
+
it { is_expected.to be_truthy }
|
253
|
+
end
|
254
|
+
|
255
|
+
context "when given a non-business day that is no a holiday" do
|
256
|
+
let(:day) { date_class.parse("9am, Sunday 6th Jan, 2013") }
|
257
|
+
it { is_expected.to be_falsey }
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
205
261
|
describe "#roll_forward" do
|
206
262
|
let(:calendar) do
|
207
263
|
Business::Calendar.new(holidays: ["Tuesday 1st Jan, 2013"])
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: business
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harry Marr
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2020-06-08 00:00:00.000000000 Z
|
@@ -64,7 +64,7 @@ homepage: https://github.com/gocardless/business
|
|
64
64
|
licenses:
|
65
65
|
- MIT
|
66
66
|
metadata: {}
|
67
|
-
post_install_message:
|
67
|
+
post_install_message:
|
68
68
|
rdoc_options: []
|
69
69
|
require_paths:
|
70
70
|
- lib
|
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
80
|
version: '0'
|
81
81
|
requirements: []
|
82
82
|
rubygems_version: 3.1.2
|
83
|
-
signing_key:
|
83
|
+
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Date calculations based on business calendars
|
86
86
|
test_files:
|