holidays 3.3.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -0
  3. data/CONTRIBUTING.md +37 -0
  4. data/README.md +16 -25
  5. data/REFERENCES +4 -1
  6. data/Rakefile +38 -8
  7. data/benchmark.rb +8 -0
  8. data/definitions/README.md +187 -8
  9. data/definitions/ar.yaml +2 -1
  10. data/definitions/at.yaml +17 -13
  11. data/definitions/au.yaml +65 -60
  12. data/definitions/be_fr.yaml +14 -10
  13. data/definitions/be_nl.yaml +8 -4
  14. data/definitions/bg.yaml +12 -6
  15. data/definitions/br.yaml +6 -3
  16. data/definitions/ca.yaml +8 -6
  17. data/definitions/ch.yaml +21 -15
  18. data/definitions/cl.yaml +4 -2
  19. data/definitions/cr.yaml +5 -3
  20. data/definitions/cz.yaml +4 -2
  21. data/definitions/de.yaml +25 -14
  22. data/definitions/dk.yaml +26 -17
  23. data/definitions/ecb_target.yaml +4 -2
  24. data/definitions/el.yaml +23 -18
  25. data/definitions/es.yaml +31 -28
  26. data/definitions/federal_reserve.yaml +12 -12
  27. data/definitions/fedex.yaml +6 -6
  28. data/definitions/fi.yaml +26 -25
  29. data/definitions/fr.yaml +8 -4
  30. data/definitions/gb.yaml +9 -7
  31. data/definitions/hr.yaml +8 -6
  32. data/definitions/hu.yaml +8 -6
  33. data/definitions/ie.yaml +17 -16
  34. data/definitions/index.yaml +1 -1
  35. data/definitions/is.yaml +29 -19
  36. data/definitions/it.yaml +10 -9
  37. data/definitions/jp.yaml +92 -44
  38. data/definitions/li.yaml +25 -20
  39. data/definitions/lt.yaml +2 -1
  40. data/definitions/ma.yaml +7 -7
  41. data/definitions/mx.yaml +11 -11
  42. data/definitions/nerc.yaml +6 -6
  43. data/definitions/nl.yaml +22 -18
  44. data/definitions/no.yaml +19 -11
  45. data/definitions/north_america_informal.yaml +6 -6
  46. data/definitions/nyse.yaml +9 -8
  47. data/definitions/nz.yaml +33 -29
  48. data/definitions/ph.yaml +15 -8
  49. data/definitions/pl.yaml +27 -17
  50. data/definitions/pt.yaml +4 -2
  51. data/definitions/ro.yaml +21 -18
  52. data/definitions/se.yaml +24 -18
  53. data/definitions/sg.yaml +10 -9
  54. data/definitions/si.yaml +4 -2
  55. data/definitions/sk.yaml +4 -2
  56. data/definitions/united_nations.yaml +12 -12
  57. data/definitions/ups.yaml +6 -6
  58. data/definitions/us.yaml +12 -11
  59. data/definitions/ve.yaml +8 -4
  60. data/definitions/vi.yaml +6 -6
  61. data/definitions/za.yaml +26 -24
  62. data/holidays.gemspec +3 -1
  63. data/lib/generated_definitions/MANIFEST +1 -1
  64. data/lib/generated_definitions/ar.rb +8 -6
  65. data/lib/generated_definitions/at.rb +11 -9
  66. data/lib/generated_definitions/au.rb +75 -99
  67. data/lib/generated_definitions/be.rb +12 -10
  68. data/lib/generated_definitions/be_fr.rb +12 -10
  69. data/lib/generated_definitions/be_nl.rb +12 -10
  70. data/lib/generated_definitions/bg.rb +14 -13
  71. data/lib/generated_definitions/br.rb +11 -9
  72. data/lib/generated_definitions/ca.rb +20 -20
  73. data/lib/generated_definitions/ch.rb +41 -44
  74. data/lib/generated_definitions/cl.rb +9 -7
  75. data/lib/generated_definitions/cr.rb +9 -7
  76. data/lib/generated_definitions/cz.rb +9 -6
  77. data/lib/generated_definitions/de.rb +25 -25
  78. data/lib/generated_definitions/dk.rb +17 -15
  79. data/lib/generated_definitions/ecb_target.rb +9 -7
  80. data/lib/generated_definitions/el.rb +13 -11
  81. data/lib/generated_definitions/es.rb +35 -33
  82. data/lib/generated_definitions/europe.rb +234 -247
  83. data/lib/generated_definitions/federal_reserve.rb +11 -9
  84. data/lib/generated_definitions/fedex.rb +42 -0
  85. data/lib/generated_definitions/fi.rb +32 -36
  86. data/lib/generated_definitions/fr.rb +12 -10
  87. data/lib/generated_definitions/gb.rb +15 -13
  88. data/lib/generated_definitions/hr.rb +10 -8
  89. data/lib/generated_definitions/hu.rb +9 -7
  90. data/lib/generated_definitions/ie.rb +17 -17
  91. data/lib/generated_definitions/is.rb +26 -26
  92. data/lib/generated_definitions/it.rb +9 -7
  93. data/lib/generated_definitions/jp.rb +112 -89
  94. data/lib/generated_definitions/li.rb +14 -12
  95. data/lib/generated_definitions/lt.rb +9 -7
  96. data/lib/generated_definitions/ma.rb +7 -5
  97. data/lib/generated_definitions/mx.rb +7 -5
  98. data/lib/generated_definitions/nerc.rb +10 -8
  99. data/lib/generated_definitions/nl.rb +15 -13
  100. data/lib/generated_definitions/no.rb +16 -14
  101. data/lib/generated_definitions/north_america.rb +34 -37
  102. data/lib/generated_definitions/nyse.rb +10 -8
  103. data/lib/generated_definitions/nz.rb +40 -40
  104. data/lib/generated_definitions/ph.rb +17 -13
  105. data/lib/generated_definitions/pl.rb +25 -27
  106. data/lib/generated_definitions/pt.rb +10 -8
  107. data/lib/generated_definitions/ro.rb +11 -9
  108. data/lib/generated_definitions/scandinavia.rb +92 -102
  109. data/lib/generated_definitions/se.rb +25 -27
  110. data/lib/generated_definitions/sg.rb +11 -9
  111. data/lib/generated_definitions/si.rb +10 -8
  112. data/lib/generated_definitions/sk.rb +9 -7
  113. data/lib/generated_definitions/united_nations.rb +7 -5
  114. data/lib/generated_definitions/ups.rb +13 -12
  115. data/lib/generated_definitions/us.rb +20 -21
  116. data/lib/generated_definitions/ve.rb +11 -9
  117. data/lib/generated_definitions/vi.rb +7 -5
  118. data/lib/generated_definitions/za.rb +19 -17
  119. data/lib/holidays.rb +20 -83
  120. data/lib/holidays/date_calculator/weekend_modifier.rb +22 -5
  121. data/lib/holidays/definition/context/generator.rb +67 -29
  122. data/lib/holidays/definition/context/merger.rb +8 -8
  123. data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
  124. data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
  125. data/lib/holidays/definition/entity/custom_method.rb +11 -0
  126. data/lib/holidays/definition/parser/custom_method.rb +69 -0
  127. data/lib/holidays/definition/repository/custom_methods.rb +27 -0
  128. data/lib/holidays/definition/repository/holidays_by_month.rb +1 -1
  129. data/lib/holidays/definition/repository/{proc_cache.rb → proc_result_cache.rb} +19 -4
  130. data/lib/holidays/definition/validator/custom_method.rb +31 -0
  131. data/lib/holidays/definition_factory.rb +42 -6
  132. data/lib/holidays/errors.rb +6 -0
  133. data/lib/holidays/load_all_definitions.rb +57 -0
  134. data/lib/holidays/option/context/parse_options.rb +26 -16
  135. data/lib/holidays/option_factory.rb +1 -0
  136. data/lib/holidays/use_case/context/between.rb +41 -14
  137. data/lib/holidays/use_case_factory.rb +2 -1
  138. data/lib/holidays/version.rb +1 -1
  139. data/test/data/test_single_custom_holiday_with_custom_procs.yaml +24 -0
  140. data/test/defs/test_defs_at.rb +1 -1
  141. data/test/defs/test_defs_au.rb +3 -2
  142. data/test/defs/test_defs_cr.rb +1 -0
  143. data/test/defs/test_defs_cz.rb +1 -0
  144. data/test/defs/test_defs_dk.rb +2 -2
  145. data/test/defs/test_defs_el.rb +7 -6
  146. data/test/defs/test_defs_europe.rb +40 -33
  147. data/test/defs/test_defs_fedex.rb +24 -0
  148. data/test/defs/test_defs_fi.rb +4 -3
  149. data/test/defs/test_defs_hr.rb +2 -2
  150. data/test/defs/test_defs_hu.rb +2 -2
  151. data/test/defs/test_defs_is.rb +2 -1
  152. data/test/defs/test_defs_it.rb +2 -1
  153. data/test/defs/test_defs_jp.rb +1 -1
  154. data/test/defs/test_defs_li.rb +1 -1
  155. data/test/defs/test_defs_ma.rb +2 -1
  156. data/test/defs/test_defs_mx.rb +4 -3
  157. data/test/defs/test_defs_nl.rb +7 -6
  158. data/test/defs/test_defs_no.rb +1 -0
  159. data/test/defs/test_defs_north_america.rb +4 -3
  160. data/test/defs/test_defs_nyse.rb +2 -1
  161. data/test/defs/test_defs_pl.rb +1 -0
  162. data/test/defs/test_defs_ro.rb +11 -11
  163. data/test/defs/test_defs_scandinavia.rb +12 -8
  164. data/test/defs/test_defs_se.rb +3 -2
  165. data/test/defs/test_defs_sg.rb +2 -1
  166. data/test/defs/test_defs_vi.rb +1 -1
  167. data/test/defs/test_defs_za.rb +3 -2
  168. data/test/holidays/date_calculator/test_weekend_modifier.rb +11 -0
  169. data/test/holidays/definition/context/test_generator.rb +64 -5
  170. data/test/holidays/definition/context/test_merger.rb +5 -2
  171. data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
  172. data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
  173. data/test/holidays/definition/parser/test_custom_method.rb +79 -0
  174. data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
  175. data/test/holidays/definition/repository/test_holidays_by_month.rb +0 -32
  176. data/test/holidays/definition/repository/test_proc_result_cache.rb +84 -0
  177. data/test/holidays/definition/validator/test_custom_method.rb +89 -0
  178. data/test/holidays/option/context/test_parse_options.rb +5 -0
  179. data/test/holidays/test_definition_factory.rb +17 -2
  180. data/test/holidays/use_case/context/test_between.rb +2 -0
  181. data/test/test_all_regions.rb +7 -49
  182. data/test/test_custom_holidays.rb +8 -2
  183. data/test/test_helper.rb +9 -2
  184. data/test/test_holidays.rb +9 -29
  185. metadata +46 -11
  186. data/lib/generated_definitions/fed_ex.rb +0 -41
  187. data/test/holidays/definition/repository/test_proc_cache.rb +0 -29
  188. data/test/test_parse_definitions.rb +0 -30
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/it'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module IT # :nodoc:
15
15
  def self.defined_regions
