business 1.16.0 → 2.0.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/.circleci/config.yml +34 -0
- data/CHANGELOG.md +28 -0
- data/README.md +107 -77
- data/business.gemspec +1 -0
- data/lib/business/calendar.rb +20 -11
- data/lib/business/version.rb +1 -1
- data/spec/calendar_spec.rb +12 -29
- metadata +18 -14
- data/.travis.yml +0 -17
- data/lib/business/data/achus.yml +0 -57
- data/lib/business/data/bacs.yml +0 -129
- data/lib/business/data/bankgirot.yml +0 -208
- data/lib/business/data/becs.yml +0 -36
- data/lib/business/data/becsnz.yml +0 -50
- data/lib/business/data/betalingsservice.yml +0 -54
- data/lib/business/data/padca.yml +0 -27
- data/lib/business/data/target.yml +0 -98
- data/lib/business/data/weekdays.yml +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31ba206f257f17ef5bdfa3c60e9e81f2e5e2e71436a701513643f90e783d844d
|
|
4
|
+
data.tar.gz: bda97edfe037b2f509b4d037d46a39b89c5ed96130872c6e090da461c6783418
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 07576b028c3b7c31fd5be9fc1c1588b31b76b629d6381c73566a828db6add04ee47f7f24091274ef55c0441666551922a35b97ccbb112224fe85d3bf24865dd0
|
|
7
|
+
data.tar.gz: 81aae610dd327487aa95b11b04b12d5d909f3296c36a2d49ff9147dc1a2276b4e024fffe2fe5cb8fa072a60b2a667d7b5f0cf207e919e2bc796d6693d01a731a
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
|
|
3
|
+
jobs:
|
|
4
|
+
test:
|
|
5
|
+
docker:
|
|
6
|
+
- image: circleci/ruby:<< parameters.ruby-version >>
|
|
7
|
+
parameters:
|
|
8
|
+
ruby-version:
|
|
9
|
+
type: string
|
|
10
|
+
steps:
|
|
11
|
+
- checkout
|
|
12
|
+
- restore_cache:
|
|
13
|
+
keys:
|
|
14
|
+
- bundle-v1-<< parameters.ruby-version >>-{{ checksum "business.gemspec" }}
|
|
15
|
+
- bundle-v1-<< parameters.ruby-version >>-
|
|
16
|
+
- run:
|
|
17
|
+
name: Install dependencies
|
|
18
|
+
command: bundle install --clean --no-cache --path vendor/bundle --jobs=4 --retry=3
|
|
19
|
+
- save_cache:
|
|
20
|
+
key: bundle-v1-<< parameters.ruby-version >>-{{ checksum "business.gemspec" }}
|
|
21
|
+
paths:
|
|
22
|
+
- vendor/bundle
|
|
23
|
+
- run:
|
|
24
|
+
name: Run tests
|
|
25
|
+
command: bundle exec rspec
|
|
26
|
+
|
|
27
|
+
workflows:
|
|
28
|
+
default:
|
|
29
|
+
jobs:
|
|
30
|
+
- test:
|
|
31
|
+
name: Ruby << matrix.ruby-version >>
|
|
32
|
+
matrix:
|
|
33
|
+
parameters:
|
|
34
|
+
ruby-version: ["2.4.9", "2.5.8", "2.6.6", "2.7.1"]
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
## 2.0.0 - May 4, 2020
|
|
2
|
+
|
|
3
|
+
🚨 **BREAKING CHANGES** 🚨
|
|
4
|
+
|
|
5
|
+
For more on the breaking changes that have been introduced in v2.0.0 please [see the readme](README.md#v200-breaking-changes).
|
|
6
|
+
|
|
7
|
+
- Remove bundled calendars see [this pr](https://github.com/gocardless/business/pull/54) for more context. If you need to use any of the previously bundled calendars, [see here](https://github.com/gocardless/business/tree/b12c186ca6fd4ffdac85175742ff7e4d0a705ef4/lib/business/data)
|
|
8
|
+
- `Business::Calendar.load_paths=` is now required
|
|
9
|
+
|
|
10
|
+
## 1.18.0 - April 30, 2020
|
|
11
|
+
|
|
12
|
+
### Note we have dropped support for Ruby < 2.4.x
|
|
13
|
+
|
|
14
|
+
- Correct Danish public holidays
|
|
15
|
+
|
|
16
|
+
## 1.17.1 - November 19, 2019
|
|
17
|
+
|
|
18
|
+
- Change May Bank Holiday 2020 for UK (Bacs) - this was moved to the 8th.
|
|
19
|
+
- Add 2020 holidays for PAD.
|
|
20
|
+
|
|
21
|
+
## 1.17.0 - October 30, 2019
|
|
22
|
+
|
|
23
|
+
- Add holiday calendar for France (Target(SEPA) + French bank holidays)
|
|
24
|
+
|
|
25
|
+
## 1.16.1 - September 2, 2019
|
|
26
|
+
|
|
27
|
+
- Fix holiday calendar for ACH U.S.
|
|
28
|
+
|
|
1
29
|
## 1.16.0 - January 17, 2019
|
|
2
30
|
|
|
3
31
|
- Add holiday calendar for ACH U.S.
|
data/README.md
CHANGED
|
@@ -1,84 +1,139 @@
|
|
|
1
1
|
# Business
|
|
2
2
|
|
|
3
3
|
[](http://badge.fury.io/rb/business)
|
|
4
|
-
[](https://circleci.com/gh/gocardless/business)
|
|
5
5
|
|
|
6
6
|
Date calculations based on business calendars.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
- [v2.0.0 breaking changes](#v200-breaking-changes)
|
|
9
|
+
- [Getting Started](#getting-started)
|
|
10
|
+
- [Creating a calendar](#creating-a-calendar)
|
|
11
|
+
- [Using a calendar file](#use-a-calendar-file)
|
|
12
|
+
- [Checking for business days](#checking-for-business-days)
|
|
13
|
+
- [Business day arithmetic](#business-day-arithmetic)
|
|
14
|
+
- [But other libraries already do this](#but-other-libraries-already-do-this)
|
|
15
|
+
- [License & Contributing](#license--contributing)
|
|
9
16
|
|
|
10
|
-
|
|
17
|
+
## v2.0.0 breaking changes
|
|
18
|
+
|
|
19
|
+
We have removed the bundled calendars as of version 2.0.0, if you need the calendars that were included:
|
|
20
|
+
|
|
21
|
+
- Download the calendars you wish to use from [v1.18.0](https://github.com/gocardless/business/tree/b12c186ca6fd4ffdac85175742ff7e4d0a705ef4/lib/business/data)
|
|
22
|
+
- Place them in a suitable directory in your project, typically `lib/calendars`
|
|
23
|
+
- Add this directory path to your instance of `Business::Calendar` using the `load_paths` method.dd the directory to where you placed the yml files before you load the calendar
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
Business::Calendar.load_paths("lib/calendars") # your_project/lib/calendars/ contains bacs.yml
|
|
27
|
+
Business::Calendar.load("bacs")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If you wish to stay on the last version that contained bundled calendars, pin `business` to `v1.18.0`
|
|
31
|
+
|
|
32
|
+
```ruby
|
|
33
|
+
# Gemfile
|
|
34
|
+
gem "business", "v1.18.0"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Getting started
|
|
38
|
+
|
|
39
|
+
To install business, simply:
|
|
11
40
|
|
|
12
41
|
```bash
|
|
13
|
-
|
|
42
|
+
gem install business
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If you are using a Gemfile:
|
|
46
|
+
|
|
47
|
+
```ruby
|
|
48
|
+
gem "business", "~> 2.0"
|
|
14
49
|
```
|
|
15
50
|
|
|
16
|
-
###
|
|
51
|
+
### Creating a calendar
|
|
17
52
|
|
|
18
|
-
Get started with business by creating an instance of the calendar class,
|
|
19
|
-
passing in a hash that specifies with days of the week are considered working
|
|
20
|
-
days, and which days are holidays.
|
|
53
|
+
Get started with business by creating an instance of the calendar class, that accepts a hash that specifies which days of the week are considered working days, which days are holidays and which are extra working dates.
|
|
21
54
|
|
|
22
55
|
```ruby
|
|
23
56
|
calendar = Business::Calendar.new(
|
|
24
57
|
working_days: %w( mon tue wed thu fri ),
|
|
25
58
|
holidays: ["01/01/2014", "03/01/2014"] # array items are either parseable date strings, or real Date objects
|
|
59
|
+
extra_working_dates: [nil], # Makes the calendar to consider a weekend day as a working day.
|
|
26
60
|
)
|
|
27
61
|
```
|
|
28
62
|
|
|
29
|
-
|
|
63
|
+
### Use a calendar file
|
|
30
64
|
|
|
31
|
-
|
|
32
|
-
details). Load them by calling the `load` class method on `Calendar`. The
|
|
33
|
-
`load_cached` variant of this method caches the calendars by name after loading
|
|
34
|
-
them, to avoid reading and parsing the config file multiple times.
|
|
65
|
+
Defining a calendar as a Ruby object may not be convenient, so we provide a way of defining these calendars as YAML. Below we will walk through the necessary [steps](#example-calendar) to build your first calendar. All keys are optional and will default to the following:
|
|
35
66
|
|
|
36
|
-
|
|
37
|
-
calendar = Business::Calendar.load("weekdays")
|
|
38
|
-
calendar = Business::Calendar.load_cached("weekdays")
|
|
39
|
-
```
|
|
67
|
+
Note: Elements of `holidays` and `extra_working_dates` may be either strings that `Date.parse()` [can understand](https://ruby-doc.org/stdlib-2.7.1/libdoc/date/rdoc/Date.html#method-c-parse), or `YYYY-MM-DD` (which is considered as a Date by Ruby YAML itself)[https://github.com/ruby/psych/blob/6ec6e475e8afcf7868b0407fc08014aed886ecf1/lib/psych/scalar_scanner.rb#L60].
|
|
40
68
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
69
|
+
#### YAML file Structure
|
|
70
|
+
|
|
71
|
+
```yml
|
|
72
|
+
working_days: # Optional, default [Monday-Friday]
|
|
73
|
+
-
|
|
74
|
+
holidays: # Optional, default: [] ie: "no holidays" assumed
|
|
75
|
+
-
|
|
76
|
+
extra_working_dates: # Optional, default: [], ie: no changes in `working_days` will happen
|
|
77
|
+
-
|
|
78
|
+
```
|
|
44
79
|
|
|
45
|
-
|
|
46
|
-
eiter strings that `Date.parse()` can understand,
|
|
47
|
-
or YYYY-MM-DD (which is considered as a Date by Ruby YAML itself).
|
|
80
|
+
#### Example calendar
|
|
48
81
|
|
|
49
82
|
```yaml
|
|
83
|
+
# lib/calendars/my_calendar.yml
|
|
84
|
+
working_days:
|
|
85
|
+
- Monday
|
|
86
|
+
- Wednesday
|
|
87
|
+
- Friday
|
|
50
88
|
holidays:
|
|
51
|
-
-
|
|
89
|
+
- 1st April 2020
|
|
90
|
+
- 2021-04-01
|
|
91
|
+
extra_working_dates:
|
|
92
|
+
- 9th March 2020 # A Saturday
|
|
52
93
|
```
|
|
53
94
|
|
|
54
|
-
|
|
95
|
+
Ensure the calendar file is saved to a directory that will hold all your calendars, typically `lib/calendars`, then add this directory to your instance of `Business::Calendar` using the `load_paths` method before you call your calendar.
|
|
55
96
|
|
|
56
|
-
|
|
57
|
-
working days or working dates, and is not a holiday), use the `business_day?`
|
|
58
|
-
method on `Calendar`.
|
|
97
|
+
`load_paths` also accepts an array of plain Ruby hashes with the format:
|
|
59
98
|
|
|
60
99
|
```ruby
|
|
61
|
-
|
|
62
|
-
# => true
|
|
63
|
-
calendar.business_day?(Date.parse("Sunday, 8 June 2014"))
|
|
64
|
-
# => false
|
|
100
|
+
{ "calendar_name" => { "working_days" => [] }
|
|
65
101
|
```
|
|
66
102
|
|
|
67
|
-
|
|
103
|
+
#### Example loading both a path and ruby hashes
|
|
104
|
+
|
|
105
|
+
```ruby
|
|
106
|
+
Business::Calendar.load_paths = [
|
|
107
|
+
"lib/calendars",
|
|
108
|
+
{ "foo_calendar" => { "working_days" => ["monday"] } },
|
|
109
|
+
{ "bar_calendar" => { "working_days" => ["sunday"] } },
|
|
110
|
+
]
|
|
111
|
+
```
|
|
68
112
|
|
|
69
|
-
|
|
70
|
-
stored in as an additional calendar load path:
|
|
113
|
+
Now you can load the calendar by calling the `Business::Calendar.load(calendar_name)`. In order to avoid parsing the calendar file multiple times, there is a `Business::Calendar.load_cached(calendar_name)` method that caches the calendars by name after loading them.
|
|
71
114
|
|
|
72
115
|
```ruby
|
|
73
|
-
Business::Calendar.
|
|
116
|
+
calendar = Business::Calendar.load("my_calendar") # lib/calendars/my_calendar.yml
|
|
117
|
+
calendar = Business::Calendar.load("foo_calendar")
|
|
118
|
+
# or
|
|
119
|
+
calendar = Business::Calendar.load_cached("my_calendar")
|
|
120
|
+
calendar = Business::Calendar.load_cached("foo_calendar")
|
|
74
121
|
```
|
|
75
122
|
|
|
76
|
-
|
|
123
|
+
## Checking for business days
|
|
77
124
|
|
|
78
|
-
|
|
125
|
+
To check whether a given date is a business day (falls on one of the specified working days or working dates, and is not a holiday), use the `business_day?` method on `Business::Calendar`.
|
|
79
126
|
|
|
80
|
-
|
|
81
|
-
|
|
127
|
+
```ruby
|
|
128
|
+
calendar.business_day?(Date.parse("Monday, 9 June 2014"))
|
|
129
|
+
# => true
|
|
130
|
+
calendar.business_day?(Date.parse("Sunday, 8 June 2014"))
|
|
131
|
+
# => false
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Business day arithmetic
|
|
135
|
+
|
|
136
|
+
The `add_business_days` and `subtract_business_days` are used to perform business day arithmetic on dates.
|
|
82
137
|
|
|
83
138
|
```ruby
|
|
84
139
|
date = Date.parse("Thursday, 12 June 2014")
|
|
@@ -88,10 +143,7 @@ calendar.subtract_business_days(date, 4).strftime("%A, %d %B %Y")
|
|
|
88
143
|
# => "Friday, 06 June 2014"
|
|
89
144
|
```
|
|
90
145
|
|
|
91
|
-
The `roll_forward` and `roll_backward` methods snap a date to a nearby business
|
|
92
|
-
day. If provided with a business day, they will return that date. Otherwise,
|
|
93
|
-
they will advance (forward for `roll_forward` and backward for `roll_backward`)
|
|
94
|
-
until a business day is found.
|
|
146
|
+
The `roll_forward` and `roll_backward` methods snap a date to a nearby business day. If provided with a business day, they will return that date. Otherwise, they will advance (forward for `roll_forward` and backward for `roll_backward`) until a business day is found.
|
|
95
147
|
|
|
96
148
|
```ruby
|
|
97
149
|
date = Date.parse("Saturday, 14 June 2014")
|
|
@@ -101,10 +153,7 @@ calendar.roll_backward(date).strftime("%A, %d %B %Y")
|
|
|
101
153
|
# => "Friday, 13 June 2014"
|
|
102
154
|
```
|
|
103
155
|
|
|
104
|
-
To count the number of business days between two dates, pass the dates to
|
|
105
|
-
`business_days_between`. This method counts from start of the first date to
|
|
106
|
-
start of the second date. So, assuming no holidays, there would be two business
|
|
107
|
-
days between a Monday and a Wednesday.
|
|
156
|
+
To count the number of business days between two dates, pass the dates to `business_days_between`. This method counts from start of the first date to start of the second date. So, assuming no holidays, there would be two business days between a Monday and a Wednesday.
|
|
108
157
|
|
|
109
158
|
```ruby
|
|
110
159
|
date = Date.parse("Saturday, 14 June 2014")
|
|
@@ -112,38 +161,19 @@ calendar.business_days_between(date, date + 7)
|
|
|
112
161
|
# => 5
|
|
113
162
|
```
|
|
114
163
|
|
|
115
|
-
### Included Calendars
|
|
116
|
-
|
|
117
|
-
We include some calendar data with this Gem but give no guarantees of its
|
|
118
|
-
accuracy.
|
|
119
|
-
The calendars that we include are:
|
|
120
|
-
|
|
121
|
-
* Bacs
|
|
122
|
-
* Bankgirot
|
|
123
|
-
* BECS (Australia)
|
|
124
|
-
* BECSNZ (New Zealand)
|
|
125
|
-
* PAD (Canada)
|
|
126
|
-
* Betalingsservice
|
|
127
|
-
* Target (SEPA)
|
|
128
|
-
|
|
129
164
|
## But other libraries already do this
|
|
130
165
|
|
|
131
|
-
Another gem, [business_time](https://github.com/bokmann/business_time), also
|
|
132
|
-
|
|
133
|
-
|
|
166
|
+
Another gem, [business_time](https://github.com/bokmann/business_time), also exists for this purpose. We previously used business_time, but encountered several issues that prompted us to start business.
|
|
167
|
+
|
|
168
|
+
Firstly, business_time works by monkey-patching `Date`, `Time`, and `FixNum`. While this enables syntax like `Time.now + 1.business_day`, it means that all configuration has to be global. GoCardless handles payments across several geographies, so being able to work with multiple working-day calendars is
|
|
169
|
+
essential for us. Business provides a simple `Calendar` class, that is initialized with a configuration that specifies which days of the week are considered to be working days, and which dates are holidays.
|
|
134
170
|
|
|
135
|
-
|
|
136
|
-
While this enables syntax like `Time.now + 1.business_day`, it means that all
|
|
137
|
-
configuration has to be global. GoCardless handles payments across several
|
|
138
|
-
geographies, so being able to work with multiple working-day calendars is
|
|
139
|
-
essential for us. Business provides a simple `Calendar` class, that is
|
|
140
|
-
initialized with a configuration that specifies which days of the week are
|
|
141
|
-
considered to be working days, and which dates are holidays.
|
|
171
|
+
Secondly, business_time supports calculations on times as well as dates. For our purposes, date-based calculations are sufficient. Supporting time-based calculations as well makes the code significantly more complex. We chose to avoid this extra complexity by sticking solely to date-based mathematics.
|
|
142
172
|
|
|
143
|
-
|
|
144
|
-
our purposes, date-based calculations are sufficient. Supporting time-based
|
|
145
|
-
calculations as well makes the code significantly more complex. We chose to
|
|
146
|
-
avoid this extra complexity by sticking solely to date-based mathematics.
|
|
173
|
+
<p align="center"><img src="http://3.bp.blogspot.com/-aq4iOz2OZzs/Ty8xaQwMhtI/AAAAAAAABrM/-vn4tcRA9-4/s1600/daily-morning-awesomeness-243.jpeg" alt="I'm late for business" width="250"/></p>
|
|
147
174
|
|
|
175
|
+
## License & Contributing
|
|
176
|
+
- business is available as open source under the terms of the [MIT License](LICENSE).
|
|
177
|
+
- Bug reports and pull requests are welcome on GitHub at https://github.com/gocardless/business.
|
|
148
178
|
|
|
149
|
-
|
|
179
|
+
GoCardless ♥ open source. If you do too, come [join us](https://gocardless.com/about/jobs).
|
data/business.gemspec
CHANGED
data/lib/business/calendar.rb
CHANGED
|
@@ -1,32 +1,41 @@
|
|
|
1
1
|
require 'yaml'
|
|
2
|
+
require 'date'
|
|
2
3
|
|
|
3
4
|
module Business
|
|
4
5
|
class Calendar
|
|
5
6
|
class << self
|
|
6
|
-
attr_accessor :
|
|
7
|
+
attr_accessor :load_paths
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
def self.calendar_directories
|
|
10
|
-
|
|
11
|
-
directories + [File.join(File.dirname(__FILE__), 'data')]
|
|
11
|
+
@load_paths
|
|
12
12
|
end
|
|
13
13
|
private_class_method :calendar_directories
|
|
14
14
|
|
|
15
|
-
def self.load(
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
def self.load(calendar_name)
|
|
16
|
+
data = calendar_directories.detect do |path|
|
|
17
|
+
if path.is_a?(Hash)
|
|
18
|
+
break path[calendar_name] if path[calendar_name]
|
|
19
|
+
else
|
|
20
|
+
next unless File.exists?(File.join(path, "#{calendar_name}.yml"))
|
|
21
|
+
|
|
22
|
+
break YAML.load_file(File.join(path, "#{calendar_name}.yml"))
|
|
23
|
+
end
|
|
18
24
|
end
|
|
19
|
-
raise "No such calendar '#{calendar}'" unless directory
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
raise "No such calendar '#{calendar_name}'" unless data
|
|
27
|
+
|
|
22
28
|
valid_keys = %w(holidays working_days extra_working_dates)
|
|
23
29
|
|
|
24
|
-
unless (
|
|
30
|
+
unless (data.keys - valid_keys).empty?
|
|
25
31
|
raise "Only valid keys are: #{valid_keys.join(', ')}"
|
|
26
32
|
end
|
|
27
33
|
|
|
28
|
-
self.new(
|
|
29
|
-
|
|
34
|
+
self.new(
|
|
35
|
+
holidays: data['holidays'],
|
|
36
|
+
working_days: data['working_days'],
|
|
37
|
+
extra_working_dates: data['extra_working_dates'],
|
|
38
|
+
)
|
|
30
39
|
end
|
|
31
40
|
|
|
32
41
|
@lock = Mutex.new
|
data/lib/business/version.rb
CHANGED
data/spec/calendar_spec.rb
CHANGED
|
@@ -8,27 +8,17 @@ end
|
|
|
8
8
|
|
|
9
9
|
describe Business::Calendar do
|
|
10
10
|
describe ".load" do
|
|
11
|
+
let(:dummy_calendar) { { "working_days" => ["monday"] } }
|
|
12
|
+
|
|
11
13
|
before do
|
|
12
14
|
fixture_path = File.join(File.dirname(__FILE__), 'fixtures', 'calendars')
|
|
13
|
-
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
context "when given a valid calendar" do
|
|
17
|
-
subject { Business::Calendar.load("weekdays") }
|
|
18
|
-
|
|
19
|
-
it "loads the yaml file" do
|
|
20
|
-
expect(YAML).to receive(:load_file) { |path|
|
|
21
|
-
expect(path).to match(/weekdays\.yml$/)
|
|
22
|
-
}.and_return({})
|
|
23
|
-
subject
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it { is_expected.to be_a Business::Calendar }
|
|
15
|
+
described_class.load_paths = [fixture_path, { "foobar" => dummy_calendar }]
|
|
27
16
|
end
|
|
28
17
|
|
|
29
18
|
context "when given a calendar from a custom directory" do
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
subject { described_class.load("ecb") }
|
|
20
|
+
|
|
21
|
+
after { described_class.load_paths = nil }
|
|
32
22
|
|
|
33
23
|
it "loads the yaml file" do
|
|
34
24
|
expect(YAML).to receive(:load_file) { |path|
|
|
@@ -49,6 +39,12 @@ describe Business::Calendar do
|
|
|
49
39
|
end
|
|
50
40
|
end
|
|
51
41
|
|
|
42
|
+
context "when loading a calendar as a hash" do
|
|
43
|
+
subject { described_class.load("foobar") }
|
|
44
|
+
|
|
45
|
+
it { is_expected.to be_a Business::Calendar }
|
|
46
|
+
end
|
|
47
|
+
|
|
52
48
|
context "when given a calendar that does not exist" do
|
|
53
49
|
subject { Business::Calendar.load("invalid-calendar") }
|
|
54
50
|
specify { expect { subject }.to raise_error(/No such calendar/) }
|
|
@@ -72,19 +68,6 @@ describe Business::Calendar do
|
|
|
72
68
|
end
|
|
73
69
|
end
|
|
74
70
|
|
|
75
|
-
describe "bundled calendars" do
|
|
76
|
-
calendars = Dir.glob("../lib/business/data*.yml")
|
|
77
|
-
.map { |f| File.basename(f, ".yml") }
|
|
78
|
-
|
|
79
|
-
calendars.each do |calendar|
|
|
80
|
-
describe calendar do
|
|
81
|
-
it "should load without issues" do
|
|
82
|
-
expect { Business::Calendar.load(calendar) }.not_to raise_error
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
71
|
describe "#set_working_days" do
|
|
89
72
|
let(:calendar) { Business::Calendar.new({}) }
|
|
90
73
|
let(:working_days) { [] }
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: business
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Harry Marr
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '3.1'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rspec_junit_formatter
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.4.1
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.4.1
|
|
27
41
|
description: Date calculations based on business calendars
|
|
28
42
|
email:
|
|
29
43
|
- developers@gocardless.com
|
|
@@ -31,9 +45,9 @@ executables: []
|
|
|
31
45
|
extensions: []
|
|
32
46
|
extra_rdoc_files: []
|
|
33
47
|
files:
|
|
48
|
+
- ".circleci/config.yml"
|
|
34
49
|
- ".gitignore"
|
|
35
50
|
- ".ruby-version"
|
|
36
|
-
- ".travis.yml"
|
|
37
51
|
- CHANGELOG.md
|
|
38
52
|
- Gemfile
|
|
39
53
|
- LICENSE
|
|
@@ -41,15 +55,6 @@ files:
|
|
|
41
55
|
- business.gemspec
|
|
42
56
|
- lib/business.rb
|
|
43
57
|
- lib/business/calendar.rb
|
|
44
|
-
- lib/business/data/achus.yml
|
|
45
|
-
- lib/business/data/bacs.yml
|
|
46
|
-
- lib/business/data/bankgirot.yml
|
|
47
|
-
- lib/business/data/becs.yml
|
|
48
|
-
- lib/business/data/becsnz.yml
|
|
49
|
-
- lib/business/data/betalingsservice.yml
|
|
50
|
-
- lib/business/data/padca.yml
|
|
51
|
-
- lib/business/data/target.yml
|
|
52
|
-
- lib/business/data/weekdays.yml
|
|
53
58
|
- lib/business/version.rb
|
|
54
59
|
- spec/calendar_spec.rb
|
|
55
60
|
- spec/fixtures/calendars/bacs.yml
|
|
@@ -74,8 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
74
79
|
- !ruby/object:Gem::Version
|
|
75
80
|
version: '0'
|
|
76
81
|
requirements: []
|
|
77
|
-
|
|
78
|
-
rubygems_version: 2.7.6
|
|
82
|
+
rubygems_version: 3.1.2
|
|
79
83
|
signing_key:
|
|
80
84
|
specification_version: 4
|
|
81
85
|
summary: Date calculations based on business calendars
|
data/.travis.yml
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
|
|
3
|
-
rvm:
|
|
4
|
-
- 2.5.1
|
|
5
|
-
- 2.4.3
|
|
6
|
-
- 2.3.7
|
|
7
|
-
- 2.2.10
|
|
8
|
-
- 2.1.10
|
|
9
|
-
|
|
10
|
-
sudo: false
|
|
11
|
-
|
|
12
|
-
before_install:
|
|
13
|
-
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
|
14
|
-
- gem install bundler -v '< 2'
|
|
15
|
-
|
|
16
|
-
script:
|
|
17
|
-
- bundle exec rspec spec
|
data/lib/business/data/achus.yml
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2019
|
|
10
|
-
- January 21st, 2019
|
|
11
|
-
- February 18th, 2019
|
|
12
|
-
- May 27th, 2019
|
|
13
|
-
- July 4th, 2019
|
|
14
|
-
- October 14th, 2019
|
|
15
|
-
- November 11th, 2019
|
|
16
|
-
- November 28th, 2019
|
|
17
|
-
- December 25th, 2019
|
|
18
|
-
- January 1st, 2020
|
|
19
|
-
- January 20th, 2020
|
|
20
|
-
- February 17th, 2020
|
|
21
|
-
- May 25th, 2020
|
|
22
|
-
- July 4th, 2020
|
|
23
|
-
- September 7th, 2020
|
|
24
|
-
- October 12th, 2020
|
|
25
|
-
- November 11th, 2020
|
|
26
|
-
- November 26th, 2020
|
|
27
|
-
- December 25th, 2020
|
|
28
|
-
- January 1st, 2021
|
|
29
|
-
- January 18th, 2021
|
|
30
|
-
- February 15th, 2021
|
|
31
|
-
- May 31st, 2021
|
|
32
|
-
- July 5th, 2021
|
|
33
|
-
- September 6th, 2021
|
|
34
|
-
- October 11th, 2021
|
|
35
|
-
- November 11th, 2021
|
|
36
|
-
- November 25th, 2021
|
|
37
|
-
- December 25th, 2021
|
|
38
|
-
- January 1st, 2022
|
|
39
|
-
- January 17th, 2022
|
|
40
|
-
- February 21st, 2022
|
|
41
|
-
- May 30th, 2022
|
|
42
|
-
- July 4th, 2022
|
|
43
|
-
- September 5th, 2022
|
|
44
|
-
- October 10th, 2022
|
|
45
|
-
- November 11th, 2022
|
|
46
|
-
- November 24th, 2022
|
|
47
|
-
- December 26th, 2022
|
|
48
|
-
- January 2nd, 2023
|
|
49
|
-
- January 16th, 2023
|
|
50
|
-
- February 20th, 2023
|
|
51
|
-
- May 29th, 2023
|
|
52
|
-
- July 4th, 2023
|
|
53
|
-
- September 4th, 2023
|
|
54
|
-
- October 9th, 2023
|
|
55
|
-
- November 11th, 2023
|
|
56
|
-
- November 23rd, 2023
|
|
57
|
-
- December 25th, 2023
|
data/lib/business/data/bacs.yml
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2013
|
|
10
|
-
- March 29th, 2013
|
|
11
|
-
- April 1st, 2013
|
|
12
|
-
- May 6th, 2013
|
|
13
|
-
- May 27th, 2013
|
|
14
|
-
- August 26th, 2013
|
|
15
|
-
- December 25th, 2013
|
|
16
|
-
- December 26th, 2013
|
|
17
|
-
- January 1st, 2014
|
|
18
|
-
- April 18th, 2014
|
|
19
|
-
- April 21st, 2014
|
|
20
|
-
- May 5th, 2014
|
|
21
|
-
- May 26th, 2014
|
|
22
|
-
- August 25th, 2014
|
|
23
|
-
- December 25th, 2014
|
|
24
|
-
- December 26th, 2014
|
|
25
|
-
- January 1st, 2015
|
|
26
|
-
- April 3rd, 2015
|
|
27
|
-
- April 6th, 2015
|
|
28
|
-
- May 4th, 2015
|
|
29
|
-
- May 25th, 2015
|
|
30
|
-
- August 31st, 2015
|
|
31
|
-
- December 25th, 2015
|
|
32
|
-
- December 28th, 2015
|
|
33
|
-
- January 1st, 2016
|
|
34
|
-
- March 25th, 2016
|
|
35
|
-
- March 28th, 2016
|
|
36
|
-
- May 2nd, 2016
|
|
37
|
-
- May 30th, 2016
|
|
38
|
-
- August 29th, 2016
|
|
39
|
-
- December 26th, 2016
|
|
40
|
-
- December 27th, 2016
|
|
41
|
-
- January 2nd, 2017
|
|
42
|
-
- April 14th, 2017
|
|
43
|
-
- April 17th, 2017
|
|
44
|
-
- May 1st, 2017
|
|
45
|
-
- May 29th, 2017
|
|
46
|
-
- August 28th, 2017
|
|
47
|
-
- December 25th, 2017
|
|
48
|
-
- December 26th, 2017
|
|
49
|
-
- January 1st, 2018
|
|
50
|
-
- March 30th, 2018
|
|
51
|
-
- April 2nd, 2018
|
|
52
|
-
- May 7th, 2018
|
|
53
|
-
- May 28th, 2018
|
|
54
|
-
- August 27th, 2018
|
|
55
|
-
- December 25th, 2018
|
|
56
|
-
- December 26th, 2018
|
|
57
|
-
- January 1st, 2019
|
|
58
|
-
- April 19th, 2019
|
|
59
|
-
- April 22nd, 2019
|
|
60
|
-
- May 6th, 2019
|
|
61
|
-
- May 27th, 2019
|
|
62
|
-
- August 26th, 2019
|
|
63
|
-
- December 25th, 2019
|
|
64
|
-
- December 26th, 2019
|
|
65
|
-
- January 1st, 2020
|
|
66
|
-
- April 10th, 2020
|
|
67
|
-
- April 13th, 2020
|
|
68
|
-
- May 4th, 2020
|
|
69
|
-
- May 25th, 2020
|
|
70
|
-
- August 31st, 2020
|
|
71
|
-
- December 25th, 2020
|
|
72
|
-
- December 26th, 2020
|
|
73
|
-
- December 28th, 2020
|
|
74
|
-
- January 1st, 2021
|
|
75
|
-
- April 2nd, 2021
|
|
76
|
-
- April 5th, 2021
|
|
77
|
-
- May 3rd, 2021
|
|
78
|
-
- May 31st, 2021
|
|
79
|
-
- August 30th, 2021
|
|
80
|
-
- December 27th, 2021
|
|
81
|
-
- December 28th, 2021
|
|
82
|
-
- January 3rd, 2022
|
|
83
|
-
- April 15th, 2022
|
|
84
|
-
- April 18th, 2022
|
|
85
|
-
- May 2nd, 2022
|
|
86
|
-
- May 30th, 2022
|
|
87
|
-
- August 29th, 2022
|
|
88
|
-
- December 26th, 2022
|
|
89
|
-
- December 27th, 2022
|
|
90
|
-
- January 2nd, 2023
|
|
91
|
-
- April 7th, 2023
|
|
92
|
-
- April 10th, 2023
|
|
93
|
-
- May 1st, 2023
|
|
94
|
-
- May 29th, 2023
|
|
95
|
-
- August 28th, 2023
|
|
96
|
-
- December 25th, 2023
|
|
97
|
-
- December 26th, 2023
|
|
98
|
-
- January 1st, 2024
|
|
99
|
-
- March 29th, 2024
|
|
100
|
-
- April 1st, 2024
|
|
101
|
-
- May 6th, 2024
|
|
102
|
-
- May 27th, 2024
|
|
103
|
-
- August 26th, 2024
|
|
104
|
-
- December 25th, 2024
|
|
105
|
-
- December 26th, 2024
|
|
106
|
-
- January 1st, 2025
|
|
107
|
-
- April 18th, 2025
|
|
108
|
-
- April 21st, 2025
|
|
109
|
-
- May 5th, 2025
|
|
110
|
-
- May 26th, 2025
|
|
111
|
-
- August 25th, 2025
|
|
112
|
-
- December 25th, 2025
|
|
113
|
-
- December 26th, 2025
|
|
114
|
-
- January 1st, 2026
|
|
115
|
-
- April 3rd, 2026
|
|
116
|
-
- April 6th, 2026
|
|
117
|
-
- May 4th, 2026
|
|
118
|
-
- May 25th, 2026
|
|
119
|
-
- August 31st, 2026
|
|
120
|
-
- December 25th, 2026
|
|
121
|
-
- December 28th, 2026
|
|
122
|
-
- January 1st, 2027
|
|
123
|
-
- March 26th, 2027
|
|
124
|
-
- March 29th, 2027
|
|
125
|
-
- May 3rd, 2027
|
|
126
|
-
- May 31st, 2027
|
|
127
|
-
- August 30th, 2027
|
|
128
|
-
- December 27th, 2027
|
|
129
|
-
- December 28th, 2027
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2015
|
|
10
|
-
- January 6th, 2015
|
|
11
|
-
- April 3rd, 2015
|
|
12
|
-
- April 6th, 2015
|
|
13
|
-
- May 1st, 2015
|
|
14
|
-
- May 14th, 2015
|
|
15
|
-
- June 6th, 2015
|
|
16
|
-
- June 19th, 2015
|
|
17
|
-
- December 24th, 2015
|
|
18
|
-
- December 25th, 2015
|
|
19
|
-
- December 26th, 2015
|
|
20
|
-
- December 31st, 2015
|
|
21
|
-
- January 1st, 2016
|
|
22
|
-
- January 6th, 2016
|
|
23
|
-
- March 25th, 2016
|
|
24
|
-
- March 28th, 2016
|
|
25
|
-
- May 1st, 2016
|
|
26
|
-
- May 5th, 2016
|
|
27
|
-
- June 6th, 2016
|
|
28
|
-
- June 24th, 2016
|
|
29
|
-
- December 24th, 2016
|
|
30
|
-
- December 25th, 2016
|
|
31
|
-
- December 26th, 2016
|
|
32
|
-
- December 31st, 2016
|
|
33
|
-
- January 1st, 2017
|
|
34
|
-
- January 6th, 2017
|
|
35
|
-
- April 14th, 2017
|
|
36
|
-
- April 16th, 2017
|
|
37
|
-
- April 17th, 2017
|
|
38
|
-
- May 1st, 2017
|
|
39
|
-
- May 25th, 2017
|
|
40
|
-
- June 4th, 2017
|
|
41
|
-
- June 6th, 2017
|
|
42
|
-
- June 23rd, 2017
|
|
43
|
-
- June 24th, 2017
|
|
44
|
-
- November 4th, 2017
|
|
45
|
-
- December 24th, 2017
|
|
46
|
-
- December 25th, 2017
|
|
47
|
-
- December 26th, 2017
|
|
48
|
-
- December 31st, 2017
|
|
49
|
-
- January 1st, 2018
|
|
50
|
-
- January 6th, 2018
|
|
51
|
-
- March 30th, 2018
|
|
52
|
-
- April 1st, 2018
|
|
53
|
-
- April 2nd, 2018
|
|
54
|
-
- May 1st, 2018
|
|
55
|
-
- May 10th, 2018
|
|
56
|
-
- May 20th, 2018
|
|
57
|
-
- June 6th, 2018
|
|
58
|
-
- June 22rd, 2018
|
|
59
|
-
- June 23rd, 2018
|
|
60
|
-
- November 3rd, 2018
|
|
61
|
-
- December 24th, 2018
|
|
62
|
-
- December 25th, 2018
|
|
63
|
-
- December 26th, 2018
|
|
64
|
-
- December 31st, 2018
|
|
65
|
-
- January 1st, 2019
|
|
66
|
-
- January 6th, 2019
|
|
67
|
-
- April 19th, 2019
|
|
68
|
-
- April 21st, 2019
|
|
69
|
-
- April 22nd, 2019
|
|
70
|
-
- May 1st, 2019
|
|
71
|
-
- May 30th, 2019
|
|
72
|
-
- June 6th, 2019
|
|
73
|
-
- June 9th, 2019
|
|
74
|
-
- June 21st, 2019
|
|
75
|
-
- June 22nd, 2019
|
|
76
|
-
- November 2nd, 2019
|
|
77
|
-
- December 24th, 2019
|
|
78
|
-
- December 25th, 2019
|
|
79
|
-
- December 26th, 2019
|
|
80
|
-
- December 31st, 2019
|
|
81
|
-
- January 1st, 2020
|
|
82
|
-
- January 6th, 2020
|
|
83
|
-
- April 10th, 2020
|
|
84
|
-
- April 12th, 2020
|
|
85
|
-
- April 13th, 2020
|
|
86
|
-
- May 1st, 2020
|
|
87
|
-
- May 21st, 2020
|
|
88
|
-
- May 31st, 2020
|
|
89
|
-
- June 6th, 2020
|
|
90
|
-
- June 19th, 2020
|
|
91
|
-
- June 20th, 2020
|
|
92
|
-
- October 31st, 2020
|
|
93
|
-
- December 24th, 2020
|
|
94
|
-
- December 25th, 2020
|
|
95
|
-
- December 26th, 2020
|
|
96
|
-
- December 31st, 2020
|
|
97
|
-
- January 1st, 2021
|
|
98
|
-
- January 6th, 2021
|
|
99
|
-
- April 2nd, 2021
|
|
100
|
-
- April 4th, 2021
|
|
101
|
-
- April 5th, 2021
|
|
102
|
-
- May 1st, 2021
|
|
103
|
-
- May 13th, 2021
|
|
104
|
-
- May 23rd, 2021
|
|
105
|
-
- June 6th, 2021
|
|
106
|
-
- June 25th, 2021
|
|
107
|
-
- June 26th, 2021
|
|
108
|
-
- November 6th, 2021
|
|
109
|
-
- December 24th, 2021
|
|
110
|
-
- December 25th, 2021
|
|
111
|
-
- December 26th, 2021
|
|
112
|
-
- December 31st, 2021
|
|
113
|
-
- January 1st, 2022
|
|
114
|
-
- January 6th, 2022
|
|
115
|
-
- April 15th, 2022
|
|
116
|
-
- April 17th, 2022
|
|
117
|
-
- April 18th, 2022
|
|
118
|
-
- May 1st, 2022
|
|
119
|
-
- May 26th, 2022
|
|
120
|
-
- June 5th, 2022
|
|
121
|
-
- June 6th, 2022
|
|
122
|
-
- June 24th, 2022
|
|
123
|
-
- June 25th, 2022
|
|
124
|
-
- November 5th, 2022
|
|
125
|
-
- December 24th, 2022
|
|
126
|
-
- December 25th, 2022
|
|
127
|
-
- December 26th, 2022
|
|
128
|
-
- December 31st, 2022
|
|
129
|
-
- January 1st, 2023
|
|
130
|
-
- January 6th, 2023
|
|
131
|
-
- April 7th, 2023
|
|
132
|
-
- April 9th, 2023
|
|
133
|
-
- April 10th, 2023
|
|
134
|
-
- May 1st, 2023
|
|
135
|
-
- May 18th, 2023
|
|
136
|
-
- May 28th, 2023
|
|
137
|
-
- June 6th, 2023
|
|
138
|
-
- June 23rd, 2023
|
|
139
|
-
- June 24th, 2023
|
|
140
|
-
- November 4th, 2023
|
|
141
|
-
- December 24th, 2023
|
|
142
|
-
- December 25th, 2023
|
|
143
|
-
- December 26th, 2023
|
|
144
|
-
- December 31st, 2023
|
|
145
|
-
- January 1st, 2024
|
|
146
|
-
- January 6th, 2024
|
|
147
|
-
- March 29th, 2024
|
|
148
|
-
- March 31st, 2024
|
|
149
|
-
- April 1st, 2024
|
|
150
|
-
- May 1st, 2024
|
|
151
|
-
- May 9th, 2024
|
|
152
|
-
- May 19th, 2024
|
|
153
|
-
- June 6th, 2024
|
|
154
|
-
- June 21st, 2023
|
|
155
|
-
- June 22nd, 2023
|
|
156
|
-
- November 2nd, 2024
|
|
157
|
-
- December 24th, 2024
|
|
158
|
-
- December 25th, 2024
|
|
159
|
-
- December 26th, 2024
|
|
160
|
-
- December 31st, 2024
|
|
161
|
-
- January 1st, 2025
|
|
162
|
-
- January 6th, 2025
|
|
163
|
-
- April 18th, 2025
|
|
164
|
-
- April 20th, 2025
|
|
165
|
-
- April 21st, 2025
|
|
166
|
-
- May 1st, 2025
|
|
167
|
-
- May 29th, 2025
|
|
168
|
-
- June 6th, 2025
|
|
169
|
-
- June 8th, 2025
|
|
170
|
-
- June 20th, 2025
|
|
171
|
-
- June 21st, 2025
|
|
172
|
-
- November 1st, 2025
|
|
173
|
-
- December 24th, 2025
|
|
174
|
-
- December 25th, 2025
|
|
175
|
-
- December 26th, 2025
|
|
176
|
-
- December 31st, 2025
|
|
177
|
-
- January 1st, 2026
|
|
178
|
-
- January 6th, 2026
|
|
179
|
-
- April 3rd, 2026
|
|
180
|
-
- April 5th, 2026
|
|
181
|
-
- April 6th, 2026
|
|
182
|
-
- May 1st, 2026
|
|
183
|
-
- May 14th, 2026
|
|
184
|
-
- May 24th, 2026
|
|
185
|
-
- June 6th, 2026
|
|
186
|
-
- June 19th, 2026
|
|
187
|
-
- June 20th, 2026
|
|
188
|
-
- October 31st, 2026
|
|
189
|
-
- December 24th, 2026
|
|
190
|
-
- December 25th, 2026
|
|
191
|
-
- December 26th, 2026
|
|
192
|
-
- December 31st, 2026
|
|
193
|
-
- January 1st, 2027
|
|
194
|
-
- January 6th, 2027
|
|
195
|
-
- March 26th, 2027
|
|
196
|
-
- March 28th, 2027
|
|
197
|
-
- March 29th, 2027
|
|
198
|
-
- May 1st, 2027
|
|
199
|
-
- May 6th, 2027
|
|
200
|
-
- May 16th, 2027
|
|
201
|
-
- June 6th, 2027
|
|
202
|
-
- June 25th, 2027
|
|
203
|
-
- June 26th, 2027
|
|
204
|
-
- November 6th, 2027
|
|
205
|
-
- December 24th, 2027
|
|
206
|
-
- December 25th, 2027
|
|
207
|
-
- December 26th, 2027
|
|
208
|
-
- December 31st, 2027
|
data/lib/business/data/becs.yml
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2017
|
|
10
|
-
- January 26th, 2017
|
|
11
|
-
- April 14th, 2017
|
|
12
|
-
- April 17th, 2017
|
|
13
|
-
- April 25th, 2017
|
|
14
|
-
- December 25th, 2017
|
|
15
|
-
- December 26th, 2017
|
|
16
|
-
- January 1st, 2018
|
|
17
|
-
- January 26th, 2018
|
|
18
|
-
- March 30th, 2018
|
|
19
|
-
- April 2nd, 2018
|
|
20
|
-
- April 25th, 2018
|
|
21
|
-
- December 25th, 2018
|
|
22
|
-
- December 26th, 2018
|
|
23
|
-
- January 1st, 2019
|
|
24
|
-
- January 28th, 2019
|
|
25
|
-
- April 19th, 2019
|
|
26
|
-
- April 22nd, 2019
|
|
27
|
-
- April 25th, 2019
|
|
28
|
-
- December 25th, 2019
|
|
29
|
-
- December 26th, 2019
|
|
30
|
-
- January 1st, 2020
|
|
31
|
-
- January 27th, 2020
|
|
32
|
-
- April 10th, 2020
|
|
33
|
-
- April 13nd, 2020
|
|
34
|
-
- April 25th, 2020
|
|
35
|
-
- December 25th, 2020
|
|
36
|
-
- December 28th, 2020
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 2nd, 2017
|
|
10
|
-
- January 3rd, 2017
|
|
11
|
-
- February 6th, 2017
|
|
12
|
-
- April 14th, 2017
|
|
13
|
-
- April 17th, 2017
|
|
14
|
-
- April 25th, 2017
|
|
15
|
-
- June 5th, 2017
|
|
16
|
-
- October 23rd, 2017
|
|
17
|
-
- December 25th, 2017
|
|
18
|
-
- December 26th, 2017
|
|
19
|
-
- January 1st, 2018
|
|
20
|
-
- January 2nd, 2018
|
|
21
|
-
- February 6th, 2018
|
|
22
|
-
- March 30th, 2018
|
|
23
|
-
- April 2nd, 2018
|
|
24
|
-
- April 25th, 2018
|
|
25
|
-
- June 4th, 2018
|
|
26
|
-
- October 22nd, 2018
|
|
27
|
-
- December 25th, 2018
|
|
28
|
-
- December 26th, 2018
|
|
29
|
-
- January 1st, 2019
|
|
30
|
-
- January 2nd, 2019
|
|
31
|
-
- February 6th, 2019
|
|
32
|
-
- April 19th, 2019
|
|
33
|
-
- April 22nd, 2019
|
|
34
|
-
- April 25th, 2019
|
|
35
|
-
- June 3rd, 2019
|
|
36
|
-
- October 28th, 2019
|
|
37
|
-
- December 25th, 2019
|
|
38
|
-
- December 26th, 2019
|
|
39
|
-
- January 1st, 2020
|
|
40
|
-
- January 2nd, 2020
|
|
41
|
-
- February 6th, 2020
|
|
42
|
-
- April 10th, 2020
|
|
43
|
-
- April 13th, 2020
|
|
44
|
-
- April 27th, 2020
|
|
45
|
-
- June 1st, 2020
|
|
46
|
-
- October 26th, 2020
|
|
47
|
-
- December 25th, 2020
|
|
48
|
-
- December 28th, 2020
|
|
49
|
-
|
|
50
|
-
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2017
|
|
10
|
-
- April 13th, 2017
|
|
11
|
-
- April 14th, 2017
|
|
12
|
-
- April 16th, 2017
|
|
13
|
-
- April 17th, 2017
|
|
14
|
-
- May 12th, 2017
|
|
15
|
-
- May 25th, 2017
|
|
16
|
-
- May 26th, 2017
|
|
17
|
-
- June 5th, 2017
|
|
18
|
-
- December 25th, 2017
|
|
19
|
-
- December 26th, 2017
|
|
20
|
-
- January 1st, 2018
|
|
21
|
-
- March 29th, 2018
|
|
22
|
-
- March 30th, 2018
|
|
23
|
-
- April 2nd, 2018
|
|
24
|
-
- April 27th, 2018
|
|
25
|
-
- May 10th, 2018
|
|
26
|
-
- May 11th, 2018
|
|
27
|
-
- May 21st, 2018
|
|
28
|
-
- June 5th, 2018
|
|
29
|
-
- December 25th, 2018
|
|
30
|
-
- December 26th, 2018
|
|
31
|
-
- December 31st, 2018
|
|
32
|
-
- January 1st, 2019
|
|
33
|
-
- April 18th, 2019
|
|
34
|
-
- April 19th, 2019
|
|
35
|
-
- April 22nd, 2019
|
|
36
|
-
- May 17th, 2019
|
|
37
|
-
- May 30th, 2019
|
|
38
|
-
- May 31st, 2019
|
|
39
|
-
- June 5th, 2019
|
|
40
|
-
- June 10th, 2019
|
|
41
|
-
- December 25th, 2019
|
|
42
|
-
- December 26th, 2019
|
|
43
|
-
- December 31st, 2019
|
|
44
|
-
- January 1st, 2020
|
|
45
|
-
- April 9th, 2020
|
|
46
|
-
- April 10th, 2020
|
|
47
|
-
- April 12th, 2020
|
|
48
|
-
- April 13th, 2020
|
|
49
|
-
- May 8th, 2020
|
|
50
|
-
- May 31st, 2020
|
|
51
|
-
- June 1st, 2020
|
|
52
|
-
- June 5th, 2020
|
|
53
|
-
- December 25th, 2020
|
|
54
|
-
- December 26th, 2020
|
data/lib/business/data/padca.yml
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2018
|
|
10
|
-
- March 30th, 2018
|
|
11
|
-
- May 21st, 2018
|
|
12
|
-
- July 2nd, 2018
|
|
13
|
-
- September 3rd, 2018
|
|
14
|
-
- October 8th, 2018
|
|
15
|
-
- November 12th, 2018
|
|
16
|
-
- December 25th, 2018
|
|
17
|
-
- December 26th, 2018
|
|
18
|
-
- January 1st, 2019
|
|
19
|
-
- April 19th, 2019
|
|
20
|
-
- May 20th, 2019
|
|
21
|
-
- July 1st, 2019
|
|
22
|
-
- September 2nd, 2019
|
|
23
|
-
- October 14th, 2019
|
|
24
|
-
- November 11th, 2019
|
|
25
|
-
- December 25th, 2019
|
|
26
|
-
- December 26th, 2019
|
|
27
|
-
- January 1st, 2020
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
working_days:
|
|
2
|
-
- monday
|
|
3
|
-
- tuesday
|
|
4
|
-
- wednesday
|
|
5
|
-
- thursday
|
|
6
|
-
- friday
|
|
7
|
-
|
|
8
|
-
holidays:
|
|
9
|
-
- January 1st, 2013
|
|
10
|
-
- March 29th, 2013
|
|
11
|
-
- April 1st, 2013
|
|
12
|
-
- May 1st, 2013
|
|
13
|
-
- December 25th, 2013
|
|
14
|
-
- December 26th, 2013
|
|
15
|
-
- January 1st, 2014
|
|
16
|
-
- April 18th, 2014
|
|
17
|
-
- April 21st, 2014
|
|
18
|
-
- May 1st, 2014
|
|
19
|
-
- December 25th, 2014
|
|
20
|
-
- December 26th, 2014
|
|
21
|
-
- January 1st, 2015
|
|
22
|
-
- April 3rd, 2015
|
|
23
|
-
- April 6th, 2015
|
|
24
|
-
- May 1st, 2015
|
|
25
|
-
- December 25th, 2015
|
|
26
|
-
- December 26th, 2015
|
|
27
|
-
- January 1st, 2016
|
|
28
|
-
- March 25th, 2016
|
|
29
|
-
- March 28th, 2016
|
|
30
|
-
- May 1st, 2016
|
|
31
|
-
- December 25th, 2016
|
|
32
|
-
- December 26th, 2016
|
|
33
|
-
- January 1st, 2017
|
|
34
|
-
- April 14th, 2017
|
|
35
|
-
- April 17th, 2017
|
|
36
|
-
- May 1st, 2017
|
|
37
|
-
- December 25th, 2017
|
|
38
|
-
- December 26th, 2017
|
|
39
|
-
- January 1st, 2018
|
|
40
|
-
- March 30th, 2018
|
|
41
|
-
- April 2nd, 2018
|
|
42
|
-
- May 1st, 2018
|
|
43
|
-
- December 25th, 2018
|
|
44
|
-
- December 26th, 2018
|
|
45
|
-
- January 1st, 2019
|
|
46
|
-
- April 19th, 2019
|
|
47
|
-
- April 22nd, 2019
|
|
48
|
-
- May 1st, 2019
|
|
49
|
-
- December 25th, 2019
|
|
50
|
-
- December 26th, 2019
|
|
51
|
-
- January 1st, 2020
|
|
52
|
-
- April 10th, 2020
|
|
53
|
-
- April 13th, 2020
|
|
54
|
-
- May 1st, 2020
|
|
55
|
-
- December 25th, 2020
|
|
56
|
-
- December 26th, 2020
|
|
57
|
-
- January 1st, 2021
|
|
58
|
-
- April 2nd, 2021
|
|
59
|
-
- April 5th, 2021
|
|
60
|
-
- May 1st, 2021
|
|
61
|
-
- December 25th, 2021
|
|
62
|
-
- December 26th, 2021
|
|
63
|
-
- January 1st, 2022
|
|
64
|
-
- April 15th, 2022
|
|
65
|
-
- April 18th, 2022
|
|
66
|
-
- May 1st, 2022
|
|
67
|
-
- December 25th, 2022
|
|
68
|
-
- December 26th, 2022
|
|
69
|
-
- January 1st, 2023
|
|
70
|
-
- April 7th, 2023
|
|
71
|
-
- April 10th, 2023
|
|
72
|
-
- May 1st, 2023
|
|
73
|
-
- December 25th, 2023
|
|
74
|
-
- December 26th, 2023
|
|
75
|
-
- January 1st, 2024
|
|
76
|
-
- March 29th, 2024
|
|
77
|
-
- April 1st, 2024
|
|
78
|
-
- May 1st, 2024
|
|
79
|
-
- December 25th, 2024
|
|
80
|
-
- December 26th, 2024
|
|
81
|
-
- January 1st, 2025
|
|
82
|
-
- April 18th, 2025
|
|
83
|
-
- April 21st, 2025
|
|
84
|
-
- May 1st, 2025
|
|
85
|
-
- December 25th, 2025
|
|
86
|
-
- December 26th, 2025
|
|
87
|
-
- January 1st, 2026
|
|
88
|
-
- April 3rd, 2026
|
|
89
|
-
- April 6th, 2026
|
|
90
|
-
- May 1st, 2026
|
|
91
|
-
- December 25th, 2026
|
|
92
|
-
- December 26th, 2026
|
|
93
|
-
- January 1st, 2027
|
|
94
|
-
- March 26th, 2027
|
|
95
|
-
- March 29th, 2027
|
|
96
|
-
- May 1st, 2027
|
|
97
|
-
- December 25th, 2027
|
|
98
|
-
- December 26th, 2027
|