holidays 3.3.0 → 4.0.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 +44 -0
- data/CONTRIBUTING.md +37 -0
- data/README.md +16 -25
- data/REFERENCES +4 -1
- data/Rakefile +38 -8
- data/benchmark.rb +8 -0
- data/definitions/README.md +187 -8
- data/definitions/ar.yaml +2 -1
- data/definitions/at.yaml +17 -13
- data/definitions/au.yaml +65 -60
- data/definitions/be_fr.yaml +14 -10
- data/definitions/be_nl.yaml +8 -4
- data/definitions/bg.yaml +12 -6
- data/definitions/br.yaml +6 -3
- data/definitions/ca.yaml +8 -6
- data/definitions/ch.yaml +21 -15
- data/definitions/cl.yaml +4 -2
- data/definitions/cr.yaml +5 -3
- data/definitions/cz.yaml +4 -2
- data/definitions/de.yaml +25 -14
- data/definitions/dk.yaml +26 -17
- data/definitions/ecb_target.yaml +4 -2
- data/definitions/el.yaml +23 -18
- data/definitions/es.yaml +31 -28
- data/definitions/federal_reserve.yaml +12 -12
- data/definitions/fedex.yaml +6 -6
- data/definitions/fi.yaml +26 -25
- data/definitions/fr.yaml +8 -4
- data/definitions/gb.yaml +9 -7
- data/definitions/hr.yaml +8 -6
- data/definitions/hu.yaml +8 -6
- data/definitions/ie.yaml +17 -16
- data/definitions/index.yaml +1 -1
- data/definitions/is.yaml +29 -19
- data/definitions/it.yaml +10 -9
- data/definitions/jp.yaml +92 -44
- data/definitions/li.yaml +25 -20
- data/definitions/lt.yaml +2 -1
- data/definitions/ma.yaml +7 -7
- data/definitions/mx.yaml +11 -11
- data/definitions/nerc.yaml +6 -6
- data/definitions/nl.yaml +22 -18
- data/definitions/no.yaml +19 -11
- data/definitions/north_america_informal.yaml +6 -6
- data/definitions/nyse.yaml +9 -8
- data/definitions/nz.yaml +33 -29
- data/definitions/ph.yaml +15 -8
- data/definitions/pl.yaml +27 -17
- data/definitions/pt.yaml +4 -2
- data/definitions/ro.yaml +21 -18
- data/definitions/se.yaml +24 -18
- data/definitions/sg.yaml +10 -9
- data/definitions/si.yaml +4 -2
- data/definitions/sk.yaml +4 -2
- data/definitions/united_nations.yaml +12 -12
- data/definitions/ups.yaml +6 -6
- data/definitions/us.yaml +12 -11
- data/definitions/ve.yaml +8 -4
- data/definitions/vi.yaml +6 -6
- data/definitions/za.yaml +26 -24
- data/holidays.gemspec +3 -1
- data/lib/generated_definitions/MANIFEST +1 -1
- data/lib/generated_definitions/ar.rb +8 -6
- data/lib/generated_definitions/at.rb +11 -9
- data/lib/generated_definitions/au.rb +75 -99
- data/lib/generated_definitions/be.rb +12 -10
- data/lib/generated_definitions/be_fr.rb +12 -10
- data/lib/generated_definitions/be_nl.rb +12 -10
- data/lib/generated_definitions/bg.rb +14 -13
- data/lib/generated_definitions/br.rb +11 -9
- data/lib/generated_definitions/ca.rb +20 -20
- data/lib/generated_definitions/ch.rb +41 -44
- data/lib/generated_definitions/cl.rb +9 -7
- data/lib/generated_definitions/cr.rb +9 -7
- data/lib/generated_definitions/cz.rb +9 -6
- data/lib/generated_definitions/de.rb +25 -25
- data/lib/generated_definitions/dk.rb +17 -15
- data/lib/generated_definitions/ecb_target.rb +9 -7
- data/lib/generated_definitions/el.rb +13 -11
- data/lib/generated_definitions/es.rb +35 -33
- data/lib/generated_definitions/europe.rb +234 -247
- data/lib/generated_definitions/federal_reserve.rb +11 -9
- data/lib/generated_definitions/fedex.rb +42 -0
- data/lib/generated_definitions/fi.rb +32 -36
- data/lib/generated_definitions/fr.rb +12 -10
- data/lib/generated_definitions/gb.rb +15 -13
- data/lib/generated_definitions/hr.rb +10 -8
- data/lib/generated_definitions/hu.rb +9 -7
- data/lib/generated_definitions/ie.rb +17 -17
- data/lib/generated_definitions/is.rb +26 -26
- data/lib/generated_definitions/it.rb +9 -7
- data/lib/generated_definitions/jp.rb +112 -89
- data/lib/generated_definitions/li.rb +14 -12
- data/lib/generated_definitions/lt.rb +9 -7
- data/lib/generated_definitions/ma.rb +7 -5
- data/lib/generated_definitions/mx.rb +7 -5
- data/lib/generated_definitions/nerc.rb +10 -8
- data/lib/generated_definitions/nl.rb +15 -13
- data/lib/generated_definitions/no.rb +16 -14
- data/lib/generated_definitions/north_america.rb +34 -37
- data/lib/generated_definitions/nyse.rb +10 -8
- data/lib/generated_definitions/nz.rb +40 -40
- data/lib/generated_definitions/ph.rb +17 -13
- data/lib/generated_definitions/pl.rb +25 -27
- data/lib/generated_definitions/pt.rb +10 -8
- data/lib/generated_definitions/ro.rb +11 -9
- data/lib/generated_definitions/scandinavia.rb +92 -102
- data/lib/generated_definitions/se.rb +25 -27
- data/lib/generated_definitions/sg.rb +11 -9
- data/lib/generated_definitions/si.rb +10 -8
- data/lib/generated_definitions/sk.rb +9 -7
- data/lib/generated_definitions/united_nations.rb +7 -5
- data/lib/generated_definitions/ups.rb +13 -12
- data/lib/generated_definitions/us.rb +20 -21
- data/lib/generated_definitions/ve.rb +11 -9
- data/lib/generated_definitions/vi.rb +7 -5
- data/lib/generated_definitions/za.rb +19 -17
- data/lib/holidays.rb +20 -83
- data/lib/holidays/date_calculator/weekend_modifier.rb +22 -5
- data/lib/holidays/definition/context/generator.rb +67 -29
- data/lib/holidays/definition/context/merger.rb +8 -8
- data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
- data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
- data/lib/holidays/definition/entity/custom_method.rb +11 -0
- data/lib/holidays/definition/parser/custom_method.rb +69 -0
- data/lib/holidays/definition/repository/custom_methods.rb +27 -0
- data/lib/holidays/definition/repository/holidays_by_month.rb +1 -1
- data/lib/holidays/definition/repository/{proc_cache.rb → proc_result_cache.rb} +19 -4
- data/lib/holidays/definition/validator/custom_method.rb +31 -0
- data/lib/holidays/definition_factory.rb +42 -6
- data/lib/holidays/errors.rb +6 -0
- data/lib/holidays/load_all_definitions.rb +57 -0
- data/lib/holidays/option/context/parse_options.rb +26 -16
- data/lib/holidays/option_factory.rb +1 -0
- data/lib/holidays/use_case/context/between.rb +41 -14
- data/lib/holidays/use_case_factory.rb +2 -1
- data/lib/holidays/version.rb +1 -1
- data/test/data/test_single_custom_holiday_with_custom_procs.yaml +24 -0
- data/test/defs/test_defs_at.rb +1 -1
- data/test/defs/test_defs_au.rb +3 -2
- data/test/defs/test_defs_cr.rb +1 -0
- data/test/defs/test_defs_cz.rb +1 -0
- data/test/defs/test_defs_dk.rb +2 -2
- data/test/defs/test_defs_el.rb +7 -6
- data/test/defs/test_defs_europe.rb +40 -33
- data/test/defs/test_defs_fedex.rb +24 -0
- data/test/defs/test_defs_fi.rb +4 -3
- data/test/defs/test_defs_hr.rb +2 -2
- data/test/defs/test_defs_hu.rb +2 -2
- data/test/defs/test_defs_is.rb +2 -1
- data/test/defs/test_defs_it.rb +2 -1
- data/test/defs/test_defs_jp.rb +1 -1
- data/test/defs/test_defs_li.rb +1 -1
- data/test/defs/test_defs_ma.rb +2 -1
- data/test/defs/test_defs_mx.rb +4 -3
- data/test/defs/test_defs_nl.rb +7 -6
- data/test/defs/test_defs_no.rb +1 -0
- data/test/defs/test_defs_north_america.rb +4 -3
- data/test/defs/test_defs_nyse.rb +2 -1
- data/test/defs/test_defs_pl.rb +1 -0
- data/test/defs/test_defs_ro.rb +11 -11
- data/test/defs/test_defs_scandinavia.rb +12 -8
- data/test/defs/test_defs_se.rb +3 -2
- data/test/defs/test_defs_sg.rb +2 -1
- data/test/defs/test_defs_vi.rb +1 -1
- data/test/defs/test_defs_za.rb +3 -2
- data/test/holidays/date_calculator/test_weekend_modifier.rb +11 -0
- data/test/holidays/definition/context/test_generator.rb +64 -5
- data/test/holidays/definition/context/test_merger.rb +5 -2
- data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
- data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
- data/test/holidays/definition/parser/test_custom_method.rb +79 -0
- data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
- data/test/holidays/definition/repository/test_holidays_by_month.rb +0 -32
- data/test/holidays/definition/repository/test_proc_result_cache.rb +84 -0
- data/test/holidays/definition/validator/test_custom_method.rb +89 -0
- data/test/holidays/option/context/test_parse_options.rb +5 -0
- data/test/holidays/test_definition_factory.rb +17 -2
- data/test/holidays/use_case/context/test_between.rb +2 -0
- data/test/test_all_regions.rb +7 -49
- data/test/test_custom_holidays.rb +8 -2
- data/test/test_helper.rb +9 -2
- data/test/test_holidays.rb +9 -29
- metadata +46 -11
- data/lib/generated_definitions/fed_ex.rb +0 -41
- data/test/holidays/definition/repository/test_proc_cache.rb +0 -29
- data/test/test_parse_definitions.rb +0 -30
data/definitions/hr.yaml
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Updated: 2012-08-29.
|
4
4
|
# Sources:
|
5
5
|
# http://en.wikipedia.org/wiki/Public_holidays_in_Croatia
|
6
|
-
---
|
6
|
+
---
|
7
7
|
months:
|
8
8
|
0:
|
9
9
|
- name: Uskrs
|
@@ -11,10 +11,12 @@ months:
|
|
11
11
|
function: easter(year)
|
12
12
|
- name: Uskrsni ponedjeljak
|
13
13
|
regions: [hr]
|
14
|
-
function: easter(year)
|
14
|
+
function: easter(year)
|
15
|
+
function_modifier: 1
|
15
16
|
- name: Tijelovo
|
16
17
|
regions: [hr]
|
17
|
-
function: easter(year)
|
18
|
+
function: easter(year)
|
19
|
+
function_modifier: 60
|
18
20
|
1:
|
19
21
|
- name: Nova godina
|
20
22
|
regions: [hr]
|
@@ -56,8 +58,8 @@ months:
|
|
56
58
|
regions: [hr]
|
57
59
|
mday: 26
|
58
60
|
tests: |
|
59
|
-
{Date.civil(2012,1,1) => 'Nova godina',
|
60
|
-
Date.civil(2012,1,6) => 'Sveta tri kralja',
|
61
|
+
{Date.civil(2012,1,1) => 'Nova godina',
|
62
|
+
Date.civil(2012,1,6) => 'Sveta tri kralja',
|
61
63
|
Date.civil(2012,5,1) => 'Međunarodni praznik rada',
|
62
64
|
Date.civil(2012,6,22) => 'Dan antifašističke borbe',
|
63
65
|
Date.civil(2012,6,25) => 'Dan državnosti',
|
@@ -69,7 +71,7 @@ tests: |
|
|
69
71
|
Date.civil(2012,12,26) => 'Sveti Stjepan'}.each do |date, name|
|
70
72
|
assert_equal name, (Holidays.on(date, :hr, :informal)[0] || {})[:name]
|
71
73
|
end
|
72
|
-
|
74
|
+
|
73
75
|
# Tijelovo
|
74
76
|
[Date.civil(2008,5,22), Date.civil(2009,6,11), Date.civil(2010,6,3),
|
75
77
|
Date.civil(2012,6,7), Date.civil(2013,5,30), Date.civil(2014,6,19)].each do |date|
|
data/definitions/hu.yaml
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
# Hungarian holiday definitions for the Ruby Holiday gem.
|
2
2
|
#
|
3
3
|
# Updated: 2012-03-01 by spap
|
4
|
-
---
|
4
|
+
---
|
5
5
|
months:
|
6
|
-
0:
|
6
|
+
0:
|
7
7
|
- name: Húsvét hétfő
|
8
8
|
regions: [hu]
|
9
|
-
function: easter(year)
|
9
|
+
function: easter(year)
|
10
|
+
function_modifier: 1
|
10
11
|
- name: Pünkösd hétfő
|
11
12
|
regions: [hu]
|
12
|
-
function: easter(year)
|
13
|
+
function: easter(year)
|
14
|
+
function_modifier: 50
|
13
15
|
1:
|
14
16
|
- name: Újév
|
15
17
|
regions: [hu]
|
@@ -42,8 +44,8 @@ months:
|
|
42
44
|
regions: [hu]
|
43
45
|
mday: 26
|
44
46
|
tests: |
|
45
|
-
{Date.civil(2012,1,1) => 'Újév',
|
46
|
-
Date.civil(2011,1,1) => 'Újév',
|
47
|
+
{Date.civil(2012,1,1) => 'Újév',
|
48
|
+
Date.civil(2011,1,1) => 'Újév',
|
47
49
|
Date.civil(2012,3,15) => '1848/49-es forradalom és szabadságharc ünnepe',
|
48
50
|
Date.civil(2011,4,25) => 'Húsvét hétfő',
|
49
51
|
Date.civil(2012,4,9) => 'Húsvét hétfő',
|
data/definitions/ie.yaml
CHANGED
@@ -5,23 +5,24 @@
|
|
5
5
|
# - http://en.wikipedia.org/wiki/Public_holidays_in_the_Republic_of_Ireland
|
6
6
|
# - http://www.citizensinformation.ie/categories/employment/employment-rights-and-conditions/leave-and-holidays/public-holidays-in-ireland
|
7
7
|
# While there is mention that Jan 2 2012 was not officially a bank holiday, in reality very few businesses will not observe that date as a bank holiday
|
8
|
-
---
|
8
|
+
---
|
9
9
|
months:
|
10
|
-
0:
|
10
|
+
0:
|
11
11
|
- name: Easter Monday
|
12
12
|
regions: [ie]
|
13
|
-
function: easter(year)
|
14
|
-
|
13
|
+
function: easter(year)
|
14
|
+
function_modifier: 1
|
15
|
+
1:
|
15
16
|
- name: New Year's Day
|
16
17
|
regions: [ie]
|
17
18
|
mday: 1
|
18
|
-
observed: to_monday_if_weekend
|
19
|
-
3:
|
19
|
+
observed: to_monday_if_weekend(date)
|
20
|
+
3:
|
20
21
|
- name: St. Patrick's Day
|
21
22
|
regions: [ie]
|
22
23
|
mday: 17
|
23
|
-
observed: to_monday_if_weekend
|
24
|
-
5:
|
24
|
+
observed: to_monday_if_weekend(date)
|
25
|
+
5:
|
25
26
|
- name: May Day
|
26
27
|
regions: [ie]
|
27
28
|
week: 1
|
@@ -31,35 +32,35 @@ months:
|
|
31
32
|
regions: [ie]
|
32
33
|
week: 1
|
33
34
|
wday: 1
|
34
|
-
8:
|
35
|
+
8:
|
35
36
|
- name: August Bank Holiday
|
36
37
|
regions: [ie]
|
37
38
|
week: 1
|
38
39
|
wday: 1
|
39
|
-
10:
|
40
|
+
10:
|
40
41
|
- name: October Bank Holiday
|
41
42
|
regions: [ie]
|
42
43
|
week: -1
|
43
44
|
wday: 1
|
44
|
-
12:
|
45
|
+
12:
|
45
46
|
- name: Christmas Day
|
46
47
|
regions: [ie]
|
47
48
|
mday: 25
|
48
|
-
observed: to_monday_if_weekend
|
49
|
+
observed: to_monday_if_weekend(date)
|
49
50
|
- name: St. Stephen's Day
|
50
51
|
regions: [ie]
|
51
52
|
mday: 26
|
52
|
-
observed: ie_st_stephens_day
|
53
|
+
observed: ie_st_stephens_day(date)
|
53
54
|
methods:
|
54
|
-
ie_st_stephens_day:
|
55
|
+
ie_st_stephens_day:
|
55
56
|
# Ireland - Stephens Day is always the day after christmas day
|
56
|
-
|
57
|
+
arguments: date
|
58
|
+
source: |
|
57
59
|
case date.wday
|
58
60
|
when 6, 0 then date + 2
|
59
61
|
when 1 then date + 1
|
60
62
|
else date
|
61
63
|
end
|
62
|
-
end
|
63
64
|
tests: |
|
64
65
|
{Date.civil(2008,1,1) => 'New Year\'s Day',
|
65
66
|
Date.civil(2008,3,17) => 'St. Patrick\'s Day',
|
data/definitions/index.yaml
CHANGED
data/definitions/is.yaml
CHANGED
@@ -6,43 +6,53 @@
|
|
6
6
|
# - http://www.iceland.is/history-and-culture/Traditions/IcelandicHolidays/
|
7
7
|
# - http://en.wikipedia.org/wiki/Public_holidays_in_Iceland
|
8
8
|
# - http://www.qppstudio.net/publicholidays2007/iceland.htm
|
9
|
-
---
|
9
|
+
---
|
10
10
|
months:
|
11
|
-
0:
|
11
|
+
0:
|
12
12
|
- name: Bolludagur
|
13
13
|
regions: [is]
|
14
|
-
function: easter(year)
|
14
|
+
function: easter(year)
|
15
|
+
function_modifier: -48
|
15
16
|
- name: Sprengidagur
|
16
17
|
regions: [is]
|
17
|
-
function: easter(year)
|
18
|
+
function: easter(year)
|
19
|
+
function_modifier: -47
|
18
20
|
- name: Öskudagur
|
19
21
|
regions: [is]
|
20
|
-
function: easter(year)
|
22
|
+
function: easter(year)
|
23
|
+
function_modifier: -46
|
21
24
|
- name: Pálmasunnudagur
|
22
25
|
regions: [is]
|
23
|
-
function: easter(year)
|
26
|
+
function: easter(year)
|
27
|
+
function_modifier: -7
|
24
28
|
- name: Skírdagur
|
25
29
|
regions: [is]
|
26
|
-
function: easter(year)
|
30
|
+
function: easter(year)
|
31
|
+
function_modifier: -3
|
27
32
|
- name: Föstudaginn langi
|
28
33
|
regions: [is]
|
29
|
-
function: easter(year)
|
34
|
+
function: easter(year)
|
35
|
+
function_modifier: -2
|
30
36
|
- name: Páskadagur
|
31
37
|
regions: [is]
|
32
38
|
function: easter(year)
|
33
39
|
- name: Annar í páskum
|
34
40
|
regions: [is]
|
35
|
-
function: easter(year)
|
41
|
+
function: easter(year)
|
42
|
+
function_modifier: 1
|
36
43
|
- name: Uppstigningardagur
|
37
44
|
regions: [is]
|
38
|
-
function: easter(year)
|
45
|
+
function: easter(year)
|
46
|
+
function_modifier: 39
|
39
47
|
- name: Hvítasunnudagur
|
40
48
|
regions: [is]
|
41
|
-
function: easter(year)
|
49
|
+
function: easter(year)
|
50
|
+
function_modifier: 49
|
42
51
|
- name: Annar í hvítasunnu
|
43
52
|
regions: [is]
|
44
|
-
function: easter(year)
|
45
|
-
|
53
|
+
function: easter(year)
|
54
|
+
function_modifier: 50
|
55
|
+
1:
|
46
56
|
- name: Nýársdagur
|
47
57
|
regions: [is]
|
48
58
|
mday: 1
|
@@ -57,7 +67,7 @@ months:
|
|
57
67
|
- name: Konudagur
|
58
68
|
regions: [is]
|
59
69
|
mday: 18
|
60
|
-
type: informal
|
70
|
+
type: informal
|
61
71
|
4:
|
62
72
|
- name: Sumardagurinn fyrsti
|
63
73
|
regions: [is]
|
@@ -100,9 +110,10 @@ months:
|
|
100
110
|
regions: [is]
|
101
111
|
mday: 31
|
102
112
|
methods:
|
103
|
-
is_sumardagurinn_fyrsti:
|
113
|
+
is_sumardagurinn_fyrsti:
|
104
114
|
# Iceland: first day of summer (Thursday after 18 April)
|
105
|
-
|
115
|
+
arguments: year
|
116
|
+
source: |
|
106
117
|
date = Date.civil(year,4,18)
|
107
118
|
if date.wday < 4
|
108
119
|
date += (4 - date.wday)
|
@@ -110,9 +121,8 @@ methods:
|
|
110
121
|
date += (11 - date.wday)
|
111
122
|
end
|
112
123
|
date
|
113
|
-
end
|
114
124
|
tests: |
|
115
|
-
{Date.civil(2007,1,1) => 'Nýársdagur',
|
125
|
+
{Date.civil(2007,1,1) => 'Nýársdagur',
|
116
126
|
Date.civil(2007,1,6) => 'Þrettándinn',
|
117
127
|
Date.civil(2007,1,19) => 'Bóndadagur',
|
118
128
|
Date.civil(2007,2,18) => 'Konudagur',
|
@@ -133,4 +143,4 @@ tests: |
|
|
133
143
|
Date.civil(2007,12,26) => 'Jól',
|
134
144
|
Date.civil(2007,12,31) => 'Gamlárskvöld'}.each do |date, name|
|
135
145
|
assert_equal name, (Holidays.on(date, :is, :informal)[0] || {})[:name]
|
136
|
-
end
|
146
|
+
end
|
data/definitions/it.yaml
CHANGED
@@ -3,16 +3,17 @@
|
|
3
3
|
# Updated: 2008-11-23.
|
4
4
|
# Sources:
|
5
5
|
# - http://en.wikipedia.org/wiki/Holidays_in_Italy
|
6
|
-
---
|
6
|
+
---
|
7
7
|
months:
|
8
|
-
0:
|
8
|
+
0:
|
9
9
|
- name: Pasqua
|
10
10
|
regions: [it]
|
11
11
|
function: easter(year)
|
12
12
|
- name: Lunedì dell'Angelo
|
13
13
|
regions: [it]
|
14
|
-
function: easter(year)
|
15
|
-
|
14
|
+
function: easter(year)
|
15
|
+
function_modifier: 1
|
16
|
+
1:
|
16
17
|
- name: Capodanno
|
17
18
|
regions: [it]
|
18
19
|
mday: 1
|
@@ -23,7 +24,7 @@ months:
|
|
23
24
|
- name: Festa della Liberazione
|
24
25
|
regions: [it]
|
25
26
|
mday: 25
|
26
|
-
5:
|
27
|
+
5:
|
27
28
|
- name: Festa dei Lavoratori
|
28
29
|
regions: [it]
|
29
30
|
mday: 1
|
@@ -31,11 +32,11 @@ months:
|
|
31
32
|
- name: Festa della Repubblica
|
32
33
|
regions: [it]
|
33
34
|
mday: 2
|
34
|
-
8:
|
35
|
+
8:
|
35
36
|
- name: Assunzione
|
36
37
|
regions: [it]
|
37
38
|
mday: 15
|
38
|
-
11:
|
39
|
+
11:
|
39
40
|
- name: Ognissanti
|
40
41
|
regions: [it]
|
41
42
|
mday: 1
|
@@ -50,7 +51,7 @@ months:
|
|
50
51
|
regions: [it]
|
51
52
|
mday: 26
|
52
53
|
tests: |
|
53
|
-
{Date.civil(2007,1,1) => 'Capodanno',
|
54
|
+
{Date.civil(2007,1,1) => 'Capodanno',
|
54
55
|
Date.civil(2007,1,6) => 'Epifania',
|
55
56
|
Date.civil(2007,4,8) => 'Pasqua',
|
56
57
|
Date.civil(2007,4,9) => 'Lunedì dell\'Angelo',
|
@@ -63,4 +64,4 @@ tests: |
|
|
63
64
|
Date.civil(2007,12,25) => 'Natale',
|
64
65
|
Date.civil(2007,12,26) => 'Santo Stefano'}.each do |date, name|
|
65
66
|
assert_equal name, (Holidays.on(date, :it, :informal)[0] || {})[:name]
|
66
|
-
end
|
67
|
+
end
|
data/definitions/jp.yaml
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
# Reference:
|
3
3
|
# - http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
|
4
4
|
# - http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
|
5
|
+
# - https://en.wikipedia.org/wiki/Public_holidays_in_Japan
|
6
|
+
#
|
7
|
+
# For Japanese/English translations of each holiday:
|
8
|
+
# - http://www.japanesecalendar.net/holidays/2016/
|
5
9
|
#
|
6
10
|
# This definition can calculate current Japanese holidays,
|
7
11
|
# don't compat with past changes of Japan Holiday Act.
|
@@ -11,7 +15,13 @@
|
|
11
15
|
# 2014-11-09: Added substitute holiday by Yoshiyuki Hirano <yoshiyuki.hirano@henteco-labs.com>
|
12
16
|
# 2015-05-10: Non-Monday substitute holidays by Shuhei Kagawa <shuhei.kagawa@gmail.com>
|
13
17
|
# 2015-12-15: Added mountain day by Tsuyoshi Sano <ttwo32@gmail.com>
|
18
|
+
# 2016-03-26: Updated to match new custom method signature. See below for more. Phil Trimble <philtrimble@gmail.com>
|
14
19
|
#
|
20
|
+
# NOTE: This is the most complex set of custom date methods in the entire
|
21
|
+
# project, mainly surrounding the idea of 'substitute' holidays. Since this is
|
22
|
+
# the only one that is this complex I have settled on a less-than-ideal solution.
|
23
|
+
# It is overly verbose and not easy to follow. It will be a target for refactoring
|
24
|
+
# in the near future.
|
15
25
|
---
|
16
26
|
months:
|
17
27
|
1:
|
@@ -24,28 +34,31 @@ months:
|
|
24
34
|
week: 2
|
25
35
|
- name: 振替休日
|
26
36
|
regions: [jp]
|
27
|
-
|
37
|
+
mday: 1
|
38
|
+
function: jp_substitute_holiday(year, month, day)
|
28
39
|
2:
|
29
40
|
- name: 建国記念日
|
30
41
|
regions: [jp]
|
31
42
|
mday: 11
|
32
43
|
- name: 振替休日
|
33
44
|
regions: [jp]
|
34
|
-
|
45
|
+
mday: 11
|
46
|
+
function: jp_substitute_holiday(year, month, day)
|
35
47
|
3:
|
36
48
|
- name: 春分の日
|
37
49
|
regions: [jp]
|
38
50
|
function: jp_vernal_equinox_day(year)
|
39
51
|
- name: 振替休日
|
40
52
|
regions: [jp]
|
41
|
-
function:
|
53
|
+
function: jp_vernal_equinox_day_substitute(year)
|
42
54
|
4:
|
43
55
|
- name: 昭和の日
|
44
56
|
regions: [jp]
|
45
57
|
mday: 29
|
46
58
|
- name: 振替休日
|
47
59
|
regions: [jp]
|
48
|
-
|
60
|
+
mday: 29
|
61
|
+
function: jp_substitute_holiday(year, month, day)
|
49
62
|
5:
|
50
63
|
- name: 憲法記念日
|
51
64
|
regions: [jp]
|
@@ -58,30 +71,33 @@ months:
|
|
58
71
|
mday: 5
|
59
72
|
- name: 振替休日
|
60
73
|
regions: [jp]
|
61
|
-
|
74
|
+
mday: 3
|
75
|
+
function: jp_substitute_holiday(year, month, day)
|
62
76
|
- name: 振替休日
|
63
77
|
regions: [jp]
|
64
|
-
|
78
|
+
mday: 4
|
79
|
+
function: jp_substitute_holiday(year, month, day)
|
65
80
|
- name: 振替休日
|
66
81
|
regions: [jp]
|
67
|
-
|
82
|
+
mday: 5
|
83
|
+
function: jp_substitute_holiday(year, month, day)
|
68
84
|
7:
|
69
85
|
- name: 海の日
|
70
86
|
regions: [jp]
|
71
87
|
mday: 20
|
72
88
|
year_ranges:
|
73
89
|
- between: 1996..2002
|
74
|
-
- name: 振替休日
|
75
|
-
regions: [jp]
|
76
|
-
function: jp_substitute_holiday(year, 7, 20)
|
77
|
-
year_ranges:
|
78
|
-
- between: 1996..2002
|
79
90
|
- name: 海の日
|
80
91
|
regions: [jp]
|
81
92
|
wday: 1
|
82
93
|
week: 3
|
83
94
|
year_ranges:
|
84
95
|
- after: 2003
|
96
|
+
- name: 振替休日
|
97
|
+
regions: [jp]
|
98
|
+
function: jp_marine_day_substitute(year)
|
99
|
+
year_ranges:
|
100
|
+
- between: 1996..2002
|
85
101
|
8:
|
86
102
|
- name: 山の日
|
87
103
|
regions: [jp]
|
@@ -92,7 +108,7 @@ months:
|
|
92
108
|
regions: [jp]
|
93
109
|
year_ranges:
|
94
110
|
- after: 2016
|
95
|
-
function:
|
111
|
+
function: jp_mountain_holiday_substitute(year)
|
96
112
|
9:
|
97
113
|
- name: 敬老の日
|
98
114
|
regions: [jp]
|
@@ -100,16 +116,16 @@ months:
|
|
100
116
|
week: 3
|
101
117
|
- name: 振替休日
|
102
118
|
regions: [jp]
|
103
|
-
function:
|
119
|
+
function: jp_respect_for_aged_holiday_substitute(year)
|
104
120
|
- name: 国民の休日
|
105
121
|
regions: [jp]
|
106
|
-
function:
|
122
|
+
function: jp_citizens_holiday(year)
|
107
123
|
- name: 秋分の日
|
108
124
|
regions: [jp]
|
109
125
|
function: jp_national_culture_day(year)
|
110
126
|
- name: 振替休日
|
111
127
|
regions: [jp]
|
112
|
-
function:
|
128
|
+
function: jp_national_culture_day_substitute(year)
|
113
129
|
10:
|
114
130
|
- name: 体育の日
|
115
131
|
regions: [jp]
|
@@ -117,30 +133,39 @@ months:
|
|
117
133
|
week: 2
|
118
134
|
- name: 振替休日
|
119
135
|
regions: [jp]
|
120
|
-
function:
|
136
|
+
function: jp_health_sports_day_substitute(year)
|
121
137
|
11:
|
122
138
|
- name: 文化の日
|
123
139
|
regions: [jp]
|
124
140
|
mday: 3
|
125
141
|
- name: 振替休日
|
126
142
|
regions: [jp]
|
127
|
-
|
143
|
+
mday: 3
|
144
|
+
function: jp_substitute_holiday(year, month, day)
|
128
145
|
- name: 勤労感謝の日
|
129
146
|
regions: [jp]
|
130
147
|
mday: 23
|
131
148
|
- name: 振替休日
|
132
149
|
regions: [jp]
|
133
|
-
|
150
|
+
mday: 23
|
151
|
+
function: jp_substitute_holiday(year, month, day)
|
134
152
|
12:
|
135
153
|
- name: 天皇誕生日
|
136
154
|
regions: [jp]
|
137
155
|
mday: 23
|
138
156
|
- name: 振替休日
|
139
157
|
regions: [jp]
|
140
|
-
|
158
|
+
mday: 23
|
159
|
+
function: jp_substitute_holiday(year, month, day)
|
160
|
+
|
141
161
|
methods:
|
142
|
-
|
143
|
-
|
162
|
+
jp_health_sports_day_substitute:
|
163
|
+
arguments: year
|
164
|
+
source: |
|
165
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 10, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 10, 2, 1))
|
166
|
+
jp_vernal_equinox_day:
|
167
|
+
arguments: year
|
168
|
+
source: |
|
144
169
|
day =
|
145
170
|
case year
|
146
171
|
when 1851..1899
|
@@ -157,9 +182,18 @@ methods:
|
|
157
182
|
day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
|
158
183
|
day = day.floor
|
159
184
|
Date.civil(year, 3, day)
|
160
|
-
|
161
|
-
|
162
|
-
|
185
|
+
jp_vernal_equinox_day_substitute:
|
186
|
+
arguments: year
|
187
|
+
source: |
|
188
|
+
date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_vernal_equinox_day(year)").call(year)
|
189
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
190
|
+
jp_marine_day_substitute:
|
191
|
+
arguments: year
|
192
|
+
source: |
|
193
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 7, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 7, 3, 1))
|
194
|
+
jp_national_culture_day:
|
195
|
+
arguments: year
|
196
|
+
source: |
|
163
197
|
day =
|
164
198
|
case year
|
165
199
|
when 1851..1899
|
@@ -176,34 +210,48 @@ methods:
|
|
176
210
|
day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
|
177
211
|
day = day.floor
|
178
212
|
Date.civil(year, 9, day)
|
179
|
-
|
180
|
-
|
181
|
-
|
213
|
+
jp_national_culture_day_substitute:
|
214
|
+
arguments: year
|
215
|
+
source: |
|
216
|
+
date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
|
217
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
218
|
+
jp_citizens_holiday:
|
219
|
+
arguments: year
|
220
|
+
source: |
|
182
221
|
year < 2003 and return nil
|
183
|
-
ncd = Holidays.jp_national_culture_day(year)
|
222
|
+
ncd = Holidays::DefinitionFactory.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
|
184
223
|
if ncd.wday == 3
|
185
224
|
ncd - 1
|
186
225
|
else
|
187
226
|
nil
|
188
227
|
end
|
189
|
-
|
190
|
-
|
191
|
-
|
228
|
+
jp_mountain_holiday:
|
229
|
+
arguments: year
|
230
|
+
source: |
|
231
|
+
return nil if year < 2016
|
192
232
|
Date.civil(year, 8, 11)
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
233
|
+
jp_mountain_holiday_substitute:
|
234
|
+
arguments: year
|
235
|
+
source: |
|
236
|
+
date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_mountain_holiday(year)").call(year)
|
237
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
|
238
|
+
jp_respect_for_aged_holiday_substitute:
|
239
|
+
arguments: year
|
240
|
+
source: |
|
241
|
+
Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 9, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 9, 3, 1))
|
242
|
+
jp_substitute_holiday:
|
243
|
+
arguments: year, month, day
|
244
|
+
source: |
|
245
|
+
date = Date.civil(year, month, day)
|
246
|
+
date.wday == 0 ? (Holidays::DefinitionFactory.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : nil
|
247
|
+
jp_next_weekday:
|
248
|
+
arguments: date
|
249
|
+
source: |
|
202
250
|
is_holiday = Holidays::JP.holidays_by_month[date.month].any? do |holiday|
|
203
251
|
holiday[:mday] == date.day
|
204
252
|
end
|
205
|
-
date.wday == 0 || is_holiday ? Holidays.jp_next_weekday(date+1) : date
|
206
|
-
|
253
|
+
date.wday == 0 || is_holiday ? (Holidays::DefinitionFactory.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : date
|
254
|
+
|
207
255
|
tests: |
|
208
256
|
{Date.civil(2008,1,1) => '元日',
|
209
257
|
Date.civil(2010,1,11) => '成人の日',
|
@@ -265,4 +313,4 @@ tests: |
|
|
265
313
|
end
|
266
314
|
|
267
315
|
# before 2016, there is no mountain holiday.
|
268
|
-
assert_nil Date.civil(2015,8,11)
|
316
|
+
assert_nil Holidays.on(Date.civil(2015,8,11), :jp)[0]
|