16
16
  [:it]
@@ -18,8 +18,8 @@ module Holidays
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
- 0 => [{:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :name => "Pasqua", :regions => [:it]},
22
- {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Lunedì dell'Angelo", :regions => [:it]}],
21
+ 0 => [{:function => "easter(year)", :function_arguments => [:year], :name => "Pasqua", :regions => [:it]},
22
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Lunedì dell'Angelo", :regions => [:it]}],
23
23
  1 => [{:mday => 1, :name => "Capodanno", :regions => [:it]},
24
24
  {:mday => 6, :name => "Epifania", :regions => [:it]}],
25
25
  4 => [{:mday => 25, :name => "Festa della Liberazione", :regions => [:it]}],
@@ -32,9 +32,11 @@ module Holidays
32
32
  {:mday => 26, :name => "Santo Stefano", :regions => [:it]}]
33
33
  }
34
34
  end
35
- end
36
-
37
35
 
36
+ def self.custom_methods
37
+ {
38
+
39
+ }
40
+ end
41
+ end
38
42
  end
39
-
40
- Holidays.merge_defs(Holidays::IT.defined_regions, Holidays::IT.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/jp'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module JP # :nodoc:
15
15
  def self.defined_regions
16
16
  [:jp]
@@ -20,113 +20,136 @@ module Holidays
20
20
  {
21
21
  1 => [{:mday => 1, :name => "元日", :regions => [:jp]},
22
22
  {:wday => 1, :week => 2, :name => "成人の日", :regions => [:jp]},
23
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 1, 1) }, :function_id => "jp_substitute_holiday(year, 1, 1)", :name => "振替休日", :regions => [:jp]}],
23
+ {:mday => 1, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}],
24
24
  2 => [{:mday => 11, :name => "建国記念日", :regions => [:jp]},
25
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 2, 11) }, :function_id => "jp_substitute_holiday(year, 2, 11)", :name => "振替休日", :regions => [:jp]}],
26
- 3 => [{:function => lambda { |year| Holidays.jp_vernal_equinox_day(year) }, :function_id => "jp_vernal_equinox_day(year)", :name => "春分の日", :regions => [:jp]},
27
- {:function => lambda { |year| Holidays.jp_substitute_holiday(Holidays.jp_vernal_equinox_day(year)) }, :function_id => "jp_substitute_holiday(Holidays.jp_vernal_equinox_day(year))", :name => "振替休日", :regions => [:jp]}],
25
+ {:mday => 11, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}],
26
+ 3 => [{:function => "jp_vernal_equinox_day(year)", :function_arguments => [:year], :name => "春分の日", :regions => [:jp]},
27
+ {:function => "jp_vernal_equinox_day_substitute(year)", :function_arguments => [:year], :name => "振替休日", :regions => [:jp]}],
28
28
  4 => [{:mday => 29, :name => "昭和の日", :regions => [:jp]},
29
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 4, 29) }, :function_id => "jp_substitute_holiday(year, 4, 29)", :name => "振替休日", :regions => [:jp]}],
29
+ {:mday => 29, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}],
30
30
  5 => [{:mday => 3, :name => "憲法記念日", :regions => [:jp]},
31
31
  {:mday => 4, :name => "みどりの日", :regions => [:jp]},
32
32
  {:mday => 5, :name => "こどもの日", :regions => [:jp]},
33
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 5, 3) }, :function_id => "jp_substitute_holiday(year, 5, 3)", :name => "振替休日", :regions => [:jp]},
34
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 5, 4) }, :function_id => "jp_substitute_holiday(year, 5, 4)", :name => "振替休日", :regions => [:jp]},
35
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 5, 5) }, :function_id => "jp_substitute_holiday(year, 5, 5)", :name => "振替休日", :regions => [:jp]}],
33
+ {:mday => 3, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]},
34
+ {:mday => 4, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]},
35
+ {:mday => 5, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}],
36
36
  7 => [{:mday => 20, :year_ranges => [{:between => 1996..2002}],:name => "海の日", :regions => [:jp]},
37
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 7, 20) }, :function_id => "jp_substitute_holiday(year, 7, 20)", :year_ranges => [{:between => 1996..2002}],:name => "振替休日", :regions => [:jp]},
38
- {:wday => 1, :week => 3, :year_ranges => [{:after => 2003}],:name => "海の日", :regions => [:jp]}],
39
- 8 => [{:function => lambda { |year| Holidays.jp_mountain_holiday(year) }, :function_id => "jp_mountain_holiday(year)", :year_ranges => [{:after => 2016}],:name => "山の日", :regions => [:jp]},
40
- {:function => lambda { |year| Holidays.jp_substitute_holiday(Holidays.jp_mountain_holiday(year)) }, :function_id => "jp_substitute_holiday(Holidays.jp_mountain_holiday(year))", :year_ranges => [{:after => 2016}],:name => "振替休日", :regions => [:jp]}],
37
+ {:wday => 1, :week => 3, :year_ranges => [{:after => 2003}],:name => "海の日", :regions => [:jp]},
38
+ {:function => "jp_marine_day_substitute(year)", :function_arguments => [:year], :year_ranges => [{:between => 1996..2002}],:name => "振替休日", :regions => [:jp]}],
39
+ 8 => [{:function => "jp_mountain_holiday(year)", :function_arguments => [:year], :year_ranges => [{:after => 2016}],:name => "山の日", :regions => [:jp]},
40
+ {:function => "jp_mountain_holiday_substitute(year)", :function_arguments => [:year], :year_ranges => [{:after => 2016}],:name => "振替休日", :regions => [:jp]}],
41
41
  9 => [{:wday => 1, :week => 3, :name => "敬老の日", :regions => [:jp]},
42
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 9, Holidays.calculate_day_of_month(year, 9, 3, 1)) }, :function_id => "jp_substitute_holiday(year, 9, Holidays.calculate_day_of_month(year, 9, 3, 1))", :name => "振替休日", :regions => [:jp]},
43
- {:function => lambda { |year| Holidays.jp_citizons_holiday(year) }, :function_id => "jp_citizons_holiday(year)", :name => "国民の休日", :regions => [:jp]},
44
- {:function => lambda { |year| Holidays.jp_national_culture_day(year) }, :function_id => "jp_national_culture_day(year)", :name => "秋分の日", :regions => [:jp]},
45
- {:function => lambda { |year| Holidays.jp_substitute_holiday(Holidays.jp_national_culture_day(year)) }, :function_id => "jp_substitute_holiday(Holidays.jp_national_culture_day(year))", :name => "振替休日", :regions => [:jp]}],
42
+ {:function => "jp_respect_for_aged_holiday_substitute(year)", :function_arguments => [:year], :name => "振替休日", :regions => [:jp]},
43
+ {:function => "jp_citizens_holiday(year)", :function_arguments => [:year], :name => "国民の休日", :regions => [:jp]},
44
+ {:function => "jp_national_culture_day(year)", :function_arguments => [:year], :name => "秋分の日", :regions => [:jp]},
45
+ {:function => "jp_national_culture_day_substitute(year)", :function_arguments => [:year], :name => "振替休日", :regions => [:jp]}],
46
46
  10 => [{:wday => 1, :week => 2, :name => "体育の日", :regions => [:jp]},
47
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 10, Holidays.calculate_day_of_month(year, 10, 2, 1)) }, :function_id => "jp_substitute_holiday(year, 10, Holidays.calculate_day_of_month(year, 10, 2, 1))", :name => "振替休日", :regions => [:jp]}],
47
+ {:function => "jp_health_sports_day_substitute(year)", :function_arguments => [:year], :name => "振替休日", :regions => [:jp]}],
48
48
  11 => [{:mday => 3, :name => "文化の日", :regions => [:jp]},
49
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 11, 3) }, :function_id => "jp_substitute_holiday(year, 11, 3)", :name => "振替休日", :regions => [:jp]},
49
+ {:mday => 3, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]},
50
50
  {:mday => 23, :name => "勤労感謝の日", :regions => [:jp]},
