revised_holidays 9.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 (382) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +25 -0
  3. data/CHANGELOG.md +446 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +21 -0
  7. data/Makefile +45 -0
  8. data/README.md +337 -0
  9. data/Rakefile +109 -0
  10. data/bin/console +7 -0
  11. data/bin/setup +6 -0
  12. data/definitions/.github/workflows/ruby.yml +25 -0
  13. data/definitions/.gitignore +5 -0
  14. data/definitions/CHANGELOG.md +352 -0
  15. data/definitions/Gemfile +6 -0
  16. data/definitions/LICENSE +21 -0
  17. data/definitions/METHODS.yml +26 -0
  18. data/definitions/Makefile +9 -0
  19. data/definitions/README.md +22 -0
  20. data/definitions/ar.yaml +268 -0
  21. data/definitions/at.yaml +116 -0
  22. data/definitions/au.yaml +907 -0
  23. data/definitions/be_fr.yaml +153 -0
  24. data/definitions/be_nl.yaml +153 -0
  25. data/definitions/bg.yaml +186 -0
  26. data/definitions/br.yaml +178 -0
  27. data/definitions/ca.yaml +969 -0
  28. data/definitions/ch.yaml +277 -0
  29. data/definitions/cl.yaml +294 -0
  30. data/definitions/co.yaml +437 -0
  31. data/definitions/cr.yaml +100 -0
  32. data/definitions/cz.yaml +137 -0
  33. data/definitions/de.yaml +401 -0
  34. data/definitions/dk.yaml +220 -0
  35. data/definitions/doc/CONTRIBUTING.md +44 -0
  36. data/definitions/doc/MAINTAINERS.md +39 -0
  37. data/definitions/doc/SYNTAX.md +435 -0
  38. data/definitions/doc/architecture/README.md +15 -0
  39. data/definitions/doc/architecture/adr-001.md +86 -0
  40. data/definitions/doc/architecture/adr-002.md +64 -0
  41. data/definitions/ecbtarget.yaml +74 -0
  42. data/definitions/ee.yaml +123 -0
  43. data/definitions/es.yaml +495 -0
  44. data/definitions/federalreserve.yaml +389 -0
  45. data/definitions/federalreservebanks.yaml +821 -0
  46. data/definitions/fedex.yaml +102 -0
  47. data/definitions/fi.yaml +234 -0
  48. data/definitions/fr.yaml +157 -0
  49. data/definitions/gb.yaml +565 -0
  50. data/definitions/ge.yaml +158 -0
  51. data/definitions/gr.yaml +158 -0
  52. data/definitions/hk.yaml +287 -0
  53. data/definitions/hr.yaml +171 -0
  54. data/definitions/hu.yaml +156 -0
  55. data/definitions/ie.yaml +172 -0
  56. data/definitions/index.yaml +80 -0
  57. data/definitions/is.yaml +247 -0
  58. data/definitions/it.yaml +246 -0
  59. data/definitions/jp.yaml +761 -0
  60. data/definitions/ke.yaml +107 -0
  61. data/definitions/kr.yaml +166 -0
  62. data/definitions/kz.yaml +128 -0
  63. data/definitions/li.yaml +154 -0
  64. data/definitions/lib/validation/custom_method_validator.rb +38 -0
  65. data/definitions/lib/validation/definition_validator.rb +35 -0
  66. data/definitions/lib/validation/error.rb +11 -0
  67. data/definitions/lib/validation/month_validator.rb +58 -0
  68. data/definitions/lib/validation/run.rb +66 -0
  69. data/definitions/lib/validation/test_validator.rb +83 -0
  70. data/definitions/lt.yaml +198 -0
  71. data/definitions/lu.yaml +123 -0
  72. data/definitions/lv.yaml +229 -0
  73. data/definitions/ma.yaml +96 -0
  74. data/definitions/mt_en.yaml +131 -0
  75. data/definitions/mt_mt.yaml +131 -0
  76. data/definitions/mx.yaml +160 -0
  77. data/definitions/my.yaml +79 -0
  78. data/definitions/nerc.yaml +94 -0
  79. data/definitions/ng.yaml +97 -0
  80. data/definitions/nl.yaml +127 -0
  81. data/definitions/no.yaml +169 -0
  82. data/definitions/northamericainformal.yaml +105 -0
  83. data/definitions/nyse.yaml +137 -0
  84. data/definitions/nz.yaml +346 -0
  85. data/definitions/pe.yaml +208 -0
  86. data/definitions/ph.yaml +130 -0
  87. data/definitions/pl.yaml +796 -0
  88. data/definitions/pt.yaml +187 -0
  89. data/definitions/ro.yaml +240 -0
  90. data/definitions/rs_cyrl.yaml +129 -0
  91. data/definitions/rs_la.yaml +129 -0
  92. data/definitions/ru.yaml +108 -0
  93. data/definitions/se.yaml +238 -0
  94. data/definitions/sg.yaml +89 -0
  95. data/definitions/si.yaml +162 -0
  96. data/definitions/sk.yaml +154 -0
  97. data/definitions/spec/coverage_report.rb +7 -0
  98. data/definitions/spec/data/invalid/months/malformed/bad.yaml +15 -0
  99. data/definitions/spec/data/invalid/months/missing/no_months.yaml +9 -0
  100. data/definitions/spec/data/valid/simple.yaml +15 -0
  101. data/definitions/spec/spec_helper.rb +7 -0
  102. data/definitions/spec/validation/custom_method_validator_spec.rb +60 -0
  103. data/definitions/spec/validation/definition_validator_spec.rb +43 -0
  104. data/definitions/spec/validation/month_validator_spec.rb +175 -0
  105. data/definitions/spec/validation/test_validator_spec.rb +169 -0
  106. data/definitions/th.yaml +111 -0
  107. data/definitions/tn.yaml +83 -0
  108. data/definitions/tr.yaml +174 -0
  109. data/definitions/ua.yaml +161 -0
  110. data/definitions/unitednations.yaml +189 -0
  111. data/definitions/ups.yaml +102 -0
  112. data/definitions/us.yaml +965 -0
  113. data/definitions/ve.yaml +118 -0
  114. data/definitions/vi.yaml +54 -0
  115. data/definitions/za.yaml +139 -0
  116. data/doc/CONTRIBUTING.md +72 -0
  117. data/doc/MAINTAINERS.md +81 -0
  118. data/doc/REFERENCES +19 -0
  119. data/lib/generated_definitions/MANIFEST +83 -0
  120. data/lib/generated_definitions/REGIONS.rb +6 -0
  121. data/lib/generated_definitions/ar.rb +60 -0
  122. data/lib/generated_definitions/at.rb +37 -0
  123. data/lib/generated_definitions/au.rb +177 -0
  124. data/lib/generated_definitions/be.rb +42 -0
  125. data/lib/generated_definitions/be_fr.rb +36 -0
  126. data/lib/generated_definitions/be_nl.rb +36 -0
  127. data/lib/generated_definitions/bg.rb +53 -0
  128. data/lib/generated_definitions/br.rb +37 -0
  129. data/lib/generated_definitions/ca.rb +88 -0
  130. data/lib/generated_definitions/ch.rb +95 -0
  131. data/lib/generated_definitions/cl.rb +71 -0
  132. data/lib/generated_definitions/co.rb +121 -0
  133. data/lib/generated_definitions/cr.rb +35 -0
  134. data/lib/generated_definitions/cz.rb +37 -0
  135. data/lib/generated_definitions/de.rb +65 -0
  136. data/lib/generated_definitions/dk.rb +48 -0
  137. data/lib/generated_definitions/ecbtarget.rb +30 -0
  138. data/lib/generated_definitions/ee.rb +36 -0
  139. data/lib/generated_definitions/el.rb +38 -0
  140. data/lib/generated_definitions/es.rb +56 -0
  141. data/lib/generated_definitions/europe.rb +638 -0
  142. data/lib/generated_definitions/federalreserve.rb +35 -0
  143. data/lib/generated_definitions/federalreservebanks.rb +35 -0
  144. data/lib/generated_definitions/fedex.rb +36 -0
  145. data/lib/generated_definitions/fi.rb +61 -0
  146. data/lib/generated_definitions/fr.rb +39 -0
  147. data/lib/generated_definitions/gb.rb +51 -0
  148. data/lib/generated_definitions/ge.rb +41 -0
  149. data/lib/generated_definitions/gr.rb +38 -0
  150. data/lib/generated_definitions/hk.rb +106 -0
  151. data/lib/generated_definitions/hr.rb +40 -0
  152. data/lib/generated_definitions/hu.rb +35 -0
  153. data/lib/generated_definitions/ie.rb +33 -0
  154. data/lib/generated_definitions/is.rb +60 -0
  155. data/lib/generated_definitions/it.rb +45 -0
  156. data/lib/generated_definitions/jp.rb +166 -0
  157. data/lib/generated_definitions/ke.rb +34 -0
  158. data/lib/generated_definitions/kr.rb +40 -0
  159. data/lib/generated_definitions/kz.rb +38 -0
  160. data/lib/generated_definitions/li.rb +44 -0
  161. data/lib/generated_definitions/lt.rb +38 -0
  162. data/lib/generated_definitions/lu.rb +35 -0
  163. data/lib/generated_definitions/lv.rb +56 -0
  164. data/lib/generated_definitions/ma.rb +33 -0
  165. data/lib/generated_definitions/mt_en.rb +38 -0
  166. data/lib/generated_definitions/mt_mt.rb +38 -0
  167. data/lib/generated_definitions/mx.rb +54 -0
  168. data/lib/generated_definitions/my.rb +30 -0
  169. data/lib/generated_definitions/nerc.rb +30 -0
  170. data/lib/generated_definitions/ng.rb +33 -0
  171. data/lib/generated_definitions/nl.rb +37 -0
  172. data/lib/generated_definitions/no.rb +40 -0
  173. data/lib/generated_definitions/northamerica.rb +229 -0
  174. data/lib/generated_definitions/nyse.rb +34 -0
  175. data/lib/generated_definitions/nz.rb +105 -0
  176. data/lib/generated_definitions/pe.rb +43 -0
  177. data/lib/generated_definitions/ph.rb +50 -0
  178. data/lib/generated_definitions/pl.rb +73 -0
  179. data/lib/generated_definitions/pt.rb +40 -0
  180. data/lib/generated_definitions/ro.rb +39 -0
  181. data/lib/generated_definitions/rs_cyrl.rb +39 -0
  182. data/lib/generated_definitions/rs_la.rb +39 -0
  183. data/lib/generated_definitions/ru.rb +37 -0
  184. data/lib/generated_definitions/scandinavia.rb +166 -0
  185. data/lib/generated_definitions/se.rb +53 -0
  186. data/lib/generated_definitions/sg.rb +31 -0
  187. data/lib/generated_definitions/si.rb +39 -0
  188. data/lib/generated_definitions/sk.rb +39 -0
  189. data/lib/generated_definitions/southamerica.rb +248 -0
  190. data/lib/generated_definitions/th.rb +36 -0
  191. data/lib/generated_definitions/tn.rb +32 -0
  192. data/lib/generated_definitions/tr.rb +64 -0
  193. data/lib/generated_definitions/ua.rb +37 -0
  194. data/lib/generated_definitions/unitednations.rb +81 -0
  195. data/lib/generated_definitions/ups.rb +36 -0
  196. data/lib/generated_definitions/us.rb +153 -0
  197. data/lib/generated_definitions/ve.rb +36 -0
  198. data/lib/generated_definitions/vi.rb +29 -0
  199. data/lib/generated_definitions/za.rb +36 -0
  200. data/lib/holidays/core_extensions/date.rb +57 -0
  201. data/lib/holidays/core_extensions/time.rb +23 -0
  202. data/lib/holidays/date_calculator/day_of_month.rb +68 -0
  203. data/lib/holidays/date_calculator/easter.rb +91 -0
  204. data/lib/holidays/date_calculator/lunar_date.rb +371 -0
  205. data/lib/holidays/date_calculator/weekend_modifier.rb +80 -0
  206. data/lib/holidays/definition/context/function_processor.rb +91 -0
  207. data/lib/holidays/definition/context/generator.rb +209 -0
  208. data/lib/holidays/definition/context/load.rb +29 -0
  209. data/lib/holidays/definition/context/merger.rb +22 -0
  210. data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
  211. data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
  212. data/lib/holidays/definition/decorator/test.rb +37 -0
  213. data/lib/holidays/definition/entity/custom_method.rb +11 -0
  214. data/lib/holidays/definition/entity/test.rb +11 -0
  215. data/lib/holidays/definition/generator/module.rb +54 -0
  216. data/lib/holidays/definition/generator/regions.rb +55 -0
  217. data/lib/holidays/definition/generator/test.rb +51 -0
  218. data/lib/holidays/definition/parser/custom_method.rb +67 -0
  219. data/lib/holidays/definition/parser/test.rb +86 -0
  220. data/lib/holidays/definition/repository/cache.rb +47 -0
  221. data/lib/holidays/definition/repository/custom_methods.rb +27 -0
  222. data/lib/holidays/definition/repository/holidays_by_month.rb +57 -0
  223. data/lib/holidays/definition/repository/proc_result_cache.rb +51 -0
  224. data/lib/holidays/definition/repository/regions.rb +46 -0
  225. data/lib/holidays/definition/validator/custom_method.rb +31 -0
  226. data/lib/holidays/definition/validator/region.rb +36 -0
  227. data/lib/holidays/definition/validator/test.rb +71 -0
  228. data/lib/holidays/errors.rb +11 -0
  229. data/lib/holidays/factory/date_calculator.rb +42 -0
  230. data/lib/holidays/factory/definition.rb +143 -0
  231. data/lib/holidays/factory/finder.rb +70 -0
  232. data/lib/holidays/finder/context/between.rb +45 -0
  233. data/lib/holidays/finder/context/dates_driver_builder.rb +64 -0
  234. data/lib/holidays/finder/context/next_holiday.rb +57 -0
  235. data/lib/holidays/finder/context/parse_options.rb +104 -0
  236. data/lib/holidays/finder/context/search.rb +111 -0
  237. data/lib/holidays/finder/context/year_holiday.rb +57 -0
  238. data/lib/holidays/finder/rules/in_region.rb +31 -0
  239. data/lib/holidays/finder/rules/year_range.rb +58 -0
  240. data/lib/holidays/load_all_definitions.rb +56 -0
  241. data/lib/holidays/version.rb +3 -0
  242. data/lib/holidays.rb +130 -0
  243. data/lib/revised_holidays.rb +1 -0
  244. data/revised_holidays.gemspec +31 -0
  245. data/test/coverage_report.rb +26 -0
  246. data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
  247. data/test/data/test_custom_informal_holidays_defs.yaml +11 -0
  248. data/test/data/test_custom_year_range_holiday_defs.yaml +31 -0
  249. data/test/data/test_invalid_region.rb +15 -0
  250. data/test/data/test_multiple_custom_holiday_defs.yaml +12 -0
  251. data/test/data/test_multiple_regions_with_conflicts_region_1.yaml +38 -0
  252. data/test/data/test_multiple_regions_with_conflicts_region_2.yaml +38 -0
  253. data/test/data/test_region.rb +15 -0
  254. data/test/data/test_single_custom_holiday_defs.yaml +12 -0
  255. data/test/data/test_single_custom_holiday_with_custom_procs.yaml +28 -0
  256. data/test/defs/test_defs_ar.rb +69 -0
  257. data/test/defs/test_defs_at.rb +31 -0
  258. data/test/defs/test_defs_au.rb +233 -0
  259. data/test/defs/test_defs_be_fr.rb +45 -0
  260. data/test/defs/test_defs_be_nl.rb +45 -0
  261. data/test/defs/test_defs_bg.rb +41 -0
  262. data/test/defs/test_defs_br.rb +49 -0
  263. data/test/defs/test_defs_ca.rb +289 -0
  264. data/test/defs/test_defs_ch.rb +51 -0
  265. data/test/defs/test_defs_cl.rb +69 -0
  266. data/test/defs/test_defs_co.rb +113 -0
  267. data/test/defs/test_defs_cr.rb +29 -0
  268. data/test/defs/test_defs_cz.rb +37 -0
  269. data/test/defs/test_defs_de.rb +89 -0
  270. data/test/defs/test_defs_dk.rb +47 -0
  271. data/test/defs/test_defs_ecbtarget.rb +27 -0
  272. data/test/defs/test_defs_ee.rb +41 -0
  273. data/test/defs/test_defs_es.rb +137 -0
  274. data/test/defs/test_defs_europe.rb +1522 -0
  275. data/test/defs/test_defs_fed_ex.rb +24 -0
  276. data/test/defs/test_defs_federalreserve.rb +119 -0
  277. data/test/defs/test_defs_federalreservebanks.rb +251 -0
  278. data/test/defs/test_defs_fedex.rb +31 -0
  279. data/test/defs/test_defs_fi.rb +59 -0
  280. data/test/defs/test_defs_fr.rb +43 -0
  281. data/test/defs/test_defs_gb.rb +159 -0
  282. data/test/defs/test_defs_ge.rb +53 -0
  283. data/test/defs/test_defs_gr.rb +41 -0
  284. data/test/defs/test_defs_hk.rb +59 -0
  285. data/test/defs/test_defs_hr.rb +45 -0
  286. data/test/defs/test_defs_hu.rb +47 -0
  287. data/test/defs/test_defs_ie.rb +53 -0
  288. data/test/defs/test_defs_is.rb +51 -0
  289. data/test/defs/test_defs_it.rb +55 -0
  290. data/test/defs/test_defs_jp.rb +159 -0
  291. data/test/defs/test_defs_ke.rb +31 -0
  292. data/test/defs/test_defs_kr.rb +37 -0
  293. data/test/defs/test_defs_kz.rb +39 -0
  294. data/test/defs/test_defs_li.rb +35 -0
  295. data/test/defs/test_defs_lt.rb +65 -0
  296. data/test/defs/test_defs_lu.rb +35 -0
  297. data/test/defs/test_defs_lv.rb +98 -0
  298. data/test/defs/test_defs_ma.rb +29 -0
  299. data/test/defs/test_defs_mt_en.rb +41 -0
  300. data/test/defs/test_defs_mt_mt.rb +41 -0
  301. data/test/defs/test_defs_mx.rb +49 -0
  302. data/test/defs/test_defs_my.rb +23 -0
  303. data/test/defs/test_defs_nerc.rb +29 -0
  304. data/test/defs/test_defs_ng.rb +29 -0
  305. data/test/defs/test_defs_nl.rb +33 -0
  306. data/test/defs/test_defs_no.rb +43 -0
  307. data/test/defs/test_defs_northamerica.rb +667 -0
  308. data/test/defs/test_defs_nyse.rb +46 -0
  309. data/test/defs/test_defs_nz.rb +67 -0
  310. data/test/defs/test_defs_pe.rb +47 -0
  311. data/test/defs/test_defs_ph.rb +29 -0
  312. data/test/defs/test_defs_pl.rb +229 -0
  313. data/test/defs/test_defs_pt.rb +47 -0
  314. data/test/defs/test_defs_ro.rb +65 -0
  315. data/test/defs/test_defs_rs_cyrl.rb +46 -0
  316. data/test/defs/test_defs_rs_la.rb +46 -0
  317. data/test/defs/test_defs_ru.rb +34 -0
  318. data/test/defs/test_defs_scandinavia.rb +215 -0
  319. data/test/defs/test_defs_se.rb +59 -0
  320. data/test/defs/test_defs_sg.rb +25 -0
  321. data/test/defs/test_defs_si.rb +105 -0
  322. data/test/defs/test_defs_sk.rb +41 -0
  323. data/test/defs/test_defs_southamerica.rb +327 -0
  324. data/test/defs/test_defs_th.rb +33 -0
  325. data/test/defs/test_defs_tn.rb +27 -0
  326. data/test/defs/test_defs_tr.rb +60 -0
  327. data/test/defs/test_defs_ua.rb +41 -0
  328. data/test/defs/test_defs_unitednations.rb +11 -0
  329. data/test/defs/test_defs_ups.rb +31 -0
  330. data/test/defs/test_defs_us.rb +387 -0
  331. data/test/defs/test_defs_ve.rb +35 -0
  332. data/test/defs/test_defs_vi.rb +22 -0
  333. data/test/defs/test_defs_za.rb +35 -0
  334. data/test/holidays/core_extensions/test_date.rb +122 -0
  335. data/test/holidays/core_extensions/test_date_time.rb +60 -0
  336. data/test/holidays/date_calculator/test_day_of_month.rb +27 -0
  337. data/test/holidays/date_calculator/test_easter_gregorian.rb +30 -0
  338. data/test/holidays/date_calculator/test_easter_julian.rb +36 -0
  339. data/test/holidays/date_calculator/test_lunar_date.rb +89 -0
  340. data/test/holidays/date_calculator/test_weekend_modifier.rb +54 -0
  341. data/test/holidays/definition/context/test_function_processor.rb +199 -0
  342. data/test/holidays/definition/context/test_generator.rb +226 -0
  343. data/test/holidays/definition/context/test_load.rb +37 -0
  344. data/test/holidays/definition/context/test_merger.rb +25 -0
  345. data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
  346. data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
  347. data/test/holidays/definition/decorator/test_test.rb +123 -0
  348. data/test/holidays/definition/generator/test_module.rb +268 -0
  349. data/test/holidays/definition/generator/test_regions.rb +97 -0
  350. data/test/holidays/definition/generator/test_test.rb +113 -0
  351. data/test/holidays/definition/parser/test_custom_method.rb +79 -0
  352. data/test/holidays/definition/parser/test_test.rb +142 -0
  353. data/test/holidays/definition/repository/test_cache.rb +123 -0
  354. data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
  355. data/test/holidays/definition/repository/test_holidays_by_month.rb +275 -0
  356. data/test/holidays/definition/repository/test_proc_result_cache.rb +91 -0
  357. data/test/holidays/definition/repository/test_regions.rb +104 -0
  358. data/test/holidays/definition/validator/test_custom_method.rb +94 -0
  359. data/test/holidays/definition/validator/test_region.rb +54 -0
  360. data/test/holidays/definition/validator/test_test.rb +60 -0
  361. data/test/holidays/finder/context/test_between.rb +172 -0
  362. data/test/holidays/finder/context/test_dates_driver_builder.rb +91 -0
  363. data/test/holidays/finder/context/test_next_holiday.rb +156 -0
  364. data/test/holidays/finder/context/test_parse_options.rb +141 -0
  365. data/test/holidays/finder/context/test_search.rb +232 -0
  366. data/test/holidays/finder/context/test_year_holiday.rb +202 -0
  367. data/test/holidays/finder/rules/test_in_region.rb +42 -0
  368. data/test/holidays/finder/rules/test_year_range.rb +166 -0
  369. data/test/integration/README.md +9 -0
  370. data/test/integration/test_all_regions.rb +49 -0
  371. data/test/integration/test_any_holidays_during_work_week.rb +90 -0
  372. data/test/integration/test_available_regions.rb +23 -0
  373. data/test/integration/test_custom_holidays.rb +41 -0
  374. data/test/integration/test_custom_informal_holidays.rb +15 -0
  375. data/test/integration/test_custom_year_range_holidays.rb +35 -0
  376. data/test/integration/test_holidays.rb +243 -0
  377. data/test/integration/test_holidays_between.rb +87 -0
  378. data/test/integration/test_multiple_regions.rb +71 -0
  379. data/test/integration/test_multiple_regions_with_conflict.rb +29 -0
  380. data/test/integration/test_nonstandard_regions.rb +25 -0
  381. data/test/test_helper.rb +37 -0
  382. metadata +649 -0
