holidays 9.2.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +38 -2
  4. data/lib/generated_definitions/au.rb +16 -42
  5. data/lib/generated_definitions/europe.rb +2 -10
  6. data/lib/generated_definitions/lu.rb +1 -1
  7. data/lib/generated_definitions/nz.rb +9 -1
  8. data/lib/generated_definitions/pl.rb +3 -11
  9. data/lib/holidays/definition/context/function_processor.rb +4 -5
  10. data/lib/holidays/definition/context/generator.rb +3 -1
  11. data/lib/holidays/version.rb +1 -1
  12. metadata +3 -313
  13. data/.github/workflows/changelog-check.yml +0 -47
  14. data/.github/workflows/release.yml +0 -46
  15. data/.github/workflows/ruby.yml +0 -26
  16. data/.gitmodules +0 -3
  17. data/CODE_OF_CONDUCT.md +0 -74
  18. data/Gemfile +0 -8
  19. data/Makefile +0 -60
  20. data/Rakefile +0 -137
  21. data/bin/console +0 -7
  22. data/bin/setup +0 -6
  23. data/doc/CONTRIBUTING.md +0 -72
  24. data/doc/MAINTAINERS.md +0 -79
  25. data/doc/REFERENCES +0 -19
  26. data/holidays.gemspec +0 -31
  27. data/test/coverage_report.rb +0 -24
  28. data/test/data/test_custom_year_range_holiday_defs.yaml +0 -31
  29. data/test/data/test_date_transform_conflict_region_1.yaml +0 -14
  30. data/test/data/test_date_transform_conflict_region_2.yaml +0 -14
  31. data/test/data/test_invalid_region.rb +0 -15
  32. data/test/data/test_region.rb +0 -15
  33. data/test/data/test_single_custom_holiday_defs.yaml +0 -12
  34. data/test/data/test_single_custom_holiday_with_custom_procs.yaml +0 -28
  35. data/test/defs/test_defs_ar.rb +0 -69
  36. data/test/defs/test_defs_at.rb +0 -31
  37. data/test/defs/test_defs_au.rb +0 -233
  38. data/test/defs/test_defs_be_fr.rb +0 -45
  39. data/test/defs/test_defs_be_nl.rb +0 -45
  40. data/test/defs/test_defs_bg.rb +0 -41
  41. data/test/defs/test_defs_br.rb +0 -49
  42. data/test/defs/test_defs_ca.rb +0 -289
  43. data/test/defs/test_defs_ch.rb +0 -51
  44. data/test/defs/test_defs_cl.rb +0 -69
  45. data/test/defs/test_defs_co.rb +0 -113
  46. data/test/defs/test_defs_cr.rb +0 -29
  47. data/test/defs/test_defs_cy.rb +0 -41
  48. data/test/defs/test_defs_cz.rb +0 -37
  49. data/test/defs/test_defs_de.rb +0 -91
  50. data/test/defs/test_defs_dk.rb +0 -47
  51. data/test/defs/test_defs_ecbtarget.rb +0 -27
  52. data/test/defs/test_defs_ee.rb +0 -41
  53. data/test/defs/test_defs_es.rb +0 -137
  54. data/test/defs/test_defs_europe.rb +0 -1530
  55. data/test/defs/test_defs_fed_ex.rb +0 -24
  56. data/test/defs/test_defs_federalreserve.rb +0 -119
  57. data/test/defs/test_defs_federalreservebanks.rb +0 -251
  58. data/test/defs/test_defs_fedex.rb +0 -31
  59. data/test/defs/test_defs_fi.rb +0 -59
  60. data/test/defs/test_defs_fr.rb +0 -43
  61. data/test/defs/test_defs_gb.rb +0 -163
  62. data/test/defs/test_defs_ge.rb +0 -53
  63. data/test/defs/test_defs_gr.rb +0 -41
  64. data/test/defs/test_defs_hk.rb +0 -93
  65. data/test/defs/test_defs_hr.rb +0 -45
  66. data/test/defs/test_defs_hu.rb +0 -47
  67. data/test/defs/test_defs_ie.rb +0 -53
  68. data/test/defs/test_defs_il.rb +0 -35
  69. data/test/defs/test_defs_in.rb +0 -94
  70. data/test/defs/test_defs_is.rb +0 -51
  71. data/test/defs/test_defs_it.rb +0 -57
  72. data/test/defs/test_defs_jp.rb +0 -159
  73. data/test/defs/test_defs_ke.rb +0 -31
  74. data/test/defs/test_defs_kr.rb +0 -37
  75. data/test/defs/test_defs_kz.rb +0 -39
  76. data/test/defs/test_defs_li.rb +0 -35
  77. data/test/defs/test_defs_lt.rb +0 -65
  78. data/test/defs/test_defs_lu.rb +0 -35
  79. data/test/defs/test_defs_lv.rb +0 -98
  80. data/test/defs/test_defs_ma.rb +0 -29
  81. data/test/defs/test_defs_mc.rb +0 -43
  82. data/test/defs/test_defs_mt_en.rb +0 -41
  83. data/test/defs/test_defs_mt_mt.rb +0 -41
  84. data/test/defs/test_defs_mx.rb +0 -49
  85. data/test/defs/test_defs_my.rb +0 -23
  86. data/test/defs/test_defs_nerc.rb +0 -29
  87. data/test/defs/test_defs_ng.rb +0 -29
  88. data/test/defs/test_defs_nl.rb +0 -33
  89. data/test/defs/test_defs_no.rb +0 -43
  90. data/test/defs/test_defs_northamerica.rb +0 -679
  91. data/test/defs/test_defs_nyse.rb +0 -46
  92. data/test/defs/test_defs_nz.rb +0 -67
  93. data/test/defs/test_defs_pe.rb +0 -47
  94. data/test/defs/test_defs_ph.rb +0 -29
  95. data/test/defs/test_defs_pl.rb +0 -229
  96. data/test/defs/test_defs_pt.rb +0 -47
  97. data/test/defs/test_defs_ro.rb +0 -69
  98. data/test/defs/test_defs_rs_cyrl.rb +0 -46
  99. data/test/defs/test_defs_rs_la.rb +0 -46
  100. data/test/defs/test_defs_ru.rb +0 -34
  101. data/test/defs/test_defs_scandinavia.rb +0 -215
  102. data/test/defs/test_defs_se.rb +0 -59
  103. data/test/defs/test_defs_sg.rb +0 -25
  104. data/test/defs/test_defs_si.rb +0 -105
  105. data/test/defs/test_defs_sk.rb +0 -37
  106. data/test/defs/test_defs_southamerica.rb +0 -327
  107. data/test/defs/test_defs_th.rb +0 -33
  108. data/test/defs/test_defs_tn.rb +0 -27
  109. data/test/defs/test_defs_tr.rb +0 -60
  110. data/test/defs/test_defs_tsx.rb +0 -70
  111. data/test/defs/test_defs_ua.rb +0 -41
  112. data/test/defs/test_defs_unitednations.rb +0 -11
  113. data/test/defs/test_defs_ups.rb +0 -31
  114. data/test/defs/test_defs_us.rb +0 -399
  115. data/test/defs/test_defs_ve.rb +0 -35
  116. data/test/defs/test_defs_vi.rb +0 -22
  117. data/test/defs/test_defs_za.rb +0 -35
  118. data/test/e2e/README.md +0 -52
  119. data/test/e2e/data/test_multiple_regions_with_conflicts_region_1.yaml +0 -38
  120. data/test/e2e/data/test_multiple_regions_with_conflicts_region_2.yaml +0 -38
  121. data/test/e2e/data/test_multiple_regions_with_conflicts_region_3.yaml +0 -38
  122. data/test/e2e/test_all_regions.rb +0 -49
  123. data/test/e2e/test_any_holidays_during_work_week.rb +0 -90
  124. data/test/e2e/test_holidays.rb +0 -244
  125. data/test/e2e/test_holidays_between.rb +0 -87
  126. data/test/e2e/test_multiple_regions.rb +0 -71
  127. data/test/e2e/test_multiple_regions_with_conflict.rb +0 -228
  128. data/test/e2e/test_nonstandard_regions.rb +0 -25
  129. data/test/holidays/core_extensions/test_date.rb +0 -122
  130. data/test/holidays/core_extensions/test_date_time.rb +0 -60
  131. data/test/holidays/date_calculator/test_day_of_month.rb +0 -27
  132. data/test/holidays/date_calculator/test_easter_gregorian.rb +0 -30
  133. data/test/holidays/date_calculator/test_easter_julian.rb +0 -36
  134. data/test/holidays/date_calculator/test_lunar_date.rb +0 -89
  135. data/test/holidays/date_calculator/test_weekend_modifier.rb +0 -54
  136. data/test/holidays/definition/context/test_function_processor.rb +0 -199
  137. data/test/holidays/definition/context/test_generator.rb +0 -226
  138. data/test/holidays/definition/context/test_load.rb +0 -37
  139. data/test/holidays/definition/context/test_merger.rb +0 -25
  140. data/test/holidays/definition/decorator/test_custom_method_proc.rb +0 -113
  141. data/test/holidays/definition/decorator/test_custom_method_source.rb +0 -96
  142. data/test/holidays/definition/decorator/test_test.rb +0 -123
  143. data/test/holidays/definition/generator/test_module.rb +0 -268
  144. data/test/holidays/definition/generator/test_regions.rb +0 -97
  145. data/test/holidays/definition/generator/test_test.rb +0 -113
  146. data/test/holidays/definition/parser/test_custom_method.rb +0 -79
  147. data/test/holidays/definition/parser/test_test.rb +0 -142
  148. data/test/holidays/definition/repository/test_cache.rb +0 -123
  149. data/test/holidays/definition/repository/test_custom_methods.rb +0 -43
  150. data/test/holidays/definition/repository/test_holidays_by_month.rb +0 -275
  151. data/test/holidays/definition/repository/test_proc_result_cache.rb +0 -91
  152. data/test/holidays/definition/repository/test_regions.rb +0 -104
  153. data/test/holidays/definition/validator/test_custom_method.rb +0 -94
  154. data/test/holidays/definition/validator/test_region.rb +0 -54
  155. data/test/holidays/definition/validator/test_test.rb +0 -60
  156. data/test/holidays/finder/context/test_between.rb +0 -172
  157. data/test/holidays/finder/context/test_dates_driver_builder.rb +0 -91
  158. data/test/holidays/finder/context/test_next_holiday.rb +0 -156
  159. data/test/holidays/finder/context/test_parse_options.rb +0 -141
  160. data/test/holidays/finder/context/test_search.rb +0 -290
  161. data/test/holidays/finder/context/test_year_holiday.rb +0 -202
  162. data/test/holidays/finder/rules/test_in_region.rb +0 -42
  163. data/test/holidays/finder/rules/test_year_range.rb +0 -166
  164. data/test/integration/README.md +0 -48
  165. data/test/integration/data/test_custom_govt_holiday_defs.yaml +0 -5
  166. data/test/integration/data/test_custom_informal_holidays_defs.yaml +0 -11
  167. data/test/integration/data/test_multiple_custom_holiday_defs.yaml +0 -12
  168. data/test/integration/test_custom_holidays.rb +0 -41
  169. data/test/integration/test_custom_informal_holidays.rb +0 -15
  170. data/test/integration/test_custom_year_range_holidays.rb +0 -35
  171. data/test/smoke/README.md +0 -31
  172. data/test/smoke/test_available_regions.rb +0 -18
  173. data/test/smoke/test_smoke.rb +0 -74
  174. data/test/test_helper.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5df9d7c9191d51eb57d3d62573ea4ad0b606d8edf9e0d8f0c8e77ad980c69cc
