holidays 3.3.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -0
- data/CONTRIBUTING.md +37 -0
- data/README.md +16 -25
- data/REFERENCES +4 -1
- data/Rakefile +38 -8
- data/benchmark.rb +8 -0
- data/definitions/README.md +187 -8
- data/definitions/ar.yaml +2 -1
- data/definitions/at.yaml +17 -13
- data/definitions/au.yaml +65 -60
- data/definitions/be_fr.yaml +14 -10
- data/definitions/be_nl.yaml +8 -4
- data/definitions/bg.yaml +12 -6
- data/definitions/br.yaml +6 -3
- data/definitions/ca.yaml +8 -6
- data/definitions/ch.yaml +21 -15
- data/definitions/cl.yaml +4 -2
- data/definitions/cr.yaml +5 -3
- data/definitions/cz.yaml +4 -2
- data/definitions/de.yaml +25 -14
- data/definitions/dk.yaml +26 -17
- data/definitions/ecb_target.yaml +4 -2
- data/definitions/el.yaml +23 -18
- data/definitions/es.yaml +31 -28
- data/definitions/federal_reserve.yaml +12 -12
- data/definitions/fedex.yaml +6 -6
- data/definitions/fi.yaml +26 -25
- data/definitions/fr.yaml +8 -4
- data/definitions/gb.yaml +9 -7
- data/definitions/hr.yaml +8 -6
- data/definitions/hu.yaml +8 -6
- data/definitions/ie.yaml +17 -16
- data/definitions/index.yaml +1 -1
- data/definitions/is.yaml +29 -19
- data/definitions/it.yaml +10 -9
- data/definitions/jp.yaml +92 -44
- data/definitions/li.yaml +25 -20
- data/definitions/lt.yaml +2 -1
- data/definitions/ma.yaml +7 -7
- data/definitions/mx.yaml +11 -11
- data/definitions/nerc.yaml +6 -6
- data/definitions/nl.yaml +22 -18
- data/definitions/no.yaml +19 -11
- data/definitions/north_america_informal.yaml +6 -6
- data/definitions/nyse.yaml +9 -8
- data/definitions/nz.yaml +33 -29
- data/definitions/ph.yaml +15 -8
- data/definitions/pl.yaml +27 -17
- data/definitions/pt.yaml +4 -2
- data/definitions/ro.yaml +21 -18
- data/definitions/se.yaml +24 -18
- data/definitions/sg.yaml +10 -9
- data/definitions/si.yaml +4 -2
- data/definitions/sk.yaml +4 -2
- data/definitions/united_nations.yaml +12 -12
- data/definitions/ups.yaml +6 -6
- data/definitions/us.yaml +12 -11
- data/definitions/ve.yaml +8 -4
- data/definitions/vi.yaml +6 -6
- data/definitions/za.yaml +26 -24
- data/holidays.gemspec +3 -1
- data/lib/generated_definitions/MANIFEST +1 -1
- data/lib/generated_definitions/ar.rb +8 -6
- data/lib/generated_definitions/at.rb +11 -9
- data/lib/generated_definitions/au.rb +75 -99
- data/lib/generated_definitions/be.rb +12 -10
- data/lib/generated_definitions/be_fr.rb +12 -10
- data/lib/generated_definitions/be_nl.rb +12 -10
- data/lib/generated_definitions/bg.rb +14 -13
- data/lib/generated_definitions/br.rb +11 -9
- data/lib/generated_definitions/ca.rb +20 -20
- data/lib/generated_definitions/ch.rb +41 -44
- data/lib/generated_definitions/cl.rb +9 -7
- data/lib/generated_definitions/cr.rb +9 -7
- data/lib/generated_definitions/cz.rb +9 -6
- data/lib/generated_definitions/de.rb +25 -25
- data/lib/generated_definitions/dk.rb +17 -15
- data/lib/generated_definitions/ecb_target.rb +9 -7
- data/lib/generated_definitions/el.rb +13 -11
- data/lib/generated_definitions/es.rb +35 -33
- data/lib/generated_definitions/europe.rb +234 -247
- data/lib/generated_definitions/federal_reserve.rb +11 -9
- data/lib/generated_definitions/fedex.rb +42 -0
- data/lib/generated_definitions/fi.rb +32 -36
- data/lib/generated_definitions/fr.rb +12 -10
- data/lib/generated_definitions/gb.rb +15 -13
- data/lib/generated_definitions/hr.rb +10 -8
- data/lib/generated_definitions/hu.rb +9 -7
- data/lib/generated_definitions/ie.rb +17 -17
- data/lib/generated_definitions/is.rb +26 -26
- data/lib/generated_definitions/it.rb +9 -7
- data/lib/generated_definitions/jp.rb +112 -89
- data/lib/generated_definitions/li.rb +14 -12
- data/lib/generated_definitions/lt.rb +9 -7
- data/lib/generated_definitions/ma.rb +7 -5
- data/lib/generated_definitions/mx.rb +7 -5
- data/lib/generated_definitions/nerc.rb +10 -8
- data/lib/generated_definitions/nl.rb +15 -13
- data/lib/generated_definitions/no.rb +16 -14
- data/lib/generated_definitions/north_america.rb +34 -37
- data/lib/generated_definitions/nyse.rb +10 -8
- data/lib/generated_definitions/nz.rb +40 -40
- data/lib/generated_definitions/ph.rb +17 -13
- data/lib/generated_definitions/pl.rb +25 -27
- data/lib/generated_definitions/pt.rb +10 -8
- data/lib/generated_definitions/ro.rb +11 -9
- data/lib/generated_definitions/scandinavia.rb +92 -102
- data/lib/generated_definitions/se.rb +25 -27
- data/lib/generated_definitions/sg.rb +11 -9
- data/lib/generated_definitions/si.rb +10 -8
- data/lib/generated_definitions/sk.rb +9 -7
- data/lib/generated_definitions/united_nations.rb +7 -5
- data/lib/generated_definitions/ups.rb +13 -12
- data/lib/generated_definitions/us.rb +20 -21
- data/lib/generated_definitions/ve.rb +11 -9
- data/lib/generated_definitions/vi.rb +7 -5
- data/lib/generated_definitions/za.rb +19 -17
- data/lib/holidays.rb +20 -83
- data/lib/holidays/date_calculator/weekend_modifier.rb +22 -5
- data/lib/holidays/definition/context/generator.rb +67 -29
- data/lib/holidays/definition/context/merger.rb +8 -8
- data/lib/holidays/definition/decorator/custom_method_proc.rb +28 -0
- data/lib/holidays/definition/decorator/custom_method_source.rb +30 -0
- data/lib/holidays/definition/entity/custom_method.rb +11 -0
- data/lib/holidays/definition/parser/custom_method.rb +69 -0
- data/lib/holidays/definition/repository/custom_methods.rb +27 -0
- data/lib/holidays/definition/repository/holidays_by_month.rb +1 -1
- data/lib/holidays/definition/repository/{proc_cache.rb → proc_result_cache.rb} +19 -4
- data/lib/holidays/definition/validator/custom_method.rb +31 -0
- data/lib/holidays/definition_factory.rb +42 -6
- data/lib/holidays/errors.rb +6 -0
- data/lib/holidays/load_all_definitions.rb +57 -0
- data/lib/holidays/option/context/parse_options.rb +26 -16
- data/lib/holidays/option_factory.rb +1 -0
- data/lib/holidays/use_case/context/between.rb +41 -14
- data/lib/holidays/use_case_factory.rb +2 -1
- data/lib/holidays/version.rb +1 -1
- data/test/data/test_single_custom_holiday_with_custom_procs.yaml +24 -0
- data/test/defs/test_defs_at.rb +1 -1
- data/test/defs/test_defs_au.rb +3 -2
- data/test/defs/test_defs_cr.rb +1 -0
- data/test/defs/test_defs_cz.rb +1 -0
- data/test/defs/test_defs_dk.rb +2 -2
- data/test/defs/test_defs_el.rb +7 -6
- data/test/defs/test_defs_europe.rb +40 -33
- data/test/defs/test_defs_fedex.rb +24 -0
- data/test/defs/test_defs_fi.rb +4 -3
- data/test/defs/test_defs_hr.rb +2 -2
- data/test/defs/test_defs_hu.rb +2 -2
- data/test/defs/test_defs_is.rb +2 -1
- data/test/defs/test_defs_it.rb +2 -1
- data/test/defs/test_defs_jp.rb +1 -1
- data/test/defs/test_defs_li.rb +1 -1
- data/test/defs/test_defs_ma.rb +2 -1
- data/test/defs/test_defs_mx.rb +4 -3
- data/test/defs/test_defs_nl.rb +7 -6
- data/test/defs/test_defs_no.rb +1 -0
- data/test/defs/test_defs_north_america.rb +4 -3
- data/test/defs/test_defs_nyse.rb +2 -1
- data/test/defs/test_defs_pl.rb +1 -0
- data/test/defs/test_defs_ro.rb +11 -11
- data/test/defs/test_defs_scandinavia.rb +12 -8
- data/test/defs/test_defs_se.rb +3 -2
- data/test/defs/test_defs_sg.rb +2 -1
- data/test/defs/test_defs_vi.rb +1 -1
- data/test/defs/test_defs_za.rb +3 -2
- data/test/holidays/date_calculator/test_weekend_modifier.rb +11 -0
- data/test/holidays/definition/context/test_generator.rb +64 -5
- data/test/holidays/definition/context/test_merger.rb +5 -2
- data/test/holidays/definition/decorator/test_custom_method_proc.rb +113 -0
- data/test/holidays/definition/decorator/test_custom_method_source.rb +96 -0
- data/test/holidays/definition/parser/test_custom_method.rb +79 -0
- data/test/holidays/definition/repository/test_custom_methods.rb +43 -0
- data/test/holidays/definition/repository/test_holidays_by_month.rb +0 -32
- data/test/holidays/definition/repository/test_proc_result_cache.rb +84 -0
- data/test/holidays/definition/validator/test_custom_method.rb +89 -0
- data/test/holidays/option/context/test_parse_options.rb +5 -0
- data/test/holidays/test_definition_factory.rb +17 -2
- data/test/holidays/use_case/context/test_between.rb +2 -0
- data/test/test_all_regions.rb +7 -49
- data/test/test_custom_holidays.rb +8 -2
- data/test/test_helper.rb +9 -2
- data/test/test_holidays.rb +9 -29
- metadata +46 -11
- data/lib/generated_definitions/fed_ex.rb +0 -41
- data/test/holidays/definition/repository/test_proc_cache.rb +0 -29
- data/test/test_parse_definitions.rb +0 -30
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/sk'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module SK # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:sk]
|
@@ -18,8 +18,8 @@ module Holidays
|
|
18
18
|
|
19
19
|
def self.holidays_by_month
|
20
20
|
{
|
21
|
-
0 => [{:function =>
|
22
|
-
{:function =>
|
21
|
+
0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Veľkonočný pondelok", :regions => [:sk]},
|
22
|
+
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :name => "Veľký piatok", :regions => [:sk]}],
|
23
23
|
1 => [{:mday => 1, :name => "Nový rok", :regions => [:sk]},
|
24
24
|
{:mday => 6, :name => "Zjavenie Pána (Traja králi)", :regions => [:sk]}],
|
25
25
|
5 => [{:mday => 1, :name => "Sviatok práce", :regions => [:sk]},
|
@@ -35,9 +35,11 @@ module Holidays
|
|
35
35
|
{:mday => 26, :name => "2. sviatok vianočný", :regions => [:sk]}]
|
36
36
|
}
|
37
37
|
end
|
38
|
-
end
|
39
|
-
|
40
38
|
|
39
|
+
def self.custom_methods
|
40
|
+
{
|
41
|
+
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
41
45
|
end
|
42
|
-
|
43
|
-
Holidays.merge_defs(Holidays::SK.defined_regions, Holidays::SK.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/united_nations'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module UNITED_NATIONS # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:united_nations]
|
@@ -77,9 +77,11 @@ module Holidays
|
|
77
77
|
{:mday => 18, :name => "International Migrants Day", :regions => [:united_nations]}]
|
78
78
|
}
|
79
79
|
end
|
80
|
-
end
|
81
|
-
|
82
80
|
|
81
|
+
def self.custom_methods
|
82
|
+
{
|
83
|
+
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
83
87
|
end
|
84
|
-
|
85
|
-
Holidays.merge_defs(Holidays::UNITED_NATIONS.defined_regions, Holidays::UNITED_NATIONS.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/ups'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module UPS # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:ups]
|
@@ -18,24 +18,25 @@ module Holidays
|
|
18
18
|
|
19
19
|
def self.holidays_by_month
|
20
20
|
{
|
21
|
-
1 => [{:mday => 1, :observed =>
|
21
|
+
1 => [{:mday => 1, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "New Year's Day", :regions => [:ups]}],
|
22
22
|
5 => [{:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:ups]}],
|
23
|
-
7 => [{:mday => 4, :observed =>
|
23
|
+
7 => [{:mday => 4, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Independence Day", :regions => [:ups]}],
|
24
24
|
9 => [{:wday => 1, :week => 1, :name => "Labor Day", :regions => [:ups]}],
|
25
25
|
11 => [{:wday => 4, :week => 4, :name => "Thanksgiving", :regions => [:ups]},
|
26
|
-
{:function =>
|
27
|
-
12 => [{:mday => 25, :observed =>
|
26
|
+
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Day After Thanksgiving", :regions => [:ups]}],
|
27
|
+
12 => [{:mday => 25, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:ups]},
|
28
28
|
{:mday => 31, :name => "New Year's Eve", :regions => [:ups]}]
|
29
29
|
}
|
30
30
|
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.day_after_thanksgiving(year)
|
34
|
-
Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 11, 4, 4) + 1
|
35
|
-
end
|
36
31
|
|
32
|
+
def self.custom_methods
|
33
|
+
{
|
34
|
+
"day_after_thanksgiving(year)" => Proc.new { |year|
|
35
|
+
Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 11, 4, 4) + 1
|
36
|
+
},
|
37
37
|
|
38
38
|
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
39
42
|
end
|
40
|
-
|
41
|
-
Holidays.merge_defs(Holidays::UPS.defined_regions, Holidays::UPS.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/us'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module US # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:us, :us_dc, :us_ca, :ca]
|
@@ -18,11 +18,11 @@ module Holidays
|
|
18
18
|
|
19
19
|
def self.holidays_by_month
|
20
20
|
{
|
21
|
-
0 => [{:function =>
|
22
|
-
{:function =>
|
23
|
-
1 => [{:mday => 1, :observed =>
|
21
|
+
0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :type => :informal, :name => "Good Friday", :regions => [:us]},
|
22
|
+
{:function => "easter(year)", :function_arguments => [:year], :type => :informal, :name => "Easter Sunday", :regions => [:us]}],
|
23
|
+
1 => [{:mday => 1, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "New Year's Day", :regions => [:us]},
|
24
24
|
{:wday => 1, :week => 3, :name => "Martin Luther King, Jr. Day", :regions => [:us]},
|
25
|
-
{:function =>
|
25
|
+
{:function => "us_inauguration_day(year)", :function_arguments => [:year], :name => "Inauguration Day", :regions => [:us_dc]}],
|
26
26
|
2 => [{:wday => 1, :week => 3, :name => "Presidents' Day", :regions => [:us]},
|
27
27
|
{:mday => 2, :type => :informal, :name => "Groundhog Day", :regions => [:us, :ca]},
|
28
28
|
{:mday => 14, :type => :informal, :name => "Valentine's Day", :regions => [:us, :ca]}],
|
@@ -31,33 +31,32 @@ module Holidays
|
|
31
31
|
5 => [{:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:us]},
|
32
32
|
{:wday => 0, :week => 2, :type => :informal, :name => "Mother's Day", :regions => [:us, :ca]},
|
33
33
|
{:wday => 6, :week => 3, :type => :informal, :name => "Armed Forces Day", :regions => [:us]}],
|
34
|
-
7 => [{:mday => 4, :observed =>
|
34
|
+
7 => [{:mday => 4, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Independence Day", :regions => [:us]}],
|
35
35
|
9 => [{:wday => 1, :week => 1, :name => "Labor Day", :regions => [:us]}],
|
36
36
|
10 => [{:wday => 1, :week => 2, :name => "Columbus Day", :regions => [:us]},
|
37
37
|
{:mday => 31, :type => :informal, :name => "Halloween", :regions => [:us, :ca]}],
|
38
|
-
11 => [{:mday => 11, :observed =>
|
38
|
+
11 => [{:mday => 11, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Veterans Day", :regions => [:us]},
|
39
39
|
{:wday => 4, :week => 4, :name => "Thanksgiving", :regions => [:us]},
|
40
|
-
{:function =>
|
41
|
-
12 => [{:mday => 25, :observed =>
|
40
|
+
{:function => "day_after_thanksgiving(year)", :function_arguments => [:year], :name => "Day after Thanksgiving", :regions => [:us_ca]}],
|
41
|
+
12 => [{:mday => 25, :observed => "to_weekday_if_weekend(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:us]}],
|
42
42
|
4 => [{:mday => 1, :type => :informal, :name => "April Fool's Day", :regions => [:us, :ca]},
|
43
43
|
{:mday => 22, :type => :informal, :name => "Earth Day", :regions => [:us, :ca]}],
|
44
44
|
6 => [{:wday => 0, :week => 3, :type => :informal, :name => "Father's Day", :regions => [:us, :ca]}]
|
45
45
|
}
|
46
46
|
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# January 20, every fourth year, following Presidential election
|
50
|
-
def self.us_inauguration_day(year)
|
51
|
-
year % 4 == 1 ? 20 : nil
|
52
|
-
end
|
53
47
|
|
48
|
+
def self.custom_methods
|
49
|
+
{
|
50
|
+
"us_inauguration_day(year)" => Proc.new { |year|
|
51
|
+
year % 4 == 1 ? 20 : nil
|
52
|
+
},
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
"day_after_thanksgiving(year)" => Proc.new { |year|
|
55
|
+
Holidays::DateCalculatorFactory.day_of_month_calculator.call(year, 11, 4, 4) + 1
|
56
|
+
},
|
59
57
|
|
60
58
|
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end
|
61
62
|
end
|
62
|
-
|
63
|
-
Holidays.merge_defs(Holidays::US.defined_regions, Holidays::US.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/ve'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module VE # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:ve]
|
@@ -18,10 +18,10 @@ module Holidays
|
|
18
18
|
|
19
19
|
def self.holidays_by_month
|
20
20
|
{
|
21
|
-
0 => [{:function =>
|
22
|
-
{:function =>
|
23
|
-
{:function =>
|
24
|
-
{:function =>
|
21
|
+
0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -48, :name => "Lunes Carnaval", :regions => [:ve]},
|
22
|
+
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -47, :name => "Martes Carnaval", :regions => [:ve]},
|
23
|
+
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -3, :name => "Jueves Santo", :regions => [:ve]},
|
24
|
+
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :name => "Viernes Santo", :regions => [:ve]}],
|
25
25
|
1 => [{:mday => 1, :name => "Año Nuevo", :regions => [:ve]}],
|
26
26
|
4 => [{:mday => 19, :name => "Declaración Independencia", :regions => [:ve]}],
|
27
27
|
5 => [{:mday => 1, :name => "Día del Trabajador", :regions => [:ve]}],
|
@@ -32,9 +32,11 @@ module Holidays
|
|
32
32
|
12 => [{:mday => 25, :name => "Día de Navidad", :regions => [:ve]}]
|
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::VE.defined_regions, Holidays::VE.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/vi'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module VI # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:vi]
|
@@ -24,9 +24,11 @@ module Holidays
|
|
24
24
|
9 => [{:mday => 2, :name => "National Day", :regions => [:vi]}]
|
25
25
|
}
|
26
26
|
end
|
27
|
-
end
|
28
|
-
|
29
27
|
|
28
|
+
def self.custom_methods
|
29
|
+
{
|
30
|
+
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
30
34
|
end
|
31
|
-
|
32
|
-
Holidays.merge_defs(Holidays::VI.defined_regions, Holidays::VI.holidays_by_month)
|
@@ -10,7 +10,7 @@ module Holidays
|
|
10
10
|
# require 'holidays'
|
11
11
|
# require 'generated_definitions/za'
|
12
12
|
#
|
13
|
-
# All the definitions are available at https://github.com/
|
13
|
+
# All the definitions are available at https://github.com/holidays/holidays
|
14
14
|
module ZA # :nodoc:
|
15
15
|
def self.defined_regions
|
16
16
|
[:za]
|
@@ -18,23 +18,25 @@ module Holidays
|
|
18
18
|
|
19
19
|
def self.holidays_by_month
|
20
20
|
{
|
21
|
-
0 => [{:function =>
|
22
|
-
{:function =>
|
23
|
-
1 => [{:mday => 1, :observed =>
|
24
|
-
3 => [{:mday => 21, :observed =>
|
25
|
-
4 => [{:mday => 27, :observed =>
|
26
|
-
5 => [{:mday => 1, :observed =>
|
27
|
-
6 => [{:mday => 16, :observed =>
|
28
|
-
8 => [{:mday => 9, :observed =>
|
29
|
-
9 => [{:mday => 24, :observed =>
|
30
|
-
12 => [{:mday => 16, :observed =>
|
31
|
-
{:mday => 25, :observed =>
|
32
|
-
{:mday => 26, :observed =>
|
21
|
+
0 => [{:function => "easter(year)", :function_arguments => [:year], :function_modifier => -2, :name => "Good Friday", :regions => [:za]},
|
22
|
+
{:function => "easter(year)", :function_arguments => [:year], :function_modifier => 1, :name => "Family Day", :regions => [:za]}],
|
23
|
+
1 => [{:mday => 1, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "New Year's Day", :regions => [:za]}],
|
24
|
+
3 => [{:mday => 21, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Human Rights Day", :regions => [:za]}],
|
25
|
+
4 => [{:mday => 27, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Freedom Day", :regions => [:za]}],
|
26
|
+
5 => [{:mday => 1, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Workers Day", :regions => [:za]}],
|
27
|
+
6 => [{:mday => 16, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Youth Day", :regions => [:za]}],
|
28
|
+
8 => [{:mday => 9, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "National Women's Day", :regions => [:za]}],
|
29
|
+
9 => [{:mday => 24, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Heritage Day", :regions => [:za]}],
|
30
|
+
12 => [{:mday => 16, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Day of Reconciliation", :regions => [:za]},
|
31
|
+
{:mday => 25, :observed => "to_monday_if_sunday(date)", :observed_arguments => [:date], :name => "Christmas Day", :regions => [:za]},
|
32
|
+
{:mday => 26, :observed => "to_weekday_if_boxing_weekend(date)", :observed_arguments => [:date], :name => "Day of Goodwill", :regions => [:za]}]
|
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::ZA.defined_regions, Holidays::ZA.holidays_by_month)
|
data/lib/holidays.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
## encoding: utf-8
|
2
2
|
$:.unshift File.dirname(__FILE__)
|
3
3
|
|
4
4
|
require 'date'
|
@@ -7,6 +7,8 @@ require 'holidays/definition_factory'
|
|
7
7
|
require 'holidays/date_calculator_factory'
|
8
8
|
require 'holidays/option_factory'
|
9
9
|
require 'holidays/use_case_factory'
|
10
|
+
require 'holidays/errors'
|
11
|
+
require 'holidays/load_all_definitions'
|
10
12
|
|
11
13
|
# == Region options
|
12
14
|
# Holidays can be defined as belonging to one or more regions and sub regions.
|
@@ -47,9 +49,6 @@ require 'holidays/use_case_factory'
|
|
47
49
|
#
|
48
50
|
# Holidays.between(from, to, :ca_bc, :informal)
|
49
51
|
module Holidays
|
50
|
-
# Exception thrown when an unknown region is requested.
|
51
|
-
class UnknownRegionError < ArgumentError; end
|
52
|
-
|
53
52
|
WEEKS = {:first => 1, :second => 2, :third => 3, :fourth => 4, :fifth => 5, :last => -1, :second_last => -2, :third_last => -3}
|
54
53
|
MONTH_LENGTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
55
54
|
DAY_SYMBOLS = Date::DAYNAMES.collect { |n| n.downcase.intern }
|
@@ -78,7 +77,7 @@ module Holidays
|
|
78
77
|
#
|
79
78
|
# The given Date can be any day of the week.
|
80
79
|
# Returns true if any holidays fall on Monday - Friday of the given week.
|
81
|
-
def
|
80
|
+
def any_holidays_during_work_week?(date, *options)
|
82
81
|
days_to_monday = date.wday - 1
|
83
82
|
days_to_friday = 5 - date.wday
|
84
83
|
start_date = date - days_to_monday
|
@@ -113,7 +112,7 @@ module Holidays
|
|
113
112
|
|
114
113
|
start_date, end_date = get_date(start_date), get_date(end_date)
|
115
114
|
|
116
|
-
if cached_holidays =
|
115
|
+
if cached_holidays = definition_cache_repository.find(start_date, end_date, options)
|
117
116
|
return cached_holidays
|
118
117
|
end
|
119
118
|
|
@@ -128,93 +127,25 @@ module Holidays
|
|
128
127
|
start_date, end_date = get_date(start_date), get_date(end_date)
|
129
128
|
cache_data = between(start_date, end_date, *options)
|
130
129
|
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
#TODO This should not be publicly available. I need to restructure the public
|
135
|
-
# API for this class to something more sensible.
|
136
|
-
def merge_defs(regions, holidays) # :nodoc:
|
137
|
-
DefinitionFactory.merger.call(regions, holidays)
|
138
|
-
end
|
139
|
-
|
140
|
-
def easter(year)
|
141
|
-
DateCalculatorFactory::Easter::Gregorian.easter_calculator.calculate_easter_for(year)
|
142
|
-
end
|
143
|
-
|
144
|
-
def orthodox_easter(year)
|
145
|
-
DateCalculatorFactory::Easter::Gregorian.easter_calculator.calculate_orthodox_easter_for(year)
|
146
|
-
end
|
147
|
-
|
148
|
-
def orthodox_easter_julian(year)
|
149
|
-
DateCalculatorFactory::Easter::Julian.easter_calculator.calculate_orthodox_easter_for(year)
|
150
|
-
end
|
151
|
-
|
152
|
-
def to_monday_if_sunday(date)
|
153
|
-
DateCalculatorFactory.weekend_modifier.to_monday_if_sunday(date)
|
154
|
-
end
|
155
|
-
|
156
|
-
def to_monday_if_weekend(date)
|
157
|
-
DateCalculatorFactory.weekend_modifier.to_monday_if_weekend(date)
|
158
|
-
end
|
159
|
-
|
160
|
-
def to_weekday_if_boxing_weekend(date)
|
161
|
-
DateCalculatorFactory.weekend_modifier.to_weekday_if_boxing_weekend(date)
|
162
|
-
end
|
163
|
-
|
164
|
-
def to_tuesday_if_sunday_or_monday_if_saturday(year)
|
165
|
-
DateCalculatorFactory.weekend_modifier.to_tuesday_if_sunday_or_monday_if_saturday(year)
|
166
|
-
end
|
167
|
-
|
168
|
-
def xmas_to_weekday_if_weekend(year)
|
169
|
-
DateCalculatorFactory.weekend_modifier.xmas_to_weekday_if_weekend(year)
|
170
|
-
end
|
171
|
-
|
172
|
-
def to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday(year)
|
173
|
-
DateCalculatorFactory.weekend_modifier.to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday(year)
|
174
|
-
end
|
175
|
-
|
176
|
-
def to_weekday_if_boxing_weekend_from_year(year)
|
177
|
-
DateCalculatorFactory.weekend_modifier.to_weekday_if_boxing_weekend_from_year(year)
|
178
|
-
end
|
179
|
-
|
180
|
-
def to_weekday_if_weekend(date)
|
181
|
-
DateCalculatorFactory.weekend_modifier.to_weekday_if_weekend(date)
|
182
|
-
end
|
183
|
-
|
184
|
-
def calculate_day_of_month(year, month, day, wday)
|
185
|
-
DateCalculatorFactory.day_of_month_calculator.call(year, month, day, wday)
|
186
|
-
end
|
187
|
-
|
188
|
-
# Returns an array of symbols all the available holiday definitions.
|
189
|
-
#
|
190
|
-
# Optional `full_path` param is used internally for loading all the definitions.
|
191
|
-
def available(full_path = false)
|
192
|
-
paths = Dir.glob(FULL_DEFINITIONS_PATH + '/*.rb')
|
193
|
-
full_path ? paths : paths.collect { |path| path.match(/([a-z_-]+)\.rb/i)[1].to_sym }
|
130
|
+
definition_cache_repository.cache_between(start_date, end_date, cache_data, options)
|
194
131
|
end
|
195
132
|
|
196
133
|
# Returns an array of symbols of all the available holiday regions.
|
197
|
-
def
|
198
|
-
|
199
|
-
end
|
200
|
-
|
201
|
-
# Load all available holiday definitions
|
202
|
-
def load_all
|
203
|
-
available(true).each { |path| require path }
|
134
|
+
def available_regions
|
135
|
+
Holidays::REGIONS
|
204
136
|
end
|
205
137
|
|
206
138
|
# Parses provided holiday definition file(s) and loads them so that they are immediately available.
|
207
139
|
def load_custom(*files)
|
208
140
|
regions, rules_by_month, custom_methods, tests = DefinitionFactory.file_parser.parse_definition_files(files)
|
209
|
-
merge_defs(regions, rules_by_month)
|
210
|
-
end
|
211
141
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
module_src, test_src = DefinitionFactory.source_generator.generate_definition_source(module_name, files, regions, rules_by_month, custom_methods, tests)
|
142
|
+
custom_methods.each do |method_key, method_entity|
|
143
|
+
custom_methods[method_key] = Holidays::DefinitionFactory.custom_method_proc_decorator.call(method_entity)
|
144
|
+
end
|
216
145
|
|
217
|
-
|
146
|
+
DefinitionFactory.merger.call(regions, rules_by_month, custom_methods)
|
147
|
+
|
148
|
+
rules_by_month
|
218
149
|
end
|
219
150
|
|
220
151
|
private
|
@@ -226,5 +157,11 @@ module Holidays
|
|
226
157
|
Date.civil(date.year, date.mon, date.mday)
|
227
158
|
end
|
228
159
|
end
|
160
|
+
|
161
|
+
def definition_cache_repository
|
162
|
+
DefinitionFactory.cache_repository
|
163
|
+
end
|
229
164
|
end
|
230
165
|
end
|
166
|
+
|
167
|
+
Holidays::LoadAllDefinitions.call
|