feriados 4.2.0 → 4.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cf1cd7d69a441cb282e4fd9636dd540b82eeaea55bd5d54e85eb4d705e7d075
4
- data.tar.gz: 8146731541c46b93292b41e3c5e878a16186ca8c25aa3d9fe9d4ec4af574f43b
3
+ metadata.gz: f987e77a82fb0a2f30fb0712c5238df644e19b17d774b82d2431e837f36f0073
4
+ data.tar.gz: c2d5fb6517a05649ca540e41644f3bf4052c64cca2dee4a90cbe2551b2720e4d
5
5
  SHA512:
6
- metadata.gz: f869ff0db752a3120fbe5c00aebccc03bbe344e4d507c3fa21303354722da9d6db495e38ed96515087cbfebd32f18cef2e58f77aaf59a90e555297955184ef94
7
- data.tar.gz: e873ac319a47ec080c7d2665aae74d22c92bcc2ec97f9e8349e72d673dd4c37de0f8afae96a3063c21749e414789026f4ed18d3d8067769b3142a7fa13331ee6
6
+ metadata.gz: 55c8afdf959e9144c5d9bd23469d56a4a8c0b73b5b29263e420d585b40a764b986d41aa5e36d6842b964e45c29e8fa84854667ec2d360f66fd2784d8055aa99b
7
+ data.tar.gz: 98eb156d025c308deed1ddc498b08f8b1427be7d819b14bfe3523a10ed5c493053a7a75a1ad3d01cc5dd622af604826c7bc7ac10c2d4532e7eabdd42cebbb2ac
@@ -11,6 +11,10 @@ module Feriados
11
11
  rules.any? { |rule| rule.holiday?(date) }
12
12
  end
13
13
 
14
+ def holiday_name(date)
15
+ rules.find { |rule| rule.holiday?(date) }&.name
16
+ end
17
+
14
18
  def add(rule)
15
19
  rules << rule
16
20
  end
@@ -19,11 +23,7 @@ module Feriados
19
23
  rules.delete(rule)
20
24
  end
21
25
 
22
- def push(rules)
23
- self.rules = rules
24
- end
25
-
26
- def load_rules(file)
26
+ def load(file)
27
27
  Loader.new(file, self).load
28
28
  end
29
29
 
@@ -33,6 +33,8 @@ module Feriados
33
33
  end
34
34
 
35
35
  refine Date do
36
+ @calendar = nil
37
+
36
38
  def holiday?
37
39
  @@calendar.holiday?(self)
38
40
  end
@@ -1,59 +1,79 @@
1
+ require 'ostruct'
2
+
1
3
  module Feriados
2
4
  class Loader
3
- def initialize(file, calendar)
4
- @file = file
5
+ include Rules
6
+
7
+ def initialize(data, calendar)
8
+ @data = data
5
9
  @calendar = calendar
6
10
  end
7
11
 
8
12
  def load
9
13
  load_day_of_month
10
14
  load_functions
11
- load_fix_weekdays
12
- load_fix_days
15
+ load_fix_week_days
16
+ load_fix_dates
13
17
  end
14
18
 
15
19
  private
16
20
 
17
- attr_reader :file, :calendar
18
-
19
- def config_rules
20
- @config_rules ||= YAML.load_file(file)
21
- end
21
+ attr_reader :data, :calendar
22
22
 
23
23
  def load_day_of_month
24
- config_rules['months'].each do |month, rules|
25
- rules.each do |rule|
26
- calendar.add(Rules::DayOfMonth.new(rule['day'], 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))
27
28
  end
28
29
  end
29
30
  end
30
31
 
31
32
  def load_functions
32
- config_rules['functions'].each do |rule|
33
- function_name = rule.split('_').collect(&:capitalize).join
33
+ function.each do |function, name|
34
+ function_name = function.split('_').collect(&:capitalize).join
34
35
  class_name = "Feriados::Rules::#{function_name}".split('::')
35
36
 
36
37
  klass = class_name.inject(Object) { |obj, const| obj.const_get(const) }
38
+ klass.name = name
37
39
  calendar.add(klass)
38
40
  end
39
41
  end
40
42
 
41
- def load_fix_weekdays
42
- config_rules['fix_weekdays']['months'].each do |month, rules|
43
- rules.each do |rule|
44
- calendar.add(Rules::FixWeekDay.new(rule['week'], rule['day'], month))
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))
45
48
  end