4
- data.tar.gz: c78ba3585823a7ec2ec21634216c39d8b3eb6170d9209131664c6a0f169ff61b
3
+ metadata.gz: 4046bc784338ea2145744c92c8e288a4fddf9aad2ad072a9f82718644d5486bf
4
+ data.tar.gz: a4b5b4ebba6f915bdf4fa9293cc3a2dc57d3206377b22693473372fdcecfe540
5
5
  SHA512:
6
- metadata.gz: 0a2960e5d509413c28be78a5d21e42d06176d2311577604673b5f9465efb8d13c86a05df2d39ed0d51207d1178d23f1c3e3c865b85693720c5f95ef073d487f5
7
- data.tar.gz: f436525c1aa5d8230ef1a88ab29c09addc15e5f68e55fe8ba735b3129bd1296bdc6bd67913cd5e77bbe2efd89f1fd544f3b0a7e725da67dbdd7851916c82b38f
6
+ metadata.gz: 6081748d62b3e64344ed7b70d8a966c46c6608d3e459a89946ab73f029379589e3184177323b76b6c872118b3609372ac82dfe448f2fd13eca80e746f473e827
7
+ data.tar.gz: d45a5c3020248e82fc40d73c12753e8eb85c7ef70c4a8569f59c8e069da8b7ec76ca1e449cbbb9100bea2e91354c6223f8f9a93a1365f2795e8029b97322fee0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Ruby Holidays Gem CHANGELOG
2
2
 