51
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 11, 23) }, :function_id => "jp_substitute_holiday(year, 11, 23)", :name => "振替休日", :regions => [:jp]}],
51
+ {:mday => 23, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}],
52
52
  12 => [{:mday => 23, :name => "天皇誕生日", :regions => [:jp]},
53
- {:function => lambda { |year| Holidays.jp_substitute_holiday(year, 12, 23) }, :function_id => "jp_substitute_holiday(year, 12, 23)", :name => "振替休日", :regions => [:jp]}]
53
+ {:mday => 23, :function => "jp_substitute_holiday(year, month, day)", :function_arguments => [:year, :month, :day], :name => "振替休日", :regions => [:jp]}]
54
54
  }
55
55
  end
56
- end
57
-
58
- def self.jp_vernal_equinox_day(year)
59
- day =
60
- case year
61
- when 1851..1899
62
- 19.8277
63
- when 1900..1979
64
- 20.8357
65
- when 1980..2099
66
- 20.8431
67
- when 2100..2150
68
- 21.8510
69
- else
70
- raise IndexError.new("Out of range")
71
- end
72
- day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
73
- day = day.floor
74
- Date.civil(year, 3, day)
75
- end
76
-
77
-
78
- def self.jp_national_culture_day(year)
79
- day =
80
- case year
81
- when 1851..1899
82
- 22.2588
83
- when 1900..1979
84
- 23.2588
85
- when 1980..2099
86
- 23.2488
87
- when 2100..2150
88
- 24.2488
89
- else
90
- raise IndexError.new("Out of range")
91
- end
92
- day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
93
- day = day.floor
94
- Date.civil(year, 9, day)
95
- end
96
-
97
56
 
