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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/lib/generated_definitions/MANIFEST +2 -0
  4. data/lib/generated_definitions/REGIONS.rb +3 -3
  5. data/lib/generated_definitions/ar.rb +1 -18
  6. data/lib/generated_definitions/at.rb +1 -3
  7. data/lib/generated_definitions/au.rb +1 -86
  8. data/lib/generated_definitions/be_fr.rb +1 -3
  9. data/lib/generated_definitions/be_nl.rb +1 -3
  10. data/lib/generated_definitions/bg.rb +1 -3
  11. data/lib/generated_definitions/br.rb +1 -3
  12. data/lib/generated_definitions/by.rb +39 -0
  13. data/lib/generated_definitions/ca.rb +4 -14
  14. data/lib/generated_definitions/ch.rb +1 -48
  15. data/lib/generated_definitions/cl.rb +1 -33
  16. data/lib/generated_definitions/cn.rb +39 -0
  17. data/lib/generated_definitions/co.rb +10 -90
  18. data/lib/generated_definitions/cr.rb +1 -3
  19. data/lib/generated_definitions/cy.rb +1 -3
  20. data/lib/generated_definitions/cz.rb +1 -3
  21. data/lib/generated_definitions/de.rb +2 -14
  22. data/lib/generated_definitions/dk.rb +1 -3
  23. data/lib/generated_definitions/ecbtarget.rb +1 -3
  24. data/lib/generated_definitions/ee.rb +1 -3
  25. data/lib/generated_definitions/es.rb +2 -4
  26. data/lib/generated_definitions/europe.rb +5 -95
  27. data/lib/generated_definitions/federalreserve.rb +1 -3
  28. data/lib/generated_definitions/federalreservebanks.rb +1 -3
  29. data/lib/generated_definitions/fedex.rb +1 -7
  30. data/lib/generated_definitions/fi.rb +1 -25
  31. data/lib/generated_definitions/fr.rb +1 -3
  32. data/lib/generated_definitions/gb.rb +1 -3
  33. data/lib/generated_definitions/ge.rb +1 -3
  34. data/lib/generated_definitions/gr.rb +1 -3
  35. data/lib/generated_definitions/hk.rb +1 -3
  36. data/lib/generated_definitions/hr.rb +1 -3
  37. data/lib/generated_definitions/hu.rb +1 -3
  38. data/lib/generated_definitions/ie.rb +1 -12
  39. data/lib/generated_definitions/il.rb +1 -3
  40. data/lib/generated_definitions/in.rb +1 -3
  41. data/lib/generated_definitions/is.rb +1 -13
  42. data/lib/generated_definitions/it.rb +1 -3
  43. data/lib/generated_definitions/jp.rb +1 -95
  44. data/lib/generated_definitions/ke.rb +1 -3
  45. data/lib/generated_definitions/kr.rb +4 -6
  46. data/lib/generated_definitions/kz.rb +1 -3
  47. data/lib/generated_definitions/li.rb +1 -3
  48. data/lib/generated_definitions/lt.rb +1 -3
  49. data/lib/generated_definitions/lu.rb +1 -3
  50. data/lib/generated_definitions/lv.rb +1 -17
  51. data/lib/generated_definitions/ma.rb +1 -3
  52. data/lib/generated_definitions/mc.rb +1 -3
  53. data/lib/generated_definitions/mt_en.rb +1 -3
  54. data/lib/generated_definitions/mt_mt.rb +1 -3
  55. data/lib/generated_definitions/mx.rb +4 -4
  56. data/lib/generated_definitions/my.rb +1 -3
  57. data/lib/generated_definitions/nerc.rb +1 -3
  58. data/lib/generated_definitions/ng.rb +1 -3
  59. data/lib/generated_definitions/nl.rb +1 -3
  60. data/lib/generated_definitions/no.rb +1 -3
  61. data/lib/generated_definitions/northamerica.rb +4 -97
  62. data/lib/generated_definitions/nyse.rb +1 -3
  63. data/lib/generated_definitions/nz.rb +4 -70
  64. data/lib/generated_definitions/pe.rb +12 -10
  65. data/lib/generated_definitions/ph.rb +1 -9
  66. data/lib/generated_definitions/pl.rb +1 -3
  67. data/lib/generated_definitions/pt.rb +1 -3
  68. data/lib/generated_definitions/ro.rb +3 -5
  69. data/lib/generated_definitions/rs_cyrl.rb +1 -3
  70. data/lib/generated_definitions/rs_la.rb +1 -3
  71. data/lib/generated_definitions/ru.rb +1 -3
  72. data/lib/generated_definitions/scandinavia.rb +1 -47
  73. data/lib/generated_definitions/se.rb +1 -15
  74. data/lib/generated_definitions/sg.rb +1 -3
  75. data/lib/generated_definitions/si.rb +1 -3
  76. data/lib/generated_definitions/sk.rb +1 -3
  77. data/lib/generated_definitions/southamerica.rb +18 -139
  78. data/lib/generated_definitions/th.rb +1 -3
  79. data/lib/generated_definitions/tn.rb +1 -3
  80. data/lib/generated_definitions/tr.rb +1 -29
  81. data/lib/generated_definitions/tsx.rb +1 -13
  82. data/lib/generated_definitions/ua.rb +1 -3
  83. data/lib/generated_definitions/unitednations.rb +1 -3
  84. data/lib/generated_definitions/ups.rb +1 -7
  85. data/lib/generated_definitions/us.rb +4 -87
  86. data/lib/generated_definitions/ve.rb +1 -3
  87. data/lib/generated_definitions/vn.rb +1 -3
  88. data/lib/generated_definitions/za.rb +1 -3
  89. data/lib/holidays/{load_all_definitions.rb → bootstrap.rb} +15 -8
  90. data/lib/holidays/date_calculator/lunar_date.rb +1 -0
  91. data/lib/holidays/definition/context/generator.rb +4 -0
  92. data/lib/holidays/definition/custom_methods/ar.rb +28 -0
  93. data/lib/holidays/definition/custom_methods/au.rb +96 -0
  94. data/lib/holidays/definition/custom_methods/ca.rb +23 -0
  95. data/lib/holidays/definition/custom_methods/ch.rb +58 -0
  96. data/lib/holidays/definition/custom_methods/cl.rb +43 -0
  97. data/lib/holidays/definition/custom_methods/cn.rb +31 -0
  98. data/lib/holidays/definition/custom_methods/co.rb +22 -0
  99. data/lib/holidays/definition/custom_methods/de.rb +23 -0
  100. data/lib/holidays/definition/custom_methods/fedex.rb +17 -0
  101. data/lib/holidays/definition/custom_methods/fi.rb +35 -0
  102. data/lib/holidays/definition/custom_methods/ie.rb +22 -0
  103. data/lib/holidays/definition/custom_methods/is.rb +23 -0
  104. data/lib/holidays/definition/custom_methods/jp.rb +107 -0
  105. data/lib/holidays/definition/custom_methods/kr.rb +17 -0
  106. data/lib/holidays/definition/custom_methods/lv.rb +27 -0
  107. data/lib/holidays/definition/custom_methods/nz.rb +77 -0
  108. data/lib/holidays/definition/custom_methods/ph.rb +19 -0
  109. data/lib/holidays/definition/custom_methods/registry.rb +103 -0
  110. data/lib/holidays/definition/custom_methods/se.rb +25 -0
  111. data/lib/holidays/definition/custom_methods/tr.rb +59 -0
  112. data/lib/holidays/definition/custom_methods/us.rb +92 -0
  113. data/lib/holidays/definition/generator/module.rb +7 -4
  114. data/lib/holidays/version.rb +1 -1
  115. data/lib/holidays.rb +4 -2
  116. 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 => "epiphany(year)", :function_arguments => [:year], :name => "Día de los Reyes Magos", :regions => [:co]},
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, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Día de los Reyes Magos", :regions => [:pe]},
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 => "saint_josephs_day(year)", :function_arguments => [:year], :name => "Día de San José", :regions => [:co]}],
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 => "saint_peter_and_saint_paul(year)", :function_arguments => [:year], :name => "San Pedro y San Pablo", :regions => [:co]},
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 Pablo y San Pedro", :regions => [:pe]},
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 => "assumption_of_mary(year)", :function_arguments => [:year], :name => "La Asunción de la Virgen", :regions => [:co]},
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 => "columbus_day(year)", :function_arguments => [:year], :name => "Día de la Raza", :regions => [:co]},
89
- {:mday => 8, :name => "Batalla de Angamos", :regions => [:pe]},
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 => "all_saints_day(year)", :function_arguments => [:year], :name => "Día de Todos los Santos", :regions => [:co]},
98
- {:function => "independence_of_cartagena(year)", :function_arguments => [:year], :name => "Independencia de Cartagena", :regions => [:co]},
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
@@ -28,9 +28,7 @@ module Holidays
28
28
  end