3
+ ## 10.0.0
4
+
5
+ * Drop support for Ruby 3.2. Supported versions are now 3.3, 3.4, 4.0, and ruby-head.
6
+ * Update to [v7.0.0 definitions](https://github.com/holidays/definitions/releases/tag/v7.0.0). Please see the changelog for the definition details.
7
+ * Bump tested JRuby from 10.0.4.0 to 10.0.5.0
8
+ * Raise an `ArgumentError` during definition parsing when a `function` or `observed` rule references an unknown method ([#333](https://github.com/holidays/holidays/issues/333))
9
+ * Fix bug ([#352](https://github.com/holidays/holidays/issues/352)) where holidays with the same name and region that differed only by their function modifier were merged into a single entry, dropping one of the dates
10
+ * Document that `tests` stanzas in custom definition files loaded via `load_custom` are not run at runtime ([#304](https://github.com/holidays/holidays/issues/304))
11
+
3
12
  ## 9.2.0
4
13
 
5
14
  * Update to [v6.1.1 definitions](https://github.com/holidays/definitions/releases/tag/v6.1.1). Please see the changelog for the definition details.
data/README.md CHANGED
@@ -4,6 +4,8 @@ Functionality to deal with holidays in Ruby.
4
4
 
5
5
  Extends Ruby's built-in Date and Time classes and supports custom holiday definition lists.
6
6
 
7
+ All holiday definitions are maintained in the [holidays/definitions](https://github.com/holidays/definitions) repository. By default this gem returns statutory (formally government-defined) holidays. Culturally recognized but non-statutory holidays (such as Valentine's Day) are available via the `:informal` option. See the [definitions syntax guide](https://github.com/holidays/definitions/blob/master/doc/SYNTAX.md#formalinformal) for details on how holidays are classified.
8
+
7
9
  ## Installation
8
10
 
9
11
  ```
@@ -14,11 +16,10 @@ gem install holidays
14
16
 
15
17
  This gem is tested with the following ruby versions:
16
18
 
17
- * 3.2
18
19
  * 3.3
19
20
  * 3.4
20
21
  * 4.0
21
- * JRuby 10.0.4.0
22
+ * JRuby 10.0.5.0
22
23
 
23
24
  ## Semver
24
25
 
@@ -65,6 +66,35 @@ You can leave off 'regions' to get holidays for any region in our [definitions](
65
66
  ]
66
67
  ```
67
68
 
69
+ #### Wildcard regions
70
+
71
+ A region ending in an underscore (e.g. `:au_`, `:ca_`) is a *wildcard*. It matches the
72
+ parent country region **and all of its sub-regions** in a single call:
73
+
74
+ ```ruby
75
+ Holidays.on(Date.new(2017, 3, 13), :au_)
76
+ => [{:name=>"Eight Hours Day", :regions=>[:au_tas],...},
77
+ {:name=>"Labour Day", :regions=>[:au_vic],...},
78
+ {:name=>"March Public Holiday", :regions=>[:au_sa],...},
79
+ {:name=>"Canberra Day", :regions=>[:au_act],...}]
80
+ ```
81
+
82
+ The same date queried with the plain `:au` region returns nothing, because none of
83
+ those holidays are observed nation-wide:
84
+
85
+ ```ruby
86
+ Holidays.on(Date.new(2017, 3, 13), :au)
87
+ => []
88
+ ```
89
+
90
+ Use a wildcard when you want "this country and every sub-region it defines" without
91
+ listing each sub-region explicitly.
92
+
93
+ Note that a wildcard always collapses to the **top-level** country region. The portion
94
+ between the country prefix and the trailing underscore is ignored, so `:au_vic_` behaves
95
+ identically to `:au_` (it loads every Australian sub-region, not just Victoria's). There
96
+ is currently no way to wildcard-match only the children of a sub-region.
97
+
68
98
  #### Checking a date range
69
99
 
70
100
  Get all holidays during the month of July 2008 in Canada and the US:
@@ -236,6 +266,12 @@ Holidays.load_custom(
236
266
  )
237
267
  ```
238
268
 
269
+ Note that any `tests:` stanzas in a custom definition file are ignored by
270
+ `load_custom`. Tests are only executed at build time for definitions contributed
271
+ to the [definitions repository](https://github.com/holidays/definitions), where
272
+ `rake generate` turns them into the test suite. There is no runtime mechanism to
273
+ run the tests embedded in a custom file loaded on the fly.
274
+
239
275
  ## Extending Ruby's Date and Time classes
240
276
 
241
277
  ### Date
@@ -24,19 +24,20 @@ module Holidays
24
24
  3 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_wa]},
25
25
  {:wday => 1, :week => 2, :name => "Eight Hours Day", :regions => [:au_tas]},
26
26
  {:wday => 1, :week => 2, :name => "Labour Day", :regions => [:au_vic]},
27
- {:function => "march_pub_hol_sa(year)", :function_arguments => [:year], :name => "March Public Holiday", :regions => [:au_sa]},
27
+ {:function => "march_pub_hol_sa(year)", :function_arguments => [:year], :year_ranges => { :from => 2006 },:name => "March Public Holiday", :regions => [:au_sa]},
28
28
  {:wday => 1, :week => 2, :name => "Canberra Day", :regions => [:au_act]}],
29
29
  4 => [{:mday => 25, :name => "ANZAC Day", :regions => [:au, :au_vic]},
30
30
  {:mday => 25, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "ANZAC Day", :regions => [:au_qld, :au_nt, :au_act, :au_sa]},
31
31
  {:mday => 25, :observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "ANZAC Day", :regions => [:au_wa]}],
32
- 5 => [{:function => "qld_labour_day_may(year)", :function_arguments => [:year], :name => "Labour Day", :regions => [:au_qld]},
32
+ 5 => [{:function => "qld_labour_day_may(year)", :function_arguments => [:year], :year_ranges => { :until => 2012 },:name => "Labour Day", :regions => [:au_qld]},
33
+ {:function => "qld_labour_day_may(year)", :function_arguments => [:year], :year_ranges => { :from => 2016 },:name => "Labour Day", :regions => [:au_qld]},
33
34
  {:wday => 1, :week => 1, :name => "May Day", :regions => [:au_nt]},
34
- {:function => "may_pub_hol_sa(year)", :function_arguments => [:year], :name => "May Public Holiday", :regions => [:au_sa]},
35
+ {:function => "may_pub_hol_sa(year)", :function_arguments => [:year], :year_ranges => { :until => 2005 },:name => "May Public Holiday", :regions => [:au_sa]},
35
36
  {:mday => 27, :function => "to_nearest_monday_after(date)", :function_arguments => [:date], :year_ranges => { :from => 2018 },:name => "Reconciliation Day", :regions => [:au_act]}],
36
37
  6 => [{:wday => 1, :week => 1, :name => "Western Australia Day", :regions => [:au_wa]},
37
38
  {:wday => 1, :week => 2, :year_ranges => { :until => 2022 },:name => "Queen's Birthday", :regions => [:au_act, :au_nsw, :au_sa, :au_tas, :au_nt, :au_vic]},
38
39
  {:wday => 1, :week => 2, :year_ranges => { :from => 2023 },:name => "King's Birthday", :regions => [:au_act, :au_nsw, :au_sa, :au_tas, :au_nt, :au_vic]},
39
- {:function => "qld_queens_birthday_june(year)", :function_arguments => [:year], :name => "Queen's Birthday", :regions => [:au_qld]},
40
+ {:function => "qld_queens_birthday_june(year)", :function_arguments => [:year], :year_ranges => { :until => 2015 },:name => "Queen's Birthday", :regions => [:au_qld]},
40
41
  {:mday => 6, :type => :informal, :name => "Queensland Day", :regions => [:au_qld]}],
41
42
  7 => [{:wday => 5, :week => 3, :name => "Cairns Show", :regions => [:au_qld_cairns]}],
42
43
  8 => [{:function => "qld_brisbane_ekka_holiday(year)", :function_arguments => [:year], :name => "Ekka", :regions => [:au_qld_brisbane]}],
@@ -46,11 +47,12 @@ module Holidays
46
47
  {:wday => 1, :week => -1, :year_ranges => { :until => 2017 },:name => "Family & Community Day", :regions => [:au_act]}],
47
48
  10 => [{:function => "afl_grand_final(year)", :function_arguments => [:year], :name => "Friday before the AFL Grand Final", :regions => [:au_vic]},
48
49
  {:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_act, :au_nsw, :au_sa]},
49
- {:function => "qld_labour_day_october(year)", :function_arguments => [:year], :observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Labour Day", :regions => [:au_qld]},
50
- {:function => "qld_queens_bday_october(year)", :function_arguments => [:year], :year_ranges => { :until => 2022 },:observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Queen's Birthday", :regions => [:au_qld]},
50
+ {:function => "qld_labour_day_october(year)", :function_arguments => [:year], :year_ranges => { :between => 2013..2015 },:observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Labour Day", :regions => [:au_qld]},
51
+ {:mday => 1, :year_ranges => { :limited => [2012] },:observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Queen's Birthday", :regions => [:au_qld]},
52
+ {:function => "qld_queens_bday_october(year)", :function_arguments => [:year], :year_ranges => { :between => 2016..2022 },:observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Queen's Birthday", :regions => [:au_qld]},
51
53
  {:function => "qld_kings_bday_october(year)", :function_arguments => [:year], :year_ranges => { :from => 2023 },:observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "King's Birthday", :regions => [:au_qld]},
52
54
  {:function => "hobart_show_day(year)", :function_arguments => [:year], :name => "Royal Hobart Show", :regions => [:au_tas_south]}],
53
- 11 => [{:function => "g20_day_2014_only(year)", :function_arguments => [:year], :name => "G20 Day", :regions => [:au_qld_brisbane]},
55
+ 11 => [{:mday => 14, :year_ranges => { :limited => [2014] },:name => "G20 Day", :regions => [:au_qld_brisbane]},
54
56
  {:wday => 1, :week => 1, :name => "Recreation Day", :regions => [:au_tas_north]},
55
57
  {:wday => 2, :week => 1, :name => "Melbourne Cup Day", :regions => [:au_vic_melbourne]}],
56
58
  12 => [{:mday => 25, :observed => "to_tuesday_if_sunday_or_monday_if_saturday(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:au_qld, :au_nsw, :au_act, :au_tas, :au_wa, :au_vic, :au_nt]},
@@ -85,43 +87,23 @@ end
85
87
  },
86
88
 
87
89
  "qld_queens_bday_october(year)" => Proc.new { |year|
88
- if year >= 2016
89
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
90
- elsif year == 2012
91
- 1
92
- else
93
- nil
94
- end
90
+ Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
95
91
  },
96
92
 
97
93
  "qld_kings_bday_october(year)" => Proc.new { |year|
98
- if year >= 2023
99
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
100
- else
101
- nil
102
- end
94
+ Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
103
95
  },
104
96
 
105
97
  "qld_queens_birthday_june(year)" => Proc.new { |year|
106
- if year <= 2015
107
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 6, 2, 1)
108
- end
98
+ Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 6, 2, 1)
109
99
  },
110
100
 
111
101
  "qld_labour_day_may(year)" => Proc.new { |year|
112
- if year < 2013 || year >= 2016
113
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, 1, 1)
114
- end
102
+ Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, 1, 1)
115
103
  },
116
104
 
117
105
  "qld_labour_day_october(year)" => Proc.new { |year|
118
- if year >= 2013 && year < 2016
119
- Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
120
- end
121
- },
122
-
123
- "g20_day_2014_only(year)" => Proc.new { |year|
124
- year == 2014 ? 14 : nil
106
+ Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 1, 1)
125
107
  },
126
108
 
127
109
  "hobart_show_day(year)" => Proc.new { |year|
@@ -130,19 +112,11 @@ fourth_sat_in_oct - 2 # the thursday before
130
112
  },
131
113
 
132
114
  "march_pub_hol_sa(year)" => Proc.new { |year|
133
- if year < 2006
134
- nil
135
- else
136
- Date.civil(year, 3, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 3, :second, :monday))
137
- end
115
+ Date.civil(year, 3, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 3, :second, :monday))
138
116
  },
139
117
 
140
118
  "may_pub_hol_sa(year)" => Proc.new { |year|
141
- if year >= 2006
142
- nil
143
- else
144
- Date.civil(year, 5, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, :third, :monday))
145
- end
119
+ Date.civil(year, 5, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 5, :third, :monday))
146
120
  },
147
121
 
148
122
  "qld_brisbane_ekka_holiday(year)" => Proc.new { |year|
@@ -194,8 +194,8 @@ module Holidays
194
194
  {:mday => 1, :name => "Nieuwjaarsdag", :regions => [:nl]},
195
195
  {:mday => 1, :name => "Nyttårsdag", :regions => [:no]},
196
196
  {:mday => 1, :name => "Nowy Rok", :regions => [:pl]},
197
- {:function => "pl_trzech_kroli(year)", :function_arguments => [:year], :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
198
- {:function => "pl_trzech_kroli_informal(year)", :function_arguments => [:year], :type => :informal, :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
197
+ {:mday => 6, :year_ranges => { :from => 2011 },:name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
198
+ {:mday => 6, :year_ranges => { :until => 2010 },:type => :informal, :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
199
199
  {:mday => 21, :type => :informal, :name => "Dzień Babci", :regions => [:pl]},
200
200
  {:mday => 22, :type => :informal, :name => "Dzień Dziadka", :regions => [:pl]},
201
201
  {:mday => 1, :name => "Ano Novo", :regions => [:pt]},
@@ -629,14 +629,6 @@ when 2028
629
629
  end
630
630
  },
631
631
 
632
- "pl_trzech_kroli(year)" => Proc.new { |year|
633
- year >= 2011 ? 6 : nil
634
- },
635
-
636
- "pl_trzech_kroli_informal(year)" => Proc.new { |year|
637
- year < 2011 ? 6 : nil
638
- },
639
-
640
632
 
641
633
  }
642
634
  end
@@ -14,7 +14,7 @@ module Holidays
14
14
  {
15
15
  0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Ouschterméindeg", :regions => [:lu]},
16
16
  {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 39, :name => "Christi Himmelfaart", :regions => [:lu]},
17
- {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 49, :name => "Péngschtméindeg", :regions => [:lu]}],
17
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 50, :name => "Péngschtméindeg", :regions => [:lu]}],
18
18
  1 => [{:mday => 1, :name => "Neijoerschdag", :regions => [:lu]}],
19
19
  5 => [{:mday => 1, :name => "Dag vun der Aarbecht", :regions => [:lu]},
20
20
  {:mday => 9, :year_ranges => { :from => 2019 },:name => "Europadag", :regions => [:lu]}],
@@ -32,7 +32,7 @@ module Holidays
32
32
  10 => [{:wday => 1, :week => 1, :observed => "previous_friday(date)", :observed_arguments => [:date], :name => "Hawke's bay Anniversary Day", :regions => [:nz_hb]},
33
33
  {:wday => 1, :week => 4, :name => "Labour Day", :regions => [:nz]},
34
34
  {:wday => 1, :week => 4, :observed => "next_week(date)", :observed_arguments => [:date], :name => "Marlborough Anniversary Day", :regions => [:nz_mb]}],
35
- 11 => [{:wday => 5, :week => 2, :name => "Canterbury Anniversary Day", :regions => [:nz_ca]},
35
+ 11 => [{:function => "nz_canterbury_anniversary(year)", :function_arguments => [:year], :name => "Canterbury Anniversary Day", :regions => [:nz_ca]},
36
36
  {:mday => 30, :observed => "closest_monday(date)", :observed_arguments => [:date], :name => "Chatham Island Anniversary Day", :regions => [:nz_ch]}],
37
37
  12 => [{:mday => 1, :observed => "closest_monday(date)", :observed_arguments => [:date], :name => "Westland Anniversary Day", :regions => [:nz_wl]},
38
38
  {:mday => 25, :observed => "to_monday_if_weekend(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:nz]},
@@ -61,6 +61,14 @@ date - 3
61
61
  date + 7
62
62
  },
63
63
 
64
+ "nz_canterbury_anniversary(year)" => Proc.new { |year|
65
+ date = Date.civil(year, 11, 1)
66
+ date += 1 until date.tuesday?
67
+ date += 1
68
+ date += 1 until date.friday?
69
+ date + 7
70
+ },
71
+
64
72
  "matariki(year)" => Proc.new { |year|
65
73
  @matariki_dates ||= {
66
74
  '2022' => Date.civil(2022, 6, 24),
@@ -24,8 +24,8 @@ module Holidays
24
24
  {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 49, :name => "Zesłanie Ducha Świętego (Zielone Świątki)", :regions => [:pl]},
25
25
  {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 60, :name => "Uroczystość Najświętszego Ciała i Krwi Pańskiej (Boże Ciało)", :regions => [:pl]}],
26
26
  1 => [{:mday => 1, :name => "Nowy Rok", :regions => [:pl]},
27
- {:function => "pl_trzech_kroli(year)", :function_arguments => [:year], :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
28
- {:function => "pl_trzech_kroli_informal(year)", :function_arguments => [:year], :type => :informal, :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
27
+ {:mday => 6, :year_ranges => { :from => 2011 },:name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
28
+ {:mday => 6, :year_ranges => { :until => 2010 },:type => :informal, :name => "Objawienie Pańskie (święto Trzech Króli)", :regions => [:pl]},
29
29
  {:mday => 21, :type => :informal, :name => "Dzień Babci", :regions => [:pl]},
30
30
  {:mday => 22, :type => :informal, :name => "Dzień Dziadka", :regions => [:pl]}],
31
31
  2 => [{:mday => 2, :type => :informal, :name => "Ofiarowanie Pańskie (Matki Boskiej Gromnicznej)", :regions => [:pl]},
@@ -58,15 +58,7 @@ module Holidays
58
58
 
59
59
  def self.custom_methods
60
60
  {
61
- "pl_trzech_kroli(year)" => Proc.new { |year|
62
- year >= 2011 ? 6 : nil
63
- },
64
-
65
- "pl_trzech_kroli_informal(year)" => Proc.new { |year|
66
- year < 2011 ? 6 : nil
67
- },
68
-
69
-
61
+
70
62
  }
71
63
  end
72
64
  end
@@ -74,11 +74,10 @@ module Holidays
74
74
  raise Holidays::InvalidFunctionResponse.new("invalid day response from custom method call resulting in invalid date. Result: '#{result}'")
75
75
  end
76
76
  elsif result.nil?
77
- # Do nothing. This is because some functions can return 'nil' today.
78
- # I want to change this and so rather than come up with a clean
79
- # implementation I'll do this so we don't throw an error in this specific
80
- # situation. This should be removed once we have changed the existing
81
- # custom definition functions. See https://github.com/holidays/holidays/issues/204
77
+ # nil is a valid return value meaning the calculation determined that no
78
+ # holiday exists on this date. For example, jp_substitute_holiday returns
79
+ # nil when the original holiday does not fall on a Sunday (no substitute
80
+ # needed), and us_inauguration_day returns nil when year % 4 != 1.
82
81
  else
83
82
  raise Holidays::InvalidFunctionResponse.new("invalid response from custom method call, must be a 'date' or 'integer' representing the day. Result: '#{result}'")
84
83
  end
@@ -110,7 +110,7 @@ module Holidays
110
110
 
111
111
  exists = false
112
112
  rules_by_month[month].each do |ex|
113
- if ex[:name] == rule[:name] and ex[:wday] == rule[:wday] and ex[:mday] == rule[:mday] and ex[:week] == rule[:week] and ex[:type] == rule[:type] and ex[:function] == rule[:function] and ex[:observed] == rule[:observed] and ex[:year_ranges] == rule[:year_ranges]
113
+ if ex[:name] == rule[:name] and ex[:wday] == rule[:wday] and ex[:mday] == rule[:mday] and ex[:week] == rule[:week] and ex[:type] == rule[:type] and ex[:function] == rule[:function] and ex[:function_modifier] == rule[:function_modifier] and ex[:observed] == rule[:observed] and ex[:year_ranges] == rule[:year_ranges]
114
114
  ex[:regions] << rule[:regions].flatten
115
115
  exists = true
116
116
  end
@@ -201,6 +201,8 @@ module Holidays
201
201
  method.parameters.collect { |arg| arg[1] }
202
202
  elsif method = parsed_custom_methods[function_id]
203
203
  method.arguments.collect { |arg| arg.to_sym }
204
+ else
205
+ raise ArgumentError, "Unknown function '#{function_id}'. It must either be a built-in method or be defined in the 'methods' section of a definition file."
204
206
  end
205
207
  end
206
208
  end
@@ -1,3 +1,3 @@
1
1
  module Holidays
2
- VERSION = '9.2.0'
2
+ VERSION = '10.0.0'
3
3
  end