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,66 @@
1
+ ## encoding: utf-8
2
+
3
+ require 'yaml'
4
+
5
+ require_relative 'error'
6
+ require_relative 'definition_validator'
7
+ require_relative 'custom_method_validator'
8
+ require_relative 'month_validator'
9
+ require_relative 'test_validator'
10
+
11
+ definitions_path = '/../../'
12
+
13
+ module Definitions
14
+ class Validate
15
+ def initialize(path, definition_validator)
16
+ @path = path
17
+ @definition_validator = definition_validator
18
+ end
19
+
20
+ def call
21
+ path = File.expand_path(File.dirname(__FILE__)) + @path
22
+
23
+ definition_count = 0
24
+
25
+ Dir.foreach(path) do |item|
26
+ next if item == '.' or item == '..'
27
+
28
+ target = path+item
29
+ next if File.extname(target) != '.yaml'
30
+ next if item == 'index.yaml'
31
+
32
+ definition_count += 1
33
+
34
+ begin
35
+ definition_file = YAML.load(File.open(target))
36
+ validate!(definition_file)
37
+ rescue Psych::SyntaxError => e
38
+ puts "Failed on file '#{target}', YAML parse error: #{e}"
39
+ puts "This means your YAML is somehow invalid. Test your file on something like yamllint.com to find the issue."
40
+ exit
41
+ rescue => e
42
+ puts "Failed on file '#{target}', error: #{e}"
43
+ exit
44
+ end
45
+ end
46
+
47
+ puts "Success!"
48
+ puts "Definition count: #{definition_count}"
49
+ end
50
+
51
+ private
52
+
53
+ def validate!(definition)
54
+ raise StandardError unless @definition_validator.call(definition)
55
+ end
56
+ end
57
+ end
58
+
59
+ Definitions::Validate.new(
60
+ definitions_path,
61
+ Definitions::Validation::Definition.new(
62
+ Definitions::Validation::CustomMethod.new,
63
+ Definitions::Validation::Month.new,
64
+ Definitions::Validation::Test.new,
65
+ ),
66
+ ).call
@@ -0,0 +1,83 @@
1
+ require 'date'
2
+ require_relative 'error'
3
+
4
+ module Definitions
5
+ module Validation
6
+ class Test
7
+ def call(tests)
8
+ err!("Tests cannot be nil") if tests.nil?
9
+ err!("Tests cannot be empty. They are too important to leave out!") if tests.empty?
10
+ err!("Tests must be an array") unless tests.is_a?(Array)
11
+
12
+ tests.each do |t|
13
+ validate!(t)
14
+ end
15
+
16
+ true
17
+ end
18
+
19
+ private
20
+
21
+ def err!(msg)
22
+ raise Errors::InvalidTest.new(msg)
23
+ end
24
+
25
+ def validate!(t)
26
+ validate_given!(t["given"])
27
+ validate_expect!(t["expect"])
28
+ rescue Errors::InvalidTest => e
29
+ raise Errors::InvalidTest.new("#{e.message} - #{t.inspect}")
30
+ end
31
+
32
+ def validate_given!(g)
33
+ err!("Test must contain given key") if g.nil?
34
+
35
+ validate_regions!(g["regions"])
36
+ validate_options!(g["options"])
37
+ validate_date_values!(g)
38
+ end
39
+
40
+ def validate_regions!(regions)
41
+ err!("Test contains invalid regions (must be an array of strings)") unless regions.is_a?(Array)
42
+ err!("Test must contain at least one region") if regions.nil? || regions.empty?
43
+
44
+ regions.each do |r|
45
+ err!("Test cannot contain empty regions") if r.empty?
46
+ end
47
+ end
48
+
49
+ def validate_options!(opts)
50
+ if opts
51
+ opts = [ opts ] unless opts.is_a?(Array)
52
+ opts.each do |opt|
53
+ err!("Test contains invalid option(s)") unless opt == "informal" || opt == "observed"
54
+ end
55
+ end
56
+ end
57
+
58
+ def validate_date_values!(given)
59
+ err!("Test must contain some date") unless given.has_key?("date")
60
+
61
+ given["date"] = [ given["date"] ] unless given["date"].is_a?(Array)
62
+
63
+ given["date"].each do |d|
64
+ parse_date!(d)
65
+ end
66
+ end
67
+
68
+ def parse_date!(d)
69
+ DateTime.parse(d)
70
+ rescue TypeError, ArgumentError, NoMethodError
71
+ err!("Test must contain valid date, date value was: '#{d}")
72
+ end
73
+
74
+ def validate_expect!(e)
75
+ err!("Test must contain expect key") if e.nil?
76
+
77
+ if e.has_key?("holiday") && ![true, false].include?(e["holiday"])
78
+ err!("Test contains invalid holiday value (must be true/false)")
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,198 @@
1
+ # Lithuanian holiday definitions for the Ruby Holiday gem.
2
+ #
3
+ # Updated: 2014-10-02
4
+ # Sources:
5
+ # - http://en.wikipedia.org/wiki/Public_holidays_in_Lithuania
6
+ # - http://day.lt/sventes/nedarbo
7
+ ---
8
+ months:
9
+ 0:
10
+ - name: Šv. Velykos
11
+ regions: [lt]
12
+ function: easter(year)
13
+ - name: Antroji Velykų diena
14
+ regions: [lt]
15
+ function: easter(year)
16
+ function_modifier: 1
17
+ 1:
18
+ - name: Naujieji metai
19
+ regions: [lt]
20
+ mday: 1
21
+ 2:
22
+ - name: Valstybės atkūrimo diena
23
+ regions: [lt]
24
+ mday: 16
25
+ 3:
26
+ - name: Nepriklausomybės atkūrimo diena
27
+ regions: [lt]
28
+ mday: 11
29
+ 5:
30
+ - name: Darbininkų diena
31
+ regions: [lt]
32
+ mday: 1
33
+ 6:
34
+ - name: Joninės
35
+ regions: [lt]
36
+ mday: 24
37
+ 7:
38
+ - name: Valstybės diena
39
+ regions: [lt]
40
+ mday: 6
41
+ 8:
42
+ - name: Žolinė
43
+ regions: [lt]
44
+ mday: 15
45
+ 11:
46
+ - name: Visų šventųjų diena
47
+ regions: [lt]
48
+ mday: 1
49
+ - name: Mirusiųjų atminimo (Vėlinių) diena
50
+ regions: [lt]
51
+ mday: 2
52
+ 12:
53
+ - name: Šv. Kūčios
54
+ regions: [lt]
55
+ mday: 24
56
+ - name: Šv. Kalėdos
57
+ regions: [lt]
58
+ mday: 25
59
+ - name: Antroji Kalėdų diena
60
+ regions: [lt]
61
+ mday: 26
62
+
63
+ tests:
64
+ - given:
65
+ date: '2008-01-01'
66
+ regions: ["lt"]
67
+ expect:
68
+ name: "Naujieji metai"
69
+ - given:
70
+ date: '2008-02-16'
71
+ regions: ["lt"]
72
+ expect:
73
+ name: "Valstybės atkūrimo diena"
74
+ - given:
75
+ date: '2008-03-11'
76
+ regions: ["lt"]
77
+ expect:
78
+ name: "Nepriklausomybės atkūrimo diena"
79
+ - given:
80
+ date: '2008-03-23'
81
+ regions: ["lt"]
82
+ expect:
83
+ name: "Šv. Velykos"
84
+ - given:
85
+ date: '2008-03-24'
86
+ regions: ["lt"]
87
+ expect:
88
+ name: "Antroji Velykų diena"
89
+ - given:
90
+ date: '2008-05-01'
91
+ regions: ["lt"]
92
+ expect:
93
+ name: "Darbininkų diena"
94
+ - given:
95
+ date: '2008-06-24'
96
+ regions: ["lt"]
97
+ expect:
98
+ name: "Joninės"
99
+ - given:
100
+ date: '2008-07-06'
101
+ regions: ["lt"]
102
+ expect:
103
+ name: "Valstybės diena"
104
+ - given:
105
+ date: '2008-08-15'
106
+ regions: ["lt"]
107
+ expect:
108
+ name: "Žolinė"
109
+ - given:
110
+ date: '2008-11-01'
111
+ regions: ["lt"]
112
+ expect:
113
+ name: "Visų šventųjų diena"
114
+ - given:
115
+ date: '2008-12-24'
116
+ regions: ["lt"]
117
+ expect:
118
+ name: "Šv. Kūčios"
119
+ - given:
120
+ date: '2008-12-25'
121
+ regions: ["lt"]
122
+ expect:
123
+ name: "Šv. Kalėdos"
124
+ - given:
125
+ date: '2008-12-26'
126
+ regions: ["lt"]
127
+ expect:
128
+ name: "Antroji Kalėdų diena"
129
+ - given:
130
+ date: '2012-01-01'
131
+ regions: ["lt"]
132
+ expect:
133
+ name: "Naujieji metai"
134
+ - given:
135
+ date: '2012-02-16'
136
+ regions: ["lt"]
137
+ expect:
138
+ name: "Valstybės atkūrimo diena"
139
+ - given:
140
+ date: '2012-03-11'
141
+ regions: ["lt"]
142
+ expect:
143
+ name: "Nepriklausomybės atkūrimo diena"
144
+ - given:
145
+ date: '2012-04-08'
146
+ regions: ["lt"]
147
+ expect:
148
+ name: "Šv. Velykos"
149
+ - given:
150
+ date: '2012-04-09'
151
+ regions: ["lt"]
152
+ expect:
153
+ name: "Antroji Velykų diena"
154
+ - given:
155
+ date: '2012-05-01'
156
+ regions: ["lt"]
157
+ expect:
158
+ name: "Darbininkų diena"
159
+ - given:
160
+ date: '2012-06-24'
161
+ regions: ["lt"]
162
+ expect:
163
+ name: "Joninės"
164
+ - given:
165
+ date: '2012-07-06'
166
+ regions: ["lt"]
167
+ expect:
168
+ name: "Valstybės diena"
169
+ - given:
170
+ date: '2012-08-15'
171
+ regions: ["lt"]
172
+ expect:
173
+ name: "Žolinė"
174
+ - given:
175
+ date: '2012-11-01'
176
+ regions: ["lt"]
177
+ expect:
178
+ name: "Visų šventųjų diena"
179
+ - given:
180
+ date: '2012-12-24'
181
+ regions: ["lt"]
182
+ expect:
183
+ name: "Šv. Kūčios"
184
+ - given:
185
+ date: '2012-12-25'
186
+ regions: ["lt"]
187
+ expect:
188
+ name: "Šv. Kalėdos"
189
+ - given:
190
+ date: '2012-12-26'
191
+ regions: ["lt"]
192
+ expect:
193
+ name: "Antroji Kalėdų diena"
194
+ - given:
195
+ date: '2024-11-02'
196
+ regions: ["lt"]
197
+ expect:
198
+ name: "Mirusiųjų atminimo (Vėlinių) diena"
@@ -0,0 +1,123 @@
1
+ # Luxembourg holiday definitions for the Ruby Holiday gem.
2
+ #
3
+ # Updated: 2020-01-21.
4
+ # Sources:
5
+ # - https://en.wikipedia.org/wiki/Public_holidays_in_Luxembourg
6
+ ---
7
+ months:
8
+ 0:
9
+ - name: Ouschterméindeg
10
+ regions: [lu]
11
+ function: easter(year)
12
+ function_modifier: 1
13
+ - name: Christi Himmelfaart
14
+ regions: [lu]
15
+ function: easter(year)
16
+ function_modifier: 39
17
+ - name: Péngschtméindeg
18
+ regions: [lu]
19
+ function: easter(year)
20
+ function_modifier: 49
21
+ 1:
22
+ - name: Neijoerschdag
23
+ regions: [lu]
24
+ mday: 1
25
+ 5:
26
+ - name: Dag vun der Aarbecht
27
+ regions: [lu]
28
+ mday: 1
29
+ - name: Europadag
30
+ regions: [lu]
31
+ mday: 9
32
+ year_ranges:
33
+ from: 2019
34
+ 6:
35
+ - name: Nationalfeierdag
36
+ regions: [lu]
37
+ mday: 23
38
+ 8:
39
+ - name: Léiffrawëschdag
40
+ regions: [lu]
41
+ mday: 15
42
+ 11:
43
+ - name: Allerhellgen
44
+ regions: [lu]
45
+ mday: 1
46
+ 12:
47
+ - name: Chrëschtdag
48
+ regions: [lu]
49
+ mday: 25
50
+ - name: Stiefesdag
51
+ regions: [lu]
52
+ mday: 26
53
+
54
+ tests:
55
+ - given:
56
+ date: '2008-01-01'
57
+ regions: ["lu"]
58
+ options: ["informal"]
59
+ expect:
60
+ name: "Neijoerschdag"
61
+ - given:
62
+ date: '2008-03-24'
63
+ regions: ["lu"]
64
+ options: ["informal"]
65
+ expect:
66
+ name: "Ouschterméindeg"
67
+ - given:
68
+ date: '2008-05-01'
69
+ regions: ["lu"]
70
+ options: ["informal"]
71
+ expect:
72
+ name: "Christi Himmelfaart"
73
+ - given:
74
+ date: '2008-06-23'
75
+ regions: ["lu"]
76
+ options: ["informal"]
77
+ expect:
78
+ name: "Nationalfeierdag"
79
+ - given:
80
+ date: '2008-08-15'
81
+ regions: ["lu"]
82
+ options: ["informal"]
83
+ expect:
84
+ name: "Léiffrawëschdag"
85
+ - given:
86
+ date: '2008-11-01'
87
+ regions: ["lu"]
88
+ options: ["informal"]
89
+ expect:
90
+ name: "Allerhellgen"
91
+ - given:
92
+ date: '2008-12-25'
93
+ regions: ["lu"]
94
+ options: ["informal"]
95
+ expect:
96
+ name: "Chrëschtdag"
97
+ - given:
98
+ date: '2008-12-26'
99
+ regions: ["lu"]
100
+ options: ["informal"]
101
+ expect:
102
+ name: "Stiefesdag"
103
+ - given:
104
+ date: '2008-05-11'
105
+ regions: ["lu"]
106
+ options: ["informal"]
107
+ expect:
108
+ name: "Péngschtméindeg"
109
+ - given:
110
+ date: '2019-05-01'
111
+ regions: ["lu"]
112
+ expect:
113
+ name: "Dag vun der Aarbecht"
114
+ - given:
115
+ date: '2019-05-09'
116
+ regions: ["lu"]
117
+ expect:
118
+ name: "Europadag"
119
+ - given:
120
+ date: '2018-05-09'
121
+ regions: ["lu"]
122
+ expect:
123
+ holiday: false
@@ -0,0 +1,229 @@
1
+ # Latvian holiday definitions for the Ruby Holiday gem.
2
+ #
3
+ # Updated: 2023-05-29
4
+ # Sources:
5
+ # - https://likumi.lv/ta/id/72608 (Likums "Par svētku, atceres un atzīmējamām dienām")
6
+ ---
7
+ months:
8
+ 0:
9
+ - name: Lielā Piektdiena # Good Friday
10
+ regions: [lv]
11
+ function: easter(year)
12
+ function_modifier: -2
13
+ - name: Pirmās Lieldienas # Easter Sunday
14
+ regions: [lv]
15
+ function: easter(year)
16
+ - name: Otrās Lieldienas # Easter Monday
17
+ regions: [lv]
18
+ function: easter(year)
19
+ function_modifier: 1
20
+ - name: Vasarsvētki # Summer's Day / Pentecost
21
+ regions: [lv]
22
+ function: easter(year)
23
+ function_modifier: 49
24
+ - name: Vispārējo latviešu Dziesmu un deju svētku noslēguma diena
25
+ regions: [lv]
26
+ function: lv_song_and_dance_festival_end_date(year)
27
+ observed: to_monday_if_weekend(date)
28
+ year_ranges:
29
+ from: 2018
30
+ 1:
31
+ - name: Jaungada diena # New Year's Day
32
+ regions: [lv]
33
+ mday: 1
34
+ 5:
35
+ - name: Darba svētki, Latvijas Republikas Satversmes sapulces sasaukšanas diena # Labor day, Anniversary of the Convocation of the Constitutional Assembly of the Republic of Latvia
36
+ regions: [lv]
37
+ mday: 1
38
+ - name: Latvijas Republikas Neatkarības atjaunošanas diena # Day of the Restoration of Independence of the Republic of Latvia
39
+ regions: [lv]
40
+ mday: 4
41
+ observed: to_monday_if_weekend(date)
42
+ - name: Mātes diena # Mother's Day
43
+ regions: [lv]
44
+ week: 2
45
+ wday: 0
46
+ - name: "Diena, kad Latvijas hokeja komanda ieguva bronzas medaļu 2023. gada Pasaules hokeja čempionātā" # Latvia team 2023 IIHF World Championship bronze medal win
47
+ regions: [lv]
48
+ mday: 29
49
+ year_ranges:
50
+ limited: [2023]
51
+ 6:
52
+ - name: Līgo diena # Midsummer
53
+ regions: [lv]
54
+ mday: 23
55
+ - name: Jāņu diena # Midsummer
56
+ regions: [lv]
57
+ mday: 24
58
+ 9:
59
+ - name: Viņa Svētības pāvesta Franciska pastorālās vizītes Latvijā diena # Visit of Pope Francis
60
+ regions: [lv]
61
+ mday: 24
62
+ year_ranges:
63
+ limited: [2018]
64
+ 11:
65
+ - name: Latvijas Republikas Proklamēšanas diena # Proclamation Day of the Republic of Latvia
66
+ regions: [lv]
67
+ mday: 18
68
+ observed: to_monday_if_weekend(date)
69
+ 12:
70
+ - name: Ziemassvētku vakars # Christmas Eve
71
+ regions: [lv]
72
+ mday: 24
73
+ - name: Pirmie Ziemassvētki # Christmas Day
74
+ regions: [lv]
75
+ mday: 25
76
+ - name: Otrie Ziemassvētki # Boxing Day
77
+ regions: [lv]
78
+ mday: 26
79
+ - name: Vecgada diena # New Year's Eve
80
+ regions: [lv]
81
+ mday: 31
82
+
83
+ methods:
84
+ lv_song_and_dance_festival_end_date:
85
+ arguments: year
86
+ ruby: |
87
+ case year
88
+ when 2018
89
+ # https://likumi.lv/ta/id/281541 (Ministru kabineta rīkojums Nr. 252 "Par XXVI Vispārējo latviešu dziesmu un XVI Deju svētku norises laiku")
90
+ Date.new(2018, 7, 8)
91
+ when 2023
92
+ # https://likumi.lv/ta/id/330067 (Ministru kabineta rīkojums Nr. 92 "Par XXVII Vispārējo latviešu dziesmu un XVII Deju svētku norises laiku")
93
+ Date.new(2023, 7, 9)
94
+ when 2028
95
+ # Event's period/next year is known, but precise dates aren't.
96
+ # Previously, dates were announced 2 years ahead, so on ~2026-05 this method would need to be revisited.
97
+ end
98
+
99
+ tests:
100
+ - given:
101
+ date: ['2018-01-01', '2019-01-01', '2029-01-01']
102
+ regions: ["lv"]
103
+ expect:
104
+ name: "Jaungada diena"
105
+ - given:
106
+ date: ['2018-03-30', '2019-04-19', '2039-04-08']
107
+ regions: ["lv"]
108
+ expect:
109
+ name: "Lielā Piektdiena"
110
+ - given:
111
+ date: ['2018-04-01', '2019-04-21', '2039-04-10']
112
+ regions: ["lv"]
113
+ expect:
114
+ name: "Pirmās Lieldienas"
115
+ - given:
116
+ date: ['2018-04-02', '2019-04-22', '2039-04-11']
117
+ regions: ["lv"]
118
+ expect:
119
+ name: "Otrās Lieldienas"
120
+ - given:
121
+ date: ['2018-05-01', '2019-05-01', '2029-05-01']
122
+ regions: ["lv"]
123
+ expect:
124
+ name: "Darba svētki, Latvijas Republikas Satversmes sapulces sasaukšanas diena"
125
+ - given:
126
+ date: ['2018-05-04', '2019-05-04', '2020-05-04']
127
+ regions: ["lv"]
128
+ expect:
129
+ name: "Latvijas Republikas Neatkarības atjaunošanas diena"
130
+ - given:
131
+ date: '2019-05-06'
132
+ regions: ["lv"]
133
+ options: ["observed"]
134
+ expect:
135
+ name: "Latvijas Republikas Neatkarības atjaunošanas diena"
136
+ - given:
137
+ date: '2020-05-04'
138
+ regions: ["lv"]
139
+ options: ["observed"]
140
+ expect:
141
+ name: "Latvijas Republikas Neatkarības atjaunošanas diena"
142
+ - given:
143
+ date: ['2019-05-12', '2020-05-10', '2029-05-13']
144
+ regions: ["lv"]
145
+ expect:
146
+ name: "Mātes diena"
147
+ - given:
148
+ date: '2023-05-29'
149
+ regions: ["lv"]
150
+ expect:
151
+ name: "Diena, kad Latvijas hokeja komanda ieguva bronzas medaļu 2023. gada Pasaules hokeja čempionātā"
152
+ - given:
153
+ date: ['2019-06-09', '2020-05-31', '2029-05-20']
154
+ regions: ["lv"]
155
+ expect:
156
+ name: "Vasarsvētki"
157
+ - given:
158
+ date: ['2019-06-23', '2020-06-23', '2029-06-23']
159
+ regions: ["lv"]
160
+ expect:
161
+ name: "Līgo diena"
162
+ - given:
163
+ date: ['2019-06-24', '2020-06-24', '2029-06-24']
164
+ regions: ["lv"]
165
+ expect:
166
+ name: "Jāņu diena"
167
+ - given:
168
+ date: ['2018-07-08', '2023-07-09']
169
+ regions: ["lv"]
170
+ expect:
171
+ name: "Vispārējo latviešu Dziesmu un deju svētku noslēguma diena"
172
+ - given:
173
+ date: ['2018-07-09', '2023-07-10']
174
+ regions: ["lv"]
175
+ options: ["observed"]
176
+ expect:
177
+ name: "Vispārējo latviešu Dziesmu un deju svētku noslēguma diena"
178
+ - given:
179
+ date: ['2019-07-08', '2019-07-09', '2022-07-08', '2022-07-09', '2024-07-08', '2024-07-09']
180
+ regions: ["lv"]
181
+ expect:
182
+ holiday: false
183
+ - given:
184
+ date: '2018-09-24'
185
+ regions: ["lv"]
186
+ expect:
187
+ name: "Viņa Svētības pāvesta Franciska pastorālās vizītes Latvijā diena"
188
+ - given:
189
+ date: '2019-09-24'
190
+ regions: ["lv"]
191
+ expect:
192
+ holiday: false
193
+ - given:
194
+ date: ['2019-11-18', '2020-11-18', '2029-11-18']
195
+ regions: ["lv"]
196
+ expect:
197
+ name: "Latvijas Republikas Proklamēšanas diena"
198
+ - given:
199
+ date: '2020-11-18'
200
+ regions: ["lv"]
201
+ options: ["observed"]
202
+ expect:
203
+ name: "Latvijas Republikas Proklamēšanas diena"
204
+ - given:
205
+ date: '2029-11-19'
206
+ regions: ["lv"]
207
+ options: ["observed"]
208
+ expect:
209
+ name: "Latvijas Republikas Proklamēšanas diena"
210
+ - given:
211
+ date: ['2019-12-24', '2020-12-24', '2029-12-24']
212
+ regions: ["lv"]
213
+ expect:
214
+ name: "Ziemassvētku vakars"
215
+ - given:
216
+ date: ['2019-12-25', '2020-12-25', '2029-12-25']
217
+ regions: ["lv"]
218
+ expect:
219
+ name: "Pirmie Ziemassvētki"
220
+ - given:
221
+ date: ['2019-12-26', '2020-12-26', '2029-12-26']
222
+ regions: ["lv"]
223
+ expect:
224
+ name: "Otrie Ziemassvētki"
225
+ - given:
226
+ date: ['2019-12-31', '2020-12-31', '2029-12-31']
227
+ regions: ["lv"]
228
+ expect:
229
+ name: "Vecgada diena"