98
- def self.jp_citizons_holiday(year)
99
- year < 2003 and return nil
100
- ncd = Holidays.jp_national_culture_day(year)
101
- if ncd.wday == 3
102
- ncd - 1
57
+ def self.custom_methods
58
+ {
59
+ "jp_health_sports_day_substitute(year)" => Proc.new { |year|
60
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 10, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 10, 2, 1))
61
+ },
62
+
63
+ "jp_vernal_equinox_day(year)" => Proc.new { |year|
64
+ day =
65
+ case year
66
+ when 1851..1899
67
+ 19.8277
68
+ when 1900..1979
69
+ 20.8357
70
+ when 1980..2099
71
+ 20.8431
72
+ when 2100..2150
73
+ 21.8510
103
74
  else
104
- nil
75
+ raise IndexError.new("Out of range")
105
76
  end
77
+ day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
78
+ day = day.floor
79
+ Date.civil(year, 3, day)
80
+ },
81
+
82
+ "jp_vernal_equinox_day_substitute(year)" => Proc.new { |year|
83
+ date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_vernal_equinox_day(year)").call(year)
84
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
85
+ },
86
+
87
+ "jp_marine_day_substitute(year)" => Proc.new { |year|
88
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 7, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 7, 3, 1))
89
+ },
90
+
91
+ "jp_national_culture_day(year)" => Proc.new { |year|
92
+ day =
93
+ case year
94
+ when 1851..1899
95
+ 22.2588
96
+ when 1900..1979
97
+ 23.2588
98
+ when 1980..2099
99
+ 23.2488
100
+ when 2100..2150
101
+ 24.2488
102
+ else
103
+ raise IndexError.new("Out of range")
104
+ end
105
+ day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
106
+ day = day.floor
107
+ Date.civil(year, 9, day)
108
+ },
109
+
110
+ "jp_national_culture_day_substitute(year)" => Proc.new { |year|
111
+ date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
112
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
113
+ },
114
+
115
+ "jp_citizens_holiday(year)" => Proc.new { |year|
116
+ year < 2003 and return nil
117
+ ncd = Holidays::DefinitionFactory.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
118
+ if ncd.wday == 3
119
+ ncd - 1
120
+ else
121
+ nil
106
122
  end
107
-
108
-
109
- def self.jp_mountain_holiday(year)
110
- Date.civil(year, 8, 11)
111
- end
112
-
113
-
114
- def self.jp_substitute_holiday(*date)
115
- return nil unless date[0]
116
- date = date[0].kind_of?(Date) ? date.first : Date.civil(*date)
117
- date.wday == 0 ? Holidays.jp_next_weekday(date+1) : nil
123
+ },
124
+
125
+ "jp_mountain_holiday(year)" => Proc.new { |year|
126
+ return nil if year < 2016
127
+ Date.civil(year, 8, 11)
128
+ },
129
+
130
+ "jp_mountain_holiday_substitute(year)" => Proc.new { |year|
131
+ date = Holidays::DefinitionFactory.custom_methods_repository.find("jp_mountain_holiday(year)").call(year)
132
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
133
+ },
134
+
135
+ "jp_respect_for_aged_holiday_substitute(year)" => Proc.new { |year|
136
+ Holidays::DefinitionFactory.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 9, Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 9, 3, 1))
137
+ },
138
+
139
+ "jp_substitute_holiday(year, month, day)" => Proc.new { |year, month, day|
140
+ date = Date.civil(year, month, day)
141
+ date.wday == 0 ? (Holidays::DefinitionFactory.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : nil
142
+ },
143
+
144
+ "jp_next_weekday(date)" => Proc.new { |date|
145
+ is_holiday = Holidays::JP.holidays_by_month[date.month].any? do |holiday|
146
+ holiday[:mday] == date.day
118
147
  end
148
+ date.wday == 0 || is_holiday ? (Holidays::DefinitionFactory.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : date
149
+ },
119
150
 
120
151
 
121
- def self.jp_next_weekday(date)
122
- is_holiday = Holidays::JP.holidays_by_month[date.month].any? do |holiday|
123
- holiday[:mday] == date.day
152
+ }
153
+ end
124
154
  end
125
- date.wday == 0 || is_holiday ? Holidays.jp_next_weekday(date+1) : date
126
- end
127
-
128
-
129
-
130
155
  end
131
-
132
- Holidays.merge_defs(Holidays::JP.defined_regions, Holidays::JP.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/li'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module LI # :nodoc:
15
15
  def self.defined_regions
16
16
  [:li]
@@ -18,13 +18,13 @@ module Holidays
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
- 0 => [{:function => lambda { |year| Holidays.easter(year)-47 }, :function_id => "easter(year)-47", :name => "Fasnachtsdienstag", :regions => [:li]},
22
- {:function => lambda { |year| Holidays.easter(year)-2 }, :function_id => "easter(year)-2", :name => "Karfreitag", :regions => [:li]},
23
- {:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :type => :informal, :name => "Ostern", :regions => [:li]},
24
- {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Ostermontag", :regions => [:li]},
25
- {:function => lambda { |year| Holidays.easter(year)+39 }, :function_id => "easter(year)+39", :name => "Auffahrt", :regions => [:li]},
26
- {:function => lambda { |year| Holidays.easter(year)+50 }, :function_id => "easter(year)+50", :name => "Pfingstmontag", :regions => [:li]},
27
- {:function => lambda { |year| Holidays.easter(year)+60 }, :function_id => "easter(year)+60", :name => "Fronleichnam", :regions => [:li]}],
21
+ 0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -47, :name => "Fasnachtsdienstag", :regions => [:li]},
22
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :name => "Karfreitag", :regions => [:li]},
23
+ {:function => "easter(year)", :function_arguments => [:year], :type => :informal, :name => "Ostern", :regions => [:li]},
24
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Ostermontag", :regions => [:li]},
25
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 39, :name => "Auffahrt", :regions => [:li]},
26
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 50, :name => "Pfingstmontag", :regions => [:li]},
27
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 60, :name => "Fronleichnam", :regions => [:li]}],
28
28
  1 => [{:mday => 1, :name => "Neujahrstag", :regions => [:li]},
29
29
  {:mday => 6, :name => "Heilige Drei Könige", :regions => [:li]}],