46
49
  end
47
50
  end
48
51
 
49
- def load_fix_days
50
- config_rules['fix_days'].each do |year, months|
52
+ def load_fix_dates
53
+ fix_date.each do |year, months|
51
54
  months.each do |month, rules|
52
- rules.each do |rule|
53
- calendar.add(Rules::FixDate.new(year, month, rule['day']))
55
+ rules.each do |rule_data|
56
+ rule = OpenStruct.new(rule_data)
57
+ calendar.add(FixDate.new(year, month, rule.day, rule.name))
54
58
  end
55
59
  end
56
60
  end
57
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
74
+
75
+ def fix_date
76
+ data['fix_date']
77
+ end
58
78
  end
59
79
  end
@@ -1,6 +1,6 @@
1
1
  module Feriados
2
2
  module Rules
3
- class CarnivalMonday
3
+ class CarnivalMonday < Function
4
4
  def self.holiday?(date)
5
5
  Easter.new(date.year).date - 48 == date
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Feriados
2
2
  module Rules
3
- class CarnivalTuesday
3
+ class CarnivalTuesday < Function
4
4
  def self.holiday?(date)
5
5
  Easter.new(date.year).date - 47 == date
6
6
  end
@@ -1,7 +1,8 @@
1
1
  module Feriados
2
2
  module Rules
3
3
  class DayOfMonth < RuleBase
4
- def initialize(day, month)
4
+ def initialize(day, month, name = nil)
5
+ super(name)
5
6
  @day = day
6
7
  @month = month
7
8
  end
@@ -1,7 +1,8 @@
1
1
  module Feriados
2
2
  module Rules
3
3
  class DayOfWeek < RuleBase
4
- def initialize(wday)
4
+ def initialize(wday, name = nil)
5
+ super(name)
5
6
  @wday = wday
6
7
  end
7
8
 
@@ -10,6 +11,7 @@ module Feriados
10
11
  end
11
12
 
12
13
  protected
14
+
13
15
  attr_reader :wday
14
16
 
15
17
  def state
@@ -1,24 +1,15 @@
1
1
  module Feriados
2
2
  module Rules
3
- class Easter
3
+ class Easter < Function
4
+ @name = nil
5
+
4
6
  def initialize(year)
5
7
  @year = year
6
8
  end
7
9
 
8
10
  def date
9
- a = year % 19
10
- b = year / 100
11
- c = year % 100
12
- d = b / 4
13
- e = b % 4
14
- f = (b + 8) / 25
15
- g = (b - f + 1) / 3
16
- h = (19 * a + b - d - g + 15) % 30
17
- i = c / 4
18
- k = c % 4
19
- l = (32 + 2 * e + 2 * i - h - k) % 7
20
- m = (a + 11 * h + 22 * l) / 451
21
11
  result = h + l - 7 * m + 114
12
+
22
13
  month = result / 31
23
14
  day = (result % 31) + 1
24
15
 
@@ -33,6 +24,54 @@ module Feriados
33
24
 
34
25
  private
35
26
 
27
+ def a
28
+ year % 19
29
+ end
30
+
31
+ def b
32
+ year / 100
33
+ end
34
+
35
+ def c
36
+ year % 100
37
+ end
38
+
39
+ def d
40
+ b / 4
41
+ end
42
+
43
+ def e
44
+ b % 4
45
+ end
46
+
47
+ def f
48
+ (b + 8) / 25
49
+ end
50
+
51
+ def g
52
+ (b - f + 1) / 3
53
+ end
54
+
55
+ def h
56
+ (19 * a + b - d - g + 15) % 30
57
+ end
58
+
59
+ def i
60
+ c / 4
61
+ end
62
+
63
+ def k
64
+ c % 4
65
+ end
66
+
67
+ def l
68
+ (32 + 2 * e + 2 * i - h - k) % 7
69
+ end
70
+
71
+ def m
72
+ (a + 11 * h + 22 * l) / 451
73
+ end
74
+
36
75
  attr_reader :year
37
76
  end
38
77
  end
@@ -1,7 +1,8 @@
1
1
  module Feriados
2
2
  module Rules
3
3
  class FixDate < RuleBase
4
- def initialize(year, month, day)
4
+ def initialize(year, month, day, name = nil)
5
+ super(name)
5
6
  @year = year
6
7
  @month = month
7
8
  @day = day