29
29
 
30
30
  def self.custom_methods
31
- {
32
-
33
- }
31
+ {}
34
32
  end
35
33
  end
36
34
  end
@@ -24,9 +24,7 @@ module Holidays
24
24
  end
25
25
 
26
26
  def self.custom_methods
27
- {
28
-
29
- }
27
+ {}
30
28
  end
31
29
  end
32
30
  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
@@ -29,9 +29,7 @@ module Holidays
29
29
  end
30
30
 
31
31
  def self.custom_methods
32
- {
33
-
34
- }
32
+ {}
35
33
  end
36
34
  end
37
35
  end
@@ -73,9 +73,7 @@ module Holidays
73
73
  end
74
74
 
75
75
  def self.custom_methods
76
- {
77
-
78
- }
76
+ {}
79
77
  end
80
78
  end
81
79
  end
@@ -25,13 +25,7 @@ module Holidays
25
25
  end
26
26
 
27
27
  def self.custom_methods
28
- {
29
- "day_after_thanksgiving(year)" => Proc.new { |year|
30
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 11, 4, 4) + 1
31
- },
32
-
33
-
34
- }
28
+ {}
35
29
  end
36
30
  end
37
31
  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
@@ -28,9 +28,7 @@ module Holidays
28
28
  end
29
29
 
