holidays 4.6.0 → 4.7.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 +5 -0
- data/CONTRIBUTING.md +5 -5
- data/Makefile +29 -0
- data/README.md +13 -1
- data/Rakefile +2 -2
- data/definitions/au.yaml +12 -9
- data/definitions/ca.yaml +17 -2
- data/definitions/ch.yaml +1 -1
- data/definitions/index.yaml +3 -0
- data/definitions/is.yaml +1 -1
- data/definitions/jp.yaml +19 -14
- data/definitions/kr.yaml +282 -0
- data/definitions/lu.yaml +56 -0
- data/definitions/my.yaml +51 -0
- data/definitions/ups.yaml +1 -1
- data/definitions/us.yaml +1 -1
- data/lib/generated_definitions/MANIFEST +3 -0
- data/lib/generated_definitions/REGIONS.rb +1 -1
- data/lib/generated_definitions/au.rb +11 -8
- data/lib/generated_definitions/ca.rb +1 -1
- data/lib/generated_definitions/ch.rb +1 -1
- data/lib/generated_definitions/europe.rb +2 -2
- data/lib/generated_definitions/is.rb +1 -1
- data/lib/generated_definitions/jp.rb +13 -15
- data/lib/generated_definitions/kr.rb +248 -0
- data/lib/generated_definitions/lu.rb +39 -0
- data/lib/generated_definitions/my.rb +36 -0
- data/lib/generated_definitions/north_america.rb +2 -2
- data/lib/generated_definitions/scandinavia.rb +1 -1
- data/lib/generated_definitions/ups.rb +1 -1
- data/lib/generated_definitions/us.rb +1 -1
- data/lib/holidays.rb +29 -51
- data/lib/holidays/core_extensions/date.rb +1 -1
- data/lib/holidays/definition/context/function_processor.rb +86 -0
- data/lib/holidays/definition/context/generator.rb +31 -6
- data/lib/holidays/definition/parser/custom_method.rb +1 -3
- data/lib/holidays/definition/repository/holidays_by_month.rb +1 -1
- data/lib/holidays/definition/validator/region.rb +1 -3
- data/lib/holidays/errors.rb +1 -0
- data/lib/holidays/factory/date_calculator.rb +37 -0
- data/lib/holidays/factory/definition.rb +96 -0
- data/lib/holidays/factory/finder.rb +70 -0
- data/lib/holidays/finder/context/between.rb +43 -0
- data/lib/holidays/{use_case → finder}/context/dates_driver_builder.rb +6 -4
- data/lib/holidays/finder/context/next_holiday.rb +57 -0
- data/lib/holidays/{option → finder}/context/parse_options.rb +6 -8
- data/lib/holidays/finder/context/search.rb +86 -0
- data/lib/holidays/finder/context/year_holiday.rb +57 -0
- data/lib/holidays/finder/rules/in_region.rb +23 -0
- data/lib/holidays/finder/rules/year_range.rb +82 -0
- data/lib/holidays/load_all_definitions.rb +7 -5
- data/lib/holidays/version.rb +1 -1
- data/test/coverage_report.rb +7 -0
- data/test/defs/test_defs_au.rb +1 -1
- data/test/defs/test_defs_ca.rb +16 -1
- data/test/defs/test_defs_jp.rb +4 -0
- data/test/defs/test_defs_kr.rb +26 -0
- data/test/defs/test_defs_lu.rb +24 -0
- data/test/defs/test_defs_my.rb +20 -0
- data/test/defs/test_defs_north_america.rb +16 -1
- data/test/holidays/core_extensions/test_date_time.rb +7 -7
- data/test/holidays/definition/context/test_function_processor.rb +175 -0
- data/test/holidays/definition/context/test_generator.rb +18 -11
- data/test/holidays/definition/parser/test_custom_method.rb +2 -2
- data/test/holidays/definition/repository/test_proc_result_cache.rb +1 -1
- data/test/holidays/{test_date_calculator_factory.rb → factory/test_date_calculator.rb} +3 -3
- data/test/holidays/factory/test_definition.rb +53 -0
- data/test/holidays/factory/test_finder.rb +25 -0
- data/test/holidays/finder/context/test_between.rb +172 -0
- data/test/holidays/{use_case → finder}/context/test_dates_driver_builder.rb +2 -2
- data/test/holidays/finder/context/test_next_holiday.rb +156 -0
- data/test/holidays/{option → finder}/context/test_parse_options.rb +9 -9
- data/test/holidays/finder/context/test_search.rb +203 -0
- data/test/holidays/finder/context/test_year_holiday.rb +202 -0
- data/test/holidays/finder/rules/test_in_region.rb +38 -0
- data/test/holidays/finder/rules/test_year_range.rb +170 -0
- data/test/integration/README.md +9 -0
- data/test/{test_all_regions.rb → integration/test_all_regions.rb} +16 -2
- data/test/{test_custom_holidays.rb → integration/test_custom_holidays.rb} +2 -2
- data/test/{test_custom_year_range_holidays.rb → integration/test_custom_year_range_holidays.rb} +1 -1
- data/test/{test_holidays.rb → integration/test_holidays.rb} +43 -32
- data/test/{test_holidays_between.rb → integration/test_holidays_between.rb} +8 -16
- data/test/{test_multiple_regions.rb → integration/test_multiple_regions.rb} +1 -1
- data/test/test_helper.rb +3 -4
- metadata +67 -39
- data/benchmark.rb +0 -8
- data/lib/holidays/date_calculator_factory.rb +0 -35
- data/lib/holidays/definition_factory.rb +0 -86
- data/lib/holidays/option_factory.rb +0 -15
- data/lib/holidays/use_case/context/between.rb +0 -45
- data/lib/holidays/use_case/context/context_common.rb +0 -123
- data/lib/holidays/use_case/context/next_holiday.rb +0 -54
- data/lib/holidays/use_case/context/year_holiday.rb +0 -51
- data/lib/holidays/use_case_factory.rb +0 -41
- data/test/holidays/test_definition_factory.rb +0 -49
- data/test/holidays/test_option_factory.rb +0 -9
- data/test/holidays/test_use_case_factory.rb +0 -13
- data/test/holidays/use_case/context/test_between.rb +0 -77
@@ -1,54 +0,0 @@
|
|
1
|
-
module Holidays
|
2
|
-
module UseCase
|
3
|
-
module Context
|
4
|
-
class NextHoliday
|
5
|
-
include ContextCommon
|
6
|
-
|
7
|
-
def initialize(holidays_by_month_repo, day_of_month_calculator, custom_methods_repo, proc_result_cache_repo)
|
8
|
-
@holidays_by_month_repo = holidays_by_month_repo
|
9
|
-
@day_of_month_calculator = day_of_month_calculator
|
10
|
-
@custom_methods_repo = custom_methods_repo
|
11
|
-
@proc_result_cache_repo = proc_result_cache_repo
|
12
|
-
end
|
13
|
-
|
14
|
-
def call(holidays_count, from_date, dates_driver, regions, observed, informal)
|
15
|
-
validate!(holidays_count, from_date, dates_driver, regions)
|
16
|
-
holidays = []
|
17
|
-
ret_holidays = []
|
18
|
-
|
19
|
-
ret_holidays = make_date_array(dates_driver, regions, observed, informal)
|
20
|
-
ret_holidays.each do |holiday|
|
21
|
-
if holiday[:date] >= from_date
|
22
|
-
holidays << holiday
|
23
|
-
holidays_count -= 1
|
24
|
-
break if holidays_count == 0
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
holidays.sort{|a, b| a[:date] <=> b[:date] }
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
attr_reader :holidays_by_month_repo,
|
34
|
-
:day_of_month_calculator,
|
35
|
-
:custom_methods_repo,
|
36
|
-
:proc_result_cache_repo
|
37
|
-
|
38
|
-
def validate!(holidays_count, from_date, dates_driver, regions)
|
39
|
-
raise ArgumentError unless holidays_count
|
40
|
-
raise ArgumentError if holidays_count <= 0
|
41
|
-
raise ArgumentError unless from_date
|
42
|
-
|
43
|
-
raise ArgumentError if dates_driver.nil? || dates_driver.empty?
|
44
|
-
|
45
|
-
dates_driver.each do |year, months|
|
46
|
-
raise ArgumentError if months.nil? || months.empty?
|
47
|
-
end
|
48
|
-
|
49
|
-
raise ArgumentError if regions.nil? || regions.empty?
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Holidays
|
2
|
-
module UseCase
|
3
|
-
module Context
|
4
|
-
class YearHoliday
|
5
|
-
include ContextCommon
|
6
|
-
|
7
|
-
def initialize(holidays_by_month_repo, day_of_month_calculator, custom_methods_repo, proc_result_cache_repo)
|
8
|
-
@holidays_by_month_repo = holidays_by_month_repo
|
9
|
-
@day_of_month_calculator = day_of_month_calculator
|
10
|
-
@custom_methods_repo = custom_methods_repo
|
11
|
-
@proc_result_cache_repo = proc_result_cache_repo
|
12
|
-
end
|
13
|
-
|
14
|
-
def call(from_date, to_date, dates_driver, regions, observed, informal)
|
15
|
-
validate!(from_date, to_date, dates_driver, regions)
|
16
|
-
holidays = []
|
17
|
-
ret_holidays = []
|
18
|
-
|
19
|
-
ret_holidays = make_date_array(dates_driver, regions, observed, informal)
|
20
|
-
ret_holidays.each do |holiday|
|
21
|
-
if holiday[:date] >= from_date && holiday[:date] <= to_date
|
22
|
-
holidays << holiday
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
holidays.sort{|a, b| a[:date] <=> b[:date] }
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
attr_reader :holidays_by_month_repo,
|
32
|
-
:day_of_month_calculator,
|
33
|
-
:custom_methods_repo,
|
34
|
-
:proc_result_cache_repo
|
35
|
-
|
36
|
-
def validate!(from_date, to_date, dates_driver, regions)
|
37
|
-
raise ArgumentError unless from_date
|
38
|
-
raise ArgumentError unless to_date
|
39
|
-
|
40
|
-
raise ArgumentError if dates_driver.nil? || dates_driver.empty?
|
41
|
-
|
42
|
-
dates_driver.each do |year, months|
|
43
|
-
raise ArgumentError if months.nil? || months.empty?
|
44
|
-
end
|
45
|
-
|
46
|
-
raise ArgumentError if regions.nil? || regions.empty?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'holidays/use_case/context/context_common'
|
2
|
-
require 'holidays/use_case/context/between'
|
3
|
-
require 'holidays/use_case/context/next_holiday'
|
4
|
-
require 'holidays/use_case/context/dates_driver_builder'
|
5
|
-
require 'holidays/use_case/context/year_holiday'
|
6
|
-
|
7
|
-
module Holidays
|
8
|
-
class UseCaseFactory
|
9
|
-
class << self
|
10
|
-
def between
|
11
|
-
UseCase::Context::Between.new(
|
12
|
-
DefinitionFactory.holidays_by_month_repository,
|
13
|
-
DateCalculatorFactory.day_of_month_calculator,
|
14
|
-
DefinitionFactory.custom_methods_repository,
|
15
|
-
DefinitionFactory.proc_result_cache_repository,
|
16
|
-
)
|
17
|
-
end
|
18
|
-
def next_holiday
|
19
|
-
UseCase::Context::NextHoliday.new(
|
20
|
-
DefinitionFactory.holidays_by_month_repository,
|
21
|
-
DateCalculatorFactory.day_of_month_calculator,
|
22
|
-
DefinitionFactory.custom_methods_repository,
|
23
|
-
DefinitionFactory.proc_result_cache_repository,
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
def year_holiday
|
28
|
-
UseCase::Context::YearHoliday.new(
|
29
|
-
DefinitionFactory.holidays_by_month_repository,
|
30
|
-
DateCalculatorFactory.day_of_month_calculator,
|
31
|
-
DefinitionFactory.custom_methods_repository,
|
32
|
-
DefinitionFactory.proc_result_cache_repository,
|
33
|
-
)
|
34
|
-
end
|
35
|
-
|
36
|
-
def dates_driver_builder
|
37
|
-
UseCase::Context::DatesDriverBuilder.new
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
2
|
-
|
3
|
-
require 'holidays/definition_factory'
|
4
|
-
|
5
|
-
class DefinitionFactoryTests < Test::Unit::TestCase
|
6
|
-
def test_definition_file_parser
|
7
|
-
assert Holidays::DefinitionFactory.file_parser.is_a?(Holidays::Definition::Context::Generator)
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_definition_source_generator
|
11
|
-
assert Holidays::DefinitionFactory.source_generator.is_a?(Holidays::Definition::Context::Generator)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_definition_merger
|
15
|
-
assert Holidays::DefinitionFactory.merger.is_a?(Holidays::Definition::Context::Merger)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_holidays_by_month_repository
|
19
|
-
assert Holidays::DefinitionFactory.holidays_by_month_repository.is_a?(Holidays::Definition::Repository::HolidaysByMonth)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_regions_repository
|
23
|
-
assert Holidays::DefinitionFactory.regions_repository.is_a?(Holidays::Definition::Repository::Regions)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_cache_repository
|
27
|
-
assert Holidays::DefinitionFactory.cache_repository.is_a?(Holidays::Definition::Repository::Cache)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_proc_result_cache_repository
|
31
|
-
assert Holidays::DefinitionFactory.proc_result_cache_repository.is_a?(Holidays::Definition::Repository::ProcResultCache)
|
32
|
-
end
|
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
|
49
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
2
|
-
|
3
|
-
require 'holidays/option_factory'
|
4
|
-
|
5
|
-
class OptionFactoryTests < Test::Unit::TestCase
|
6
|
-
def test_parse_options_factory
|
7
|
-
assert Holidays::OptionFactory.parse_options.is_a?(Holidays::Option::Context::ParseOptions)
|
8
|
-
end
|
9
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
2
|
-
|
3
|
-
require 'holidays/use_case_factory'
|
4
|
-
|
5
|
-
class UseCaseFactoryTests < Test::Unit::TestCase
|
6
|
-
def test_between_factory
|
7
|
-
assert Holidays::UseCaseFactory.between.is_a?(Holidays::UseCase::Context::Between)
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_dates_driver_builder_factory
|
11
|
-
assert Holidays::UseCaseFactory.dates_driver_builder.is_a?(Holidays::UseCase::Context::DatesDriverBuilder)
|
12
|
-
end
|
13
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../../../test_helper'
|
2
|
-
|
3
|
-
require 'holidays/use_case/context/between'
|
4
|
-
|
5
|
-
#TODO These tests need love. This is the heart of the holiday logic and I'm only
|
6
|
-
# now starting to tear bits and pieces of it apart to untangle it. This is a start
|
7
|
-
# but definitely needs more coverage.
|
8
|
-
class BetweenTests < Test::Unit::TestCase
|
9
|
-
def setup
|
10
|
-
@holidays_by_month_repo = mock()
|
11
|
-
@day_of_month_calculator = mock()
|
12
|
-
@custom_method_repo = mock()
|
13
|
-
@proc_cache_repo = mock()
|
14
|
-
|
15
|
-
@subject = Holidays::UseCase::Context::Between.new(
|
16
|
-
@holidays_by_month_repo,
|
17
|
-
@day_of_month_calculator,
|
18
|
-
@custom_method_repo,
|
19
|
-
@proc_cache_repo,
|
20
|
-
)
|
21
|
-
|
22
|
-
@start_date = Date.civil(2015, 1, 1)
|
23
|
-
@end_date = Date.civil(2015, 1, 1)
|
24
|
-
@dates_driver = {2015 => [0, 1, 2], 2014 => [0, 12]}
|
25
|
-
@regions = [:us]
|
26
|
-
@observed = false
|
27
|
-
@informal = false
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_returns_error_if_start_date_is_missing
|
31
|
-
assert_raise ArgumentError do
|
32
|
-
@subject.call(nil, @end_date, @dates_driver, @regions, @observed, @informal)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_returns_error_if_end_date_is_missing
|
37
|
-
assert_raise ArgumentError do
|
38
|
-
@subject.call(@start_date, nil, @dates_driver, @regions, @observed, @informal)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_returns_error_if_driver_hash_is_nil
|
43
|
-
assert_raise ArgumentError do
|
44
|
-
@subject.call(@start_date, @end_date, nil, @regions, @observed, @informal)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_returns_error_if_driver_hash_is_empty
|
49
|
-
assert_raise ArgumentError do
|
50
|
-
@subject.call(@start_date, @end_date, {}, @regions, @observed, @informal)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_returns_error_if_driver_hash_has_empty_months_array
|
55
|
-
assert_raise ArgumentError do
|
56
|
-
@subject.call(@start_date, @end_date, {2015 => nil}, @regions, @observed, @informal)
|
57
|
-
end
|
58
|
-
|
59
|
-
assert_raise ArgumentError do
|
60
|
-
@subject.call(@start_date, @end_date, {2015 => []}, @regions, @observed, @informal)
|
61
|
-
end
|
62
|
-
|
63
|
-
assert_raise ArgumentError do
|
64
|
-
@subject.call(@start_date, @end_Date, {2015 => [1], 2016 => [1], 2017 => []}, @regions, @observed, @informal)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_returns_error_if_regions_are_missing_or_empty
|
69
|
-
assert_raise ArgumentError do
|
70
|
-
@subject.call(@start_date, @end_date, @dates_driver, nil, @observed, @informal)
|
71
|
-
end
|
72
|
-
|
73
|
-
assert_raise ArgumentError do
|
74
|
-
@subject.call(@start_date, @end_date, @dates_driver, [], @observed, @informal)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|