30
30
  2 => [{:mday => 2, :name => "Maria Lichtmess", :regions => [:li]}],
@@ -40,9 +40,11 @@ module Holidays
40
40
  {:mday => 31, :name => "Silvester", :regions => [:li]}]
41
41
  }
42
42
  end
43
- end
44
-
45
43
 
44
+ def self.custom_methods
45
+ {
46
+
47
+ }
48
+ end
49
+ end
46
50
  end
47
-
48
- Holidays.merge_defs(Holidays::LI.defined_regions, Holidays::LI.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/lt'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module LT # :nodoc:
15
15
  def self.defined_regions
16
16
  [:lt]
@@ -18,8 +18,8 @@ module Holidays
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
- 0 => [{:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :name => "Šv. Velykos", :regions => [:lt]},
22
- {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Antroji Velykų diena", :regions => [:lt]}],
21
+ 0 => [{:function => "easter(year)", :function_arguments => [:year], :name => "Šv. Velykos", :regions => [:lt]},
22
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Antroji Velykų diena", :regions => [:lt]}],
23
23
  1 => [{:mday => 1, :name => "Naujieji metai", :regions => [:lt]}],
24
24
  2 => [{:mday => 16, :name => "Valstybės atkūrimo diena", :regions => [:lt]}],
25
25
  3 => [{:mday => 11, :name => "Nepriklausomybės atkūrimo diena", :regions => [:lt]}],
@@ -33,9 +33,11 @@ module Holidays
33
33
  {:mday => 26, :name => "Antroji Kalėdų diena", :regions => [:lt]}]
34
34
  }
35
35
  end
36
- end
37
-
38
36
 
37
+ def self.custom_methods
38
+ {
39
+
40
+ }
41
+ end
42
+ end
39
43
  end
40
-
41
- Holidays.merge_defs(Holidays::LT.defined_regions, Holidays::LT.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/ma'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module MA # :nodoc:
15
15
  def self.defined_regions
16
16
  [:ma]
@@ -29,9 +29,11 @@ module Holidays
29
29
  {:mday => 18, :name => "Eid Al Istiqulal", :regions => [:ma]}]
30
30
  }
31
31
  end
32
- end
33
-
34
32
 
33
+ def self.custom_methods
34
+ {
35
+
36
+ }
37
+ end
38
+ end
35
39
  end
36
-
37
- Holidays.merge_defs(Holidays::MA.defined_regions, Holidays::MA.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/mx'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module MX # :nodoc:
15
15
  def self.defined_regions
16
16
  [:mx, :mx_pue, :us, :ca]
@@ -50,9 +50,11 @@ module Holidays
50
50
  {:mday => 28, :name => "Los Santos Inocentes", :regions => [:mx]}]
51
51
  }