30
30
  def self.custom_methods
31
- {
32
-
33
- }
31
+ {}
34
32
  end
35
33
  end
36
34
  end
@@ -21,9 +21,7 @@ module Holidays
21
21
  end
22
22
 
23
23
  def self.custom_methods
24
- {
25
-
26
- }
24
+ {}
27
25
  end
28
26
  end
29
27
  end
@@ -28,9 +28,7 @@ module Holidays
28
28
  end
29
29
 
30
30
  def self.custom_methods
31
- {
32
-
33
- }
31
+ {}
34
32
  end
35
33
  end
36
34
  end
@@ -1,14 +1,16 @@
1
+ require 'holidays/definition/custom_methods/registry'
2
+
1
3
  module Holidays
2
- #TODO This file should be renamed. It's no longer about definitions, really.
3
- class LoadAllDefinitions
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
@@ -503,6 +503,7 @@ module Holidays
503
503
  vn: VIETNAMESE_LUNAR_YEAR_INFO,
504
504
  hk: CHINESE_LUNAR_YEAR_INFO,
505
505
  sg: CHINESE_LUNAR_YEAR_INFO,
506
+ cn: CHINESE_LUNAR_YEAR_INFO,
506
507
  }.freeze
507
508
 
508
509
  # Provides number of days per lunar month type. Lunar months
@@ -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