holidays 4.6.0 → 4.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +5 -5
- data/Makefile +29 -0
- data/README.md +13 -1
- data/Rakefile +2 -2
- data/definitions/au.yaml +12 -9
- data/definitions/ca.yaml +17 -2
- data/definitions/ch.yaml +1 -1
- data/definitions/index.yaml +3 -0
- data/definitions/is.yaml +1 -1
- data/definitions/jp.yaml +19 -14
- data/definitions/kr.yaml +282 -0
- data/definitions/lu.yaml +56 -0
- data/definitions/my.yaml +51 -0
- data/definitions/ups.yaml +1 -1
- data/definitions/us.yaml +1 -1
- data/lib/generated_definitions/MANIFEST +3 -0
- data/lib/generated_definitions/REGIONS.rb +1 -1
- data/lib/generated_definitions/au.rb +11 -8
- data/lib/generated_definitions/ca.rb +1 -1
- data/lib/generated_definitions/ch.rb +1 -1
- data/lib/generated_definitions/europe.rb +2 -2
- data/lib/generated_definitions/is.rb +1 -1
- data/lib/generated_definitions/jp.rb +13 -15
- data/lib/generated_definitions/kr.rb +248 -0
- data/lib/generated_definitions/lu.rb +39 -0
- data/lib/generated_definitions/my.rb +36 -0
- data/lib/generated_definitions/north_america.rb +2 -2
- data/lib/generated_definitions/scandinavia.rb +1 -1
- data/lib/generated_definitions/ups.rb +1 -1
- data/lib/generated_definitions/us.rb +1 -1
- data/lib/holidays.rb +29 -51
- data/lib/holidays/core_extensions/date.rb +1 -1
- data/lib/holidays/definition/context/function_processor.rb +86 -0
- data/lib/holidays/definition/context/generator.rb +31 -6
- data/lib/holidays/definition/parser/custom_method.rb +1 -3
- data/lib/holidays/definition/repository/holidays_by_month.rb +1 -1
- data/lib/holidays/definition/validator/region.rb +1 -3
- data/lib/holidays/errors.rb +1 -0
- data/lib/holidays/factory/date_calculator.rb +37 -0
- data/lib/holidays/factory/definition.rb +96 -0
- data/lib/holidays/factory/finder.rb +70 -0
- data/lib/holidays/finder/context/between.rb +43 -0
- data/lib/holidays/{use_case → finder}/context/dates_driver_builder.rb +6 -4
- data/lib/holidays/finder/context/next_holiday.rb +57 -0
- data/lib/holidays/{option → finder}/context/parse_options.rb +6 -8
- data/lib/holidays/finder/context/search.rb +86 -0
- data/lib/holidays/finder/context/year_holiday.rb +57 -0
- data/lib/holidays/finder/rules/in_region.rb +23 -0
- data/lib/holidays/finder/rules/year_range.rb +82 -0
- data/lib/holidays/load_all_definitions.rb +7 -5
- data/lib/holidays/version.rb +1 -1
- data/test/coverage_report.rb +7 -0
- data/test/defs/test_defs_au.rb +1 -1
- data/test/defs/test_defs_ca.rb +16 -1
- data/test/defs/test_defs_jp.rb +4 -0
- data/test/defs/test_defs_kr.rb +26 -0
- data/test/defs/test_defs_lu.rb +24 -0
- data/test/defs/test_defs_my.rb +20 -0
- data/test/defs/test_defs_north_america.rb +16 -1
- data/test/holidays/core_extensions/test_date_time.rb +7 -7
- data/test/holidays/definition/context/test_function_processor.rb +175 -0
- data/test/holidays/definition/context/test_generator.rb +18 -11
- data/test/holidays/definition/parser/test_custom_method.rb +2 -2
- data/test/holidays/definition/repository/test_proc_result_cache.rb +1 -1
- data/test/holidays/{test_date_calculator_factory.rb → factory/test_date_calculator.rb} +3 -3
- data/test/holidays/factory/test_definition.rb +53 -0
- data/test/holidays/factory/test_finder.rb +25 -0
- data/test/holidays/finder/context/test_between.rb +172 -0
- data/test/holidays/{use_case → finder}/context/test_dates_driver_builder.rb +2 -2
- data/test/holidays/finder/context/test_next_holiday.rb +156 -0
- data/test/holidays/{option → finder}/context/test_parse_options.rb +9 -9
- data/test/holidays/finder/context/test_search.rb +203 -0
- data/test/holidays/finder/context/test_year_holiday.rb +202 -0
- data/test/holidays/finder/rules/test_in_region.rb +38 -0
- data/test/holidays/finder/rules/test_year_range.rb +170 -0
- data/test/integration/README.md +9 -0
- data/test/{test_all_regions.rb → integration/test_all_regions.rb} +16 -2
- data/test/{test_custom_holidays.rb → integration/test_custom_holidays.rb} +2 -2
- data/test/{test_custom_year_range_holidays.rb → integration/test_custom_year_range_holidays.rb} +1 -1
- data/test/{test_holidays.rb → integration/test_holidays.rb} +43 -32
- data/test/{test_holidays_between.rb → integration/test_holidays_between.rb} +8 -16
- data/test/{test_multiple_regions.rb → integration/test_multiple_regions.rb} +1 -1
- data/test/test_helper.rb +3 -4
- metadata +67 -39
- data/benchmark.rb +0 -8
- data/lib/holidays/date_calculator_factory.rb +0 -35
- data/lib/holidays/definition_factory.rb +0 -86
- data/lib/holidays/option_factory.rb +0 -15
- data/lib/holidays/use_case/context/between.rb +0 -45
- data/lib/holidays/use_case/context/context_common.rb +0 -123
- data/lib/holidays/use_case/context/next_holiday.rb +0 -54
- data/lib/holidays/use_case/context/year_holiday.rb +0 -51
- data/lib/holidays/use_case_factory.rb +0 -41
- data/test/holidays/test_definition_factory.rb +0 -49
- data/test/holidays/test_option_factory.rb +0 -9
- data/test/holidays/test_use_case_factory.rb +0 -13
- data/test/holidays/use_case/context/test_between.rb +0 -77
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 871b08553ee038ed6f91d776fd6f88aca3794f2e
|
4
|
+
data.tar.gz: e72de1dec225bd96944fc8bf9999215de0b6a17d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87c05e189fcea4445530190bcdbd32126bbb1af3b4dc7e52de3e71c289ccb5ac014cb1dd1e8d14022634a1a02ac5ba3d32acde7a7df8f5ec700a9217d5f87b9e
|
7
|
+
data.tar.gz: 325bb3ec66f2b48c774564aba19bc41c9b3b46ee143cb8f0d5789b30778fa0b34dc04f6af4b97d0c87514a8e1b4ab4426250bb52897637e8f347ec3aa339b4e4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Ruby Holidays Gem CHANGELOG
|
2
2
|
|
3
|
+
## 4.7.0
|
4
|
+
|
5
|
+
* Fix issue-225 (`LocalJumpError` for certain `jp` definition combinations) (https://github.com/ttwo32)
|
6
|
+
* Add Korean Lunar holidays (https://github.com/jonathanpike)
|
7
|
+
|
3
8
|
## 4.6.0
|
4
9
|
|
5
10
|
* Add holidays for 'Luxembourg' (https://github.com/dunyakirkali)
|
data/CONTRIBUTING.md
CHANGED
@@ -14,8 +14,8 @@ Here are the steps to take once you have a good idea on what you want to change:
|
|
14
14
|
|
15
15
|
* Fork the repository
|
16
16
|
* Edit desired definition YAML file(s) located under `definitions/`. If you are adding a new region be sure to update `definitions/index.yaml` as well
|
17
|
-
* Run `
|
18
|
-
* Run `
|
17
|
+
* Run `make generate` to generate updated final definitions (they will be located under `lib/generated_definitions/` and `test/defs/`)
|
18
|
+
* Run `make test` to ensure your changes did not introduce errors
|
19
19
|
* Open a PR with *all* of these changes. You *MUST* include the generated definition files and tests in your PR. There is no automatic process to generate definitions at this time
|
20
20
|
|
21
21
|
Including documentation with your updates is very much appreciated. A simple Wikipedia entry or government link in the comments alongside your changes would be perfect.
|
@@ -36,6 +36,6 @@ Don't worry about versioning, we'll handle it on our end.
|
|
36
36
|
|
37
37
|
We have included a few handy tasks to help you troubleshoot and test:
|
38
38
|
|
39
|
-
* `
|
40
|
-
* `
|
41
|
-
* `
|
39
|
+
* `make test` - runs the entire suite
|
40
|
+
* `REGION=<region> make test_region` - runs the tests for just that region. Make sure to run `make generate` after updating your YAML before running this!
|
41
|
+
* `make console` - launches an IRB session with the 'holidays' gem loaded for quick testing
|
data/Makefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
default: test
|
2
|
+
|
3
|
+
setup:
|
4
|
+
bundle install
|
5
|
+
|
6
|
+
test:
|
7
|
+
bundle exec rake test
|
8
|
+
|
9
|
+
generate:
|
10
|
+
bundle exec rake generate
|
11
|
+
|
12
|
+
console:
|
13
|
+
bundle exec rake console
|
14
|
+
|
15
|
+
test_region:
|
16
|
+
bundle exec rake test_region $(REGION)
|
17
|
+
|
18
|
+
build:
|
19
|
+
bundle exec gem build holidays.gemspec
|
20
|
+
|
21
|
+
push:
|
22
|
+
bundle exec gem push holidays.gemspec
|
23
|
+
|
24
|
+
clean:
|
25
|
+
rm -rf holidays-*.gem
|
26
|
+
rm -rf reports
|
27
|
+
rm -rf coverage
|
28
|
+
|
29
|
+
.PHONY: setup test generate
|
data/README.md
CHANGED
@@ -107,7 +107,7 @@ Multiple files can also be passed:
|
|
107
107
|
|
108
108
|
Holidays.load_custom('/home/user/holidays/custom_holidays1.yaml', '/home/user/holidays/custom_holidays2.yaml')
|
109
109
|
|
110
|
-
### Extending Ruby's Date
|
110
|
+
### Extending Ruby's Date and Time classes
|
111
111
|
|
112
112
|
To extend the 'Date' class:
|
113
113
|
|
@@ -136,11 +136,23 @@ Or lookup Canada Day in different regions:
|
|
136
136
|
d.holiday?(:fr) # France
|
137
137
|
=> false
|
138
138
|
|
139
|
+
Or return the new date based on the options:
|
140
|
+
|
141
|
+
d = Date.civil(2008,7,1)
|
142
|
+
d.change(:year => 2016, :month => 1, :day => 1)
|
143
|
+
=> #<Date: 2016-01-01 ((2457389j,0s,0n),+0s,2299161j)>
|
144
|
+
|
139
145
|
Or you can calculate the day of the month:
|
140
146
|
|
141
147
|
Date.calculate_mday(2015, 4, :first, 2)
|
142
148
|
=> 7
|
143
149
|
|
150
|
+
Or find end of month for given date (requires 'Time' extensions as well):
|
151
|
+
|
152
|
+
d = Date.civil(2016,8,1)
|
153
|
+
d.end_of_month
|
154
|
+
=> #<Date: 2016-08-31 ((2457632j,0s,0n),+0s,2299161j)>
|
155
|
+
|
144
156
|
### Caching Holiday Lookups
|
145
157
|
|
146
158
|
If you are checking holidays regularly you can cache your results for improved performance. Run this before looking up a holiday (eg. in an initializer):
|
data/Rakefile
CHANGED
@@ -60,8 +60,8 @@ namespace :generate do
|
|
60
60
|
puts "Building #{region} definition module:"
|
61
61
|
files = files.collect { |f| "#{DEFINITION_PATH}/#{f}" }.uniq
|
62
62
|
|
63
|
-
regions, rules_by_month, custom_methods, tests = Holidays::
|
64
|
-
module_src, test_src = Holidays::
|
63
|
+
regions, rules_by_month, custom_methods, tests = Holidays::Factory::Definition.file_parser.parse_definition_files(files)
|
64
|
+
module_src, test_src = Holidays::Factory::Definition.source_generator.generate_definition_source(region, files, regions, rules_by_month, custom_methods, tests)
|
65
65
|
|
66
66
|
File.open("lib/#{Holidays::DEFINITIONS_PATH}/#{region.downcase.to_s}.rb","w") do |file|
|
67
67
|
file.puts module_src
|
data/definitions/au.yaml
CHANGED
@@ -169,8 +169,11 @@ methods:
|
|
169
169
|
afl_grand_final:
|
170
170
|
arguments: year
|
171
171
|
source: |
|
172
|
-
|
172
|
+
case year
|
173
|
+
when 2015
|
173
174
|
Date.civil(2015, 10, 2)
|
175
|
+
when 2016
|
176
|
+
Date.civil(2017, 9, 30)
|
174
177
|
end
|
175
178
|
qld_queens_bday_october:
|
176
179
|
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
|
@@ -179,7 +182,7 @@ methods:
|
|
179
182
|
arguments: year
|
180
183
|
source: |
|
181
184
|
if year >= 2016
|
182
|
-
|
185
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
|
183
186
|
elsif year == 2012
|
184
187
|
1
|
185
188
|
else
|
@@ -191,7 +194,7 @@ methods:
|
|
191
194
|
arguments: year
|
192
195
|
source: |
|
193
196
|
if year <= 2015
|
194
|
-
|
197
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 6, 2, 1)
|
195
198
|
end
|
196
199
|
qld_labour_day_may:
|
197
200
|
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
|
@@ -199,7 +202,7 @@ methods:
|
|
199
202
|
arguments: year
|
200
203
|
source: |
|
201
204
|
if year < 2013 || year >= 2016
|
202
|
-
|
205
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, 1, 1)
|
203
206
|
end
|
204
207
|
qld_labour_day_october:
|
205
208
|
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
|
@@ -207,7 +210,7 @@ methods:
|
|
207
210
|
arguments: year
|
208
211
|
source: |
|
209
212
|
if year >= 2013 && year < 2016
|
210
|
-
|
213
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
|
211
214
|
end
|
212
215
|
g20_day_2014_only:
|
213
216
|
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
|
@@ -220,7 +223,7 @@ methods:
|
|
220
223
|
# The Thursday before the fourth Saturday in October.
|
221
224
|
arguments: year
|
222
225
|
source: |
|
223
|
-
fourth_sat_in_oct = Date.civil(year, 10, Holidays::
|
226
|
+
fourth_sat_in_oct = Date.civil(year, 10, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 4, :saturday))
|
224
227
|
fourth_sat_in_oct - 2 # the thursday before
|
225
228
|
march_pub_hol_sa:
|
226
229
|
# http://www.safework.sa.gov.au/show_page.jsp?id=2483#.VQ9Mfmb8-8E
|
@@ -230,7 +233,7 @@ methods:
|
|
230
233
|
if year < 2006
|
231
234
|
nil
|
232
235
|
else
|
233
|
-
Date.civil(year, 3, Holidays::
|
236
|
+
Date.civil(year, 3, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 3, :second, :monday))
|
234
237
|
end
|
235
238
|
may_pub_hol_sa:
|
236
239
|
# http://www.safework.sa.gov.au/show_page.jsp?id=2483#.VQ9Mfmb8-8E
|
@@ -240,7 +243,7 @@ methods:
|
|
240
243
|
if year >= 2006
|
241
244
|
nil
|
242
245
|
else
|
243
|
-
Date.civil(year, 5, Holidays::
|
246
|
+
Date.civil(year, 5, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, :third, :monday))
|
244
247
|
end
|
245
248
|
|
246
249
|
tests: |
|
@@ -312,7 +315,7 @@ tests: |
|
|
312
315
|
assert_equal 'Melbourne Cup Day', Holidays.on(Date.civil(2015,11,3), :au_vic_melbourne)[0][:name]
|
313
316
|
|
314
317
|
assert_equal 'Friday before the AFL Grand Final', Date.civil(2015,10,2).holidays(:au_vic)[0][:name]
|
315
|
-
|
318
|
+
assert_equal 'Friday before the AFL Grand Final', Date.civil(2016,9, 30).holidays(:au_vic)[0][:name]
|
316
319
|
|
317
320
|
assert_equal "May Public Holiday", Date.civil(2005, 5, 16).holidays(:au_sa)[0][:name]
|
318
321
|
assert_equal [], Date.civil(2014, 5, 19).holidays(:au_sa)
|
data/definitions/ca.yaml
CHANGED
@@ -141,7 +141,7 @@ months:
|
|
141
141
|
wday: 1
|
142
142
|
11:
|
143
143
|
- name: Remembrance Day
|
144
|
-
regions: [
|
144
|
+
regions: [ ca_ab, ca_sk, ca_bc, ca_pe, ca_nf, ca_nt, ca_nu, ca_nb, ca_yk]
|
145
145
|
mday: 11
|
146
146
|
12:
|
147
147
|
- name: Christmas Day
|
@@ -171,7 +171,6 @@ tests: |
|
|
171
171
|
Date.civil(2008,7,1) => 'Canada Day',
|
172
172
|
Date.civil(2008,9,1) => 'Labour Day',
|
173
173
|
Date.civil(2008,10,13) => 'Thanksgiving',
|
174
|
-
Date.civil(2008,11,11) => 'Remembrance Day',
|
175
174
|
Date.civil(2008,12,25) => 'Christmas Day',
|
176
175
|
Date.civil(2008,12,26) => 'Boxing Day'}.each do |date, name|
|
177
176
|
assert_equal name, (Holidays.on(date, :ca, :informal)[0] || {})[:name]
|
@@ -300,3 +299,19 @@ tests: |
|
|
300
299
|
assert_equal name, Holidays.on(date, region)[0][:name]
|
301
300
|
end
|
302
301
|
end
|
302
|
+
|
303
|
+
# Remembrance Day in all Canadian provinces
|
304
|
+
# except (Nova Scotia, Manitoba, Ontario, and Quebec)
|
305
|
+
[
|
306
|
+
:ca_ab,
|
307
|
+
:ca_sk,
|
308
|
+
:ca_bc,
|
309
|
+
:ca_pe,
|
310
|
+
:ca_nf,
|
311
|
+
:ca_nt,
|
312
|
+
:ca_nu,
|
313
|
+
:ca_nb,
|
314
|
+
:ca_yk
|
315
|
+
].each do |province|
|
316
|
+
assert_equal "Remembrance Day", Holidays.on(Date.civil(2016,11,11), province)[0][:name]
|
317
|
+
end
|
data/definitions/ch.yaml
CHANGED
@@ -159,7 +159,7 @@ methods:
|
|
159
159
|
date += 1
|
160
160
|
end
|
161
161
|
|
162
|
-
if date.eql?(Holidays::
|
162
|
+
if date.eql?(Holidays::Factory::DateCalculator::Easter::Gregorian.easter_calculator.calculate_easter_for(year)-3)
|
163
163
|
date += 7
|
164
164
|
end
|
165
165
|
date
|
data/definitions/index.yaml
CHANGED
@@ -28,12 +28,14 @@ defs:
|
|
28
28
|
IE: ['ie.yaml']
|
29
29
|
IS: ['is.yaml']
|
30
30
|
IT: ['it.yaml']
|
31
|
+
KR: ['kr.yaml']
|
31
32
|
LI: ['li.yaml']
|
32
33
|
LT: ['lt.yaml']
|
33
34
|
MA: ['ma.yaml']
|
34
35
|
MX: ['mx.yaml', 'north_america_informal.yaml']
|
35
36
|
NERC: ['nerc.yaml']
|
36
37
|
NL: ['nl.yaml']
|
38
|
+
LU: ['lu.yaml']
|
37
39
|
"NO": ['no.yaml']
|
38
40
|
NYSE: ['nyse.yaml']
|
39
41
|
NZ: ['nz.yaml']
|
@@ -56,3 +58,4 @@ defs:
|
|
56
58
|
SK: ['sk.yaml']
|
57
59
|
SI: ['si.yaml']
|
58
60
|
SG: ['sg.yaml']
|
61
|
+
MY: ['my.yaml']
|
data/definitions/is.yaml
CHANGED
data/definitions/jp.yaml
CHANGED
@@ -119,6 +119,8 @@ months:
|
|
119
119
|
function: jp_respect_for_aged_holiday_substitute(year)
|
120
120
|
- name: 国民の休日
|
121
121
|
regions: [jp]
|
122
|
+
year_ranges:
|
123
|
+
- after: 2003
|
122
124
|
function: jp_citizens_holiday(year)
|
123
125
|
- name: 秋分の日
|
124
126
|
regions: [jp]
|
@@ -162,7 +164,7 @@ methods:
|
|
162
164
|
jp_health_sports_day_substitute:
|
163
165
|
arguments: year
|
164
166
|
source: |
|
165
|
-
Holidays::
|
167
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 10, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 2, 1))
|
166
168
|
jp_vernal_equinox_day:
|
167
169
|
arguments: year
|
168
170
|
source: |
|
@@ -185,12 +187,12 @@ methods:
|
|
185
187
|
jp_vernal_equinox_day_substitute:
|
186
188
|
arguments: year
|
187
189
|
source: |
|
188
|
-
date = Holidays::
|
189
|
-
Holidays::
|
190
|
+
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_vernal_equinox_day(year)").call(year)
|
191
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
190
192
|
jp_marine_day_substitute:
|
191
193
|
arguments: year
|
192
194
|
source: |
|
193
|
-
Holidays::
|
195
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 7, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 7, 3, 1))
|
194
196
|
jp_national_culture_day:
|
195
197
|
arguments: year
|
196
198
|
source: |
|
@@ -213,13 +215,12 @@ methods:
|
|
213
215
|
jp_national_culture_day_substitute:
|
214
216
|
arguments: year
|
215
217
|
source: |
|
216
|
-
date = Holidays::
|
217
|
-
Holidays::
|
218
|
+
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
|
219
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
218
220
|
jp_citizens_holiday:
|
219
221
|
arguments: year
|
220
222
|
source: |
|
221
|
-
|
222
|
-
ncd = Holidays::DefinitionFactory.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
|
223
|
+
ncd = Holidays::Factory::Definition.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
|
223
224
|
if ncd.wday == 3
|
224
225
|
ncd - 1
|
225
226
|
else
|
@@ -228,29 +229,28 @@ methods:
|
|
228
229
|
jp_mountain_holiday:
|
229
230
|
arguments: year
|
230
231
|
source: |
|
231
|
-
return nil if year < 2016
|
232
232
|
Date.civil(year, 8, 11)
|
233
233
|
jp_mountain_holiday_substitute:
|
234
234
|
arguments: year
|
235
235
|
source: |
|
236
|
-
date = Holidays::
|
237
|
-
Holidays::
|
236
|
+
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_mountain_holiday(year)").call(year)
|
237
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
238
238
|
jp_respect_for_aged_holiday_substitute:
|
239
239
|
arguments: year
|
240
240
|
source: |
|
241
|
-
Holidays::
|
241
|
+
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 9, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 9, 3, 1))
|
242
242
|
jp_substitute_holiday:
|
243
243
|
arguments: year, month, day
|
244
244
|
source: |
|
245
245
|
date = Date.civil(year, month, day)
|
246
|
-
date.wday == 0 ? (Holidays::
|
246
|
+
date.wday == 0 ? (Holidays::Factory::Definition.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : nil
|
247
247
|
jp_next_weekday:
|
248
248
|
arguments: date
|
249
249
|
source: |
|
250
250
|
is_holiday = Holidays::JP.holidays_by_month[date.month].any? do |holiday|
|
251
251
|
holiday[:mday] == date.day
|
252
252
|
end
|
253
|
-
date.wday == 0 || is_holiday ? (Holidays::
|
253
|
+
date.wday == 0 || is_holiday ? (Holidays::Factory::Definition.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : date
|
254
254
|
|
255
255
|
tests: |
|
256
256
|
{Date.civil(2008,1,1) => '元日',
|
@@ -314,3 +314,8 @@ tests: |
|
|
314
314
|
|
315
315
|
# before 2016, there is no mountain holiday.
|
316
316
|
assert_nil Holidays.on(Date.civil(2015,8,11), :jp)[0]
|
317
|
+
|
318
|
+
# before 2003, there is no citizens holiday.
|
319
|
+
# [note] citizens holiday requires that jp_national_culture_day is wednesday.
|
320
|
+
# Before 2003, the closest past year that mathches above condition is 1998.
|
321
|
+
assert_nil Holidays.on(Date.civil(1998,9,22), :jp)[0]
|
data/definitions/kr.yaml
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
# Republic of Korea holiday definitions for the Ruby Holiday gem.
|
2
|
+
# Provided by Jonathan Pike
|
3
|
+
#
|
4
|
+
# Updated: 2016-09-23.
|
5
|
+
# Sources:
|
6
|
+
# - https://en.wikipedia.org/wiki/List_of_public_holidays_in_South_Korea
|
7
|
+
# - http://www.hko.gov.hk/gts/time/conversion.htm (for Lunar Calendar Conversions)
|
8
|
+
|
9
|
+
---
|
10
|
+
months:
|
11
|
+
0:
|
12
|
+
- name: Korean New Year
|
13
|
+
regions: [kr]
|
14
|
+
function: kr_new_years(year)
|
15
|
+
- name: Buddah's Birthday
|
16
|
+
regions: [kr]
|
17
|
+
function: kr_buddahs_birthday(year)
|
18
|
+
- name: Korean Thanksgiving
|
19
|
+
regions: [kr]
|
20
|
+
function: kr_thanksgiving(year)
|
21
|
+
1:
|
22
|
+
- name: New Year's Day
|
23
|
+
regions: [kr]
|
24
|
+
mday: 1
|
25
|
+
3:
|
26
|
+
- name: Independence Movement Day
|
27
|
+
regions: [kr]
|
28
|
+
mday: 1
|
29
|
+
5:
|
30
|
+
- name: Children's Day
|
31
|
+
regions: [kr]
|
32
|
+
mday: 5
|
33
|
+
6:
|
34
|
+
- name: Memorial Day
|
35
|
+
regions: [kr]
|
36
|
+
mday: 6
|
37
|
+
7:
|
38
|
+
- name: Constitution Day
|
39
|
+
regions: [kr]
|
40
|
+
mday: 17
|
41
|
+
type: informal
|
42
|
+
8:
|
43
|
+
- name: Liberation Day
|
44
|
+
regions: [kr]
|
45
|
+
mday: 15
|
46
|
+
10:
|
47
|
+
- name: National Foundation Day
|
48
|
+
regions: [kr]
|
49
|
+
mday: 3
|
50
|
+
- name: Hangul Day
|
51
|
+
regions: [kr]
|
52
|
+
mday: 9
|
53
|
+
12:
|
54
|
+
- name: Christmas Day
|
55
|
+
regions: [kr]
|
56
|
+
mday: 25
|
57
|
+
|
58
|
+
methods:
|
59
|
+
kr_new_years:
|
60
|
+
arguments: year
|
61
|
+
source: |
|
62
|
+
month_day = case year
|
63
|
+
when 1941
|
64
|
+
[1, 17]
|
65
|
+
when 1966
|
66
|
+
[1, 21]
|
67
|
+
when 1909, 1947, 2004, 2023, 2042
|
68
|
+
[1, 22]
|
69
|
+
when 1917, 1928, 1974, 1993, 2012, 2031, 2015
|
70
|
+
[1, 23]
|
71
|
+
when 1925, 1936, 1955, 2001, 2039
|
72
|
+
[1, 24]
|
73
|
+
when 1906, 1944, 1963, 1982, 2020
|
74
|
+
[1, 25]
|
75
|
+
when 1914, 1933, 2009, 2028, 2047
|
76
|
+
[1, 26]
|
77
|
+
when 1952, 1971, 1990
|
78
|
+
[1, 27]
|
79
|
+
when 1922, 1960, 1979, 1998, 2017, 2036
|
80
|
+
[1, 28]
|
81
|
+
when 1903, 1949, 1987, 2006, 2025
|
82
|
+
[1, 29]
|
83
|
+
when 1911, 1930, 1968, 2044
|
84
|
+
[1, 30]
|
85
|
+
when 1938, 1957, 1976, 1995, 2014, 2033
|
86
|
+
[1, 31]
|
87
|
+
when 1919, 1948, 2003, 2022, 2041
|
88
|
+
[2, 1]
|
89
|
+
when 1908, 1927, 1946, 1965, 1984, 2049
|
90
|
+
[2, 2]
|
91
|
+
when 1916, 1954, 1973, 2011, 2030
|
92
|
+
[2, 3]
|
93
|
+
when 1905, 1935, 1992, 2038
|
94
|
+
[2, 4]
|
95
|
+
when 1924, 1943, 1962, 1981, 1989, 2000, 2019
|
96
|
+
[2, 5]
|
97
|
+
when 1913, 1932, 1951, 1970, 2027, 2046
|
98
|
+
[2, 6]
|
99
|
+
when 1978, 1997, 2008
|
100
|
+
[2, 7]
|
101
|
+
when 1902, 1921, 1940, 1959, 2016, 2035
|
102
|
+
[2, 8]
|
103
|
+
when 1967, 1986, 2005
|
104
|
+
[2, 9]
|
105
|
+
when 1910, 1929, 1994, 2013, 2024, 2043
|
106
|
+
[2, 10]
|
107
|
+
when 1918, 1937, 1975, 2032
|
108
|
+
[2, 11]
|
109
|
+
when 1956, 2002, 2021, 2040
|
110
|
+
[2, 12]
|
111
|
+
when 1907, 1926, 1945, 1964, 1983, 2029
|
112
|
+
[2, 13]
|
113
|
+
when 1915, 1934, 1953, 2010, 2048
|
114
|
+
[2, 14]
|
115
|
+
when 1942, 1961, 1972, 1991, 2037
|
116
|
+
[2, 15]
|
117
|
+
when 1904, 1923, 1980, 1999, 2018
|
118
|
+
[2, 16]
|
119
|
+
when 1931, 1950, 1969, 1988, 2026, 2045
|
120
|
+
[2, 17]
|
121
|
+
when 1912, 1958, 1977, 2007
|
122
|
+
[2, 18]
|
123
|
+
when 1901, 1939, 1996, 2015, 2034
|
124
|
+
[2, 19]
|
125
|
+
when 1920, 1985
|
126
|
+
[2, 20]
|
127
|
+
end
|
128
|
+
Date.civil(year, month_day[0], month_day[1])
|
129
|
+
|
130
|
+
kr_buddahs_birthday:
|
131
|
+
arguments: year
|
132
|
+
source: |
|
133
|
+
month_day = case year
|
134
|
+
when 2039
|
135
|
+
[4, 30]
|
136
|
+
when 1952, 1963, 1982
|
137
|
+
[5, 1]
|
138
|
+
when 1914, 1933, 1971, 1990, 2009, 2028, 2047
|
139
|
+
[5, 2]
|
140
|
+
when 1941, 1960, 1979, 1998, 2017, 2036
|
141
|
+
[5, 3]
|
142
|
+
when 1901, 1903, 1922, 1968
|
143
|
+
[5, 4]
|
144
|
+
when 1949, 1987, 2006, 2012, 2025, 2044
|
145
|
+
[5, 5]
|
146
|
+
when 1911, 1930, 1976, 2014, 2033
|
147
|
+
[5, 6]
|
148
|
+
when 1908, 1919, 1957, 1995, 2041
|
149
|
+
[5, 7]
|
150
|
+
when 1927, 1946, 1965, 1984, 2003, 2022
|
151
|
+
[5, 8]
|
152
|
+
when 1916, 2030, 2049
|
153
|
+
[5, 9]
|
154
|
+
when 1935, 1954, 1973, 1992, 2011
|
155
|
+
[5, 10]
|
156
|
+
when 1905, 1924, 1943, 1962, 1981, 2000, 2038
|
157
|
+
[5, 11]
|
158
|
+
when 1970, 1989, 2008, 2019
|
159
|
+
[5, 12]
|
160
|
+
when 1913, 1932, 1951, 2027
|
161
|
+
[5, 13]
|
162
|
+
when 1938, 1940, 1978, 1997, 2016
|
163
|
+
[5, 14]
|
164
|
+
when 1902, 1921, 1959, 2005, 2024, 2035
|
165
|
+
[5, 15]
|
166
|
+
when 1910, 1929, 1948, 1967, 1986, 2032, 2043
|
167
|
+
[5, 16]
|
168
|
+
when 1918, 1937, 1956, 2013
|
169
|
+
[5, 17]
|
170
|
+
when 1975, 1994, 2040
|
171
|
+
[5, 18]
|
172
|
+
when 1907, 1926, 1945, 1964, 2002, 2021
|
173
|
+
[5, 19]
|
174
|
+
when 1934, 1953, 1972, 1983, 2029, 2046, 2048
|
175
|
+
[5, 20]
|
176
|
+
when 1915, 1980, 1991, 2010
|
177
|
+
[5, 21]
|
178
|
+
when 1904, 1942, 1961, 1999, 2018, 2037
|
179
|
+
[5, 22]
|
180
|
+
when 1923, 1969, 1988
|
181
|
+
[5, 23]
|
182
|
+
when 1912, 1931, 1950, 1996, 2007, 2026, 2045
|
183
|
+
[5, 24]
|
184
|
+
when 1920, 1977, 2015, 2034
|
185
|
+
[5, 25]
|
186
|
+
when 1909, 1928, 1939, 1947, 1958, 2004, 2023, 2042
|
187
|
+
[5, 26]
|
188
|
+
when 1966, 1985
|
189
|
+
[5, 27]
|
190
|
+
when 1917, 1936, 1993, 2031, 2050
|
191
|
+
[5, 28]
|
192
|
+
when 1925, 1944, 1955, 1974
|
193
|
+
[5, 29]
|
194
|
+
when 1906, 2001, 2020
|
195
|
+
[5, 30]
|
196
|
+
end
|
197
|
+
Date.civil(year, month_day[0], month_day[1])
|
198
|
+
|
199
|
+
kr_thanksgiving:
|
200
|
+
arguments: year
|
201
|
+
source: |
|
202
|
+
month_day = case year
|
203
|
+
when 1905, 1924, 1973
|
204
|
+
[9, 8]
|
205
|
+
when 1913, 1970, 1989, 2000, 2008, 2019, 2038
|
206
|
+
[9, 10]
|
207
|
+
when 1902, 1932, 1938, 1981, 2027
|
208
|
+
[9, 11]
|
209
|
+
when 1929, 1940, 1951, 1978, 2016, 2035
|
210
|
+
[9, 12]
|
211
|
+
when 1921, 1948, 1959, 1997, 2024
|
212
|
+
[9, 13]
|
213
|
+
when 1910, 1975, 2005
|
214
|
+
[9, 14]
|
215
|
+
when 1918, 1937, 1945, 1967, 1986, 2032, 2043
|
216
|
+
[9, 15]
|
217
|
+
when 1907, 1964, 1994, 2013, 2040
|
218
|
+
[9, 16]
|
219
|
+
when 1926, 1956, 1962, 1972, 2046, 2048
|
220
|
+
[9, 17]
|
221
|
+
when 1934, 1953, 2002, 2021
|
222
|
+
[9, 18]
|
223
|
+
when 1904, 1915, 1980, 2010, 2029
|
224
|
+
[9, 19]
|
225
|
+
when 1923, 1969, 1983, 1991, 1999
|
226
|
+
[9, 20]
|
227
|
+
when 1942, 1961, 1988, 2037
|
228
|
+
[9, 21]
|
229
|
+
when 1912, 1977 ,1996, 2007, 2015, 2018, 2026
|
230
|
+
[9, 22]
|
231
|
+
when 1931, 1939, 1950
|
232
|
+
[9, 23]
|
233
|
+
when 1909, 1920, 1947, 1958, 2034, 2045
|
234
|
+
[9, 24]
|
235
|
+
when 1917, 1928, 1936, 1966, 1985, 2050
|
236
|
+
[9, 25]
|
237
|
+
when 2001, 2004, 2023, 2042
|
238
|
+
[9, 26]
|
239
|
+
when 1906, 1925, 1944, 1955, 1974, 1993, 2031
|
240
|
+
[9, 27]
|
241
|
+
when 1914, 1963, 1971, 2009
|
242
|
+
[9, 28]
|
243
|
+
when 1933, 1952, 1982, 2020
|
244
|
+
[9, 29]
|
245
|
+
when 1941, 1979, 1990, 2017, 2028, 2036, 2047
|
246
|
+
[9, 30]
|
247
|
+
when 1901, 1960, 1968, 1987, 2006
|
248
|
+
[10, 1]
|
249
|
+
when 1903, 1922, 1949, 1998
|
250
|
+
[10, 2]
|
251
|
+
when 1911, 1976, 2014, 2033, 2044
|
252
|
+
[10, 3]
|
253
|
+
when 1927, 1930, 2012, 2025, 2041
|
254
|
+
[10, 4]
|
255
|
+
when 1908, 1919, 1935, 1946, 1957, 1995, 2039
|
256
|
+
[10, 5]
|
257
|
+
when 1916, 1965, 2003, 2022, 2030, 2049
|
258
|
+
[10, 6]
|
259
|
+
when 1984
|
260
|
+
[10, 7]
|
261
|
+
when 1943, 1954, 1992
|
262
|
+
[10, 8]
|
263
|
+
when 2011
|
264
|
+
[10, 9]
|
265
|
+
end
|
266
|
+
Date.civil(year, month_day[0], month_day[1])
|
267
|
+
|
268
|
+
tests: |
|
269
|
+
{Date.civil(2016,2,8) => "Korean New Year",
|
270
|
+
Date.civil(2016,5,14) => "Buddah\'s Birthday",
|
271
|
+
Date.civil(2016,9,12) => "Korean Thanksgiving",
|
272
|
+
Date.civil(2016,1,1) => "New Year\'s Day",
|
273
|
+
Date.civil(2016,3,1) => "Independence Movement Day",
|
274
|
+
Date.civil(2016,5,5) => "Children\'s Day",
|
275
|
+
Date.civil(2016,6,6) => "Memorial Day",
|
276
|
+
Date.civil(2016,7,17) => "Constitution Day",
|
277
|
+
Date.civil(2016,8,15) => "Liberation Day",
|
278
|
+
Date.civil(2016,10,3) => "National Foundation Day",
|
279
|
+
Date.civil(2016,10,9) => "Hangul Day",
|
280
|
+
Date.civil(2016,12,25) => "Christmas Day"}.each do |date, name|
|
281
|
+
assert_equal name, (Holidays.on(date, :kr, :informal)[0] || {})[:name]
|
282
|
+
end
|