@@ -1,7 +1,8 @@
1
1
  module Feriados
2
2
  module Rules
3
3
  class FixWeekDay < RuleBase
4
- def initialize(week, wday, month)
4
+ def initialize(week, wday, month, name = nil)
5
+ super(name)
5
6
  @week = week
6
7
  @wday = wday
7
8
  @month = month
@@ -0,0 +1,9 @@
1
+ module Feriados
2
+ module Rules
3
+ class Function
4
+ class << self
5
+ attr_accessor :name
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,6 +1,6 @@
1
1
  module Feriados
2
2
  module Rules
3
- class HolyFriday
3
+ class HolyFriday < Function
4
4
  def self.holiday?(date)
5
5
  Easter.new(date.year).date - 2 == date
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Feriados
2
2
  module Rules
3
- class HolyThursday
3
+ class HolyThursday < Function
4
4
  def self.holiday?(date)
5
5
  Easter.new(date.year).date - 3 == date
6
6
  end
@@ -1,6 +1,12 @@
1
1
  module Feriados
2
2
  module Rules
3
3
  class RuleBase
4
+ attr_reader :name
5
+
6
+ def initialize(name = nil)
7
+ @name = name
8
+ end
9
+
4
10
  def hash
5
11
  state.hash
6
12
  end
@@ -1,4 +1,5 @@
1
1
  require_relative './rules/rule_base'
2
+ require_relative './rules/function'
2
3
  require_relative './rules/carnival_monday'
3
4
  require_relative './rules/carnival_tuesday'
4
5
  require_relative './rules/day_of_month'
