holidays 11.3.0 → 11.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/generated_definitions/MANIFEST +2 -0
- data/lib/generated_definitions/REGIONS.rb +3 -3
- data/lib/generated_definitions/ar.rb +1 -18
- data/lib/generated_definitions/at.rb +1 -3
- data/lib/generated_definitions/au.rb +1 -86
- data/lib/generated_definitions/be_fr.rb +1 -3
- data/lib/generated_definitions/be_nl.rb +1 -3
- data/lib/generated_definitions/bg.rb +1 -3
- data/lib/generated_definitions/br.rb +1 -3
- data/lib/generated_definitions/by.rb +39 -0
- data/lib/generated_definitions/ca.rb +4 -14
- data/lib/generated_definitions/ch.rb +1 -48
- data/lib/generated_definitions/cl.rb +1 -33
- data/lib/generated_definitions/cn.rb +39 -0
- data/lib/generated_definitions/co.rb +10 -90
- data/lib/generated_definitions/cr.rb +1 -3
- data/lib/generated_definitions/cy.rb +1 -3
- data/lib/generated_definitions/cz.rb +1 -3
- data/lib/generated_definitions/de.rb +2 -14
- data/lib/generated_definitions/dk.rb +1 -3
- data/lib/generated_definitions/ecbtarget.rb +1 -3
- data/lib/generated_definitions/ee.rb +1 -3
- data/lib/generated_definitions/es.rb +2 -4
- data/lib/generated_definitions/europe.rb +5 -95
- data/lib/generated_definitions/federalreserve.rb +1 -3
- data/lib/generated_definitions/federalreservebanks.rb +1 -3
- data/lib/generated_definitions/fedex.rb +1 -7
- data/lib/generated_definitions/fi.rb +1 -25
- data/lib/generated_definitions/fr.rb +1 -3
- data/lib/generated_definitions/gb.rb +1 -3
- data/lib/generated_definitions/ge.rb +1 -3
- data/lib/generated_definitions/gr.rb +1 -3
- data/lib/generated_definitions/hk.rb +1 -3
- data/lib/generated_definitions/hr.rb +1 -3
- data/lib/generated_definitions/hu.rb +1 -3
- data/lib/generated_definitions/ie.rb +1 -12
- data/lib/generated_definitions/il.rb +1 -3
- data/lib/generated_definitions/in.rb +1 -3
- data/lib/generated_definitions/is.rb +1 -13
- data/lib/generated_definitions/it.rb +1 -3
- data/lib/generated_definitions/jp.rb +1 -95
- data/lib/generated_definitions/ke.rb +1 -3
- data/lib/generated_definitions/kr.rb +4 -6
- data/lib/generated_definitions/kz.rb +1 -3
- data/lib/generated_definitions/li.rb +1 -3
- data/lib/generated_definitions/lt.rb +1 -3
- data/lib/generated_definitions/lu.rb +1 -3
- data/lib/generated_definitions/lv.rb +1 -17
- data/lib/generated_definitions/ma.rb +1 -3
- data/lib/generated_definitions/mc.rb +1 -3
- data/lib/generated_definitions/mt_en.rb +1 -3
- data/lib/generated_definitions/mt_mt.rb +1 -3
- data/lib/generated_definitions/mx.rb +4 -4
- data/lib/generated_definitions/my.rb +1 -3
- data/lib/generated_definitions/nerc.rb +1 -3
- data/lib/generated_definitions/ng.rb +1 -3
- data/lib/generated_definitions/nl.rb +1 -3
- data/lib/generated_definitions/no.rb +1 -3
- data/lib/generated_definitions/northamerica.rb +4 -97
- data/lib/generated_definitions/nyse.rb +1 -3
- data/lib/generated_definitions/nz.rb +4 -70
- data/lib/generated_definitions/pe.rb +12 -10
- data/lib/generated_definitions/ph.rb +1 -9
- data/lib/generated_definitions/pl.rb +1 -3
- data/lib/generated_definitions/pt.rb +1 -3
- data/lib/generated_definitions/ro.rb +3 -5
- data/lib/generated_definitions/rs_cyrl.rb +1 -3
- data/lib/generated_definitions/rs_la.rb +1 -3
- data/lib/generated_definitions/ru.rb +1 -3
- data/lib/generated_definitions/scandinavia.rb +1 -47
- data/lib/generated_definitions/se.rb +1 -15
- data/lib/generated_definitions/sg.rb +1 -3
- data/lib/generated_definitions/si.rb +1 -3
- data/lib/generated_definitions/sk.rb +1 -3
- data/lib/generated_definitions/southamerica.rb +18 -139
- data/lib/generated_definitions/th.rb +1 -3
- data/lib/generated_definitions/tn.rb +1 -3
- data/lib/generated_definitions/tr.rb +1 -29
- data/lib/generated_definitions/tsx.rb +1 -13
- data/lib/generated_definitions/ua.rb +1 -3
- data/lib/generated_definitions/unitednations.rb +1 -3
- data/lib/generated_definitions/ups.rb +1 -7
- data/lib/generated_definitions/us.rb +4 -87
- data/lib/generated_definitions/ve.rb +1 -3
- data/lib/generated_definitions/vn.rb +1 -3
- data/lib/generated_definitions/za.rb +1 -3
- data/lib/holidays/{load_all_definitions.rb → bootstrap.rb} +15 -8
- data/lib/holidays/date_calculator/lunar_date.rb +1 -0
- data/lib/holidays/definition/context/generator.rb +4 -0
- data/lib/holidays/definition/custom_methods/ar.rb +28 -0
- data/lib/holidays/definition/custom_methods/au.rb +96 -0
- data/lib/holidays/definition/custom_methods/ca.rb +23 -0
- data/lib/holidays/definition/custom_methods/ch.rb +58 -0
- data/lib/holidays/definition/custom_methods/cl.rb +43 -0
- data/lib/holidays/definition/custom_methods/cn.rb +31 -0
- data/lib/holidays/definition/custom_methods/co.rb +22 -0
- data/lib/holidays/definition/custom_methods/de.rb +23 -0
- data/lib/holidays/definition/custom_methods/fedex.rb +17 -0
- data/lib/holidays/definition/custom_methods/fi.rb +35 -0
- data/lib/holidays/definition/custom_methods/ie.rb +22 -0
- data/lib/holidays/definition/custom_methods/is.rb +23 -0
- data/lib/holidays/definition/custom_methods/jp.rb +107 -0
- data/lib/holidays/definition/custom_methods/kr.rb +17 -0
- data/lib/holidays/definition/custom_methods/lv.rb +27 -0
- data/lib/holidays/definition/custom_methods/nz.rb +77 -0
- data/lib/holidays/definition/custom_methods/ph.rb +19 -0
- data/lib/holidays/definition/custom_methods/registry.rb +103 -0
- data/lib/holidays/definition/custom_methods/se.rb +25 -0
- data/lib/holidays/definition/custom_methods/tr.rb +59 -0
- data/lib/holidays/definition/custom_methods/us.rb +92 -0
- data/lib/holidays/definition/generator/module.rb +7 -4
- data/lib/holidays/version.rb +1 -1
- data/lib/holidays.rb +4 -2
- metadata +25 -2
|
@@ -30,7 +30,7 @@ module Holidays
|
|
|
30
30
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => 71, :name => "Sagrado Corazón", :regions => [:co]},
|
|
31
31
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -3, :name => "Jueves Santo", :regions => [:pe]},
|
|
32
32
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :name => "Viernes Santo", :regions => [:pe]},
|
|
33
|
-
{:function => "easter(year)", :function_arguments => [:year], :name => "Pascua", :regions => [:pe]},
|
|
33
|
+
{:function => "easter(year)", :function_arguments => [:year], :type => :informal, :name => "Pascua", :regions => [:pe]},
|
|
34
34
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -48, :name => "Lunes Carnaval", :regions => [:ve]},
|
|
35
35
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -47, :name => "Martes Carnaval", :regions => [:ve]},
|
|
36
36
|
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -3, :name => "Jueves Santo", :regions => [:ve]},
|
|
@@ -39,12 +39,12 @@ module Holidays
|
|
|
39
39
|
{:mday => 1, :name => "Dia da Confraternização Universal", :regions => [:br]},
|
|
40
40
|
{:mday => 1, :name => "Año Nuevo", :regions => [:cl]},
|
|
41
41
|
{:mday => 1, :name => "Año Nuevo", :regions => [:co]},
|
|
42
|
-
{:function => "
|
|
42
|
+
{:mday => 6, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "Día de los Reyes Magos", :regions => [:co]},
|
|
43
43
|
{:mday => 1, :name => "Año Nuevo", :regions => [:pe]},
|
|
44
|
-
{:mday => 6, :
|
|
44
|
+
{:mday => 6, :type => :informal, :name => "Día de los Reyes Magos", :regions => [:pe]},
|
|
45
45
|
{:mday => 1, :name => "Año Nuevo", :regions => [:ve]}],
|
|
46
46
|
3 => [{:mday => 24, :name => "Día Nacional de la Memoria por la Verdad y la Justicia", :regions => [:ar]},
|
|
47
|
-
{:function => "
|
|
47
|
+
{:mday => 19, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "Día de San José", :regions => [:co]}],
|
|
48
48
|
4 => [{:mday => 2, :name => "Día del Veterano y de los Caídos en la Guerra de Malvinas", :regions => [:ar]},
|
|
49
49
|
{:mday => 21, :name => "Dia de Tiradentes", :regions => [:br]},
|
|
50
50
|
{:mday => 19, :name => "Declaración Independencia", :regions => [:ve]}],
|
|
@@ -61,16 +61,19 @@ module Holidays
|
|
|
61
61
|
6 => [{:mday => 17, :function => "to_nearest_monday(date)", :function_arguments => [:date], :name => "Paso a la Inmortalidad del General Martín Miguel de Güemes", :regions => [:ar]},
|
|
62
62
|
{:mday => 20, :name => "Día de la Bandera", :regions => [:ar]},
|
|
63
63
|
{:mday => 29, :year_ranges => { :until => 1999 },:name => "San Pedro y San Pablo", :regions => [:cl]},
|
|
64
|
-
{:function => "
|
|
65
|
-
{:mday => 7, :type => :informal, :name => "Día de la Bandera", :regions => [:pe]},
|
|
64
|
+
{:mday => 29, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "San Pedro y San Pablo", :regions => [:co]},
|
|
65
|
+
{:mday => 7, :year_ranges => { :until => 2023 },:type => :informal, :name => "Día de la Bandera", :regions => [:pe]},
|
|
66
|
+
{:mday => 7, :year_ranges => { :from => 2024 },:name => "Batalla de Arica y Día de la Bandera", :regions => [:pe]},
|
|
66
67
|
{:wday => 0, :week => 3, :type => :informal, :name => "Día del Padre", :regions => [:pe]},
|
|
67
68
|
{:mday => 24, :type => :informal, :name => "Inti Raymi", :regions => [:pe]},
|
|
68
|
-
{:mday => 29, :name => "San
|
|
69
|
+
{:mday => 29, :name => "Día de San Pedro y San Pablo", :regions => [:pe]},
|
|
69
70
|
{:mday => 24, :name => "Aniversario Batalla de Carabobo", :regions => [:ve]}],
|
|
70
71
|
7 => [{:mday => 8, :year_ranges => { :limited => [2016] },:name => "Feriado con fines turísticos", :regions => [:ar]},
|
|
71
72
|
{:mday => 9, :name => "Día de la Independencia", :regions => [:ar]},
|
|
72
73
|
{:mday => 16, :name => "Día de la Virgen del Carmen", :regions => [:cl]},
|
|
74
|
+
{:mday => 9, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :year_ranges => { :from => 2026 },:name => "Día de Nuestra Señora del Rosario de Chiquinquirá", :regions => [:co]},
|
|
73
75
|
{:mday => 20, :name => "Día de la Independencia", :regions => [:co]},
|
|
76
|
+
{:mday => 23, :year_ranges => { :from => 2023 },:name => "Día de la Fuerza Aérea del Perú", :regions => [:pe]},
|
|
74
77
|
{:mday => 28, :name => "Primer Día de la Independencia", :regions => [:pe]},
|
|
75
78
|
{:mday => 29, :name => "Segundo Día de la Independencia", :regions => [:pe]},
|
|
76
79
|
{:mday => 5, :name => "Día de la Independencia", :regions => [:ve]},
|
|
@@ -78,15 +81,16 @@ module Holidays
|
|
|
78
81
|
8 => [{:mday => 17, :function => "to_nearest_monday(date)", :function_arguments => [:date], :name => "Paso a la Inmortalidad del General José de San Martín", :regions => [:ar]},
|
|
79
82
|
{:mday => 15, :name => "Asunción de la Virgen", :regions => [:cl]},
|
|
80
83
|
{:mday => 7, :name => "Batalla de Boyacá", :regions => [:co]},
|
|
81
|
-
{:function => "
|
|
84
|
+
{:mday => 15, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "La Asunción de la Virgen", :regions => [:co]},
|
|
85
|
+
{:mday => 6, :year_ranges => { :from => 2022 },:name => "Batalla de Junín", :regions => [:pe]},
|
|
82
86
|
{:mday => 30, :name => "Santa Rosa de Lima", :regions => [:pe]}],
|
|
83
87
|
10 => [{:mday => 12, :function => "to_nearest_monday(date)", :function_arguments => [:date], :name => "Día del Respeto a la Diversidad Cultural", :regions => [:ar]},
|
|
84
88
|
{:mday => 8, :year_ranges => { :limited => [2021] },:name => "Feriado con fines turísticos", :regions => [:ar]},
|
|
85
89
|
{:mday => 12, :name => "Dia de Nossa Senhora Aparecida", :regions => [:br]},
|
|
86
90
|
{:mday => 12, :year_ranges => { :until => 1999 },:name => "Encuentro de Dos Mundos", :regions => [:cl]},
|
|
87
91
|
{:function => "columbus_day_cl(year)", :function_arguments => [:year], :year_ranges => { :from => 2000 },:name => "Encuentro de Dos Mundos", :regions => [:cl]},
|
|
88
|
-
{:function => "
|
|
89
|
-
{:mday => 8, :name => "
|
|
92
|
+
{:mday => 12, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "Día de la Raza", :regions => [:co]},
|
|
93
|
+
{:mday => 8, :name => "Combate de Angamos", :regions => [:pe]},
|
|
90
94
|
{:mday => 12, :name => "Día de la Resistencia Indígena", :regions => [:ve]}],
|
|
91
95
|
11 => [{:mday => 20, :name => "Día de la Soberanía Nacional", :regions => [:ar]},
|
|
92
96
|
{:mday => 22, :year_ranges => { :limited => [2021] },:name => "Feriado con fines turísticos", :regions => [:ar]},
|
|
@@ -94,8 +98,8 @@ module Holidays
|
|
|
94
98
|
{:mday => 15, :name => "Proclamação da República", :regions => [:br]},
|
|
95
99
|
{:mday => 20, :year_ranges => { :from => 2024 },:name => "Dia Nacional de Zumbi e da Consciência Negra", :regions => [:br]},
|
|
96
100
|
{:mday => 1, :name => "Día de Todos los Santos", :regions => [:cl]},
|
|
97
|
-
{:function => "
|
|
98
|
-
{:function => "
|
|
101
|
+
{:mday => 1, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "Día de Todos los Santos", :regions => [:co]},
|
|
102
|
+
{:mday => 11, :function => "to_following_monday_if_not_monday(date)", :function_arguments => [:date], :name => "Independencia de Cartagena", :regions => [:co]},
|
|
99
103
|
{:mday => 1, :name => "Todos los Santos", :regions => [:pe]}],
|
|
100
104
|
12 => [{:mday => 8, :name => "Inmaculada Concepción de María", :regions => [:ar]},
|
|
101
105
|
{:mday => 9, :year_ranges => { :limited => [2016] },:name => "Feriado con fines turísticos", :regions => [:ar]},
|
|
@@ -106,6 +110,7 @@ module Holidays
|
|
|
106
110
|
{:mday => 8, :name => "Día de la Inmaculada Concepción", :regions => [:co]},
|
|
107
111
|
{:mday => 25, :name => "Navidad", :regions => [:co]},
|
|
108
112
|
{:mday => 8, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Inmaculada Concepción", :regions => [:pe]},
|
|
113
|
+
{:mday => 9, :year_ranges => { :from => 2022 },:name => "Batalla de Ayacucho", :regions => [:pe]},
|
|
109
114
|
{:mday => 25, :name => "Navidad del Señor", :regions => [:pe]},
|
|
110
115
|
{:mday => 25, :name => "Día de Navidad", :regions => [:ve]}],
|
|
111
116
|
9 => [{:mday => 7, :name => "Proclamação da Independência", :regions => [:br]},
|
|
@@ -116,133 +121,7 @@ module Holidays
|
|
|
116
121
|
end
|
|
117
122
|
|
|
118
123
|
def self.custom_methods
|
|
119
|
-
{
|
|
120
|
-
"to_nearest_monday(date)" => Proc.new { |date|
|
|
121
|
-
case date.wday
|
|
122
|
-
when 5
|
|
123
|
-
date += 3
|
|
124
|
-
when 4
|
|
125
|
-
date += 4
|
|
126
|
-
when 3
|
|
127
|
-
date -= 2
|
|
128
|
-
when 2
|
|
129
|
-
date -= 1
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
date
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
"st_peter_st_paul_cl(year)" => Proc.new { |year|
|
|
136
|
-
date = Date.civil(year, 6, 29)
|
|
137
|
-
if [2,3,4].include?(date.wday)
|
|
138
|
-
date -= (date.wday - 1)
|
|
139
|
-
elsif date.wday == 5
|
|
140
|
-
date += 3
|
|
141
|
-
end
|
|
142
|
-
date
|
|
143
|
-
},
|
|
144
|
-
|
|
145
|
-
"columbus_day_cl(year)" => Proc.new { |year|
|
|
146
|
-
date = Date.civil(year, 10, 12)
|
|
147
|
-
if [2,3,4].include?(date.wday)
|
|
148
|
-
date -= (date.wday - 1)
|
|
149
|
-
elsif date.wday == 5
|
|
150
|
-
date += 3
|
|
151
|
-
end
|
|
152
|
-
date
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
"other_churches_day_cl(year)" => Proc.new { |year|
|
|
156
|
-
date = Date.civil(year, 10, 31)
|
|
157
|
-
if date.wday == 2
|
|
158
|
-
date -= 4
|
|
159
|
-
elsif date.wday == 3
|
|
160
|
-
date += 2
|
|
161
|
-
end
|
|
162
|
-
date
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
"to_following_monday_if_not_monday(date)" => Proc.new { |date|
|
|
166
|
-
if date.wday > 1
|
|
167
|
-
date += ( 8 - date.wday )
|
|
168
|
-
elsif date.wday == 0
|
|
169
|
-
date += 1
|
|
170
|
-
end
|
|
171
|
-
date
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
"epiphany(year)" => Proc.new { |year|
|
|
175
|
-
date = Date.civil( year, 1, 6 )
|
|
176
|
-
if date.wday > 1
|
|
177
|
-
date += ( 8 - date.wday )
|
|
178
|
-
elsif date.wday == 0
|
|
179
|
-
date += 1
|
|
180
|
-
end
|
|
181
|
-
date
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
"saint_josephs_day(year)" => Proc.new { |year|
|
|
185
|
-
date = Date.civil( year, 3, 19 )
|
|
186
|
-
if date.wday > 1
|
|
187
|
-
date += ( 8 - date.wday )
|
|
188
|
-
elsif date.wday == 0
|
|
189
|
-
date += 1
|
|
190
|
-
end
|
|
191
|
-
date
|
|
192
|
-
},
|
|
193
|
-
|
|
194
|
-
"saint_peter_and_saint_paul(year)" => Proc.new { |year|
|
|
195
|
-
date = Date.civil( year, 6, 29 )
|
|
196
|
-
if date.wday > 1
|
|
197
|
-
date += ( 8 - date.wday )
|
|
198
|
-
elsif date.wday == 0
|
|
199
|
-
date += 1
|
|
200
|
-
end
|
|
201
|
-
date
|
|
202
|
-
},
|
|
203
|
-
|
|
204
|
-
"assumption_of_mary(year)" => Proc.new { |year|
|
|
205
|
-
date = Date.civil( year, 8, 15 )
|
|
206
|
-
if date.wday > 1
|
|
207
|
-
date += ( 8 - date.wday )
|
|
208
|
-
elsif date.wday == 0
|
|
209
|
-
date += 1
|
|
210
|
-
end
|
|
211
|
-
date
|
|
212
|
-
},
|
|
213
|
-
|
|
214
|
-
"columbus_day(year)" => Proc.new { |year|
|
|
215
|
-
date = Date.civil( year, 10, 12 )
|
|
216
|
-
if date.wday > 1
|
|
217
|
-
date += ( 8 - date.wday )
|
|
218
|
-
elsif date.wday == 0
|
|
219
|
-
date += 1
|
|
220
|
-
end
|
|
221
|
-
date
|
|
222
|
-
},
|
|
223
|
-
|
|
224
|
-
"all_saints_day(year)" => Proc.new { |year|
|
|
225
|
-
date = Date.civil( year, 11, 1 )
|
|
226
|
-
if date.wday > 1
|
|
227
|
-
date += ( 8 - date.wday )
|
|
228
|
-
elsif date.wday == 0
|
|
229
|
-
date += 1
|
|
230
|
-
end
|
|
231
|
-
date
|
|
232
|
-
},
|
|
233
|
-
|
|
234
|
-
"independence_of_cartagena(year)" => Proc.new { |year|
|
|
235
|
-
date = Date.civil( year, 11, 11 )
|
|
236
|
-
if date.wday > 1
|
|
237
|
-
date += ( 8 - date.wday )
|
|
238
|
-
elsif date.wday == 0
|
|
239
|
-
date += 1
|
|
240
|
-
end
|
|
241
|
-
date
|
|
242
|
-
},
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
}
|
|
124
|
+
{}
|
|
246
125
|
end
|
|
247
126
|
end
|
|
248
127
|
end
|
|
@@ -30,35 +30,7 @@ module Holidays
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def self.custom_methods
|
|
33
|
-
{
|
|
34
|
-
"ramadan_feast(year)" => Proc.new { |year|
|
|
35
|
-
begin_of_ramadan_feast = {
|
|
36
|
-
'2014' => Date.civil(2014, 7, 28),
|
|
37
|
-
'2015' => Date.civil(2015, 7, 17),
|
|
38
|
-
'2016' => Date.civil(2016, 7, 5),
|
|
39
|
-
'2017' => Date.civil(2017, 6, 25),
|
|
40
|
-
'2018' => Date.civil(2018, 6, 15),
|
|
41
|
-
'2019' => Date.civil(2019, 6, 4),
|
|
42
|
-
'2020' => Date.civil(2020, 5, 24)
|
|
43
|
-
}
|
|
44
|
-
begin_of_ramadan_feast[year.to_s]
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
"sacrifice_feast(year)" => Proc.new { |year|
|
|
48
|
-
begin_of_sacrifice_feast = {
|
|
49
|
-
'2014' => Date.civil(2014, 10, 4),
|
|
50
|
-
'2015' => Date.civil(2015, 9, 24),
|
|
51
|
-
'2016' => Date.civil(2016, 9, 12),
|
|
52
|
-
'2017' => Date.civil(2017, 9, 1),
|
|
53
|
-
'2018' => Date.civil(2018, 8, 21),
|
|
54
|
-
'2019' => Date.civil(2019, 8, 11),
|
|
55
|
-
'2020' => Date.civil(2020, 7, 31)
|
|
56
|
-
}
|
|
57
|
-
begin_of_sacrifice_feast[year.to_s]
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
33
|
+
{}
|
|
62
34
|
end
|
|
63
35
|
end
|
|
64
36
|
end
|
|
@@ -28,19 +28,7 @@ module Holidays
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def self.custom_methods
|
|
31
|
-
{
|
|
32
|
-
"ca_victoria_day(year)" => Proc.new { |year|
|
|
33
|
-
date = Date.civil(year,5,24)
|
|
34
|
-
if date.wday > 1
|
|
35
|
-
date -= (date.wday - 1)
|
|
36
|
-
elsif date.wday == 0
|
|
37
|
-
date -= 6
|
|
38
|
-
end
|
|
39
|
-
date
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
31
|
+
{}
|
|
44
32
|
end
|
|
45
33
|
end
|
|
46
34
|
end
|
|
@@ -82,7 +82,9 @@ module Holidays
|
|
|
82
82
|
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Presidents' Day", :regions => [:us_nm]},
|
|
83
83
|
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Lincoln's Birthday", :regions => [:us_in]},
|
|
84
84
|
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "American Indian Heritage Day", :regions => [:us_md]},
|
|
85
|
-
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Day after Thanksgiving (Black Friday)", :regions => [:us_ca, :us_de, :us_fl, :us_ia, :us_il, :us_ks, :us_ky, :us_me, :us_mi, :us_mn, :us_ms, :us_ne, :us_nh, :us_nc, :us_pa, :us_sc, :us_ok, :us_tn, :us_tx, :us_va, :us_wa, :us_wv]}
|
|
85
|
+
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Day after Thanksgiving (Black Friday)", :regions => [:us_ca, :us_de, :us_fl, :us_ia, :us_il, :us_ks, :us_ky, :us_me, :us_mi, :us_mn, :us_ms, :us_ne, :us_nh, :us_nc, :us_pa, :us_sc, :us_ok, :us_tn, :us_tx, :us_va, :us_wa, :us_wv]},
|
|
86
|
+
{:mday => 1, :type => :informal, :name => "Day of the Dead", :regions => [:us, :ca]},
|
|
87
|
+
{:mday => 2, :type => :informal, :name => "Day of the Dead", :regions => [:us, :ca]}],
|
|
86
88
|
12 => [{:mday => 24, :name => "Christmas Eve", :regions => [:us_ar, :us_mi, :us_nc, :us_sc, :us_tx, :us_wi]},
|
|
87
89
|
{:mday => 24, :function => "christmas_eve_holiday(date)", :function_arguments => [:date], :name => "Christmas Eve (Holiday)", :regions => [:us_mi, :us_sc, :us_va]},
|
|
88
90
|
{:mday => 25, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:us]},
|
|
@@ -92,92 +94,7 @@ module Holidays
|
|
|
92
94
|
end
|
|
93
95
|
|
|
94
96
|
def self.custom_methods
|
|
95
|
-
{
|
|
96
|
-
"christmas_eve_holiday(date)" => Proc.new { |date|
|
|
97
|
-
beginning_of_month = Date.civil(date.year, date.month, 1)
|
|
98
|
-
(date.saturday? || date.sunday?) ? date.downto(beginning_of_month).find {|d| d if d.wday == 5} : date
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
"rosh_hashanah(year)" => Proc.new { |year|
|
|
102
|
-
rosh_hashanah_dates = {
|
|
103
|
-
'2014' => Date.civil(2014, 9, 25),
|
|
104
|
-
'2015' => Date.civil(2015, 9, 14),
|
|
105
|
-
'2016' => Date.civil(2016, 10, 3),
|
|
106
|
-
'2017' => Date.civil(2017, 9, 21),
|
|
107
|
-
'2018' => Date.civil(2018, 9, 10),
|
|
108
|
-
'2019' => Date.civil(2019, 9, 30),
|
|
109
|
-
'2020' => Date.civil(2020, 9, 19)
|
|
110
|
-
}
|
|
111
|
-
rosh_hashanah_dates[year.to_s]
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
"yom_kippur(year)" => Proc.new { |year|
|
|
115
|
-
yom_kippur_dates = {
|
|
116
|
-
'2014' => Date.civil(2014, 10, 4),
|
|
117
|
-
'2015' => Date.civil(2015, 9, 23),
|
|
118
|
-
'2016' => Date.civil(2016, 10, 12),
|
|
119
|
-
'2017' => Date.civil(2017, 9, 30),
|
|
120
|
-
'2018' => Date.civil(2018, 9, 19),
|
|
121
|
-
'2019' => Date.civil(2019, 10, 9),
|
|
122
|
-
'2020' => Date.civil(2020, 9, 28)
|
|
123
|
-
}
|
|
124
|
-
yom_kippur_dates[year.to_s]
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
"georgia_state_holiday(year, month)" => Proc.new { |year, month|
|
|
128
|
-
beginning_of_month = Date.civil(year, month, 1)
|
|
129
|
-
state_holiday = Date.civil(year, month, 26)
|
|
130
|
-
state_holiday.downto(beginning_of_month).find {|date| date if date.wday == 1 }
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
"lee_jackson_day(year, month)" => Proc.new { |year, month|
|
|
134
|
-
day_of_holiday = Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, month, 3, 1)
|
|
135
|
-
beginning_of_month = Date.civil(year, month, 1)
|
|
136
|
-
king_day = Date.civil(year, month, day_of_holiday)
|
|
137
|
-
king_day.downto(beginning_of_month).find {|date| date if date.wday == 5 }
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
"juneteenth_national_independence_day(region, date)" => Proc.new { |region, date|
|
|
141
|
-
if region == :us_ut
|
|
142
|
-
case date.wday
|
|
143
|
-
when 1
|
|
144
|
-
date
|
|
145
|
-
when 2,3,4,5
|
|
146
|
-
date - (date.wday - 1)
|
|
147
|
-
when 6
|
|
148
|
-
date + 2
|
|
149
|
-
when 0
|
|
150
|
-
date + 1
|
|
151
|
-
end
|
|
152
|
-
elsif date.wday == 0
|
|
153
|
-
date + 1
|
|
154
|
-
elsif date.wday == 6
|
|
155
|
-
date - 1
|
|
156
|
-
else
|
|
157
|
-
date
|
|
158
|
-
end
|
|
159
|
-
},
|
|
160
|
-
|
|
161
|
-
"election_day(year)" => Proc.new { |year|
|
|
162
|
-
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 11, 1, 1) + 1
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
"even_year_election_day(year)" => Proc.new { |year|
|
|
166
|
-
if year % 2 == 0
|
|
167
|
-
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 11, 1, 1) + 1
|
|
168
|
-
end
|
|
169
|
-
},
|
|
170
|
-
|
|
171
|
-
"us_inauguration_day(year)" => Proc.new { |year|
|
|
172
|
-
year % 4 == 1 ? 20 : nil
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
"day_after_thanksgiving(year)" => Proc.new { |year|
|
|
176
|
-
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 11, 4, 4) + 1
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
97
|
+
{}
|
|
181
98
|
end
|
|
182
99
|
end
|
|
183
100
|
end
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
require 'holidays/definition/custom_methods/registry'
|
|
2
|
+
|
|
1
3
|
module Holidays
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
+
# Runs once at require time (see the bottom of lib/holidays.rb). Despite the
|
|
5
|
+
# historical name of its alias, this does NOT load per-region holiday data;
|
|
6
|
+
# that happens lazily in Definition::Context::Load. What it does:
|
|
7
|
+
# 1. Register the built-in calculation procs (easter, weekend modifiers,
|
|
8
|
+
# lunar_to_solar, calculate_day_of_month) into custom_methods_repository.
|
|
9
|
+
# 2. Register the native per-region custom methods (CustomMethods.all).
|
|
10
|
+
# 3. Require generated_definitions/REGIONS.rb (the region-name list only).
|
|
11
|
+
class Bootstrap
|
|
4
12
|
class << self
|
|
5
13
|
def call
|
|
6
|
-
#FIXME I need a better way to do this. I'm thinking of putting these 'common' methods
|
|
7
|
-
# into some kind of definition file so it can be loaded automatically but I'm afraid
|
|
8
|
-
# of making that big of a breaking API change since these are public. For the time
|
|
9
|
-
# being I'll load them manually like this.
|
|
10
|
-
#
|
|
11
|
-
# NOTE: These are no longer public! We can do whatever we want here!
|
|
12
14
|
global_methods = {
|
|
13
15
|
"easter(year)" => gregorian_easter.method(:calculate_easter_for).to_proc,
|
|
14
16
|
"orthodox_easter(year)" => gregorian_easter.method(:calculate_orthodox_easter_for).to_proc,
|
|
@@ -29,6 +31,9 @@ module Holidays
|
|
|
29
31
|
|
|
30
32
|
Factory::Definition.custom_methods_repository.add(global_methods)
|
|
31
33
|
|
|
34
|
+
# Native per-region custom methods (replaces the old YAML methods:/ruby: blocks).
|
|
35
|
+
Factory::Definition.custom_methods_repository.add(Holidays::Definition::CustomMethods.all)
|
|
36
|
+
|
|
32
37
|
static_regions_definition = "#{Holidays::DEFINITIONS_PATH}/REGIONS.rb"
|
|
33
38
|
require static_regions_definition
|
|
34
39
|
end
|
|
@@ -56,4 +61,6 @@ module Holidays
|
|
|
56
61
|
end
|
|
57
62
|
end
|
|
58
63
|
end
|
|
64
|
+
|
|
65
|
+
private_constant :Bootstrap
|
|
59
66
|
end
|
|
@@ -132,6 +132,10 @@ module Holidays
|
|
|
132
132
|
rule[:function_arguments] = get_function_arguments(rule[:function], parsed_custom_methods)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
|
+
if rule[:observed]
|
|
136
|
+
rule[:observed_arguments] = get_function_arguments(rule[:observed], parsed_custom_methods)
|
|
137
|
+
end
|
|
138
|
+
|
|
135
139
|
rules_by_month[month] << rule
|
|
136
140
|
end
|
|
137
141
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
|
|
3
|
+
module Holidays
|
|
4
|
+
module Definition
|
|
5
|
+
module CustomMethods
|
|
6
|
+
# ar custom holiday calculations, ported verbatim from the
|
|
7
|
+
# +methods:+ block in definitions/ar.yaml.
|
|
8
|
+
module AR
|
|
9
|
+
class << self
|
|
10
|
+
def to_nearest_monday(date)
|
|
11
|
+
case date.wday
|
|
12
|
+
when 5
|
|
13
|
+
date += 3
|
|
14
|
+
when 4
|
|
15
|
+
date += 4
|
|
16
|
+
when 3
|
|
17
|
+
date -= 2
|
|
18
|
+
when 2
|
|
19
|
+
date -= 1
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
date
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
|
|
3
|
+
module Holidays
|
|
4
|
+
module Definition
|
|
5
|
+
module CustomMethods
|
|
6
|
+
# au custom holiday calculations, ported verbatim from the
|
|
7
|
+
# +methods:+ block in definitions/au.yaml.
|
|
8
|
+
module AU
|
|
9
|
+
class << self
|
|
10
|
+
def afl_grand_final(year)
|
|
11
|
+
case year
|
|
12
|
+
when 2015
|
|
13
|
+
Date.civil(2015, 10, 2)
|
|
14
|
+
when 2016
|
|
15
|
+
Date.civil(2016, 9, 30)
|
|
16
|
+
when 2017
|
|
17
|
+
Date.civil(2017, 9, 29)
|
|
18
|
+
when 2020
|
|
19
|
+
Date.civil(2020, 10, 23)
|
|
20
|
+
when 2022
|
|
21
|
+
Date.civil(2022, 9, 23)
|
|
22
|
+
else
|
|
23
|
+
# Friday before AFL Grand Final typically falls on the last Friday in September
|
|
24
|
+
# Override when falls on a different date
|
|
25
|
+
last_day = Date.civil(year, 9, -1)
|
|
26
|
+
last_friday = last_day - ((last_day.wday - 5) % 7)
|
|
27
|
+
last_friday
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def qld_queens_bday_october(year)
|
|
32
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def qld_kings_bday_october(year)
|
|
36
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def qld_queens_birthday_june(year)
|
|
40
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 6, 2, 1)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def qld_labour_day_may(year)
|
|
44
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, 1, 1)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def qld_labour_day_october(year)
|
|
48
|
+
Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def hobart_show_day(year)
|
|
52
|
+
fourth_sat_in_oct = Date.civil(year, 10, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 4, :saturday))
|
|
53
|
+
fourth_sat_in_oct - 2 # the thursday before
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def march_pub_hol_sa(year)
|
|
57
|
+
Date.civil(year, 3, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 3, :second, :monday))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def may_pub_hol_sa(year)
|
|
61
|
+
Date.civil(year, 5, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, :third, :monday))
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def qld_brisbane_ekka_holiday(year)
|
|
65
|
+
first_friday = Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 8, :first, :friday)
|
|
66
|
+
|
|
67
|
+
if first_friday < 5
|
|
68
|
+
second_friday = Date.civil(year, 8, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 8, :second, :friday))
|
|
69
|
+
second_friday + 5 # The next Wednesday
|
|
70
|
+
else
|
|
71
|
+
Date.civil(year, 8, first_friday) + 5
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def to_nearest_monday_after(date)
|
|
76
|
+
case date.wday
|
|
77
|
+
when 6
|
|
78
|
+
date += 2
|
|
79
|
+
when 5
|
|
80
|
+
date += 3
|
|
81
|
+
when 4
|
|
82
|
+
date += 4
|
|
83
|
+
when 3
|
|
84
|
+
date += 5
|
|
85
|
+
when 2
|
|
86
|
+
date += 6
|
|
87
|
+
when 0
|
|
88
|
+
date += 1
|
|
89
|
+
end
|
|
90
|
+
date
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|