52
52
  end
53
- end
54
-
55
53
 
54
+ def self.custom_methods
55
+ {
56
+
57
+ }
58
+ end
59
+ end
56
60
  end
57
-
58
- Holidays.merge_defs(Holidays::MX.defined_regions, Holidays::MX.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/nerc'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module NERC # :nodoc:
15
15
  def self.defined_regions
16
16
  [:nerc]
@@ -18,17 +18,19 @@ module Holidays
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
- 1 => [{:mday => 1, :observed => lambda { |date| Holidays.to_monday_if_sunday(date) }, :observed_id => "to_monday_if_sunday", :name => "New Year's Day", :regions => [:nerc]}],
21
+ 1 => [{:mday => 1, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "New Year's Day", :regions => [:nerc]}],
22
22
  5 => [{:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:nerc]}],
23
- 7 => [{:mday => 4, :observed => lambda { |date| Holidays.to_monday_if_sunday(date) }, :observed_id => "to_monday_if_sunday", :name => "Independence Day", :regions => [:nerc]}],
23
+ 7 => [{:mday => 4, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Independence Day", :regions => [:nerc]}],
24
24
  9 => [{:wday => 1, :week => 1, :name => "Labor Day", :regions => [:nerc]}],
25
25
  11 => [{:wday => 4, :week => 4, :name => "Thanksgiving", :regions => [:nerc]}],
26
- 12 => [{:mday => 25, :observed => lambda { |date| Holidays.to_monday_if_sunday(date) }, :observed_id => "to_monday_if_sunday", :name => "Christmas Day", :regions => [:nerc]}]
26
+ 12 => [{:mday => 25, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:nerc]}]
27
27
  }