@@ -0,0 +1,63 @@
1
+ require 'test_helper'
2
+
3
+ class DayOfMonthTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_a_date_of_month_can_be_a_holiday
8
+ calendar = Calendar.new
9
+
10
+ a_january_first = Date.new(2016, 1, 1)
11
+
12
+ calendar.add(DayOfMonth.new(1, 1))
13
+
14
+ assert calendar.holiday?(a_january_first)
15
+ end
16
+
17
+ def test_a_date_of_month_can_have_a_name
18
+ calendar = Calendar.new
19
+
20
+ a_january_first = Date.new(2016, 1, 1)
21
+
22
+ calendar.add(DayOfMonth.new(1, 1, 'new year'))
23
+
24
+ assert_equal 'new year', calendar.holiday_name(a_january_first)
25
+ end
26
+
27
+ def test_a_day_of_month_can_be_not_a_holiday
28
+ calendar = Calendar.new
29
+
30
+ a_day = Date.new(2016, 1, 2)
31
+
32
+ calendar.add(DayOfMonth.new(1, 1))
33
+
34
+ refute calendar.holiday?(a_day)
35
+ end
36
+
37
+ def test_a_bunch_of_days_of_month_can_be_a_holiday
38
+ calendar = Calendar.new
39
+
40
+ a_christmas = Date.new(2016, 12, 25)
41
+ a_january_first = Date.new(2016, 1, 1)
42
+
43
+ calendar.add(DayOfMonth.new(1, 1))
44
+ calendar.add(DayOfMonth.new(25, 12))
45
+
46
+ assert calendar.holiday?(a_christmas)
47
+ assert calendar.holiday?(a_january_first)
48
+ end
49
+
50
+ def test_a_day_of_month_rule_can_be_deleted
51
+ calendar = Calendar.new
52
+
53
+ date = Date.new(2016, 5, 1)
54
+
55
+ calendar.add(DayOfMonth.new(date.day, date.month))
56
+
57
+ assert calendar.holiday?(date)
58
+
59
+ calendar.remove(DayOfMonth.new(date.day, date.month))
60
+
61
+ refute calendar.holiday?(date)
62
+ end
63
+ end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ class DayOfWeekTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_a_day_of_week_can_be_a_holiday
8
+ calendar = Calendar.new
9
+
10
+ a_saturday = Date.new(2016, 4, 30)
11
+
12
+ calendar.add(DayOfWeek.new(a_saturday.wday))
13
+
14
+ assert calendar.holiday?(a_saturday)
15
+ end
16
+
17
+ def test_a_day_of_week_can__a_name
18
+ calendar = Calendar.new
19
+
20
+ a_saturday = Date.new(2016, 4, 30)
21
+
22
+ calendar.add(DayOfWeek.new(a_saturday.wday, 'saturday night live'))
23
+
24
+ assert_equal 'saturday night live', calendar.holiday_name(a_saturday)
25
+ end
26
+
27
+ def test_a_day_of_week_with_no_a_name
28
+ calendar = Calendar.new
29
+
30
+ a_saturday = Date.new(2016, 4, 30)
31
+
32
+ calendar.add(DayOfWeek.new(a_saturday.wday))
33
+
34
+ assert_nil calendar.holiday_name(a_saturday)
35
+ end
36
+
37
+ def test_a_day_of_week_can_be_not_a_holiday
38
+ calendar = Calendar.new
39
+
40
+ a_monday = Date.new(2016, 5, 2)
41
+
42
+ refute calendar.holiday?(a_monday)
43
+ end
44
+
45
+ def test_a_bunch_of_days_can_be_a_holiday
46
+ calendar = Calendar.new
47
+
48
+ a_saturday = Date.new(2016, 4, 30)
49
+ a_sunday = Date.new(2016, 5, 1)
50
+
51
+ calendar.add(DayOfWeek.new(a_saturday.wday))
52
+ calendar.add(DayOfWeek.new(a_sunday.wday))
53
+
54
+ assert calendar.holiday?(a_sunday)
55
+ assert calendar.holiday?(a_saturday)
56
+ end
57
+
58
+ def test_a_day_of_week_rule_can_be_deleted
59
+ calendar = Calendar.new
60
+
61
+ date = Date.new(2016, 5, 1)
62
+
63
+ calendar.add(DayOfWeek.new(date.wday))
64
+
65
+ assert calendar.holiday?(date)
66
+
67
+ calendar.remove(DayOfWeek.new(date.wday))
68
+
69
+ refute calendar.holiday?(date)
70
+ end
71
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class EasterTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_easter
8
+ calendar = Calendar.new
9
+
10
+ date = Date.new(2016, 3, 27)
11
+
12
+ calendar.add(Easter)
13
+
14
+ assert calendar.holiday?(date)
15
+ end
16
+
17
+ def test_easter_can_have_name
18
+ calendar = Calendar.new
19
+
20
+ date = Date.new(2016, 3, 27)
21
+
22
+ Easter.name = 'pascua'
23
+
24
+ calendar.add(Easter)
25
+
26
+ assert_equal 'pascua', calendar.holiday_name(date)
27
+ end
28
+
29
+ def test_not_easter
30
+ calendar = Calendar.new
31
+
32
+ date = Date.new(2016, 3, 26)
33
+
34
+ calendar.add(Easter)
35
+
36
+ refute calendar.holiday?(date)
37
+ end
38
+
39
+ def test_remove_easter
40
+ calendar = Calendar.new
41
+
42
+ date = Date.new(2016, 3, 27)
43
+
44
+ calendar.add(Easter)
45
+
46
+ assert calendar.holiday?(date)
47
+
48
+ calendar.remove(Easter)
49
+
50
+ refute calendar.holiday?(date)
51
+ end
52
+ end
@@ -4,295 +4,53 @@ class CalendarTest < Minitest::Test
4
4
  include Feriados::Rules
5
5
  include Feriados
6
6
 
