feriados 4.2.2 → 4.3.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/lib/feriados/calendar.rb +11 -3
- data/lib/feriados/loader.rb +6 -65
- data/lib/feriados/rules.rb +62 -0
- data/test/feriados_test.rb +11 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a0f8a45bd3052939f53aa3ed238852d161f0be93d8758e9e8bf8354b58a3969
|
4
|
+
data.tar.gz: 592ae7797b8f0999346996e0409163deaccd935c3967cb7c5e5067c13d3b31db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1154029a3b4446ee620fde02254b31edf874374d9bbbdcce948ff86c9c796d83d321dcbb262c83a8e344962ab10e7be8a616096d7c44311627aa4880368f708b
|
7
|
+
data.tar.gz: dc180372559ca005f02d418a66d2869deeb0f56e5a9caacd0d4ed8ce47545da69278e519ebb54070907a4c96640c171f63ac932b340d99ac35963cd7fe78120f
|
data/lib/feriados/calendar.rb
CHANGED
@@ -23,11 +23,19 @@ module Feriados
|
|
23
23
|
rules.delete(rule)
|
24
24
|
end
|
25
25
|
|
26
|
-
def load(
|
27
|
-
Loader.new(
|
26
|
+
def load(rules)
|
27
|
+
Loader.new(rules, self).load
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
def eql?(other)
|
31
|
+
rules == other.rules
|
32
|
+
end
|
33
|
+
|
34
|
+
def ==(other)
|
35
|
+
eql?(other)
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
31
39
|
|
32
40
|
attr_accessor :rules
|
33
41
|
end
|
data/lib/feriados/loader.rb
CHANGED
@@ -1,79 +1,20 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
1
|
module Feriados
|
4
2
|
class Loader
|
5
3
|
include Rules
|
6
4
|
|
7
|
-
def initialize(
|
8
|
-
@
|
5
|
+
def initialize(rules, calendar)
|
6
|
+
@rules = rules
|
9
7
|
@calendar = calendar
|
10
8
|
end
|
11
9
|
|
12
10
|
def load
|
13
|
-
|
14
|
-
|
15
|
-
load_fix_week_days
|
16
|
-
load_fix_dates
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
attr_reader :data, :calendar
|
22
|
-
|
23
|
-
def load_day_of_month
|
24
|
-
day_of_month.each do |month, rules|
|
25
|
-
rules.each do |rule_data|
|
26
|
-
rule = OpenStruct.new(rule_data)
|
27
|
-
calendar.add(DayOfMonth.new(rule.day, month, rule.name))
|
28
|
-
end
|
11
|
+
rules.each do |rule|
|
12
|
+
calendar.add(Rules.create_with(rule))
|
29
13
|
end
|
30
14
|
end
|
31
15
|
|
32
|
-
|
33
|
-
function.each do |function, name|
|
34
|
-
function_name = function.split('_').collect(&:capitalize).join
|
35
|
-
class_name = "Feriados::Rules::#{function_name}".split('::')
|
36
|
-
|
37
|
-
klass = class_name.inject(Object) { |obj, const| obj.const_get(const) }
|
38
|
-
klass.name = name
|
39
|
-
calendar.add(klass)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def load_fix_week_days
|
44
|
-
fix_week_day.each do |month, rules|
|
45
|
-
rules.each do |rule_data|
|
46
|
-
rule = OpenStruct.new(rule_data)
|
47
|
-
calendar.add(FixWeekDay.new(rule.week, rule.day, month, rule.name))
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def load_fix_dates
|
53
|
-
fix_date.each do |year, months|
|
54
|
-
months.each do |month, rules|
|
55
|
-
rules.each do |rule_data|
|
56
|
-
rule = OpenStruct.new(rule_data)
|
57
|
-
calendar.add(FixDate.new(year, month, rule.day, rule.name))
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def day_of_month
|
64
|
-
data['day_of_month']['month']
|
65
|
-
end
|
66
|
-
|
67
|
-
def function
|
68
|
-
data['function']
|
69
|
-
end
|
70
|
-
|
71
|
-
def fix_week_day
|
72
|
-
data['fix_week_day']['month']
|
73
|
-
end
|
16
|
+
private
|
74
17
|
|
75
|
-
|
76
|
-
data['fix_date']
|
77
|
-
end
|
18
|
+
attr_reader :rules, :calendar
|
78
19
|
end
|
79
20
|
end
|
data/lib/feriados/rules.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'forwardable'
|
3
|
+
|
1
4
|
require_relative './rules/rule_base'
|
2
5
|
require_relative './rules/function'
|
3
6
|
require_relative './rules/carnival_monday'
|
@@ -9,3 +12,62 @@ require_relative './rules/fix_date'
|
|
9
12
|
require_relative './rules/fix_week_day'
|
10
13
|
require_relative './rules/holy_friday'
|
11
14
|
require_relative './rules/holy_thursday'
|
15
|
+
|
16
|
+
module Feriados
|
17
|
+
module Rules
|
18
|
+
class Rule
|
19
|
+
extend Forwardable
|
20
|
+
|
21
|
+
def_delegators :@rule, :day, :month, :year, :week
|
22
|
+
|
23
|
+
attr_reader :rule
|
24
|
+
|
25
|
+
def initialize(rule)
|
26
|
+
@rule = OpenStruct.new(rule)
|
27
|
+
end
|
28
|
+
|
29
|
+
def week_day?
|
30
|
+
rule.day && rule.month && rule.week
|
31
|
+
end
|
32
|
+
|
33
|
+
def fix_date?
|
34
|
+
rule.day && rule.month && rule.year
|
35
|
+
end
|
36
|
+
|
37
|
+
def day_of_month?
|
38
|
+
rule.day && rule.month && !fix_date? && !week_day?
|
39
|
+
end
|
40
|
+
|
41
|
+
def function?
|
42
|
+
functions = %i[easter holy_thursday holy_friday carnival_monday
|
43
|
+
carnival_tuesday]
|
44
|
+
|
45
|
+
functions.map { |e| rule.respond_to?(e) }.any?
|
46
|
+
end
|
47
|
+
|
48
|
+
def name
|
49
|
+
rule[:name] || rule.to_h.values.first
|
50
|
+
end
|
51
|
+
|
52
|
+
def function_name
|
53
|
+
rule.to_h.keys.first.to_s.split('_').collect(&:capitalize).join
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.create_with(rule)
|
58
|
+
rule = Rule.new(rule)
|
59
|
+
return DayOfMonth.new(rule.day, rule.month, rule.name) if rule.day_of_month?
|
60
|
+
return FixWeekDay.new(rule.week, rule.day, rule.month, rule.name) if rule.week_day?
|
61
|
+
return FixDate.new(rule.year, rule.month, rule.day, rule.name) if rule.fix_date?
|
62
|
+
|
63
|
+
raise ArgumentError, "Argument #{rule} is not a valid rule" unless rule.function?
|
64
|
+
|
65
|
+
function_name = rule.function_name
|
66
|
+
class_name = "Feriados::Rules::#{function_name}".split('::')
|
67
|
+
klass = class_name.inject(Object) { |obj, const| obj.const_get(const) }
|
68
|
+
klass.name = rule.name
|
69
|
+
|
70
|
+
klass
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/test/feriados_test.rb
CHANGED
@@ -39,7 +39,7 @@ class CalendarTest < Minitest::Test
|
|
39
39
|
holidays2020_data.each do |month, day, description|
|
40
40
|
date = Date.new(2020, month, day)
|
41
41
|
|
42
|
-
assert calendar.holiday?(date)
|
42
|
+
assert calendar.holiday?(date), date
|
43
43
|
|
44
44
|
assert_equal description, calendar.holiday_name(date), date
|
45
45
|
end
|
@@ -53,4 +53,14 @@ class CalendarTest < Minitest::Test
|
|
53
53
|
|
54
54
|
assert_equal(holidays2020_data.count, detected_holidays.count { |e| e })
|
55
55
|
end
|
56
|
+
|
57
|
+
def test_load_incomplete_rules
|
58
|
+
rules = {}
|
59
|
+
|
60
|
+
calendar = Calendar.new
|
61
|
+
|
62
|
+
calendar.load(rules)
|
63
|
+
|
64
|
+
assert_equal calendar, Calendar.new
|
65
|
+
end
|
56
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feriados
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Rabuini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02
|
11
|
+
date: 2020-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -83,14 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
83
|
requirements:
|
84
84
|
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: '
|
86
|
+
version: '2.3'
|
87
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
rubygems_version: 3.
|
93
|
+
rubygems_version: 3.0.3
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: Holidays calendars
|