@@ -0,0 +1,107 @@
1
+ # Kenya holiday definitions for the Ruby Holiday gem.
2
+ # Updated: 2022-03-06
3
+ # Missing Diwali, Idd-ul-Fitr and Idd-ul-Azha
4
+ # Sources:
5
+ # - https://en.wikipedia.org/wiki/Public_holidays_in_Kenya
6
+ # - https://www.timeanddate.com/holidays/kenya/
7
+ # - http://www.kenyalaw.org/kl/fileadmin/pdfdownloads/Acts/PublicHolidaysActCap110.pdf
8
+ ---
9
+ months:
10
+ 0:
11
+ - name: Good Friday
12
+ regions: [ke]
13
+ function: easter(year)
14
+ function_modifier: -2
15
+ - name: Easter Monday
16
+ regions: [ke]
17
+ function: easter(year)
18
+ function_modifier: 1
19
+ 1:
20
+ - name: New Year's Day
21
+ regions: [ke]
22
+ mday: 1
23
+ observed: to_monday_if_sunday(date)
24
+ 5:
25
+ - name: Labour Day
26
+ regions: [ke]
27
+ mday: 1
28
+ observed: to_monday_if_sunday(date)
29
+ 6:
30
+ - name: Madaraka Day
31
+ regions: [ke]
32
+ mday: 1
33
+ observed: to_monday_if_sunday(date)
34
+ 10:
35
+ - name: Huduma Day
36
+ regions: [ke]
37
+ mday: 10
38
+ observed: to_monday_if_sunday(date)
39
+ - name: Mashujaa Day
40
+ regions: [ke]
41
+ mday: 20
42
+ observed: to_monday_if_sunday(date)
43
+ 12:
44
+ - name: Jamhuri Day
45
+ regions: [ke]
46
+ mday: 12
47
+ observed: to_monday_if_sunday(date)
48
+ - name: Christmas Day
49
+ regions: [ke]
50
+ mday: 25
51
+ observed: to_monday_if_sunday(date)
52
+ - name: Utamaduni Day
53
+ regions: [ke]
54
+ mday: 26
55
+ observed: to_monday_if_sunday(date)
56
+
57
+ tests:
58
+ - given:
59
+ date: '2008-03-21'
60
+ regions: ["ke"]
61
+ expect:
62
+ name: "Good Friday"
63
+ - given:
64
+ date: '2008-03-24'
65
+ regions: ["ke"]
66
+ expect:
67
+ name: "Easter Monday"
68
+ - given:
69
+ date: '2008-01-01'
70
+ regions: ["ke"]
71
+ expect:
72
+ name: "New Year's Day"
73
+ - given:
74
+ date: '2008-05-01'
75
+ regions: ["ke"]
76
+ expect:
77
+ name: "Labour Day"
78
+ - given:
79
+ date: '2019-06-01'
80
+ regions: ["ke"]
81
+ expect:
82
+ name: "Madaraka Day"
83
+ - given:
84
+ date: '2018-10-10'
85
+ regions: ["ke"]
86
+ expect:
87
+ name: "Huduma Day"
88
+ - given:
89
+ date: '2018-10-20'
90
+ regions: ["ke"]
91
+ expect:
92
+ name: "Mashujaa Day"
93
+ - given:
94
+ date: '2019-12-12'
95
+ regions: ["ke"]
96
+ expect:
97
+ name: "Jamhuri Day"
98
+ - given:
99
+ date: '2008-12-25'
100
+ regions: ["ke"]
101
+ expect:
102
+ name: "Christmas Day"
103
+ - given:
104
+ date: '2018-12-26'
105
+ regions: ["ke"]
106
+ expect:
107
+ name: "Utamaduni Day"
@@ -0,0 +1,166 @@
1
+ # Republic of Korea holiday definitions for the Ruby Holiday gem.
2
+ # Provided by Jonathan Pike
3
+ #
4
+ # Updated: 2017-08-09.
5
+ # Sources:
6
+ # - https://en.wikipedia.org/wiki/List_of_public_holidays_in_South_Korea
7
+ # - http://www.hko.gov.hk/gts/time/conversion.htm (for Lunar Calendar Conversions)
8
+ #
9
+ # For Korean/English translations of each holiday:
10
+ # - https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EA%B3%B5%ED%9C%B4%EC%9D%BC
11
+ ---
12
+ months:
13
+ 1:
14
+ - name: 설날
15
+ regions: [kr]
16
+ function: lunar_to_solar(year, month, day, region)
17
+ mday: 1
18
+ - name: 설날 연휴
19
+ regions: [kr]
20
+ function: lunar_to_solar(year, month, day, region)
21
+ mday: 2
22
+ - name: 신정
23
+ regions: [kr]
24
+ mday: 1
25
+ 3:
26
+ - name: 3·1절
27
+ regions: [kr]
28
+ mday: 1
29
+ 4:
30
+ - name: 석가탄신일
31
+ regions: [kr]
32
+ function: lunar_to_solar(year, month, day, region)
33
+ mday: 8
34
+ 5:
35
+ - name: 어린이날
36
+ regions: [kr]
37
+ mday: 5
38
+ 6:
39
+ - name: 현충일
40
+ regions: [kr]
41
+ mday: 6
42
+ 7:
43
+ - name: 제헌절
44
+ regions: [kr]
45
+ mday: 17
46
+ type: informal
47
+ 8:
48
+ - name: 추석 연휴
49
+ regions: [kr]
50
+ function: lunar_to_solar(year, month, day, region)
51
+ mday: 14
52
+ - name: 추석
53
+ regions: [kr]
54
+ function: lunar_to_solar(year, month, day, region)
55
+ mday: 15
56
+ - name: 추석 연휴
57
+ regions: [kr]
58
+ function: lunar_to_solar(year, month, day, region)
59
+ mday: 16
60
+ - name: 광복절
61
+ regions: [kr]
62
+ mday: 15
63
+ 10:
64
+ - name: 개천절
65
+ regions: [kr]
66
+ mday: 3
67
+ - name: 한글날
68
+ regions: [kr]
69
+ mday: 9
70
+ 12:
71
+ - name: 크리스마스
72
+ regions: [kr]
73
+ mday: 25
74
+ - name: 설날 연휴
75
+ regions: [kr]
76
+ function: lunar_to_solar(year, month, day, region)
77
+ mday: 30
78
+
79
+ tests:
80
+ - given:
81
+ date: '2016-02-08'
82
+ regions: ["kr"]
83
+ options: ["informal"]
84
+ expect:
85
+ name: "설날"
86
+ - given:
87
+ date: '2017-01-29'
88
+ regions: ["kr"]
89
+ options: ["informal"]
90
+ expect:
91
+ name: "설날 연휴"
92
+ - given:
93
+ date: '2016-05-14'
94
+ regions: ["kr"]
95
+ options: ["informal"]
96
+ expect:
97
+ name: "석가탄신일"
98
+ - given:
99
+ date: '2016-09-15'
100
+ regions: ["kr"]
101
+ options: ["informal"]
102
+ expect:
103
+ name: "추석"
104
+ - given:
105
+ date: '2016-03-01'
106
+ regions: ["kr"]
107
+ options: ["informal"]
108
+ expect:
109
+ name: "3·1절"
110
+ - given:
111
+ date: '2016-05-05'
112
+ regions: ["kr"]
113
+ options: ["informal"]
114
+ expect:
115
+ name: "어린이날"
116
+ - given:
117
+ date: '2016-06-06'
118
+ regions: ["kr"]
119
+ options: ["informal"]
120
+ expect:
121
+ name: "현충일"
122
+ - given:
123
+ date: '2016-07-17'
124
+ regions: ["kr"]
125
+ options: ["informal"]
126
+ expect:
127
+ name: "제헌절"
128
+ - given:
129
+ date: '2016-08-15'
130
+ regions: ["kr"]
131
+ options: ["informal"]
132
+ expect:
133
+ name: "광복절"
134
+ - given:
135
+ date: '2016-10-03'
136
+ regions: ["kr"]
137
+ options: ["informal"]
138
+ expect:
139
+ name: "개천절"
140
+ - given:
141
+ date: '2016-10-09'
142
+ regions: ["kr"]
143
+ options: ["informal"]
144
+ expect:
145
+ name: "한글날"
146
+ - given:
147
+ date: '2016-12-25'
148
+ regions: ["kr"]
149
+ options: ["informal"]
150
+ expect:
151
+ name: "크리스마스"
152
+ - given:
153
+ date: '2017-01-28'
154
+ regions: ["kr"]
155
+ options: ["informal"]
156
+ expect:
157
+ name: "설날"
158
+
159
+ # These are commented out until I can have a discussion and better understand these holidays.
160
+ # Please see [issue 69](https://github.com/holidays/definitions/issues/69) (nice) for more information.
161
+ # - given:
162
+ # date: '2017-10-04'
163
+ # regions: ["kr"]
164
+ # options: ["informal"]
165
+ # expect:
166
+ # name: "추석"
@@ -0,0 +1,128 @@
1
+ # Kazakh holiday definitions for the Ruby Holiday gem.
2
+ #
3
+ # Created: 2020-09-18
4
+ # Sources:
5
+ # - https://www.officeholidays.com/countries/kazakhstan/2020
6
+ # - https://en.wikipedia.org/wiki/Public_holidays_in_Kazakhstan
7
+ ---
8
+ months:
9
+ 1:
10
+ - name: Jańa jyl # New Year's Day
11
+ regions: [kz]
12
+ mday: 1
13
+ - name: Jańa jyl # 1st New Year holiday
14
+ regions: [kz]
15
+ mday: 2
16
+ 3:
17
+ - name: Halyqaralyq áıelder kúni # International Women's Day
18
+ regions: [kz]
19
+ mday: 8
20
+ - name: Naýryz Meıramy # Nauryz
21
+ regions: [kz]
22
+ mday: 21
23
+ - name: Naýryz Meıramy # Nauryz
24
+ regions: [kz]
25
+ mday: 22
26
+ - name: Naýryz Meıramy # Nauryz
27
+ regions: [kz]
28
+ mday: 23
29
+ 5:
30
+ - name: Qazaqstan halqynyń birligi merekesi # Kazakhstan People's Unity Day
31
+ regions: [kz]
32
+ mday: 1
33
+ - name: Otan Qorǵaýshy kuni # Defender of the Fatherland day
34
+ regions: [kz]
35
+ mday: 7
36
+ - name: Jeńis kúni # Victory Day
37
+ regions: [kz]
38
+ mday: 9
39
+ 7:
40
+ - name: Astana kúni # Capital Day
41
+ regions: [kz]
42
+ mday: 6
43
+ 8:
44
+ - name: Qazaqstan Respýblıkasynyń Konstıtýcıyasy kúni # Constitution day
45
+ regions: [kz]
46
+ mday: 30
47
+ 12:
48
+ - name: Túńǵysh Prezıdent kúni # First President Day
49
+ regions: [kz]
50
+ mday: 1
51
+ - name: Táýelsizdik kúni # Independence day
52
+ regions: [kz]
53
+ mday: 16
54
+ - name: Táýelsizdik kúni # Independence day
55
+ regions: [kz]
56
+ mday: 17
57
+
58
+ tests:
59
+ - given:
60
+ date: ['2020-1-1']
61
+ regions: ["kz"]
62
+ expect:
63
+ name: "Jańa jyl"
64
+ - given:
65
+ date: ['2020-1-2']
66
+ regions: ["kz"]
67
+ expect:
68
+ name: "Jańa jyl"
69
+ - given:
70
+ date: '2020-3-8'
71
+ regions: ["kz"]
72
+ expect:
73
+ name: "Halyqaralyq áıelder kúni"
74
+ - given:
75
+ date: '2020-3-21'
76
+ regions: ["kz"]
77
+ expect:
78
+ name: "Naýryz Meıramy"
79
+ - given:
80
+ date: '2020-3-22'
81
+ regions: ["kz"]
82
+ expect:
83
+ name: "Naýryz Meıramy"
84
+ - given:
85
+ date: '2020-3-23'
86
+ regions: ["kz"]
87
+ expect:
88
+ name: "Naýryz Meıramy"
89
+ - given:
90
+ date: '2020-5-1'
91
+ regions: ["kz"]
92
+ expect:
93
+ name: "Qazaqstan halqynyń birligi merekesi"
94
+ - given:
95
+ date: '2020-5-7'
96
+ regions: ["kz"]
97
+ expect:
98
+ name: "Otan Qorǵaýshy kuni"
99
+ - given:
100
+ date: '2020-5-9'
101
+ regions: ["kz"]
102
+ expect:
103
+ name: "Jeńis kúni"
104
+ - given:
105
+ date: '2020-7-6'
106
+ regions: ["kz"]
107
+ expect:
108
+ name: "Astana kúni"
109
+ - given:
110
+ date: '2020-8-30'
111
+ regions: ["kz"]
112
+ expect:
113
+ name: "Qazaqstan Respýblıkasynyń Konstıtýcıyasy kúni"
114
+ - given:
115
+ date: '2020-12-1'
116
+ regions: ["kz"]
117
+ expect:
118
+ name: "Túńǵysh Prezıdent kúni"
119
+ - given:
120
+ date: '2020-12-16'
121
+ regions: ["kz"]
122
+ expect:
123
+ name: "Táýelsizdik kúni"
124
+ - given:
125
+ date: '2020-12-17'
126
+ regions: ["kz"]
127
+ expect:
128
+ name: "Táýelsizdik kúni"
@@ -0,0 +1,154 @@
1
+ # Liechtenstein holiday definitions for the Ruby Holiday gem.
2
+ #
3
+ # Updated: 2011-10-17.
4
+ # Sources:
5
+ # http://www.tourismus.li/de/navpage-RegionLI-InformationLI-44728.html
6
+ ---
7
+ months:
8
+ 0:
9
+ - name: Fasnachtsdienstag
10
+ regions: [li]
11
+ function: easter(year)
12
+ function_modifier: -47
13
+ - name: Karfreitag
14
+ regions: [li]
15
+ function: easter(year)
16
+ function_modifier: -2
17
+ - name: Ostern
18
+ regions: [li]
19
+ function: easter(year)
20
+ type: informal
21
+ - name: Ostermontag
22
+ regions: [li]
23
+ function: easter(year)
24
+ function_modifier: 1
25
+ - name: Auffahrt
26
+ regions: [li]
27
+ function: easter(year)
28
+ function_modifier: 39
29
+ - name: Pfingstmontag
30
+ regions: [li]
31
+ function: easter(year)
32
+ function_modifier: 50
33
+ - name: Fronleichnam
34
+ regions: [li]
35
+ function: easter(year)
36
+ function_modifier: 60
37
+ 1:
38
+ - name: Neujahrstag
39
+ regions: [li]
40
+ mday: 1
41
+ - name: Heilige Drei Könige
42
+ regions: [li, li]
43
+ mday: 6
44
+ 2:
45
+ - name: Maria Lichtmess
46
+ regions: [li]
47
+ mday: 2
48
+ 3:
49
+ - name: St. Josef
50
+ regions: [li]
51
+ mday: 19
52
+ 5:
53
+ - name: Tag der Arbeit
54
+ regions: [li]
55
+ mday: 1
56
+ 8:
57
+ - name: Staatsfeiertag
58
+ regions: [li]
59
+ mday: 15
60
+ 9:
61
+ - name: Maria Geburt
62
+ regions: [li]
63
+ mday: 8
64
+ 11:
65
+ - name: Allerheiligen
66
+ regions: [li]
67
+ mday: 1
68
+ 12:
69
+ - name: Maria Empfängnis
70
+ regions: [li]
71
+ mday: 8
72
+ - name: Heilig Abend
73
+ regions: [li]
74
+ mday: 24
75
+ - name: Weihnachten
76
+ regions: [li]
77
+ mday: 25
78
+ - name: Stefanstag
79
+ regions: [li]
80
+ mday: 26
81
+ - name: Silvester
82
+ regions: [li]
83
+ mday: 31
84
+
85
+ tests:
86
+ - given:
87
+ date: '2009-01-01'
88
+ regions: ["li"]
89
+ options: ["informal"]
90
+ expect:
91
+ name: "Neujahrstag"
92
+ - given:
93
+ date: '2011-03-08'
94
+ regions: ["li"]
95
+ options: ["informal"]
96
+ expect:
97
+ name: "Fasnachtsdienstag"
98
+ - given:
99
+ date: '2009-04-10'
100
+ regions: ["li"]
101
+ options: ["informal"]
102
+ expect:
103
+ name: "Karfreitag"
104
+ - given:
105
+ date: '2009-04-12'
106
+ regions: ["li"]
107
+ options: ["informal"]
108
+ expect:
109
+ name: "Ostern"
110
+ - given:
111
+ date: '2009-04-13'
112
+ regions: ["li"]
113
+ options: ["informal"]
114
+ expect:
115
+ name: "Ostermontag"
116
+ - given:
117
+ date: '2009-05-21'
118
+ regions: ["li"]
119
+ options: ["informal"]
120
+ expect:
121
+ name: "Auffahrt"
122
+ - given:
123
+ date: '2009-06-01'
124
+ regions: ["li"]
125
+ options: ["informal"]
126
+ expect:
127
+ name: "Pfingstmontag"
128
+ - given:
129
+ date: '2009-12-25'
130
+ regions: ["li"]
131
+ options: ["informal"]
132
+ expect:
133
+ name: "Weihnachten"
134
+ - given:
135
+ date: '2009-12-26'
136
+ regions: ["li"]
137
+ options: ["informal"]
138
+ expect:
139
+ name: "Stefanstag"
140
+ - given:
141
+ date: '2009-06-11'
142
+ regions: ["li"]
143
+ expect:
144
+ name: "Fronleichnam"
145
+ - given:
146
+ date: '2009-08-15'
147
+ regions: ["li"]
148
+ expect:
149
+ name: "Staatsfeiertag"
150
+ - given:
151
+ date: '2009-11-01'
152
+ regions: ["li"]
153
+ expect:
154
+ name: "Allerheiligen"
@@ -0,0 +1,38 @@
1
+ require_relative 'error'
2
+
3
+ module Definitions
4
+ module Validation
5
+ class CustomMethod
6
+ VALID_ARGUMENTS = ["date", "year", "month", "day"]
7
+
8
+ def call(methods)
9
+ methods.each do |name, method|
10
+ raise Errors::InvalidCustomMethod unless
11
+ valid_name?(name) &&
12
+ valid_arguments?(method['arguments']) &&
13
+ valid_source?(method['ruby'])
14
+ end
15
+
16
+ true
17
+ end
18
+
19
+ private
20
+
21
+ def valid_name?(name)
22
+ !name.nil? && !name.empty?
23
+ end
24
+
25
+ def valid_arguments?(arguments)
26
+ !arguments.nil? &&
27
+ !arguments.empty? &&
28
+ arguments.split(",").all? { |arg|
29
+ arg == arg.chomp && VALID_ARGUMENTS.include?(arg.strip)
30
+ }
31
+ end
32
+
33
+ def valid_source?(source)
34
+ !source.nil? && !source.empty?
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'error'
2
+
3
+ module Definitions
4
+ module Validation
5
+ class Definition
6
+ def initialize(custom_method_validator, months_validator, test_validator)
7
+ @custom_method_validator = custom_method_validator
8
+ @months_validator = months_validator
9
+ @test_validator = test_validator
10
+ end
11
+
12
+ def call(definition)
13
+ validate_months!(definition['months'])
14
+ validate_methods!(definition['methods'])
15
+ validate_tests!(definition['tests'])
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def validate_months!(months)
23
+ @months_validator.call(months)
24
+ end
25
+
26
+ def validate_methods!(methods)
27
+ @custom_method_validator.call(methods) unless methods.nil?
28
+ end
29
+
30
+ def validate_tests!(tests)
31
+ @test_validator.call(tests) unless tests.nil?
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+ module Definitions
2
+ module Errors
3
+ class Error < StandardError; end
4
+ class NoMonths < Error ; end
5
+ class InvalidMonth < Error; end
6
+ class InvalidMethod < Error; end
7
+ class InvalidRegions < Error; end
8
+ class InvalidCustomMethod < Error; end
9
+ class InvalidTest < Error; end
10
+ end
11
+ end
@@ -0,0 +1,58 @@
1
+ require_relative 'error'
2
+
3
+ module Definitions
4
+ module Validation
5
+ class Month
6
+ def call(months)
7
+ raise Errors::NoMonths.new("Months is required, received: '#{months}'") if months.nil? || months.empty?
8
+
9
+ months.each do |month, month_defs|
10
+ raise Errors::InvalidMonth.new("All months must be an integer, received: #{months}") unless month.is_a?(Integer)
11
+ raise Errors::InvalidMonth.new("All months must be between 0 and 12, received: #{months}") if month < 0 || month > 12
12
+
13
+ month_defs.each do |month_def|
14
+ raise Errors::InvalidMonth.new("All months must have a name, received: #{months}") if month_def['name'].nil? || month_def['name'].empty?
15
+
16
+ raise Errors::InvalidRegions.new("A month must contain at least one region, received: #{months}") if month_def['regions'].nil? || month_def['regions'].empty?
17
+
18
+ month_def['regions'].each do |region|
19
+ raise Errors::InvalidRegions.new("A month must contain at least one region, received: #{months}") if region.nil? || region.empty?
20
+ end
21
+
22
+ if month_def.key?("year_ranges")
23
+ raise Errors::InvalidMonth.new("year_ranges only supports a single selector at this time, received: #{months}") unless month_def["year_ranges"].is_a?(Hash) && month_def["year_ranges"].size == 1
24
+
25
+ selector = month_def["year_ranges"].keys.first
26
+ value = month_def["year_ranges"][selector]
27
+
28
+ raise Errors::InvalidMonth.new("The :year_ranges value only accepts the following: :until, :from, :limited, :between, received: #{months}") unless [:until, :from, :limited, :between].include?(selector.to_sym)
29
+
30
+ case selector
31
+ when "until"
32
+ raise Errors::InvalidMonth.new("The year_ranges.until value must contain a single 'year' integer, ex. 2018, received: #{months}") unless value.is_a?(Integer)
33
+ when "from"
34
+ raise Errors::InvalidMonth.new("The year_ranges.from value must contain a single 'year' integer, ex. 2018, received: #{months}") unless value.is_a?(Integer)
35
+ when "limited"
36
+ raise Errors::InvalidMonth.new("The year_ranges.limited value must contain an array of 'year' integers, ex. [2018], received: #{months}") unless value.is_a?(Array)
37
+
38
+ value.each do |j|
39
+ raise Errors::InvalidMonth.new("The year_ranges.limited value must contain an array of 'year' integers, ex. [2018], received: #{months}") unless j.is_a?(Integer)
40
+ end
41
+ when "between"
42
+ raise Errors::InvalidMonth.new("year_ranges.between must contain both a 'start' and 'end' key, received: #{months}") unless value.is_a?(Hash) && value.key?("start") && value.key?("end")
43
+
44
+ raise Errors::InvalidMonth.new("The year_ranges.between.start value must contain a single 'year' integer, ex. 2018, received: #{months}") unless value["start"].is_a?(Integer)
45
+ raise Errors::InvalidMonth.new("The year_ranges.between.end value must contain a single 'year' integer, ex. 2018, received: #{months}") unless value["end"].is_a?(Integer)
46
+
47
+ raise Errors::InvalidMonth.new("The year_ranges.between.end value cannot be before the start value, received: #{months}") if value["end"] < value["start"]
48
+ raise Errors::InvalidMonth.new("The year_ranges.between start and end values cannot be the same, received: #{months}") if value["end"] == value["start"]
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ true
55
+ end
56
+ end
57
+ end
58
+ end