7
- def test_a_day_of_week_can_be_a_holiday
8
- calendar = Calendar.new
9
-
10
- a_saturday = Date.new(2016, 4, 30)
11
-
12
- calendar.add(DayOfWeek.new(a_saturday.wday))
13
-
14
- assert calendar.holiday?(a_saturday)
15
- end
16
-
17
- def test_a_day_of_week_can_be_not_a_holiday
18
- calendar = Calendar.new
19
-
20
- a_monday = Date.new(2016, 5, 2)
21
-
22
- refute calendar.holiday?(a_monday)
23
- end
24
-
25
- def test_a_bunch_of_days_can_be_a_holiday
26
- calendar = Calendar.new
27
-
28
- a_saturday = Date.new(2016, 4, 30)
29
- a_sunday = Date.new(2016, 5, 1)
30
-
31
- calendar.add(DayOfWeek.new(a_saturday.wday))
32
- calendar.add(DayOfWeek.new(a_sunday.wday))
33
-
34
- assert calendar.holiday?(a_sunday)
35
- assert calendar.holiday?(a_saturday)
36
- end
37
-
38
- def test_a_day_of_week_rule_can_be_deleted
39
- calendar = Calendar.new
40
-
41
- date = Date.new(2016, 5, 1)
42
-
43
- calendar.add(DayOfWeek.new(date.wday))
44
-
45
- assert calendar.holiday?(date)
46
-
47
- calendar.remove(DayOfWeek.new(date.wday))
48
-
49
- refute calendar.holiday?(date)
50
- end
51
-
52
- def test_a_date_of_month_can_be_a_holiday
53
- calendar = Calendar.new
54
-
55
- a_january_first = Date.new(2016, 1, 1)
56
-
57
- calendar.add(DayOfMonth.new(1, 1))
58
-
59
- assert calendar.holiday?(a_january_first)
60
- end
61
-
62
- def test_a_day_of_month_can_be_not_a_holiday
63
- calendar = Calendar.new
64
-
65
- a_day = Date.new(2016, 1, 2)
66
-
67
- calendar.add(DayOfMonth.new(1, 1))
68
-
69
- refute calendar.holiday?(a_day)
70
- end
71
-
72
- def test_a_bunch_of_days_of_month_can_be_a_holiday
73
- calendar = Calendar.new
74
-
75
- a_christmas = Date.new(2016, 12, 25)
76
- a_january_first = Date.new(2016, 1, 1)
77
-
78
- calendar.add(DayOfMonth.new(1, 1))
79
- calendar.add(DayOfMonth.new(25, 12))
80
-
81
- assert calendar.holiday?(a_christmas)
82
- assert calendar.holiday?(a_january_first)
83
- end
84
-
85
- def test_a_day_of_month_rule_can_be_deleted
86
- calendar = Calendar.new
87
-
88
- date = Date.new(2016, 5, 1)
89
-
90
- calendar.add(DayOfMonth.new(date.day, date.month))
91
-
92
- assert calendar.holiday?(date)
93
-
94
- calendar.remove(DayOfMonth.new(date.day, date.month))
95
-
96
- refute calendar.holiday?(date)
97
- end
98
-
99
- def test_a_date_can_be_a_holiday
100
- calendar = Calendar.new
101
-
102
- date = Date.new(2016, 1, 1)
103
-
104
- calendar.add(FixDate.new(2016, 1, 1))
105
-
106
- assert calendar.holiday?(date)
107
- end
108
-
109
- def test_a_date_can_be_not_a_holiday
110
- calendar = Calendar.new
111
-
112
- refute calendar.holiday?(Date.new(2016, 1, 1))
113
- end
114
-
115
- def test_a_bunch_of_dates_can_be_a_holiday
116
- calendar = Calendar.new
117
-
118
- date = Date.new(2016, 4, 29)
119
- another_date = Date.new(2016, 4, 30)
120
-
121
- calendar.add(FixDate.new(2016, 4, 29))
122
- calendar.add(FixDate.new(2016, 4, 30))
123
-
124
- assert calendar.holiday?(date)
125
- assert calendar.holiday?(another_date)
126
- end
127
-
128
- def test_a_date_rule_can_be_deleted
129
- calendar = Calendar.new
130
-
131
- date = Date.new(2016, 5, 1)
132
-
133
- calendar.add(FixDate.new(date.year, date.month, date.day))
134
-
135
- assert calendar.holiday?(date)
136
-
137
- calendar.remove(FixDate.new(date.year, date.month, date.day))
138
-
139
- refute calendar.holiday?(date)
140
- end
141
-
142
- def test_easter
143
- calendar = Calendar.new
144
-
145
- date = Date.new(2016, 3, 27)
146
-
147
- calendar.add(Easter)
148
-
149
- assert calendar.holiday?(date)
150
- end
151
-
152
- def test_not_easter
153
- calendar = Calendar.new
154
-
155
- date = Date.new(2016, 3, 26)
156
-
157
- calendar.add(Easter)
158
-
159
- refute calendar.holiday?(date)
160
- end
161
-
162
- def test_remove_easter
163
- calendar = Calendar.new
164
-
165
- date = Date.new(2016, 3, 27)
166
-
167
- calendar.add(Easter)
168
-
169
- assert calendar.holiday?(date)
170
-
171
- calendar.remove(Easter)
172
-
173
- refute calendar.holiday?(date)
174
- end
175
-
176
- def test_holy_friday
177
- calendar = Calendar.new
178
-
179
- date = Date.new(2016, 3, 25)
180
-
181
- calendar.add(HolyFriday)
182
-
183
- assert calendar.holiday?(date)
184
- end
185
-
186
- def test_not_holy_friday
187
- calendar = Calendar.new
188
-
189
- date = Date.new(2016, 3, 20)
190
-
191
- calendar.add(HolyFriday)
192
-
193
- refute calendar.holiday?(date)
194
- end
195
-
196
- def test_remove_holy_friday
197
- calendar = Calendar.new
198
-
199
- date = Date.new(2016, 3, 25)
200
-
201
- calendar.add(HolyFriday)
202
-
203
- assert calendar.holiday?(date)
204
-
205
- calendar.remove(HolyFriday)
206
-
207
- refute calendar.holiday?(date)
208
- end
209
-
210
- def test_holy_thursday
211
- calendar = Calendar.new
212
-
213
- date = Date.new(2016, 3, 24)
214
-
215
- calendar.add(HolyThursday)
216
-
217
- assert calendar.holiday?(date)
218
- end
219
-
220
- def test_fix_week_day_rule
221
- calendar = Calendar.new
222
-
223
- calendar.add(FixWeekDay.new(4, 1, 11))
224
- calendar.add(FixWeekDay.new(3, 1, 8))
225
-
226
- assert calendar.holiday?(Date.new(2016, 11, 28))
227
- assert calendar.holiday?(Date.new(2016, 8, 15))
228
- end
229
-
230
- def test_not_fix_week_day_rule
231
- calendar = Calendar.new
232
-
233
- date = Date.new(2016, 5, 2)
234
-
235
- calendar.add(FixWeekDay.new(2, 1, 5))
236
-
237
- refute calendar.holiday?(date)
238
- end
239
-
240
- def test_remove_fix_week_day_rule
241
- calendar = Calendar.new
242
-
243
- date = Date.new(2016, 11, 28)
244
-
245
- calendar.add(FixWeekDay.new(4, 1, 11))
246
-
247
- assert calendar.holiday?(date)
248
-
249
- calendar.remove(FixWeekDay.new(4, 1, 11))
250
-
251
- refute calendar.holiday?(date)
252
- end
253
-
254
7
  def test_load_argentinian_holidays
