holidays 3.3.0 → 4.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.
- 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
|
@@ -27,8 +27,23 @@ class DefinitionFactoryTests < Test::Unit::TestCase
|
|
|
27
27
|
assert Holidays::DefinitionFactory.cache_repository.is_a?(Holidays::Definition::Repository::Cache)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def
|
|
31
|
-
assert Holidays::DefinitionFactory.
|
|
30
|
+
def test_proc_result_cache_repository
|
|
31
|
+
assert Holidays::DefinitionFactory.proc_result_cache_repository.is_a?(Holidays::Definition::Repository::ProcResultCache)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
def test_custom_method_parser
|
|
35
|
+
assert Holidays::DefinitionFactory.custom_method_parser.is_a?(Holidays::Definition::Parser::CustomMethod)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_custom_method_source_decorator
|
|
39
|
+
assert Holidays::DefinitionFactory.custom_method_source_decorator.is_a?(Holidays::Definition::Decorator::CustomMethodSource)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_custom_method_validator
|
|
43
|
+
assert Holidays::DefinitionFactory.custom_method_validator.is_a?(Holidays::Definition::Validator::CustomMethod)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_region_validator
|
|
47
|
+
assert Holidays::DefinitionFactory.region_validator.is_a?(Holidays::Definition::Validator::Region)
|
|
48
|
+
end
|
|
34
49
|
end
|
|
@@ -9,11 +9,13 @@ class BetweenTests < Test::Unit::TestCase
|
|
|
9
9
|
def setup
|
|
10
10
|
@holidays_by_month_repo = mock()
|
|
11
11
|
@day_of_month_calculator = mock()
|
|
12
|
+
@custom_method_repo = mock()
|
|
12
13
|
@proc_cache_repo = mock()
|
|
13
14
|
|
|
14
15
|
@subject = Holidays::UseCase::Context::Between.new(
|
|
15
16
|
@holidays_by_month_repo,
|
|
16
17
|
@day_of_month_calculator,
|
|
18
|
+
@custom_method_repo,
|
|
17
19
|
@proc_cache_repo,
|
|
18
20
|
)
|
|
19
21
|
|
data/test/test_all_regions.rb
CHANGED
|
@@ -1,60 +1,23 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__)) + '/test_helper'
|
|
2
2
|
|
|
3
3
|
class MultipleRegionsTests < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
Holidays::LoadAllDefinitions.call
|
|
6
|
+
end
|
|
4
7
|
|
|
5
8
|
def test_definition_dir
|
|
6
9
|
assert File.directory?(Holidays::FULL_DEFINITIONS_PATH)
|
|
7
10
|
end
|
|
8
11
|
|
|
9
|
-
def
|
|
10
|
-
|
|
11
|
-
assert_equal def_count, defs.size
|
|
12
|
+
def test_show_available_regions
|
|
13
|
+
regions = Holidays.available_regions
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
assert File.exist?(f)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_getting_available_symbols
|
|
20
|
-
defs = Holidays.available(false)
|
|
21
|
-
assert_equal def_count, defs.size
|
|
22
|
-
|
|
23
|
-
defs.each { |f| assert f.kind_of?(Symbol) }
|
|
24
|
-
|
|
25
|
-
# some spot checks
|
|
26
|
-
assert defs.include?(:ca)
|
|
27
|
-
assert defs.include?(:united_nations)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def test_loading_all
|
|
31
|
-
Holidays.load_all
|
|
32
|
-
holidays = Holidays.on(Date.civil(2011, 5, 1), :any)
|
|
33
|
-
|
|
34
|
-
# at least 15 now, but there could be more in the future
|
|
35
|
-
assert holidays.size > 15
|
|
36
|
-
|
|
37
|
-
# some spot checks
|
|
38
|
-
assert holidays.any? { |h| h[:name] == 'Staatsfeiertag' } # :at
|
|
39
|
-
assert holidays.any? { |h| h[:name] == 'Dia do Trabalho' } # :br
|
|
40
|
-
assert holidays.any? { |h| h[:name] == 'Vappu' } # :fi
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def test_getting_regions
|
|
44
|
-
Holidays.load_all
|
|
45
|
-
regions = Holidays.regions
|
|
46
|
-
|
|
47
|
-
assert regions.size > 30
|
|
48
|
-
|
|
49
|
-
assert regions.include? :nyse
|
|
50
|
-
assert regions.include? :united_nations
|
|
15
|
+
assert_equal regions.size, Holidays::REGIONS.size
|
|
16
|
+
assert_equal regions, Holidays::REGIONS
|
|
51
17
|
end
|
|
52
18
|
|
|
53
19
|
def test_load_subregion
|
|
54
|
-
Holidays.send(:remove_const, :DE) #unload de module so that is has to be loaded again
|
|
55
|
-
Holidays.send(:class_variable_set, :@@regions, []) # reset regions
|
|
56
20
|
holidays = Holidays.on(Date.civil(2014, 1, 1), :de_bb)
|
|
57
|
-
|
|
58
21
|
assert holidays.any? { |h| h[:name] == 'Neujahrstag' }
|
|
59
22
|
end
|
|
60
23
|
|
|
@@ -69,9 +32,4 @@ class MultipleRegionsTests < Test::Unit::TestCase
|
|
|
69
32
|
Holidays.between(Date.civil(2014, 1, 1), Date.civil(2016, 1, 1), '../../../../../../../../../../../../tmp/profile_pic.jpg')
|
|
70
33
|
end
|
|
71
34
|
end
|
|
72
|
-
|
|
73
|
-
private
|
|
74
|
-
def def_count
|
|
75
|
-
Dir.glob(Holidays::FULL_DEFINITIONS_PATH + '/*.rb').size
|
|
76
|
-
end
|
|
77
35
|
end
|
|
@@ -7,11 +7,17 @@ class CustomHolidaysTest < Test::Unit::TestCase
|
|
|
7
7
|
Holidays.on(Date.civil(2013,6,20), :custom_single_file)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
Holidays.load_custom('test/data/test_single_custom_holiday_defs.yaml')
|
|
10
|
+
loaded_holidays = Holidays.load_custom('test/data/test_single_custom_holiday_defs.yaml')
|
|
11
11
|
|
|
12
12
|
assert_not_equal [], Holidays.on(Date.civil(2013,6,20), :custom_single_file)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
def test_load_custom_returns_loaded_holidays
|
|
16
|
+
expected_loaded_holidays = {6=>[{:mday=>20, :name=>"Company Founding", :regions=>[:custom_single_file]}]}
|
|
17
|
+
|
|
18
|
+
assert_equal expected_loaded_holidays, Holidays.load_custom('test/data/test_single_custom_holiday_defs.yaml')
|
|
19
|
+
end
|
|
20
|
+
|
|
15
21
|
def test_custom_holidays_present_after_multiple_file_parsing
|
|
16
22
|
assert_raises Holidays::UnknownRegionError do
|
|
17
23
|
Holidays.on(Date.civil(2013, 10,5), :custom_multiple_files)
|
|
@@ -32,4 +38,4 @@ class CustomHolidaysTest < Test::Unit::TestCase
|
|
|
32
38
|
assert_not_equal [], Holidays.on(Date.civil(2013,3,1), :custom_multiple_files_govt)
|
|
33
39
|
end
|
|
34
40
|
|
|
35
|
-
end
|
|
41
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -10,7 +10,12 @@ require 'test/unit'
|
|
|
10
10
|
require 'mocha/test_unit'
|
|
11
11
|
require 'date'
|
|
12
12
|
require 'holidays'
|
|
13
|
-
require
|
|
13
|
+
require 'holidays/core_extensions/date'
|
|
14
|
+
|
|
15
|
+
# Loads core extension for use in various definition tests as necessary
|
|
16
|
+
class Date
|
|
17
|
+
include Holidays::CoreExtensions::Date
|
|
18
|
+
end
|
|
14
19
|
|
|
15
20
|
module Holidays
|
|
16
21
|
# Test region used for generating a holiday on Date.today
|
|
@@ -20,7 +25,9 @@ module Holidays
|
|
|
20
25
|
HOLIDAYS_BY_MONTH = {
|
|
21
26
|
Date.today.mon => [{:mday => Date.today.mday, :name => "Test Holiday", :regions => [:test]}]
|
|
22
27
|
}
|
|
28
|
+
|
|
29
|
+
CUSTOM_METHODS = {}
|
|
23
30
|
end
|
|
24
31
|
end
|
|
25
32
|
|
|
26
|
-
Holidays.
|
|
33
|
+
Holidays::DefinitionFactory.merger.call(Holidays::Test::DEFINED_REGIONS, Holidays::Test::HOLIDAYS_BY_MONTH, Holidays::Test::CUSTOM_METHODS)
|
data/test/test_holidays.rb
CHANGED
|
@@ -19,27 +19,27 @@ class HolidaysTests < Test::Unit::TestCase
|
|
|
19
19
|
assert_equal 0, holidays.length
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def
|
|
22
|
+
def test_any_holidays_during_work_week
|
|
23
23
|
## Full weeks:
|
|
24
24
|
# Try with a Monday
|
|
25
|
-
assert Holidays.
|
|
25
|
+
assert Holidays.any_holidays_during_work_week?(Date.civil(2012,1,23), :us)
|
|
26
26
|
# Try with a Wednesday
|
|
27
|
-
assert Holidays.
|
|
27
|
+
assert Holidays.any_holidays_during_work_week?(Date.civil(2012,1,25), :us)
|
|
28
28
|
# Try Sunday on a week going into a new month
|
|
29
|
-
assert Holidays.
|
|
29
|
+
assert Holidays.any_holidays_during_work_week?(Date.civil(2012,1,29), :us)
|
|
30
30
|
# Try Wednesday on a week going into a new month
|
|
31
|
-
assert Holidays.
|
|
31
|
+
assert Holidays.any_holidays_during_work_week?(Date.civil(2012,2,1), :us)
|
|
32
32
|
|
|
33
33
|
## Weeks with holidays:
|
|
34
34
|
# New Year's 2012 (on Sunday, observed Monday). Test from a Wednesday.
|
|
35
|
-
assert_equal(false, Holidays.
|
|
35
|
+
assert_equal(false, Holidays.any_holidays_during_work_week?(Date.civil(2012,1,4), :us))
|
|
36
36
|
# Ignore observed holidays with :no_observed
|
|
37
|
-
assert Holidays.
|
|
37
|
+
assert Holidays.any_holidays_during_work_week?(Date.civil(2012,1,4), :us, :no_observed)
|
|
38
38
|
# Labor Day 2012 should be Sept 3
|
|
39
|
-
assert_equal(false, Holidays.
|
|
39
|
+
assert_equal(false, Holidays.any_holidays_during_work_week?(Date.civil(2012,9,5), :us))
|
|
40
40
|
# Should be 10 non-full weeks in the year (in the US)
|
|
41
41
|
weeks_in_2012 = Date.commercial(2013, -1).cweek
|
|
42
|
-
holidays_in_2012 = weeks_in_2012.times.count { |week| Holidays.
|
|
42
|
+
holidays_in_2012 = weeks_in_2012.times.count { |week| Holidays.any_holidays_during_work_week?(Date.commercial(2012,week+1), :us) == false }
|
|
43
43
|
assert_equal 10, holidays_in_2012
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -104,26 +104,6 @@ class HolidaysTests < Test::Unit::TestCase
|
|
|
104
104
|
assert_equal 2, holidays.length
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
def test_easter_sunday
|
|
108
|
-
assert_equal '1800-04-13', Holidays.easter(1800).to_s
|
|
109
|
-
assert_equal '1899-04-02', Holidays.easter(1899).to_s
|
|
110
|
-
assert_equal '1900-04-15', Holidays.easter(1900).to_s
|
|
111
|
-
assert_equal '1999-04-04', Holidays.easter(1999).to_s
|
|
112
|
-
assert_equal '2000-04-23', Holidays.easter(2000).to_s
|
|
113
|
-
assert_equal '2025-04-20', Holidays.easter(2025).to_s
|
|
114
|
-
assert_equal '2035-03-25', Holidays.easter(2035).to_s
|
|
115
|
-
assert_equal '2067-04-03', Holidays.easter(2067).to_s
|
|
116
|
-
assert_equal '2099-04-12', Holidays.easter(2099).to_s
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def test_orthodox_easter
|
|
120
|
-
assert_equal '2000-04-30', Holidays.orthodox_easter(2000).to_s
|
|
121
|
-
assert_equal '2008-04-27', Holidays.orthodox_easter(2008).to_s
|
|
122
|
-
assert_equal '2009-04-19', Holidays.orthodox_easter(2009).to_s
|
|
123
|
-
assert_equal '2011-04-24', Holidays.orthodox_easter(2011).to_s
|
|
124
|
-
assert_equal '2020-04-19', Holidays.orthodox_easter(2020).to_s
|
|
125
|
-
end
|
|
126
|
-
|
|
127
107
|
def test_easter_lambda
|
|
128
108
|
[Date.civil(1800,4,11), Date.civil(1899,3,31), Date.civil(1900,4,13),
|
|
129
109
|
Date.civil(2008,3,21), Date.civil(2035,3,23)].each do |date|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: holidays
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alex Dunae
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-04-
|
|
12
|
+
date: 2016-04-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|
|
@@ -81,21 +81,36 @@ dependencies:
|
|
|
81
81
|
- - "~>"
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
83
|
version: '1.0'
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: pry
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - "~>"
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0.10'
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - "~>"
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0.10'
|
|
84
98
|
description: A collection of Ruby methods to deal with statutory and other holidays.
|
|
85
99
|
You deserve a holiday!
|
|
86
100
|
email:
|
|
87
|
-
- code@dunae.ca
|
|
88
101
|
- holidaysgem@gmail.com
|
|
89
102
|
executables: []
|
|
90
103
|
extensions: []
|
|
91
104
|
extra_rdoc_files: []
|
|
92
105
|
files:
|
|
93
106
|
- CHANGELOG.md
|
|
107
|
+
- CONTRIBUTING.md
|
|
94
108
|
- Gemfile
|
|
95
109
|
- LICENSE
|
|
96
110
|
- README.md
|
|
97
111
|
- REFERENCES
|
|
98
112
|
- Rakefile
|
|
113
|
+
- benchmark.rb
|
|
99
114
|
- bin/console
|
|
100
115
|
- bin/setup
|
|
101
116
|
- definitions/README.md
|
|
@@ -174,8 +189,8 @@ files:
|
|
|
174
189
|
- lib/generated_definitions/el.rb
|
|
175
190
|
- lib/generated_definitions/es.rb
|
|
176
191
|
- lib/generated_definitions/europe.rb
|
|
177
|
-
- lib/generated_definitions/fed_ex.rb
|
|
178
192
|
- lib/generated_definitions/federal_reserve.rb
|
|
193
|
+
- lib/generated_definitions/fedex.rb
|
|
179
194
|
- lib/generated_definitions/fi.rb
|
|
180
195
|
- lib/generated_definitions/fr.rb
|
|
181
196
|
- lib/generated_definitions/gb.rb
|
|
@@ -218,12 +233,20 @@ files:
|
|
|
218
233
|
- lib/holidays/date_calculator_factory.rb
|
|
219
234
|
- lib/holidays/definition/context/generator.rb
|
|
220
235
|
- lib/holidays/definition/context/merger.rb
|
|
236
|
+
- lib/holidays/definition/decorator/custom_method_proc.rb
|
|
237
|
+
- lib/holidays/definition/decorator/custom_method_source.rb
|
|
238
|
+
- lib/holidays/definition/entity/custom_method.rb
|
|
239
|
+
- lib/holidays/definition/parser/custom_method.rb
|
|
221
240
|
- lib/holidays/definition/repository/cache.rb
|
|
241
|
+
- lib/holidays/definition/repository/custom_methods.rb
|
|
222
242
|
- lib/holidays/definition/repository/holidays_by_month.rb
|
|
223
|
-
- lib/holidays/definition/repository/
|
|
243
|
+
- lib/holidays/definition/repository/proc_result_cache.rb
|
|
224
244
|
- lib/holidays/definition/repository/regions.rb
|
|
245
|
+
- lib/holidays/definition/validator/custom_method.rb
|
|
225
246
|
- lib/holidays/definition/validator/region.rb
|
|
226
247
|
- lib/holidays/definition_factory.rb
|
|
248
|
+
- lib/holidays/errors.rb
|
|
249
|
+
- lib/holidays/load_all_definitions.rb
|
|
227
250
|
- lib/holidays/option/context/parse_options.rb
|
|
228
251
|
- lib/holidays/option_factory.rb
|
|
229
252
|
- lib/holidays/use_case/context/between.rb
|
|
@@ -234,6 +257,7 @@ files:
|
|
|
234
257
|
- test/data/test_custom_year_range_holiday_defs.yaml
|
|
235
258
|
- test/data/test_multiple_custom_holiday_defs.yaml
|
|
236
259
|
- test/data/test_single_custom_holiday_defs.yaml
|
|
260
|
+
- test/data/test_single_custom_holiday_with_custom_procs.yaml
|
|
237
261
|
- test/defs/test_defs_ar.rb
|
|
238
262
|
- test/defs/test_defs_at.rb
|
|
239
263
|
- test/defs/test_defs_au.rb
|
|
@@ -254,6 +278,7 @@ files:
|
|
|
254
278
|
- test/defs/test_defs_europe.rb
|
|
255
279
|
- test/defs/test_defs_fed_ex.rb
|
|
256
280
|
- test/defs/test_defs_federal_reserve.rb
|
|
281
|
+
- test/defs/test_defs_fedex.rb
|
|
257
282
|
- test/defs/test_defs_fi.rb
|
|
258
283
|
- test/defs/test_defs_fr.rb
|
|
259
284
|
- test/defs/test_defs_gb.rb
|
|
@@ -295,10 +320,15 @@ files:
|
|
|
295
320
|
- test/holidays/date_calculator/test_weekend_modifier.rb
|
|
296
321
|
- test/holidays/definition/context/test_generator.rb
|
|
297
322
|
- test/holidays/definition/context/test_merger.rb
|
|
323
|
+
- test/holidays/definition/decorator/test_custom_method_proc.rb
|
|
324
|
+
- test/holidays/definition/decorator/test_custom_method_source.rb
|
|
325
|
+
- test/holidays/definition/parser/test_custom_method.rb
|
|
298
326
|
- test/holidays/definition/repository/test_cache.rb
|
|
327
|
+
- test/holidays/definition/repository/test_custom_methods.rb
|
|
299
328
|
- test/holidays/definition/repository/test_holidays_by_month.rb
|
|
300
|
-
- test/holidays/definition/repository/
|
|
329
|
+
- test/holidays/definition/repository/test_proc_result_cache.rb
|
|
301
330
|
- test/holidays/definition/repository/test_regions.rb
|
|
331
|
+
- test/holidays/definition/validator/test_custom_method.rb
|
|
302
332
|
- test/holidays/definition/validator/test_region.rb
|
|
303
333
|
- test/holidays/option/context/test_parse_options.rb
|
|
304
334
|
- test/holidays/test_date_calculator_factory.rb
|
|
@@ -314,7 +344,6 @@ files:
|
|
|
314
344
|
- test/test_holidays.rb
|
|
315
345
|
- test/test_holidays_between.rb
|
|
316
346
|
- test/test_multiple_regions.rb
|
|
317
|
-
- test/test_parse_definitions.rb
|
|
318
347
|
homepage: https://github.com/holidays/holidays
|
|
319
348
|
licenses:
|
|
320
349
|
- MIT
|
|
@@ -325,9 +354,9 @@ require_paths:
|
|
|
325
354
|
- lib
|
|
326
355
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
327
356
|
requirements:
|
|
328
|
-
- - "
|
|
357
|
+
- - "~>"
|
|
329
358
|
- !ruby/object:Gem::Version
|
|
330
|
-
version: '0'
|
|
359
|
+
version: '2.0'
|
|
331
360
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
332
361
|
requirements:
|
|
333
362
|
- - ">="
|
|
@@ -344,6 +373,7 @@ test_files:
|
|
|
344
373
|
- test/data/test_custom_year_range_holiday_defs.yaml
|
|
345
374
|
- test/data/test_multiple_custom_holiday_defs.yaml
|
|
346
375
|
- test/data/test_single_custom_holiday_defs.yaml
|
|
376
|
+
- test/data/test_single_custom_holiday_with_custom_procs.yaml
|
|
347
377
|
- test/defs/test_defs_ar.rb
|
|
348
378
|
- test/defs/test_defs_at.rb
|
|
349
379
|
- test/defs/test_defs_au.rb
|
|
@@ -364,6 +394,7 @@ test_files:
|
|
|
364
394
|
- test/defs/test_defs_europe.rb
|
|
365
395
|
- test/defs/test_defs_fed_ex.rb
|
|
366
396
|
- test/defs/test_defs_federal_reserve.rb
|
|
397
|
+
- test/defs/test_defs_fedex.rb
|
|
367
398
|
- test/defs/test_defs_fi.rb
|
|
368
399
|
- test/defs/test_defs_fr.rb
|
|
369
400
|
- test/defs/test_defs_gb.rb
|
|
@@ -405,10 +436,15 @@ test_files:
|
|
|
405
436
|
- test/holidays/date_calculator/test_weekend_modifier.rb
|
|
406
437
|
- test/holidays/definition/context/test_generator.rb
|
|
407
438
|
- test/holidays/definition/context/test_merger.rb
|
|
439
|
+
- test/holidays/definition/decorator/test_custom_method_proc.rb
|
|
440
|
+
- test/holidays/definition/decorator/test_custom_method_source.rb
|
|
441
|
+
- test/holidays/definition/parser/test_custom_method.rb
|
|
408
442
|
- test/holidays/definition/repository/test_cache.rb
|
|
443
|
+
- test/holidays/definition/repository/test_custom_methods.rb
|
|
409
444
|
- test/holidays/definition/repository/test_holidays_by_month.rb
|
|
410
|
-
- test/holidays/definition/repository/
|
|
445
|
+
- test/holidays/definition/repository/test_proc_result_cache.rb
|
|
411
446
|
- test/holidays/definition/repository/test_regions.rb
|
|
447
|
+
- test/holidays/definition/validator/test_custom_method.rb
|
|
412
448
|
- test/holidays/definition/validator/test_region.rb
|
|
413
449
|
- test/holidays/option/context/test_parse_options.rb
|
|
414
450
|
- test/holidays/test_date_calculator_factory.rb
|
|
@@ -424,4 +460,3 @@ test_files:
|
|
|
424
460
|
- test/test_holidays.rb
|
|
425
461
|
- test/test_holidays_between.rb
|
|
426
462
|
- test/test_multiple_regions.rb
|
|
427
|
-
- test/test_parse_definitions.rb
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Holidays
|
|
3
|
-
# This file is generated by the Ruby Holidays gem.
|
|
4
|
-
#
|
|
5
|
-
# Definitions loaded: definitions/fedex.yaml
|
|
6
|
-
#
|
|
7
|
-
# To use the definitions in this file, load it right after you load the
|
|
8
|
-
# Holiday gem:
|
|
9
|
-
#
|
|
10
|
-
# require 'holidays'
|
|
11
|
-
# require 'generated_definitions/fed_ex'
|
|
12
|
-
#
|
|
13
|
-
# All the definitions are available at https://github.com/alexdunae/holidays
|
|
14
|
-
module FED_EX # :nodoc:
|
|
15
|
-
def self.defined_regions
|
|
16
|
-
[:fedex]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self.holidays_by_month
|
|
20
|
-
{
|
|
21
|
-
1 => [{:mday => 1, :observed => lambda { |date| Holidays.to_weekday_if_weekend(date) }, :observed_id => "to_weekday_if_weekend", :name => "New Year's Day", :regions => [:fedex]}],
|
|
22
|
-
5 => [{:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:fedex]}],
|
|
23
|
-
7 => [{:mday => 4, :observed => lambda { |date| Holidays.to_weekday_if_weekend(date) }, :observed_id => "to_weekday_if_weekend", :name => "Independence Day", :regions => [:fedex]}],
|
|
24
|
-
9 => [{:wday => 1, :week => 1, :name => "Labor Day", :regions => [:fedex]}],
|
|
25
|
-
11 => [{:wday => 4, :week => 4, :name => "Thanksgiving", :regions => [:fedex]},
|
|
26
|
-
{:function => lambda { |year| Holidays.day_after_thanksgiving(year) }, :function_id => "day_after_thanksgiving(year)", :name => "Day After Thanksgiving", :regions => [:fedex]}],
|
|
27
|
-
12 => [{:mday => 25, :observed => lambda { |date| Holidays.to_weekday_if_weekend(date) }, :observed_id => "to_weekday_if_weekend", :name => "Christmas Day", :regions => [:fedex]},
|
|
28
|
-
{:mday => 31, :name => "New Year's Eve", :regions => [:fedex]}]
|
|
29
|
-
}
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
Holidays.merge_defs(Holidays::FED_EX.defined_regions, Holidays::FED_EX.holidays_by_month)
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
|
2
|
-
|
|
3
|
-
require 'holidays/definition/repository/proc_cache'
|
|
4
|
-
|
|
5
|
-
class ProcCacheRepoTests < Test::Unit::TestCase
|
|
6
|
-
def setup
|
|
7
|
-
@subject = Holidays::Definition::Repository::ProcCache.new
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_lookup_stores_and_returns_result_of_function_if_it_is_not_present
|
|
11
|
-
function = lambda { |year| Date.civil(year, 2, 1) - 1 }
|
|
12
|
-
year = 2015
|
|
13
|
-
|
|
14
|
-
assert_equal(Date.civil(year, 1, 31), @subject.lookup(function, year))
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
#FIXME This test stinks. I don't know how to show that the second invocation
|
|
18
|
-
# doesn't call the function. In rspec I could just do an expect().not_to
|
|
19
|
-
# but it doesn't seem like Mocha can do that? I'm punting.
|
|
20
|
-
def test_lookup_simply_returns_result_of_cache_if_present_after_first_call
|
|
21
|
-
function = lambda { |year| Date.civil(year, 2, 1) - 1 }
|
|
22
|
-
year = 2015
|
|
23
|
-
|
|
24
|
-
@subject.lookup(function, year)
|
|
25
|
-
|
|
26
|
-
assert_equal(Date.civil(year, 1, 31), @subject.lookup(function, year))
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|