28
28
  end
29
- end
30
-
31
29
 
30
+ def self.custom_methods
31
+ {
32
+
33
+ }
34
+ end
35
+ end
32
36
  end
33
-
34
- Holidays.merge_defs(Holidays::NERC.defined_regions, Holidays::NERC.holidays_by_month)
@@ -10,7 +10,7 @@ module Holidays
10
10
  # require 'holidays'
11
11
  # require 'generated_definitions/nl'
12
12
  #
13
- # All the definitions are available at https://github.com/alexdunae/holidays
13
+ # All the definitions are available at https://github.com/holidays/holidays
14
14
  module NL # :nodoc:
15
15
  def self.defined_regions
16
16
  [:nl]
@@ -18,24 +18,26 @@ module Holidays
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
- 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :function_id => "easter(year)-2", :type => :informal, :name => "Goede Vrijdag", :regions => [:nl]},
22
- {:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :name => "Pasen", :regions => [:nl]},
23
- {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Pasen", :regions => [:nl]},
24
- {:function => lambda { |year| Holidays.easter(year)+39 }, :function_id => "easter(year)+39", :name => "Hemelvaartsdag", :regions => [:nl]},
25
- {:function => lambda { |year| Holidays.easter(year)+49 }, :function_id => "easter(year)+49", :name => "Pinksteren", :regions => [:nl]},
26
- {:function => lambda { |year| Holidays.easter(year)+50 }, :function_id => "easter(year)+50", :name => "Pinksteren", :regions => [:nl]}],
21
+ 0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :type => :informal, :name => "Goede Vrijdag", :regions => [:nl]},
22
+ {:function => "easter(year)", :function_arguments => [:year], :name => "Eerste Pasen", :regions => [:nl]},
23
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Tweede Pasen", :regions => [:nl]},
24
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 39, :name => "Hemelvaartsdag", :regions => [:nl]},
25
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 49, :name => "Eerste Pinksteren", :regions => [:nl]},
26
+ {:function => "easter(year)", :function_arguments => [:year], :function_modifier => 50, :name => "Tweede Pinksteren", :regions => [:nl]}],
27
27
  1 => [{:mday => 1, :name => "Nieuwjaar", :regions => [:nl]}],
28
28
  4 => [{:mday => 27, :name => "Koningsdag", :regions => [:nl]}],
29
29
  5 => [{:mday => 4, :type => :informal, :name => "Dodenherdenking", :regions => [:nl]},
30
30
  {:mday => 5, :name => "Bevrijdingsdag", :regions => [:nl]}],
31
31
  12 => [{:mday => 5, :type => :informal, :name => "Sinterklaas", :regions => [:nl]},
32
- {:mday => 25, :name => "Kerstmis", :regions => [:nl]},
33
- {:mday => 26, :name => "Kerstmis", :regions => [:nl]}]
32
+ {:mday => 25, :name => "Eerste Kerstmis", :regions => [:nl]},
33
+ {:mday => 26, :name => "Tweede Kerstmis", :regions => [:nl]}]
34
34
  }
35
35
  end
36
- end
37
-
38
36
 
37
+ def self.custom_methods
38
+ {
39
+
40
+ }
41
+ end
42
+ end
39
43
  end
40
-
41
- Holidays.merge_defs(Holidays::NL.defined_regions, Holidays::NL.holidays_by_month)