255
8
  calendar = Calendar.new
256
9
 
257
- calendar.load_rules(File.join(__dir__, './argentina.yml'))
258
-
259
- holidays_2020 = [
260
- [1, 1],
261
- [2, 24],
262
- [2, 25],
263
- [3, 23],
264
- [3, 24],
265
- [4, 2],
266
- [4, 9],
267
- [4, 10],
268
- [4, 12],
269
- [5, 1],
270
- [5, 25],
271
- [6, 15],
272
- [6, 20],
273
- [7, 9],
274
- [7, 10],
275
- [8, 17],
276
- [10, 12],
277
- [11, 23],
278
- [12, 7],
279
- [12, 8],
280
- [12, 25]
10
+ file = File.join(__dir__, './argentina.yml')
11
+ rules = YAML.load_file(file)
12
+
13
+ calendar.load(rules)
14
+
15
+ holidays2020_data = [
16
+ [1, 1, 'Año nuevo'],
17
+ [2, 24, 'Lunes de carnaval'],
18
+ [2, 25, 'Martes de carnaval'],
19
+ [3, 23, 'Feriado con fines turísticos'],
20
+ [3, 24, 'Día Nacional de la Memoria por la Verdad y la Justicia'],
21
+ [4, 2, 'Día del Veterano y de los Caídos en la Guerra de Malvinas'],
22
+ [4, 9, 'Jueves Santo'],
23
+ [4, 10, 'Viernes Santo'],
24
+ [4, 12, 'Pascua'],
25
+ [5, 1, 'Día del Trabajador'],
26
+ [5, 25, 'Día de la Revolución de Mayo'],
27
+ [6, 15, 'Día Paso a la Inmortalidad del General Martín Miguel de Güemes'],
28
+ [6, 20, 'Día de la Bandera'],
29
+ [7, 9, 'Día de la Independencia'],
30
+ [7, 10, 'Feriado con fines turísticos'],
31
+ [8, 17, 'Paso a la Inmortalidad del Gral. José de San Martín'],
32
+ [10, 12, 'Día del Respeto a la Diversidad Cultural'],
33
+ [11, 23, 'Día de la Soberanía Nacional'],
34
+ [12, 7, 'Feriado con fines turísticos'],
35
+ [12, 8, 'Inmaculada Concepción de María'],
36
+ [12, 25, 'Navidad']
281
37
  ]
282
38
 
283
- holidays_2020.each do |month, day|
284
- assert calendar.holiday?(Date.new(2020, month, day))
39
+ holidays2020_data.each do |month, day, description|
40
+ date = Date.new(2020, month, day)
41
+
42
+ assert calendar.holiday?(date)
43
+
44
+ assert_equal description, calendar.holiday_name(date), date
285
45
  end
286
46
 
287
47
  date = Date.new(2020, 1, 1)
288
- assertions = []
289
- 0.upto(365) do |day|
290
- today = date + day
291
- holiday = calendar.holiday?(today)
48
+ detected_holidays = []
292
49
 
293
- assertions << holiday
50
+ 0.upto(365) do |day|
51
+ detected_holidays << calendar.holiday?(date + day)
294
52
  end
295
53
 
296
- assert_equal(holidays_2020.count, assertions.count { |e| e })
54
+ assert_equal(holidays2020_data.count, detected_holidays.count { |e| e })
297
55
  end
298
56
  end
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+
3
+ class FixDateTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_a_fix_date_can_be_a_holiday
8
+ calendar = Calendar.new
9
+
10
+ date = Date.new(2016, 1, 1)
11
+
12
+ calendar.add(FixDate.new(2016, 1, 1))
13
+
14
+ assert calendar.holiday?(date)
15
+ end
16
+
17
+ def test_a_fix_date_can_have_a_name
18
+ calendar = Calendar.new
19
+
20
+ date = Date.new(2016, 1, 1)
21
+
22
+ calendar.add(FixDate.new(2016, 1, 1, 'new year'))
23
+
24
+ assert calendar.holiday_name(date)
25
+ end
26
+
27
+ def test_a_fix_date_can_be_not_a_holiday
28
+ calendar = Calendar.new
29
+
30
+ refute calendar.holiday?(Date.new(2016, 1, 1))
31
+ end
32
+
33
+ def test_a_bunch_of_dates_can_be_a_holiday
34
+ calendar = Calendar.new
35
+
36
+ date = Date.new(2016, 4, 29)
37
+ another_date = Date.new(2016, 4, 30)
38
+
39
+ calendar.add(FixDate.new(2016, 4, 29))
40
+ calendar.add(FixDate.new(2016, 4, 30))
41
+
42
+ assert calendar.holiday?(date)
43
+ assert calendar.holiday?(another_date)
44
+ end
45
+
46
+ def test_a_fix_date_rule_can_be_deleted
47
+ calendar = Calendar.new
48
+
49
+ date = Date.new(2016, 5, 1)
50
+
51
+ calendar.add(FixDate.new(date.year, date.month, date.day))
52
+
53
+ assert calendar.holiday?(date)
54
+
55
+ calendar.remove(FixDate.new(date.year, date.month, date.day))
56
+
57
+ refute calendar.holiday?(date)
58
+ end
59
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+ class FixWeekDayTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_fix_week_day_rule
8
+ calendar = Calendar.new
9
+
10
+ calendar.add(FixWeekDay.new(4, 1, 11))
11
+ calendar.add(FixWeekDay.new(3, 1, 8))
12
+
13
+ assert calendar.holiday?(Date.new(2016, 11, 28))
14
+ assert calendar.holiday?(Date.new(2016, 8, 15))
15
+ end
16
+
17
+ def test_fix_week_can_have_a_name
18
+ calendar = Calendar.new
19
+
20
+ calendar.add(FixWeekDay.new(3, 1, 8, 'nice holiday'))
21
+
22
+ assert_equal 'nice holiday', calendar.holiday_name(Date.new(2016, 8, 15))
23
+ end
24
+
25
+ def test_not_fix_week_day_rule
26
+ calendar = Calendar.new
27
+
28
+ date = Date.new(2016, 5, 2)
29
+
30
+ calendar.add(FixWeekDay.new(2, 1, 5))
31
+
32
+ refute calendar.holiday?(date)
33
+ end
34
+
35
+ def test_remove_fix_week_day_rule
36
+ calendar = Calendar.new
37
+
38
+ date = Date.new(2016, 11, 28)
39
+
40
+ calendar.add(FixWeekDay.new(4, 1, 11))
41
+
42
+ assert calendar.holiday?(date)
43
+
44
+ calendar.remove(FixWeekDay.new(4, 1, 11))
45
+
46
+ refute calendar.holiday?(date)
47
+ end
48
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class HolyFridayTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_holy_friday
8
+ calendar = Calendar.new
9
+
10
+ date = Date.new(2016, 3, 25)
11
+
12
+ calendar.add(HolyFriday)
13
+
14
+ assert calendar.holiday?(date)
15
+ end
16
+
17
+ def test_holy_friday_has_name
18
+ calendar = Calendar.new
19
+
20
+ date = Date.new(2016, 3, 25)
21
+
22
+ calendar.add(HolyFriday)
23
+
24
+ HolyFriday.name = 'viernes santo'
25
+
26
+ assert_equal 'viernes santo', calendar.holiday_name(date)
27
+ end
28
+
29
+ def test_not_holy_friday
30
+ calendar = Calendar.new
31
+
32
+ date = Date.new(2016, 3, 20)
33
+
34
+ calendar.add(HolyFriday)
35
+
36
+ refute calendar.holiday?(date)
37
+ end
38
+
39
+ def test_remove_holy_friday
40
+ calendar = Calendar.new
41
+
42
+ date = Date.new(2016, 3, 25)
43
+
44
+ calendar.add(HolyFriday)
45
+
46
+ assert calendar.holiday?(date)
47
+
48
+ calendar.remove(HolyFriday)
49
+
50
+ refute calendar.holiday?(date)
51
+ end
52
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class HolyThursdayTest < Minitest::Test
4
+ include Feriados::Rules
5
+ include Feriados
6
+
7
+ def test_holy_thursday
8
+ calendar = Calendar.new
9
+
10
+ date = Date.new(2016, 3, 24)
11
+
12
+ calendar.add(HolyThursday)
13
+
14
+ assert calendar.holiday?(date)
15
+ end
16
+
17
+ def test_holy_thursday_has_name
18
+ calendar = Calendar.new
19
+
20
+ date = Date.new(2016, 3, 24)
21
+
22
+ calendar.add(HolyThursday)
23
+
24
+ HolyThursday.name = 'jueves santo'
25
+
26
+ assert_equal 'jueves santo', calendar.holiday_name(date)
27
+ end
28
+ end
data/test/runner.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ARGV.select do |argument|
2
2
  case argument
3
- when /\*/ then
3
+ when /\*/
4
4
  Dir.glob(argument).each do |file|
5
5
  require File.expand_path(file)
6
6
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
1
4
  require 'minitest/autorun'
2
5
 
3
6
  require 'feriados'
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feriados
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.2.2
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 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-02-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.17'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.17'
13
41
  description: Make holidays calendars from rules
14
42
  email:
15
43
  - srabuini@gmail.com
@@ -28,11 +56,19 @@ files:
28
56
  - lib/feriados/rules/easter.rb
29
57
  - lib/feriados/rules/fix_date.rb
30
58
  - lib/feriados/rules/fix_week_day.rb
59
+ - lib/feriados/rules/function.rb
31
60
  - lib/feriados/rules/holy_friday.rb
32
61
  - lib/feriados/rules/holy_thursday.rb
33
62
  - lib/feriados/rules/rule_base.rb
34
63
  - test/date_test.rb
64
+ - test/day_of_month_test.rb
65
+ - test/day_off_week_test.rb
66
+ - test/easter_test.rb
35
67
  - test/feriados_test.rb
68
+ - test/fix_date_test.rb
69
+ - test/fix_week_day_test.rb
70
+ - test/holy_friday_test.rb
71
+ - test/holy_thursday_test.rb
36
72
  - test/runner.rb
37
73
  - test/test_helper.rb
38
74
  homepage: https://github.com/srabuini/feriados
@@ -59,7 +95,14 @@ signing_key:
59
95
  specification_version: 4
60
96
  summary: Holidays calendars
61
97
  test_files:
98
+ - test/holy_thursday_test.rb
99
+ - test/easter_test.rb
62
100
  - test/date_test.rb
101
+ - test/fix_week_day_test.rb
102
+ - test/fix_date_test.rb
63
103
  - test/feriados_test.rb
104
+ - test/day_off_week_test.rb
105
+ - test/day_of_month_test.rb
64
106
  - test/test_helper.rb
107
+ - test/holy_friday_test.rb
65
108
  - test/runner.rb