holidays 1.0.8 → 1.1.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 +12 -0
- data/README.md +19 -0
- data/Rakefile +1 -2
- data/data/au.yaml +81 -1
- data/data/ca.yaml +40 -3
- data/data/cr.yaml +63 -0
- data/data/federal_reserve.yaml +4 -28
- data/data/fedex.yaml +56 -0
- data/data/index.yaml +2 -0
- data/data/jp.yaml +8 -1
- data/lib/holidays.rb +219 -0
- data/lib/holidays/MANIFEST +2 -0
- data/lib/holidays/ar.rb +1 -1
- data/lib/holidays/at.rb +1 -1
- data/lib/holidays/au.rb +27 -4
- data/lib/holidays/be.rb +1 -1
- data/lib/holidays/br.rb +1 -1
- data/lib/holidays/ca.rb +6 -3
- data/lib/holidays/ch.rb +1 -1
- data/lib/holidays/cl.rb +1 -1
- data/lib/holidays/cr.rb +39 -0
- data/lib/holidays/cz.rb +1 -1
- data/lib/holidays/de.rb +2 -2
- data/lib/holidays/dk.rb +1 -1
- data/lib/holidays/ecb_target.rb +1 -1
- data/lib/holidays/el.rb +1 -1
- data/lib/holidays/es.rb +1 -1
- data/lib/holidays/europe.rb +75 -32
- data/lib/holidays/fed_ex.rb +36 -0
- data/lib/holidays/federal_reserve.rb +5 -8
- data/lib/holidays/fi.rb +1 -1
- data/lib/holidays/fr.rb +1 -1
- data/lib/holidays/gb.rb +1 -1
- data/lib/holidays/hr.rb +1 -1
- data/lib/holidays/hu.rb +1 -1
- data/lib/holidays/ie.rb +1 -1
- data/lib/holidays/is.rb +1 -1
- data/lib/holidays/it.rb +1 -1
- data/lib/holidays/jp.rb +3 -2
- data/lib/holidays/li.rb +1 -1
- data/lib/holidays/lt.rb +1 -1
- data/lib/holidays/ma.rb +1 -1
- data/lib/holidays/mx.rb +1 -1
- data/lib/holidays/nerc.rb +1 -1
- data/lib/holidays/nl.rb +1 -1
- data/lib/holidays/no.rb +1 -1
- data/lib/holidays/north_america.rb +8 -5
- data/lib/holidays/nyse.rb +1 -1
- data/lib/holidays/nz.rb +1 -1
- data/lib/holidays/pl.rb +1 -1
- data/lib/holidays/pt.rb +1 -1
- data/lib/holidays/ro.rb +1 -1
- data/lib/holidays/scandinavia.rb +18 -11
- data/lib/holidays/se.rb +1 -1
- data/lib/holidays/sg.rb +1 -1
- data/lib/holidays/si.rb +1 -1
- data/lib/holidays/sk.rb +1 -1
- data/lib/holidays/united_nations.rb +3 -3
- data/lib/holidays/ups.rb +1 -1
- data/lib/holidays/us.rb +1 -1
- data/lib/holidays/ve.rb +1 -1
- data/lib/holidays/version.rb +1 -1
- data/lib/holidays/vi.rb +1 -1
- data/lib/holidays/za.rb +1 -1
- data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
- data/test/data/test_multiple_custom_holiday_defs.yaml +9 -0
- data/test/data/test_single_custom_holiday_defs.yaml +9 -0
- data/test/defs/test_defs_au.rb +32 -0
- data/test/defs/test_defs_ca.rb +25 -0
- data/test/defs/test_defs_cr.rb +22 -0
- data/test/defs/test_defs_de.rb +6 -6
- data/test/defs/test_defs_europe.rb +24 -0
- data/test/defs/test_defs_fed_ex.rb +21 -0
- data/test/defs/test_defs_federal_reserve.rb +2 -15
- data/test/defs/test_defs_jp.rb +1 -0
- data/test/defs/test_defs_north_america.rb +25 -0
- data/test/defs/test_defs_united_nations.rb +12 -0
- data/test/test_custom_holidays.rb +35 -0
- data/test/test_parse_definitions.rb +24 -0
- metadata +22 -3
- data/data/build_defs.rb +0 -157
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/test_helper'
|
2
|
+
|
3
|
+
class ParseDefinitionsTests < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_single_parse_definition_file
|
6
|
+
module_src, test_src = Holidays.parse_definition_files_and_return_source(:test_region, 'test/data/test_single_custom_holiday_defs.yaml')
|
7
|
+
|
8
|
+
assert_equal false, module_src.empty?
|
9
|
+
assert_equal false, test_src.empty?
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_parsing_without_def_file_results_in_error
|
13
|
+
assert_raises ArgumentError do
|
14
|
+
Holidays.parse_definition_files_and_return_source(:custom)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_parsing_of_multiple_definition_files
|
19
|
+
module_src, test_src = Holidays.parse_definition_files_and_return_source(:test_region_multiple, 'test/data/test_single_custom_holiday_defs.yaml', 'test/data/test_custom_govt_holiday_defs.yaml')
|
20
|
+
|
21
|
+
assert_equal false, module_src.empty?
|
22
|
+
assert_equal false, test_src.empty?
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: holidays
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Dunae
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,10 +58,10 @@ files:
|
|
58
58
|
- data/au.yaml
|
59
59
|
- data/be.yaml
|
60
60
|
- data/br.yaml
|
61
|
-
- data/build_defs.rb
|
62
61
|
- data/ca.yaml
|
63
62
|
- data/ch.yaml
|
64
63
|
- data/cl.yaml
|
64
|
+
- data/cr.yaml
|
65
65
|
- data/cz.yaml
|
66
66
|
- data/de.yaml
|
67
67
|
- data/dk.yaml
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- data/el.yaml
|
70
70
|
- data/es.yaml
|
71
71
|
- data/federal_reserve.yaml
|
72
|
+
- data/fedex.yaml
|
72
73
|
- data/fi.yaml
|
73
74
|
- data/fr.yaml
|
74
75
|
- data/gb.yaml
|
@@ -113,6 +114,7 @@ files:
|
|
113
114
|
- lib/holidays/ca.rb
|
114
115
|
- lib/holidays/ch.rb
|
115
116
|
- lib/holidays/cl.rb
|
117
|
+
- lib/holidays/cr.rb
|
116
118
|
- lib/holidays/cz.rb
|
117
119
|
- lib/holidays/de.rb
|
118
120
|
- lib/holidays/dk.rb
|
@@ -120,6 +122,7 @@ files:
|
|
120
122
|
- lib/holidays/el.rb
|
121
123
|
- lib/holidays/es.rb
|
122
124
|
- lib/holidays/europe.rb
|
125
|
+
- lib/holidays/fed_ex.rb
|
123
126
|
- lib/holidays/federal_reserve.rb
|
124
127
|
- lib/holidays/fi.rb
|
125
128
|
- lib/holidays/fr.rb
|
@@ -155,6 +158,9 @@ files:
|
|
155
158
|
- lib/holidays/version.rb
|
156
159
|
- lib/holidays/vi.rb
|
157
160
|
- lib/holidays/za.rb
|
161
|
+
- test/data/test_custom_govt_holiday_defs.yaml
|
162
|
+
- test/data/test_multiple_custom_holiday_defs.yaml
|
163
|
+
- test/data/test_single_custom_holiday_defs.yaml
|
158
164
|
- test/defs/test_defs_ar.rb
|
159
165
|
- test/defs/test_defs_at.rb
|
160
166
|
- test/defs/test_defs_au.rb
|
@@ -163,6 +169,7 @@ files:
|
|
163
169
|
- test/defs/test_defs_ca.rb
|
164
170
|
- test/defs/test_defs_ch.rb
|
165
171
|
- test/defs/test_defs_cl.rb
|
172
|
+
- test/defs/test_defs_cr.rb
|
166
173
|
- test/defs/test_defs_cz.rb
|
167
174
|
- test/defs/test_defs_de.rb
|
168
175
|
- test/defs/test_defs_dk.rb
|
@@ -170,6 +177,7 @@ files:
|
|
170
177
|
- test/defs/test_defs_el.rb
|
171
178
|
- test/defs/test_defs_es.rb
|
172
179
|
- test/defs/test_defs_europe.rb
|
180
|
+
- test/defs/test_defs_fed_ex.rb
|
173
181
|
- test/defs/test_defs_federal_reserve.rb
|
174
182
|
- test/defs/test_defs_fi.rb
|
175
183
|
- test/defs/test_defs_fr.rb
|
@@ -198,16 +206,19 @@ files:
|
|
198
206
|
- test/defs/test_defs_sg.rb
|
199
207
|
- test/defs/test_defs_si.rb
|
200
208
|
- test/defs/test_defs_sk.rb
|
209
|
+
- test/defs/test_defs_united_nations.rb
|
201
210
|
- test/defs/test_defs_ups.rb
|
202
211
|
- test/defs/test_defs_us.rb
|
203
212
|
- test/defs/test_defs_ve.rb
|
204
213
|
- test/defs/test_defs_vi.rb
|
205
214
|
- test/defs/test_defs_za.rb
|
206
215
|
- test/test_all_regions.rb
|
216
|
+
- test/test_custom_holidays.rb
|
207
217
|
- test/test_date.rb
|
208
218
|
- test/test_helper.rb
|
209
219
|
- test/test_holidays.rb
|
210
220
|
- test/test_multiple_regions.rb
|
221
|
+
- test/test_parse_definitions.rb
|
211
222
|
homepage: https://github.com/alexdunae/holidays
|
212
223
|
licenses:
|
213
224
|
- MIT
|
@@ -233,6 +244,9 @@ signing_key:
|
|
233
244
|
specification_version: 4
|
234
245
|
summary: A collection of Ruby methods to deal with statutory and other holidays.
|
235
246
|
test_files:
|
247
|
+
- test/data/test_custom_govt_holiday_defs.yaml
|
248
|
+
- test/data/test_multiple_custom_holiday_defs.yaml
|
249
|
+
- test/data/test_single_custom_holiday_defs.yaml
|
236
250
|
- test/defs/test_defs_ar.rb
|
237
251
|
- test/defs/test_defs_at.rb
|
238
252
|
- test/defs/test_defs_au.rb
|
@@ -241,6 +255,7 @@ test_files:
|
|
241
255
|
- test/defs/test_defs_ca.rb
|
242
256
|
- test/defs/test_defs_ch.rb
|
243
257
|
- test/defs/test_defs_cl.rb
|
258
|
+
- test/defs/test_defs_cr.rb
|
244
259
|
- test/defs/test_defs_cz.rb
|
245
260
|
- test/defs/test_defs_de.rb
|
246
261
|
- test/defs/test_defs_dk.rb
|
@@ -248,6 +263,7 @@ test_files:
|
|
248
263
|
- test/defs/test_defs_el.rb
|
249
264
|
- test/defs/test_defs_es.rb
|
250
265
|
- test/defs/test_defs_europe.rb
|
266
|
+
- test/defs/test_defs_fed_ex.rb
|
251
267
|
- test/defs/test_defs_federal_reserve.rb
|
252
268
|
- test/defs/test_defs_fi.rb
|
253
269
|
- test/defs/test_defs_fr.rb
|
@@ -276,13 +292,16 @@ test_files:
|
|
276
292
|
- test/defs/test_defs_sg.rb
|
277
293
|
- test/defs/test_defs_si.rb
|
278
294
|
- test/defs/test_defs_sk.rb
|
295
|
+
- test/defs/test_defs_united_nations.rb
|
279
296
|
- test/defs/test_defs_ups.rb
|
280
297
|
- test/defs/test_defs_us.rb
|
281
298
|
- test/defs/test_defs_ve.rb
|
282
299
|
- test/defs/test_defs_vi.rb
|
283
300
|
- test/defs/test_defs_za.rb
|
284
301
|
- test/test_all_regions.rb
|
302
|
+
- test/test_custom_holidays.rb
|
285
303
|
- test/test_date.rb
|
286
304
|
- test/test_helper.rb
|
287
305
|
- test/test_holidays.rb
|
288
306
|
- test/test_multiple_regions.rb
|
307
|
+
- test/test_parse_definitions.rb
|
data/data/build_defs.rb
DELETED
@@ -1,157 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
# Functions are stored in generated files as both Procs (:function) and
|
4
|
-
# Strings (:function_id). The String version makes comparisons of Procs much
|
5
|
-
# easier.
|
6
|
-
#
|
7
|
-
# TODO:
|
8
|
-
# - better comparison of existing rules
|
9
|
-
def parse_holiday_defs(module_name, files)
|
10
|
-
regions = []
|
11
|
-
rules_by_month = {}
|
12
|
-
custom_methods = {}
|
13
|
-
test_strs = []
|
14
|
-
|
15
|
-
files.each do |file|
|
16
|
-
def_file = YAML.load_file(file)
|
17
|
-
puts " Loading #{file}"
|
18
|
-
if def_file['months']
|
19
|
-
puts " - importing dates..."
|
20
|
-
def_file['months'].each do |month, definitions|
|
21
|
-
rules_by_month[month] = [] unless rules_by_month[month]
|
22
|
-
definitions.each do |definition|
|
23
|
-
rule = {}
|
24
|
-
definition.each do |key, val|
|
25
|
-
rule[key] = val
|
26
|
-
end
|
27
|
-
|
28
|
-
rule['regions'] = rule['regions'].collect { |r| r.to_sym }
|
29
|
-
|
30
|
-
regions << rule['regions']
|
31
|
-
|
32
|
-
exists = false
|
33
|
-
rules_by_month[month].each do |ex|
|
34
|
-
if ex['name'] == rule['name'] and ex['wday'] == rule['wday'] and ex['mday'] == rule['mday'] and ex['week'] == rule['week'] and ex['type'] == rule['type'] and ex['function'] == rule['function'] and ex['observed'] == rule['observed']
|
35
|
-
ex['regions'] << rule['regions'].flatten
|
36
|
-
exists = true
|
37
|
-
end
|
38
|
-
end
|
39
|
-
unless exists
|
40
|
-
rules_by_month[month] << rule
|
41
|
-
end
|
42
|
-
|
43
|
-
end # /defs.each
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
if def_file['methods']
|
48
|
-
puts " - importing methods..."
|
49
|
-
def_file['methods'].each do |name, code|
|
50
|
-
custom_methods[name] = code
|
51
|
-
end # /methods.each
|
52
|
-
end
|
53
|
-
|
54
|
-
if def_file['tests']
|
55
|
-
puts " - importing tests..."
|
56
|
-
test_strs << def_file['tests']
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# Build the definitions
|
61
|
-
month_strs = []
|
62
|
-
rules_by_month.each do |month, rules|
|
63
|
-
month_str = " #{month.to_s} => ["
|
64
|
-
rule_strings = []
|
65
|
-
rules.each do |rule|
|
66
|
-
str = '{'
|
67
|
-
if rule['mday']
|
68
|
-
str << ":mday => #{rule['mday']}, "
|
69
|
-
elsif rule['function']
|
70
|
-
str << ":function => lambda { |year| Holidays.#{rule['function']} }, "
|
71
|
-
str << ":function_id => \"#{rule['function'].to_s}\", "
|
72
|
-
else
|
73
|
-
str << ":wday => #{rule['wday']}, :week => #{rule['week']}, "
|
74
|
-
end
|
75
|
-
|
76
|
-
if rule['observed']
|
77
|
-
str << ":observed => lambda { |date| Holidays.#{rule['observed']}(date) }, "
|
78
|
-
str << ":observed_id => \"#{rule['observed'].to_s}\", "
|
79
|
-
end
|
80
|
-
|
81
|
-
if rule['type']
|
82
|
-
str << ":type => :#{rule['type']}, "
|
83
|
-
end
|
84
|
-
|
85
|
-
# shouldn't allow the same region twice
|
86
|
-
str << ":name => \"#{rule['name']}\", :regions => [:" + rule['regions'].uniq.join(', :') + "]}"
|
87
|
-
rule_strings << str
|
88
|
-
end
|
89
|
-
month_str << rule_strings.join(",\n ") + "]"
|
90
|
-
month_strs << month_str
|
91
|
-
end
|
92
|
-
|
93
|
-
month_strs.join(",\n")
|
94
|
-
|
95
|
-
|
96
|
-
# Build the methods
|
97
|
-
method_str = ''
|
98
|
-
custom_methods.each do |key, code|
|
99
|
-
method_str << code + "\n\n"
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
# Build the module file
|
104
|
-
module_src =<<-EOM
|
105
|
-
# encoding: utf-8
|
106
|
-
module Holidays
|
107
|
-
# This file is generated by the Ruby Holidays gem.
|
108
|
-
#
|
109
|
-
# Definitions loaded: #{files.join(', ')}
|
110
|
-
#
|
111
|
-
# To use the definitions in this file, load it right after you load the
|
112
|
-
# Holiday gem:
|
113
|
-
#
|
114
|
-
# require 'holidays'
|
115
|
-
# require 'holidays/#{module_name.downcase}'
|
116
|
-
#
|
117
|
-
# All the definitions are available at https://github.com/alexdunae/holidays
|
118
|
-
module #{module_name} # :nodoc:
|
119
|
-
def self.defined_regions
|
120
|
-
[:#{regions.flatten.uniq.join(', :')}]
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.holidays_by_month
|
124
|
-
{
|
125
|
-
#{month_strs.join(",\n")}
|
126
|
-
}
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
#{method_str}
|
131
|
-
end
|
132
|
-
|
133
|
-
Holidays.merge_defs(Holidays::#{module_name}.defined_regions, Holidays::#{module_name}.holidays_by_month)
|
134
|
-
EOM
|
135
|
-
|
136
|
-
|
137
|
-
# Build the test file
|
138
|
-
unless test_strs.empty?
|
139
|
-
test_src =<<-EndOfTests
|
140
|
-
# encoding: utf-8
|
141
|
-
require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
|
142
|
-
|
143
|
-
# This file is generated by the Ruby Holiday gem.
|
144
|
-
#
|
145
|
-
# Definitions loaded: #{files.join(', ')}
|
146
|
-
class #{module_name.capitalize}DefinitionTests < Test::Unit::TestCase # :nodoc:
|
147
|
-
|
148
|
-
def test_#{module_name.downcase}
|
149
|
-
#{test_strs.join("\n\n")}
|
150
|
-
end
|
151
|
-
end
|
152
|
-
EndOfTests
|
153
|
-
end
|
154
|
-
|
155
|
-
return module_src, test_src || ''
|
156
|
-
|
157
|
-
end
|