rholidays 0.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.
- data/History.txt +4 -0
- data/README.md +64 -0
- data/README.txt +78 -0
- data/Rakefile +18 -0
- data/bin/rholidays +8 -0
- data/lib/hash.rb +167 -0
- data/lib/holidays.rb +335 -0
- data/lib/rholidays.rb +61 -0
- data/nbproject/private/private.properties +2 -0
- data/nbproject/project.properties +7 -0
- data/nbproject/project.xml +15 -0
- data/spec/rholidays_spec.rb +6 -0
- data/spec/spec_helper.rb +15 -0
- data/test/check_spreadsheet.rb +117 -0
- data/test/ferien_free.ods +0 -0
- data/test/ferien_paid - Kopie.ods +0 -0
- data/test/test_rholidays.rb +223 -0
- data/version.txt +1 -0
- metadata +93 -0
data/History.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
rholidays
|
2
|
+
===========
|
3
|
+
|
4
|
+
RHolidays ermittelt Ferientermine (z. B. Sommerferien in Bayern im Jahr 2011)
|
5
|
+
|
6
|
+
Features
|
7
|
+
--------
|
8
|
+
|
9
|
+
* Liste der unterstuetzten Laender
|
10
|
+
* Liste der definierten Regionen (Bundeslaender) je Land
|
11
|
+
* Liste der Ferienarten je Land
|
12
|
+
* Ermittelln eines spezifischen Ferientyps (z.B. Sommerferien Bayern in Deutschland fuer 2011)
|
13
|
+
* Momentan sind die Laender Deutschland und Oesterreich implementiert
|
14
|
+
|
15
|
+
Examples
|
16
|
+
--------
|
17
|
+
|
18
|
+
require 'rholidays'
|
19
|
+
# implementierte Laender
|
20
|
+
laender = Holidays.countries # [:de,:at]
|
21
|
+
|
22
|
+
# ...
|
23
|
+
|
24
|
+
Requirements
|
25
|
+
------------
|
26
|
+
|
27
|
+
* no specific requirements, all dependent gems will be installed automatically
|
28
|
+
|
29
|
+
Install
|
30
|
+
-------
|
31
|
+
|
32
|
+
* [sudo] gem install rholidays
|
33
|
+
|
34
|
+
Author
|
35
|
+
------
|
36
|
+
|
37
|
+
Thomas Preymesser (thopre@gmail.com)
|
38
|
+
|
39
|
+
|
40
|
+
License
|
41
|
+
-------
|
42
|
+
|
43
|
+
(The MIT License)
|
44
|
+
|
45
|
+
Copyright (c) 2011 FIXME (author's name)
|
46
|
+
|
47
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
48
|
+
a copy of this software and associated documentation files (the
|
49
|
+
'Software'), to deal in the Software without restriction, including
|
50
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
51
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
52
|
+
permit persons to whom the Software is furnished to do so, subject to
|
53
|
+
the following conditions:
|
54
|
+
|
55
|
+
The above copyright notice and this permission notice shall be
|
56
|
+
included in all copies or substantial portions of the Software.
|
57
|
+
|
58
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
59
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
60
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
61
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
62
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
63
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
64
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.txt
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
|
3
|
+
= rholidays
|
4
|
+
|
5
|
+
Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern im Jahr 2011)
|
6
|
+
|
7
|
+
== Features
|
8
|
+
|
9
|
+
* Liste der unterstützten Länder
|
10
|
+
* Liste der definierten Regionen (in Deutschland die Bundesländer) je Land
|
11
|
+
* Liste der Ferienarten je Land
|
12
|
+
* Ermitteln eines spezifischen Ferientyps (z.B. Sommerferien Bayern in Deutschland für 2011)
|
13
|
+
* Momentan sind die Länder Deutschland und Österreich implementiert
|
14
|
+
|
15
|
+
== Beispiele
|
16
|
+
|
17
|
+
require 'rholidays'
|
18
|
+
|
19
|
+
# Sommerferien 2011 in Berlin (Deutschland)
|
20
|
+
f = Holidays.new(2011, :de, :berlin, :sommer)
|
21
|
+
f.days #=> Array mit allen Ferientagen (als Date-Objekte)
|
22
|
+
# inkl. der enthaltenen Samstagen und Sonntagen
|
23
|
+
#
|
24
|
+
# Weihnachtsferien 2011 in Kärnten (Österreich)
|
25
|
+
f = Holidays.new(2011, :at, :kaernten, :weihnachten)
|
26
|
+
f.days #=> Array mit Ferientagen (s. o.)
|
27
|
+
#
|
28
|
+
# nicht vorhandene Ferien oder zu weit in der Zukunft liegend:
|
29
|
+
f = Holidays.new(2011, :de, :bayern, :western)
|
30
|
+
#=> ArgumentError exception
|
31
|
+
#
|
32
|
+
f = Holidays.new(2030, :de, :bayern, :ostern)
|
33
|
+
#=> ArgumentError exception
|
34
|
+
#
|
35
|
+
# implementierte Laender
|
36
|
+
laender = Holidays.countries #=> [:de,:at]
|
37
|
+
#
|
38
|
+
# Regionen:
|
39
|
+
regionen = Holidays.regions(:de)
|
40
|
+
#=> [:baden_wuerttemberg, :bayern, ... ]
|
41
|
+
#
|
42
|
+
# Ferienarten für ein Land:
|
43
|
+
ferienarten = Holidays.holiday_types(:de)
|
44
|
+
#=> [:winter, :ostern, :pfingsten, :sommer, :herbst, :weihnachten]
|
45
|
+
|
46
|
+
== Installation
|
47
|
+
|
48
|
+
* gem install rholidays
|
49
|
+
|
50
|
+
== Autor
|
51
|
+
|
52
|
+
Thomas Preymesser (thopre@gmail.com)
|
53
|
+
|
54
|
+
|
55
|
+
== Lizenz
|
56
|
+
|
57
|
+
(The MIT License)
|
58
|
+
|
59
|
+
Copyright (c) 2011 FIXME (author's name)
|
60
|
+
|
61
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
62
|
+
a copy of this software and associated documentation files (the
|
63
|
+
'Software'), to deal in the Software without restriction, including
|
64
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
65
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
66
|
+
permit persons to whom the Software is furnished to do so, subject to
|
67
|
+
the following conditions:
|
68
|
+
|
69
|
+
The above copyright notice and this permission notice shall be
|
70
|
+
included in all copies or substantial portions of the Software.
|
71
|
+
|
72
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
73
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
74
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
75
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
76
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
77
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
78
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
begin
|
3
|
+
require 'bones'
|
4
|
+
rescue LoadError
|
5
|
+
abort '### Please install the "bones" gem ###'
|
6
|
+
end
|
7
|
+
|
8
|
+
task :default => 'test:run'
|
9
|
+
task 'gem:release' => 'test:run'
|
10
|
+
|
11
|
+
Bones {
|
12
|
+
name 'rholidays'
|
13
|
+
authors 'Thomas Preymesser'
|
14
|
+
email 'thopre@gmail.com'
|
15
|
+
url 'http://rholidays.rubyforge.net'
|
16
|
+
depend_on 'roo'
|
17
|
+
}
|
18
|
+
|
data/bin/rholidays
ADDED
data/lib/hash.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
HASH = {
|
2
|
+
[2011,:de,:baden_wuerttemberg,:herbst] => [Date.new(2011,11,1),Date.new(2011,11,4),false,[]],
|
3
|
+
[2011,:de,:bayern,:herbst] => [Date.new(2011,10,31),Date.new(2011,11,5),false,[]],
|
4
|
+
[2011,:de,:berlin,:herbst] => [Date.new(2011,10,4),Date.new(2011,10,14),false,[]],
|
5
|
+
[2011,:de,:brandenburg,:herbst] => [Date.new(2011,10,4),Date.new(2011,10,14),false,[]],
|
6
|
+
[2011,:de,:bremen,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,29),false,[]],
|
7
|
+
[2011,:de,:hamburg,:herbst] => [Date.new(2011,10,4),Date.new(2011,10,14),false,[]],
|
8
|
+
[2011,:de,:hessen,:herbst] => [Date.new(2011,10,10),Date.new(2011,10,22),false,[]],
|
9
|
+
[2011,:de,:mecklenburg_vorpommern,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,21),false,[]],
|
10
|
+
[2011,:de,:niedersachsen,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,29),false,[]],
|
11
|
+
[2011,:de,:nordrhein_westfalen,:herbst] => [Date.new(2011,10,24),Date.new(2011,11,5),false,[]],
|
12
|
+
[2011,:de,:rheinland_pfalz,:herbst] => [Date.new(2011,10,4),Date.new(2011,10,14),false,[]],
|
13
|
+
[2011,:de,:saarland,:herbst] => [Date.new(2011,10,4),Date.new(2011,10,15),false,[]],
|
14
|
+
[2011,:de,:sachsen,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,28),false,[]],
|
15
|
+
[2011,:de,:sachsen_anhalt,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,22),false,[]],
|
16
|
+
[2011,:de,:schleswig_holstein,:herbst] => [Date.new(2011,10,10),Date.new(2011,10,22),false,[]],
|
17
|
+
[2011,:de,:thueringen,:herbst] => [Date.new(2011,10,17),Date.new(2011,10,28),false,[]],
|
18
|
+
[2011,:de,:baden_wuerttemberg,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,5),false,[]],
|
19
|
+
[2011,:de,:bayern,:weihnachten] => [Date.new(2011,12,27),Date.new(2012,1,5),false,[]],
|
20
|
+
[2011,:de,:berlin,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,3),false,[]],
|
21
|
+
[2011,:de,:brandenburg,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,3),false,[]],
|
22
|
+
[2011,:de,:bremen,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,4),false,[]],
|
23
|
+
[2011,:de,:hamburg,:weihnachten] => [Date.new(2011,12,27),Date.new(2012,1,6),false,[]],
|
24
|
+
[2011,:de,:hessen,:weihnachten] => [Date.new(2011,12,21),Date.new(2012,1,6),false,[]],
|
25
|
+
[2011,:de,:mecklenburg_vorpommern,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,3),false,[]],
|
26
|
+
[2011,:de,:niedersachsen,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,4),false,[]],
|
27
|
+
[2011,:de,:nordrhein_westfalen,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,6),false,[]],
|
28
|
+
[2011,:de,:rheinland_pfalz,:weihnachten] => [Date.new(2011,12,22),Date.new(2012,1,6),false,[]],
|
29
|
+
[2011,:de,:saarland,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,4),false,[]],
|
30
|
+
[2011,:de,:sachsen,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,2),false,[]],
|
31
|
+
[2011,:de,:sachsen_anhalt,:weihnachten] => [Date.new(2011,12,22),Date.new(2012,1,7),false,[]],
|
32
|
+
[2011,:de,:schleswig_holstein,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,6),false,[]],
|
33
|
+
[2011,:de,:thueringen,:weihnachten] => [Date.new(2011,12,23),Date.new(2012,1,1),false,[]],
|
34
|
+
[2011,:at,:burgenland,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
35
|
+
[2011,:at,:kaernten,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
36
|
+
[2011,:at,:niederoesterreich,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
37
|
+
[2011,:at,:oberoesterreich,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
38
|
+
[2011,:at,:salzburg,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
39
|
+
[2011,:at,:steiermark,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
40
|
+
[2011,:at,:tirol,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
41
|
+
[2011,:at,:vorarlberg,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
42
|
+
[2011,:at,:wien,:weihnachten] => [Date.new(2011,12,24),Date.new(2012,1,7),false,[]],
|
43
|
+
[2012,:at,:burgenland,:semester] => [Date.new(2012,2,13),Date.new(2012,2,18),false,[]],
|
44
|
+
[2012,:at,:kaernten,:semester] => [Date.new(2012,2,13),Date.new(2012,2,18),false,[]],
|
45
|
+
[2012,:at,:niederoesterreich,:semester] => [Date.new(2012,2,6),Date.new(2012,2,11),false,[]],
|
46
|
+
[2012,:at,:oberoesterreich,:semester] => [Date.new(2012,2,20),Date.new(2012,2,25),false,[]],
|
47
|
+
[2012,:at,:salzburg,:semester] => [Date.new(2012,2,13),Date.new(2012,2,18),false,[]],
|
48
|
+
[2012,:at,:steiermark,:semester] => [Date.new(2012,2,20),Date.new(2012,2,25),false,[]],
|
49
|
+
[2012,:at,:tirol,:semester] => [Date.new(2012,2,13),Date.new(2012,2,18),false,[]],
|
50
|
+
[2012,:at,:vorarlberg,:semester] => [Date.new(2012,2,13),Date.new(2012,2,18),false,[]],
|
51
|
+
[2012,:at,:wien,:semester] => [Date.new(2012,2,6),Date.new(2012,2,11),false,[]],
|
52
|
+
[2012,:at,:burgenland,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
53
|
+
[2012,:at,:kaernten,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
54
|
+
[2012,:at,:niederoesterreich,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
55
|
+
[2012,:at,:oberoesterreich,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
56
|
+
[2012,:at,:salzburg,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
57
|
+
[2012,:at,:steiermark,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
58
|
+
[2012,:at,:tirol,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
59
|
+
[2012,:at,:vorarlberg,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
60
|
+
[2012,:at,:wien,:ostern] => [Date.new(2012,3,31),Date.new(2012,4,10),false,[]],
|
61
|
+
[2012,:at,:burgenland,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
62
|
+
[2012,:at,:kaernten,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
63
|
+
[2012,:at,:niederoesterreich,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
64
|
+
[2012,:at,:oberoesterreich,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
65
|
+
[2012,:at,:salzburg,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
66
|
+
[2012,:at,:steiermark,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
67
|
+
[2012,:at,:tirol,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
68
|
+
[2012,:at,:vorarlberg,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
69
|
+
[2012,:at,:wien,:pfingsten] => [Date.new(2012,5,26),Date.new(2012,5,29),false,[]],
|
70
|
+
[2012,:at,:burgenland,:sommer] => [Date.new(2012,6,30),Date.new(2012,9,1),false,[]],
|
71
|
+
[2012,:at,:kaernten,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
72
|
+
[2012,:at,:niederoesterreich,:sommer] => [Date.new(2012,6,30),Date.new(2012,9,1),false,[]],
|
73
|
+
[2012,:at,:oberoesterreich,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
74
|
+
[2012,:at,:salzburg,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
75
|
+
[2012,:at,:steiermark,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
76
|
+
[2012,:at,:tirol,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
77
|
+
[2012,:at,:vorarlberg,:sommer] => [Date.new(2012,7,7),Date.new(2012,9,8),false,[]],
|
78
|
+
[2012,:at,:wien,:sommer] => [Date.new(2012,6,30),Date.new(2012,9,1),false,[]],
|
79
|
+
[2012,:de,:bayern,:winter] => [Date.new(2012,2,20),Date.new(2012,2,24),false,[]],
|
80
|
+
[2012,:de,:berlin,:winter] => [Date.new(2012,1,30),Date.new(2012,2,4),false,[]],
|
81
|
+
[2012,:de,:brandenburg,:winter] => [Date.new(2012,1,30),Date.new(2012,2,4),false,[]],
|
82
|
+
[2012,:de,:bremen,:winter] => [Date.new(2012,1,30),Date.new(2012,1,31),false,[]],
|
83
|
+
[2012,:de,:hamburg,:winter] => [Date.new(2012,1,30),Date.new(2012,1,30),false,[]],
|
84
|
+
[2012,:de,:mecklenburg_vorpommern,:winter] => [Date.new(2012,2,6),Date.new(2012,2,17),false,[]],
|
85
|
+
[2012,:de,:niedersachsen,:winter] => [Date.new(2012,1,30),Date.new(2012,1,31),false,[]],
|
86
|
+
[2012,:de,:saarland,:winter] => [Date.new(2012,2,20),Date.new(2012,2,25),false,[]],
|
87
|
+
[2012,:de,:sachsen,:winter] => [Date.new(2012,2,13),Date.new(2012,2,25),false,[]],
|
88
|
+
[2012,:de,:sachsen_anhalt,:winter] => [Date.new(2012,2,4),Date.new(2012,2,11),false,[]],
|
89
|
+
[2012,:de,:thueringen,:winter] => [Date.new(2012,2,6),Date.new(2012,2,11),false,[]],
|
90
|
+
[2012,:de,:baden_wuerttemberg,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,13),false,[]],
|
91
|
+
[2012,:de,:bayern,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,14),false,[]],
|
92
|
+
[2012,:de,:berlin,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,14),true,[Date.new(2012,4,30),]],
|
93
|
+
[2012,:de,:brandenburg,:ostern] => [Date.new(2012,4,4),Date.new(2012,4,14),true,[Date.new(2012,4,30),]],
|
94
|
+
[2012,:de,:bremen,:ostern] => [Date.new(2012,3,26),Date.new(2012,4,11),true,[Date.new(2012,4,30),]],
|
95
|
+
[2012,:de,:hamburg,:ostern] => [Date.new(2012,3,5),Date.new(2012,3,16),false,[]],
|
96
|
+
[2012,:de,:hessen,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,14),false,[]],
|
97
|
+
[2012,:de,:mecklenburg_vorpommern,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,11),false,[]],
|
98
|
+
[2012,:de,:niedersachsen,:ostern] => [Date.new(2012,3,26),Date.new(2012,4,11),true,[Date.new(2012,4,30),]],
|
99
|
+
[2012,:de,:nordrhein_westfalen,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,14),false,[]],
|
100
|
+
[2012,:de,:rheinland_pfalz,:ostern] => [Date.new(2012,3,29),Date.new(2012,4,13),false,[]],
|
101
|
+
[2012,:de,:saarland,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,14),false,[]],
|
102
|
+
[2012,:de,:sachsen,:ostern] => [Date.new(2012,4,6),Date.new(2012,4,14),false,[]],
|
103
|
+
[2012,:de,:sachsen_anhalt,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,7),false,[]],
|
104
|
+
[2012,:de,:schleswig_holstein,:ostern] => [Date.new(2012,3,30),Date.new(2012,4,13),false,[]],
|
105
|
+
[2012,:de,:thueringen,:ostern] => [Date.new(2012,4,2),Date.new(2012,4,13),false,[]],
|
106
|
+
[2012,:de,:baden_wuerttemberg,:pfingsten] => [Date.new(2012,5,29),Date.new(2012,6,9),false,[]],
|
107
|
+
[2012,:de,:bayern,:pfingsten] => [Date.new(2012,5,29),Date.new(2012,6,9),false,[]],
|
108
|
+
[2012,:de,:berlin,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),false,[]],
|
109
|
+
[2012,:de,:brandenburg,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),false,[]],
|
110
|
+
[2012,:de,:bremen,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),true,[Date.new(2012,5,29),]],
|
111
|
+
[2012,:de,:hamburg,:pfingsten] => [Date.new(2012,4,30),Date.new(2012,5,4),true,[Date.new(2012,5,18),]],
|
112
|
+
[2012,:de,:mecklenburg_vorpommern,:pfingsten] => [Date.new(2012,5,25),Date.new(2012,5,29),false,[]],
|
113
|
+
[2012,:de,:niedersachsen,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),true,[Date.new(2012,5,29),]],
|
114
|
+
[2012,:de,:nordrhein_westfalen,:pfingsten] => [Date.new(2012,5,29),Date.new(2012,5,29),false,[]],
|
115
|
+
[2012,:de,:sachsen,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),false,[]],
|
116
|
+
[2012,:de,:sachsen_anhalt,:pfingsten] => [Date.new(2012,5,21),Date.new(2012,5,26),false,[]],
|
117
|
+
[2012,:de,:schleswig_holstein,:pfingsten] => [Date.new(2012,5,18),Date.new(2012,5,18),false,[]],
|
118
|
+
[2012,:de,:thueringen,:pfingsten] => [Date.new(2012,5,25),Date.new(2012,5,29),false,[]],
|
119
|
+
[2012,:de,:baden_wuerttemberg,:sommer] => [Date.new(2012,7,26),Date.new(2012,9,8),false,[]],
|
120
|
+
[2012,:de,:bayern,:sommer] => [Date.new(2012,8,1),Date.new(2012,9,12),false,[]],
|
121
|
+
[2012,:de,:berlin,:sommer] => [Date.new(2012,6,21),Date.new(2012,8,3),true,[Date.new(2012,6,20),]],
|
122
|
+
[2012,:de,:brandenburg,:sommer] => [Date.new(2012,6,21),Date.new(2012,8,3),false,[]],
|
123
|
+
[2012,:de,:bremen,:sommer] => [Date.new(2012,7,23),Date.new(2012,8,31),false,[]],
|
124
|
+
[2012,:de,:hamburg,:sommer] => [Date.new(2012,6,21),Date.new(2012,8,1),false,[]],
|
125
|
+
[2012,:de,:hessen,:sommer] => [Date.new(2012,7,2),Date.new(2012,8,10),false,[]],
|
126
|
+
[2012,:de,:mecklenburg_vorpommern,:sommer] => [Date.new(2012,6,23),Date.new(2012,8,4),false,[]],
|
127
|
+
[2012,:de,:niedersachsen,:sommer] => [Date.new(2012,7,23),Date.new(2012,8,31),false,[]],
|
128
|
+
[2012,:de,:nordrhein_westfalen,:sommer] => [Date.new(2012,7,9),Date.new(2012,8,21),false,[]],
|
129
|
+
[2012,:de,:rheinland_pfalz,:sommer] => [Date.new(2012,7,2),Date.new(2012,8,10),false,[]],
|
130
|
+
[2012,:de,:saarland,:sommer] => [Date.new(2012,7,2),Date.new(2012,8,14),false,[]],
|
131
|
+
[2012,:de,:sachsen,:sommer] => [Date.new(2012,7,23),Date.new(2012,8,31),false,[]],
|
132
|
+
[2012,:de,:sachsen_anhalt,:sommer] => [Date.new(2012,7,23),Date.new(2012,9,5),false,[]],
|
133
|
+
[2012,:de,:schleswig_holstein,:sommer] => [Date.new(2012,6,25),Date.new(2012,8,4),false,[]],
|
134
|
+
[2012,:de,:thueringen,:sommer] => [Date.new(2012,7,23),Date.new(2012,8,31),false,[]],
|
135
|
+
[2012,:de,:baden_wuerttemberg,:herbst] => [Date.new(2012,10,29),Date.new(2012,11,2),false,[]],
|
136
|
+
[2012,:de,:bayern,:herbst] => [Date.new(2012,10,29),Date.new(2012,11,3),false,[]],
|
137
|
+
[2012,:de,:berlin,:herbst] => [Date.new(2012,10,1),Date.new(2012,10,13),false,[]],
|
138
|
+
[2012,:de,:brandenburg,:herbst] => [Date.new(2012,10,1),Date.new(2012,10,13),false,[]],
|
139
|
+
[2012,:de,:bremen,:herbst] => [Date.new(2012,10,22),Date.new(2012,11,3),false,[]],
|
140
|
+
[2012,:de,:hamburg,:herbst] => [Date.new(2012,10,1),Date.new(2012,10,12),false,[]],
|
141
|
+
[2012,:de,:hessen,:herbst] => [Date.new(2012,10,15),Date.new(2012,10,27),false,[]],
|
142
|
+
[2012,:de,:mecklenburg_vorpommern,:herbst] => [Date.new(2012,10,1),Date.new(2012,10,5),false,[]],
|
143
|
+
[2012,:de,:niedersachsen,:herbst] => [Date.new(2012,10,22),Date.new(2012,11,3),false,[]],
|
144
|
+
[2012,:de,:nordrhein_westfalen,:herbst] => [Date.new(2012,10,8),Date.new(2012,10,20),false,[]],
|
145
|
+
[2012,:de,:rheinland_pfalz,:herbst] => [Date.new(2012,10,1),Date.new(2012,10,12),false,[]],
|
146
|
+
[2012,:de,:saarland,:herbst] => [Date.new(2012,10,22),Date.new(2012,11,3),false,[]],
|
147
|
+
[2012,:de,:sachsen,:herbst] => [Date.new(2012,10,22),Date.new(2012,11,2),false,[]],
|
148
|
+
[2012,:de,:sachsen_anhalt,:herbst] => [Date.new(2012,10,29),Date.new(2012,11,2),false,[]],
|
149
|
+
[2012,:de,:schleswig_holstein,:herbst] => [Date.new(2012,10,4),Date.new(2012,10,19),false,[]],
|
150
|
+
[2012,:de,:thueringen,:herbst] => [Date.new(2012,10,22),Date.new(2012,11,3),false,[]],
|
151
|
+
[2012,:de,:baden_wuerttemberg,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
152
|
+
[2012,:de,:bayern,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
153
|
+
[2012,:de,:berlin,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,4),false,[]],
|
154
|
+
[2012,:de,:brandenburg,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,4),false,[]],
|
155
|
+
[2012,:de,:bremen,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
156
|
+
[2012,:de,:hamburg,:weihnachten] => [Date.new(2012,12,21),Date.new(2013,1,4),false,[]],
|
157
|
+
[2012,:de,:hessen,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,12),false,[]],
|
158
|
+
[2012,:de,:mecklenburg_vorpommern,:weihnachten] => [Date.new(2012,12,21),Date.new(2013,1,4),false,[]],
|
159
|
+
[2012,:de,:niedersachsen,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
160
|
+
[2012,:de,:nordrhein_westfalen,:weihnachten] => [Date.new(2012,12,21),Date.new(2013,1,4),false,[]],
|
161
|
+
[2012,:de,:rheinland_pfalz,:weihnachten] => [Date.new(2012,12,20),Date.new(2013,1,4),false,[]],
|
162
|
+
[2012,:de,:saarland,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
163
|
+
[2012,:de,:sachsen,:weihnachten] => [Date.new(2012,12,22),Date.new(2013,1,2),false,[]],
|
164
|
+
[2012,:de,:sachsen_anhalt,:weihnachten] => [Date.new(2012,12,19),Date.new(2013,1,4),false,[]],
|
165
|
+
[2012,:de,:schleswig_holstein,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
166
|
+
[2012,:de,:thueringen,:weihnachten] => [Date.new(2012,12,24),Date.new(2013,1,5),false,[]],
|
167
|
+
}
|
data/lib/holidays.rb
ADDED
@@ -0,0 +1,335 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'date'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
|
6
|
+
class Holidays
|
7
|
+
COUNTRY_CODES = [:de, :at]
|
8
|
+
REGION_CODES_DE =
|
9
|
+
[:baden_wuerttemberg, :bayern, :berlin, :brandenburg, :bremen,
|
10
|
+
:hamburg, :hessen, :mecklenburg_vorpommern, :niedersachsen,
|
11
|
+
:nordrhein_westfalen, :rheinland_pfalz, :saarland, :sachsen,
|
12
|
+
:sachsen_anhalt, :schleswig_holstein, :thueringen]
|
13
|
+
HOLIDAY_CODES_DE =
|
14
|
+
[:winter, :ostern, :pfingsten, :sommer, :herbst, :weihnachten]
|
15
|
+
REGION_CODES_AT =
|
16
|
+
[:burgenland, :kaernten, :niederoesterreich, :oberoesterreich,
|
17
|
+
:salzburg,:steiermark, :tirol, :vorarlberg, :wien]
|
18
|
+
HOLIDAY_CODES_AT =
|
19
|
+
[:weihnachten, :semester, :ostern, :pfingsten, :sommer]
|
20
|
+
|
21
|
+
require 'hash'
|
22
|
+
|
23
|
+
def initialize(year,country,region,holiday_type)
|
24
|
+
@year = year
|
25
|
+
@country = country
|
26
|
+
@region = region
|
27
|
+
@holiday_type = holiday_type
|
28
|
+
@fortlaufend = true
|
29
|
+
@extra_days = []
|
30
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join('test','ferien.ods') # TODO:
|
31
|
+
if Holidays.source == :from_hash
|
32
|
+
found = false
|
33
|
+
if HASH[[year,country,region,holiday_type]]
|
34
|
+
@first,@last,@fortlaufend,@extra_days = HASH[[year,country,region,holiday_type]]
|
35
|
+
found = true
|
36
|
+
end
|
37
|
+
end # :from_hash
|
38
|
+
#if Holidays.source == :from_spreadsheet
|
39
|
+
# oo = Openoffice.new(ENV['HOLIDAYS_SOURCE'])
|
40
|
+
# oo.default_sheet = oo.sheets.first
|
41
|
+
# found = false
|
42
|
+
# oo.cell('A',1).to_i.upto(oo.last_row) do |row|
|
43
|
+
# jahr = oo.cell(row,1)
|
44
|
+
# land = oo.cell(row,2).to_sym
|
45
|
+
# lregion = oo.cell(row,3).to_sym
|
46
|
+
# ferientyp = oo.cell(row,4).to_sym
|
47
|
+
# first = oo.cell(row,5)
|
48
|
+
# last = oo.cell(row,6)
|
49
|
+
# if jahr == year and
|
50
|
+
# land == country and
|
51
|
+
# lregion == region and
|
52
|
+
# ferientyp == holiday_type
|
53
|
+
# found = true
|
54
|
+
# @first = first
|
55
|
+
# @last = last
|
56
|
+
# if oo.celltype(row,7) == :date
|
57
|
+
# @extra_days << oo.cell(row,7)
|
58
|
+
# end
|
59
|
+
# found = true
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
# end # Lesen aus Spreadsheet
|
63
|
+
unless found
|
64
|
+
if false
|
65
|
+
elsif t 2011,:de,:bremen,:pfingsten
|
66
|
+
@first = Date.new(2011,6,3)
|
67
|
+
@last = Date.new(2011,6,3)
|
68
|
+
@fortlaufend = false
|
69
|
+
found = true
|
70
|
+
elsif t 2011,:de,:brandenburg,:pfingsten
|
71
|
+
@first = Date.new(2011,6,3)
|
72
|
+
@last = Date.new(2011,6,3)
|
73
|
+
found = true
|
74
|
+
elsif t 2011,:de,:berlin,:pfingsten
|
75
|
+
@first = Date.new(2011,6,3)
|
76
|
+
@last = Date.new(2011,6,3)
|
77
|
+
found = true
|
78
|
+
elsif t 2011,:de,:bayern,:pfingsten
|
79
|
+
@first = Date.new(2011,6,14)
|
80
|
+
@last = Date.new(2011,6,25)
|
81
|
+
found = true
|
82
|
+
elsif t 2011,:de,:baden_wuerttemberg,:pfingsten
|
83
|
+
@first = Date.new(2011,6,14)
|
84
|
+
@last = Date.new(2011,6,25)
|
85
|
+
found = true
|
86
|
+
elsif t 2011,:de,:baden_wuerttemberg,:ostern
|
87
|
+
#to do
|
88
|
+
# 'Gruendonnerstag ist auch frei'
|
89
|
+
#end
|
90
|
+
@first = Date.new(2011,4,21)
|
91
|
+
@last = Date.new(2011,4,30)
|
92
|
+
found = true
|
93
|
+
elsif t 2011,:de,:baden_wuerttemberg,:sommer
|
94
|
+
@first = Date.new(2011,7,28)
|
95
|
+
@last = Date.new(2011,9,10)
|
96
|
+
found = true
|
97
|
+
elsif t 2012,:de,:bayern,:ostern
|
98
|
+
@first = Date.new(2012,4,2)
|
99
|
+
@last = Date.new(2012,4,14)
|
100
|
+
found = true
|
101
|
+
elsif t 2011,:de,:bayern,:sommer
|
102
|
+
@first = Date.new(2011,7,30)
|
103
|
+
@last = Date.new(2011,9,12)
|
104
|
+
found = true
|
105
|
+
elsif t 2011,:de,:berlin,:sommer
|
106
|
+
@first = Date.new(2011,6,29)
|
107
|
+
@last = Date.new(2011,8,12)
|
108
|
+
found = true
|
109
|
+
elsif t 2011,:de,:brandenburg,:sommer
|
110
|
+
@first = Date.new(2011,6,30)
|
111
|
+
@last = Date.new(2011,8,13)
|
112
|
+
found = true
|
113
|
+
elsif t 2011,:de,:bremen,:sommer
|
114
|
+
@first = Date.new(2011,7,7)
|
115
|
+
@last = Date.new(2011,8,17)
|
116
|
+
found = true
|
117
|
+
elsif t 2011,:de,:hamburg,:sommer
|
118
|
+
@first = Date.new(2011,6,30)
|
119
|
+
@last = Date.new(2011,8,10)
|
120
|
+
found = true
|
121
|
+
elsif t 2011,:de,:hessen,:sommer
|
122
|
+
@first = Date.new(2011,6,27)
|
123
|
+
@last = Date.new(2011,8,5)
|
124
|
+
found = true
|
125
|
+
elsif t 2011,:de,:mecklenburg_vorpommern,:sommer
|
126
|
+
@first = Date.new(2011,7,4)
|
127
|
+
@last = Date.new(2011,8,13)
|
128
|
+
found = true
|
129
|
+
elsif t 2011,:de,:niedersachsen,:sommer
|
130
|
+
@first = Date.new(2011,7,7)
|
131
|
+
@last = Date.new(2011,8,17)
|
132
|
+
found = true
|
133
|
+
elsif t 2011,:de,:nordrhein_westfalen,:sommer
|
134
|
+
@first = Date.new(2011,7,25)
|
135
|
+
@last = Date.new(2011,9,6)
|
136
|
+
found = true
|
137
|
+
elsif t 2011,:de,:rheinland_pfalz,:sommer
|
138
|
+
@first = Date.new(2011,6,27)
|
139
|
+
@last = Date.new(2011,8,5)
|
140
|
+
found = true
|
141
|
+
elsif t 2011,:de,:saarland,:sommer
|
142
|
+
@first = Date.new(2011,6,24)
|
143
|
+
@last = Date.new(2011,8,6)
|
144
|
+
found = true
|
145
|
+
elsif t 2011,:de,:sachsen,:sommer
|
146
|
+
@first = Date.new(2011,7,11)
|
147
|
+
@last = Date.new(2011,8,19)
|
148
|
+
found = true
|
149
|
+
elsif t 2011,:de,:sachsen_anhalt,:sommer
|
150
|
+
@first = Date.new(2011,7,11)
|
151
|
+
@last = Date.new(2011,8,24)
|
152
|
+
found = true
|
153
|
+
elsif t 2011,:de,:schleswig_holstein,:sommer
|
154
|
+
@first = Date.new(2011,7,4)
|
155
|
+
@last = Date.new(2011,8,13)
|
156
|
+
found = true
|
157
|
+
elsif t 2011,:de,:thueringen,:sommer
|
158
|
+
@first = Date.new(2011,7,11)
|
159
|
+
@last = Date.new(2011,8,19)
|
160
|
+
found = true
|
161
|
+
elsif t 2011,:at,:burgenland,:sommer
|
162
|
+
@first = Date.new(2011,7,2)
|
163
|
+
@last = Date.new(2011,9,3)
|
164
|
+
found = true
|
165
|
+
elsif t 2011,:at,:kaernten,:sommer
|
166
|
+
@first = Date.new(2011,7,9)
|
167
|
+
@last = Date.new(2011,9,10)
|
168
|
+
found = true
|
169
|
+
elsif t 2011,:at,:niederoesterreich,:sommer
|
170
|
+
@first = Date.new(2011,7,2)
|
171
|
+
@last = Date.new(2011,9,3)
|
172
|
+
found = true
|
173
|
+
elsif t 2011,:at,:oberoesterreich,:sommer
|
174
|
+
@first = Date.new(2011,7,9)
|
175
|
+
@last = Date.new(2011,9,10)
|
176
|
+
found = true
|
177
|
+
elsif t 2011,:at,:salzburg,:sommer
|
178
|
+
@first = Date.new(2011,7,9)
|
179
|
+
@last = Date.new(2011,9,10)
|
180
|
+
found = true
|
181
|
+
elsif t 2011,:at,:steiermark,:sommer
|
182
|
+
@first = Date.new(2011,7,9)
|
183
|
+
@last = Date.new(2011,9,10)
|
184
|
+
found = true
|
185
|
+
elsif t 2011,:at,:tirol,:sommer
|
186
|
+
@first = Date.new(2011,7,9)
|
187
|
+
@last = Date.new(2011,9,10)
|
188
|
+
found = true
|
189
|
+
elsif t 2011,:at,:vorarlberg,:sommer
|
190
|
+
@first = Date.new(2011,7,9)
|
191
|
+
@last = Date.new(2011,9,10)
|
192
|
+
found = true
|
193
|
+
elsif t 2011,:at,:wien,:sommer
|
194
|
+
@first = Date.new(2011,7,2)
|
195
|
+
@last = Date.new(2011,9,3)
|
196
|
+
found = true
|
197
|
+
end
|
198
|
+
end
|
199
|
+
unless found
|
200
|
+
raise ArgumentError,
|
201
|
+
"#{year} #{country} #{region} #{holiday_type} " +
|
202
|
+
"nicht implementiert"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# Erstellt ein Array mit allen Ferientagen @first und @last
|
207
|
+
# (einschliesslich der Samstage und Sonntage dazwischen)
|
208
|
+
# Falls es spaeter Ferien gibt, die irgendwie "Luecken" haben,
|
209
|
+
# muesste man das Array der Tage anders zusammenbauen.
|
210
|
+
def result
|
211
|
+
build_result
|
212
|
+
end
|
213
|
+
|
214
|
+
alias :days :result
|
215
|
+
|
216
|
+
def self.countries
|
217
|
+
COUNTRY_CODES
|
218
|
+
end
|
219
|
+
|
220
|
+
def self.regions(country)
|
221
|
+
case country
|
222
|
+
when :de
|
223
|
+
REGION_CODES_DE
|
224
|
+
when :at
|
225
|
+
REGION_CODES_AT
|
226
|
+
when :ch
|
227
|
+
[]
|
228
|
+
else
|
229
|
+
raise ArgumentError, "Unknown country #{country}"
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def self.holiday_types(country)
|
234
|
+
case country
|
235
|
+
when :de
|
236
|
+
HOLIDAY_CODES_DE
|
237
|
+
when :at
|
238
|
+
HOLIDAY_CODES_AT
|
239
|
+
when :ch
|
240
|
+
[:sport, :fruehling, :sommer, :herbst, :weihnachten]
|
241
|
+
else
|
242
|
+
raise ArgumentError, "Unknown country #{country}"
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# Quelle der Ferientermine: :internal, :from_spreadsheet oder :file_not_found
|
247
|
+
def self.source
|
248
|
+
return :from_hash # TODO:
|
249
|
+
unless ENV['HOLIDAYS_SOURCE']
|
250
|
+
:internal
|
251
|
+
else
|
252
|
+
if File.exist? ENV['HOLIDAYS_SOURCE']
|
253
|
+
:from_spreadsheet
|
254
|
+
else
|
255
|
+
:file_not_found
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
# Returns the first missing holidays of the defined countries, regions
|
261
|
+
# and holiday types
|
262
|
+
# The result is an array like [2011, :de, :bayern, :sommer]
|
263
|
+
def self.check_next
|
264
|
+
(2011..2099).each do |year|
|
265
|
+
Holidays.countries.each do |country|
|
266
|
+
Holidays.regions(country).each do |region_code|
|
267
|
+
Holidays.holiday_types(country).each do |htype|
|
268
|
+
#print "#{year} #{country} "
|
269
|
+
#print "#{region_code} "
|
270
|
+
#puts "#{htype}"
|
271
|
+
begin
|
272
|
+
result = Holidays.new(year,country,region_code,htype)
|
273
|
+
rescue ArgumentError
|
274
|
+
return [year,country,region_code,htype]
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
return []
|
281
|
+
end
|
282
|
+
|
283
|
+
private
|
284
|
+
|
285
|
+
def build_result
|
286
|
+
result = []
|
287
|
+
result << @first
|
288
|
+
lfd = @first + 1
|
289
|
+
while lfd <= @last do
|
290
|
+
result << lfd
|
291
|
+
lfd += 1
|
292
|
+
end
|
293
|
+
@extra_days.each do |d|
|
294
|
+
result << d
|
295
|
+
end
|
296
|
+
|
297
|
+
result.sort
|
298
|
+
end
|
299
|
+
|
300
|
+
def t(year, country, region, holiday_type)
|
301
|
+
return [year,country,region,holiday_type] == [@year,@country,@region,@holiday_type]
|
302
|
+
end
|
303
|
+
|
304
|
+
end # class Holidays
|
305
|
+
|
306
|
+
if __FILE__ == $0
|
307
|
+
holidays = [
|
308
|
+
[
|
309
|
+
2011,
|
310
|
+
:de,
|
311
|
+
:baden_wuerttemberg,
|
312
|
+
:sommerferien,
|
313
|
+
Date.new(2011,7,28),
|
314
|
+
Date.new(2011,9,10),
|
315
|
+
],
|
316
|
+
[
|
317
|
+
2011,
|
318
|
+
:de,
|
319
|
+
:berlin,
|
320
|
+
:sommerferien,
|
321
|
+
Date.new(2011,7,28),
|
322
|
+
Date.new(2011,9,10),
|
323
|
+
],
|
324
|
+
]
|
325
|
+
File.open('holidays.yml','w') do |f|
|
326
|
+
f.puts YAML.dump(holidays)
|
327
|
+
end
|
328
|
+
File.open('holidays.yml') do |f|
|
329
|
+
@holidays = YAML.load(f)
|
330
|
+
end
|
331
|
+
p @holidays
|
332
|
+
p @holidays.size
|
333
|
+
# f = Holidays.new(2011,:de,:bayern,:western)
|
334
|
+
f = Holidays.new(2030,:de,:bayern,:western)
|
335
|
+
end
|
data/lib/rholidays.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module Rholidays
|
3
|
+
|
4
|
+
# :stopdoc:
|
5
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
6
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
7
|
+
VERSION = ::File.read(PATH + 'version.txt').strip
|
8
|
+
# :startdoc:
|
9
|
+
|
10
|
+
# Returns the library path for the module. If any arguments are given,
|
11
|
+
# they will be joined to the end of the libray path using
|
12
|
+
# <tt>File.join</tt>.
|
13
|
+
#
|
14
|
+
def self.libpath( *args )
|
15
|
+
rv = args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
16
|
+
if block_given?
|
17
|
+
begin
|
18
|
+
$LOAD_PATH.unshift LIBPATH
|
19
|
+
rv = yield
|
20
|
+
ensure
|
21
|
+
$LOAD_PATH.shift
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return rv
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns the lpath for the module. If any arguments are given,
|
28
|
+
# they will be joined to the end of the path using
|
29
|
+
# <tt>File.join</tt>.
|
30
|
+
#
|
31
|
+
def self.path( *args )
|
32
|
+
rv = args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
33
|
+
if block_given?
|
34
|
+
begin
|
35
|
+
$LOAD_PATH.unshift PATH
|
36
|
+
rv = yield
|
37
|
+
ensure
|
38
|
+
$LOAD_PATH.shift
|
39
|
+
end
|
40
|
+
end
|
41
|
+
return rv
|
42
|
+
end
|
43
|
+
|
44
|
+
# Utility method used to require all files ending in .rb that lie in the
|
45
|
+
# directory below this file that has the same name as the filename passed
|
46
|
+
# in. Optionally, a specific _directory_ name can be passed in such that
|
47
|
+
# the _filename_ does not have to be equivalent to the directory.
|
48
|
+
#
|
49
|
+
def self.require_all_libs_relative_to( fname, dir = nil )
|
50
|
+
dir ||= ::File.basename(fname, '.*')
|
51
|
+
search_me = ::File.expand_path(
|
52
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
53
|
+
|
54
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
55
|
+
end
|
56
|
+
|
57
|
+
end # module Rholidays
|
58
|
+
|
59
|
+
# Rholidays.require_all_libs_relative_to(__FILE__)
|
60
|
+
require 'holidays'
|
61
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project xmlns="http://www.netbeans.org/ns/project/1">
|
3
|
+
<type>org.netbeans.modules.ruby.rubyproject</type>
|
4
|
+
<configuration>
|
5
|
+
<data xmlns="http://www.netbeans.org/ns/ruby-project/1">
|
6
|
+
<name>Rholidays</name>
|
7
|
+
<source-roots>
|
8
|
+
<root id="src.dir"/>
|
9
|
+
</source-roots>
|
10
|
+
<test-roots>
|
11
|
+
<root id="test.src.dir"/>
|
12
|
+
</test-roots>
|
13
|
+
</data>
|
14
|
+
</configuration>
|
15
|
+
</project>
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. lib rholidays]))
|
4
|
+
|
5
|
+
Spec::Runner.configure do |config|
|
6
|
+
# == Mock Framework
|
7
|
+
#
|
8
|
+
# RSpec uses it's own mocking framework by default. If you prefer to
|
9
|
+
# use mocha, flexmock or RR, uncomment the appropriate line:
|
10
|
+
#
|
11
|
+
# config.mock_with :mocha
|
12
|
+
# config.mock_with :flexmock
|
13
|
+
# config.mock_with :rr
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'roo'
|
4
|
+
|
5
|
+
ENDBETRAG = 2.00 # endgueltiger Beitrag fuer komplette Feriendaten pro Jahr
|
6
|
+
EUROKURS = 10.0
|
7
|
+
JAHRE = 3 # Anzahl Jahre im voraus die als Ziel angesehen werden
|
8
|
+
LAENDER = [:de,:at]
|
9
|
+
REGIONEN_DE = [:baden_wuerttemberg, :bayern, :berlin, :brandenburg, :bremen,
|
10
|
+
:hamburg, :hessen, :mecklenburg_vorpommern, :niedersachsen,
|
11
|
+
:nordrhein_westfalen, :rheinland_pfalz, :saarland, :sachsen,
|
12
|
+
:sachsen_anhalt, :schleswig_holstein, :thueringen]
|
13
|
+
REGIONEN_AT = [:burgenland, :kaernten, :niederoesterreich, :oberoesterreich,
|
14
|
+
:salzburg, :steiermark, :tirol, :vorarlberg, :wien]
|
15
|
+
FERIENTYP_DE = [:herbst, :weihnachten, :winter, :ostern, :pfingsten, :sommer]
|
16
|
+
FERIENTYP_AT = [:weihnachten, :semester, :ostern, :pfingsten, :sommer]
|
17
|
+
SPREADSHEET = 'ferien_paid.ods'
|
18
|
+
|
19
|
+
#oo = Openoffice.new(ENV['HOLIDAYS_SOURCE'])
|
20
|
+
oo = Openoffice.new(SPREADSHEET)
|
21
|
+
oo.default_sheet = oo.sheets.first
|
22
|
+
found = false
|
23
|
+
max_last = Date.today
|
24
|
+
zuletzt = Hash.new
|
25
|
+
oo.cell(1,1).to_i.upto(oo.last_row) do |row|
|
26
|
+
jahr = oo.cell(row,1)
|
27
|
+
land = oo.cell(row,2).to_sym
|
28
|
+
raise "Land nicht korrekt" unless LAENDER.include? land
|
29
|
+
lregion = oo.cell(row,3).to_sym
|
30
|
+
# p land, lregion
|
31
|
+
unless (land == :de and REGIONEN_DE.include?(lregion)) or
|
32
|
+
(land == :at and REGIONEN_AT.include?(lregion))
|
33
|
+
raise "Region nicht korrekt (#{lregion}) in Zeile #{row}"
|
34
|
+
end
|
35
|
+
ferientyp = oo.cell(row,4).to_sym
|
36
|
+
if (land == :de and FERIENTYP_DE.include?(ferientyp)) or
|
37
|
+
(land == :at and FERIENTYP_AT.include?(ferientyp))
|
38
|
+
# OK
|
39
|
+
else
|
40
|
+
raise "Ferientyp nicht korrekt (#{ferientyp}) in Zeile #{row}"
|
41
|
+
end
|
42
|
+
first = oo.cell(row,5)
|
43
|
+
if first.year != jahr
|
44
|
+
raise "Jahr in Von-Datum stimmt nicht mit Jahr ueberein in Zeile #{row}"
|
45
|
+
end
|
46
|
+
last = oo.cell(row,6)
|
47
|
+
if last.year != jahr
|
48
|
+
if ferientyp == :weihnachten
|
49
|
+
if last.year == jahr + 1
|
50
|
+
# OK
|
51
|
+
else
|
52
|
+
raise "Jahr in Bis-Datum stimmt nicht mit Jahr ueberein in Zeile #{row}"
|
53
|
+
end
|
54
|
+
else
|
55
|
+
raise "Jahr in Bis-Datum stimmt nicht mit Jahr ueberein in Zeile #{row}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
raise "Zeile #{row}: Startdatum <= Endedatum nicht erfuellt" unless first <= last
|
59
|
+
if last > max_last
|
60
|
+
max_last = last
|
61
|
+
end
|
62
|
+
# zuletzt gesehene Termine fuer dieses Land
|
63
|
+
unless zuletzt.has_key? land
|
64
|
+
# Land noch nicht gesehen
|
65
|
+
zuletzt[land] = {:ferientyp => ferientyp, :last => last}
|
66
|
+
else
|
67
|
+
# Land schon vorhanden
|
68
|
+
if last > zuletzt[land][:last]
|
69
|
+
zuletzt[land] = {:ferientyp => ferientyp, :last => last}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def oeffentliche_version
|
75
|
+
puts "berechne oeffentliche Version"
|
76
|
+
heute = Date.today
|
77
|
+
puts "heute ist #{heute}"
|
78
|
+
termin = Date.today >> 6
|
79
|
+
puts "Ferien bis zum #{termin}"
|
80
|
+
result = Hash.new
|
81
|
+
oo = Openoffice.new(SPREADSHEET)
|
82
|
+
oo.default_sheet = oo.sheets.first
|
83
|
+
# alle Ferien sammeln, deren Anfangstermin kleiner als 'termin' ist
|
84
|
+
oo.cell(1,1).to_i.upto(oo.last_row) do |row|
|
85
|
+
jahr = oo.cell(row,1).to_i
|
86
|
+
land = oo.cell(row,2).to_sym
|
87
|
+
lregion = oo.cell(row,3).to_sym
|
88
|
+
typ = oo.cell(row,4)
|
89
|
+
von = oo.cell(row,5)
|
90
|
+
if von <= termin
|
91
|
+
# puts "#{jahr} #{land} #{lregion} #{typ} #{von}"
|
92
|
+
result[{:jahr => jahr,
|
93
|
+
:land => land,
|
94
|
+
:typ => typ}] = true
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
pp result
|
99
|
+
end
|
100
|
+
|
101
|
+
puts "letzter ermittelter Ferientag: #{max_last}"
|
102
|
+
gesamt = Date.today + JAHRE*365
|
103
|
+
gesamt_tage = JAHRE*365
|
104
|
+
anteil_tage = max_last - Date.today
|
105
|
+
anteil = anteil_tage.to_f / gesamt_tage
|
106
|
+
puts "Anteil: " + sprintf("%3d %%",anteil*100)
|
107
|
+
puts "aktueller Beitrag: #{sprintf("%.2f",ENDBETRAG*anteil)} BTC (ca. #{ENDBETRAG*anteil*EUROKURS} EUR)"
|
108
|
+
puts "zuletzt erfasst:"
|
109
|
+
zuletzt.each do |key,elem|
|
110
|
+
print "#{key}\t"
|
111
|
+
print "#{elem[:ferientyp]}\t"
|
112
|
+
print "#{elem[:last]}"
|
113
|
+
puts
|
114
|
+
end
|
115
|
+
|
116
|
+
oeffentliche_version
|
117
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1,223 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require './lib/holidays'
|
3
|
+
|
4
|
+
module Kernel
|
5
|
+
def after(date)
|
6
|
+
if Date.today >= date
|
7
|
+
yield
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Ferien werden bestimmt durch:
|
13
|
+
# 1. Jahr
|
14
|
+
# 2. Land
|
15
|
+
# 3. Region (Bundesland in Deutschland oder Kantone in der Schweiz)
|
16
|
+
# 4. Art der Ferien (z. B. Ostern)
|
17
|
+
class TestRholidays < Test::Unit::TestCase
|
18
|
+
TESTDIR = 'test'
|
19
|
+
def setup
|
20
|
+
ENV['HOLIDAYS_SOURCE'] = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_class
|
24
|
+
h = Holidays.new(2011,:de,:bayern,:pfingsten)
|
25
|
+
assert_kind_of Holidays, h
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_ostern_de_bayern_2012
|
29
|
+
h = Holidays.new(2012,:de,:bayern,:ostern)
|
30
|
+
assert_equal(Date.new(2012,4,2), h.result.first)
|
31
|
+
assert_equal(Date.new(2012,4,14), h.result.last)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_sommerferien_baden_wuerttemberg_2011
|
35
|
+
h = Holidays.new(2011,:de,:baden_wuerttemberg,:sommer)
|
36
|
+
assert_equal Date.new(2011,7,28), h.result.first
|
37
|
+
assert_equal Date.new(2011,9,10), h.result.last
|
38
|
+
end
|
39
|
+
def test_all_countries
|
40
|
+
countries = Holidays.countries
|
41
|
+
assert_equal [:de,:at], countries
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_all_regions_for_germany
|
45
|
+
assert_equal [:baden_wuerttemberg, :bayern, :berlin, :brandenburg, :bremen,
|
46
|
+
:hamburg, :hessen, :mecklenburg_vorpommern, :niedersachsen,
|
47
|
+
:nordrhein_westfalen, :rheinland_pfalz, :saarland, :sachsen,
|
48
|
+
:sachsen_anhalt, :schleswig_holstein, :thueringen
|
49
|
+
],
|
50
|
+
Holidays.regions(:de)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_all_holiday_types
|
54
|
+
assert_equal [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
|
55
|
+
Holidays.holiday_types(:de)
|
56
|
+
assert_equal [:weihnachten, :semester, :ostern, :pfingsten, :sommer],
|
57
|
+
Holidays.holiday_types(:at)
|
58
|
+
assert_equal [:sport, :fruehling, :sommer, :herbst, :weihnachten],
|
59
|
+
Holidays.holiday_types(:ch)
|
60
|
+
assert_raise(ArgumentError) {
|
61
|
+
Holidays.holiday_types(:it)
|
62
|
+
} # fuer Italien gibt es (momentan) noch keine Ferientermine
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_ostern_baden_wuerttemberg_2011
|
66
|
+
assert_equal Date.new(2011,4,21),
|
67
|
+
Holidays.new(2011,:de,:baden_wuerttemberg,:ostern).days.first
|
68
|
+
assert_equal Date.new(2011,4,30),
|
69
|
+
Holidays.new(2011,:de,:baden_wuerttemberg,:ostern).days.last
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_sommer_baden_wuerttemberg_2011
|
73
|
+
assert_equal Date.new(2011,7,28), Holidays.new(2011,:de,:baden_wuerttemberg,:sommer).result.first
|
74
|
+
assert_equal Date.new(2011,9,10), Holidays.new(2011,:de,:baden_wuerttemberg,:sommer).result.last
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_sommer_bayern_2011
|
78
|
+
assert_equal Date.new(2011,7,30), Holidays.new(2011,:de,:bayern,:sommer).result.first
|
79
|
+
assert_equal Date.new(2011,9,12), Holidays.new(2011,:de,:bayern,:sommer).result.last
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_sommer_berlin_2011
|
83
|
+
assert_equal Date.new(2011,6,29), Holidays.new(2011,:de,:berlin,:sommer).result.first
|
84
|
+
assert_equal Date.new(2011,8,12), Holidays.new(2011,:de,:berlin,:sommer).result.last
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_sommer_brandenburg_2011
|
88
|
+
assert_equal Date.new(2011,6,30), Holidays.new(2011,:de,:brandenburg,:sommer).result.first
|
89
|
+
assert_equal Date.new(2011,8,13), Holidays.new(2011,:de,:brandenburg,:sommer).result.last
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_sommer_bremen_2011
|
93
|
+
assert_equal Date.new(2011,7,7), Holidays.new(2011,:de,:bremen,:sommer).result.first
|
94
|
+
assert_equal Date.new(2011,8,17), Holidays.new(2011,:de,:bremen,:sommer).result.last
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_sommer_hamburg_2011
|
98
|
+
assert_equal Date.new(2011,6,30), Holidays.new(2011,:de,:hamburg,:sommer).result.first
|
99
|
+
assert_equal Date.new(2011,8,10), Holidays.new(2011,:de,:hamburg,:sommer).result.last
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_sommer_hessen_2011
|
103
|
+
assert_equal Date.new(2011,6,27), Holidays.new(2011,:de,:hessen,:sommer).result.first
|
104
|
+
assert_equal Date.new(2011,8,5), Holidays.new(2011,:de,:hessen,:sommer).result.last
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_sommer_mecklenburg_vorpommern_2011
|
108
|
+
assert_equal Date.new(2011,7,4), Holidays.new(2011,:de,:mecklenburg_vorpommern,:sommer).result.first
|
109
|
+
assert_equal Date.new(2011,8,13), Holidays.new(2011,:de,:mecklenburg_vorpommern,:sommer).result.last
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_sommer_niedersachsen_2011
|
113
|
+
assert_equal Date.new(2011,7,7), Holidays.new(2011,:de,:niedersachsen,:sommer).result.first
|
114
|
+
assert_equal Date.new(2011,8,17), Holidays.new(2011,:de,:niedersachsen,:sommer).result.last
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_sommer_nordrhein_westfalen_2011
|
118
|
+
assert_equal Date.new(2011,7,25), Holidays.new(2011,:de,:nordrhein_westfalen,:sommer).result.first
|
119
|
+
assert_equal Date.new(2011,9,6), Holidays.new(2011,:de,:nordrhein_westfalen,:sommer).result.last
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_sommer_rheinland_pfalz_2011
|
123
|
+
assert_equal Date.new(2011,6,27), Holidays.new(2011,:de,:rheinland_pfalz,:sommer).result.first
|
124
|
+
assert_equal Date.new(2011,8,5), Holidays.new(2011,:de,:rheinland_pfalz,:sommer).result.last
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_sommer_saarland_2011
|
128
|
+
assert_equal Date.new(2011,6,24), Holidays.new(2011,:de,:saarland,:sommer).result.first
|
129
|
+
assert_equal Date.new(2011,8,6), Holidays.new(2011,:de,:saarland,:sommer).result.last
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_sommer_sachsen_2011
|
133
|
+
assert_equal Date.new(2011,7,11), Holidays.new(2011,:de,:sachsen,:sommer).result.first
|
134
|
+
assert_equal Date.new(2011,8,19), Holidays.new(2011,:de,:sachsen,:sommer).result.last
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_sommer_sachsen_anhalt_2011
|
138
|
+
assert_equal Date.new(2011,7,11), Holidays.new(2011,:de,:sachsen_anhalt,:sommer).result.first
|
139
|
+
assert_equal Date.new(2011,8,24), Holidays.new(2011,:de,:sachsen_anhalt,:sommer).result.last
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_sommer_schleswig_holstein_2011
|
143
|
+
assert_equal Date.new(2011,7,4), Holidays.new(2011,:de,:schleswig_holstein,:sommer).result.first
|
144
|
+
assert_equal Date.new(2011,8,13), Holidays.new(2011,:de,:schleswig_holstein,:sommer).result.last
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_sommer_thueringen_2011
|
148
|
+
assert_equal Date.new(2011,7,11), Holidays.new(2011,:de,:thueringen,:sommer).result.first
|
149
|
+
assert_equal Date.new(2011,8,19), Holidays.new(2011,:de,:thueringen,:sommer).result.last
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_at_sommer_burgenland_2011
|
153
|
+
assert_equal Date.new(2011,7,2), Holidays.new(2011,:at,:burgenland,:sommer).result.first
|
154
|
+
assert_equal Date.new(2011,9,3), Holidays.new(2011,:at,:burgenland,:sommer).result.last
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_at_sommer_kaernten_2011
|
158
|
+
assert_equal Date.new(2011,7,9), Holidays.new(2011,:at,:kaernten,:sommer).result.first
|
159
|
+
assert_equal Date.new(2011,9,10), Holidays.new(2011,:at,:kaernten,:sommer).result.last
|
160
|
+
end
|
161
|
+
|
162
|
+
#def test_source
|
163
|
+
# ENV['HOLIDAYS_SOURCE'] = nil
|
164
|
+
# assert_equal :internal, Holidays.source
|
165
|
+
# ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'nonexisting.ods')
|
166
|
+
# assert_equal :file_not_found, Holidays.source
|
167
|
+
# ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
168
|
+
# assert_equal :from_spreadsheet, Holidays.source
|
169
|
+
#end
|
170
|
+
|
171
|
+
def test_entry_from_spreadsheet
|
172
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
173
|
+
#assert_equal :from_spreadsheet, Holidays.source
|
174
|
+
assert_equal Date.new(2011,11,1), Holidays.new(2011,:de,:baden_wuerttemberg,:herbst).result.first
|
175
|
+
assert_equal Date.new(2011,11,4), Holidays.new(2011,:de,:baden_wuerttemberg,:herbst).result.last
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_entry2_from_spreadsheet
|
179
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
180
|
+
#assert_equal :from_spreadsheet, Holidays.source
|
181
|
+
assert_equal Date.new(2011,10,31), Holidays.new(2011,:de,:bayern,:herbst).result.first
|
182
|
+
assert_equal Date.new(2011,11,5), Holidays.new(2011,:de,:bayern,:herbst).result.last
|
183
|
+
# auch bei vorhandenem Spreadsheet sollen Termine die programmatisch
|
184
|
+
# festgelegt sind auch gefunden werden, wenn sie im Spreadsheet nicht
|
185
|
+
# vorhanden sind.
|
186
|
+
assert_equal Date.new(2011,7,9), Holidays.new(2011,:at,:kaernten,:sommer).result.first
|
187
|
+
assert_equal Date.new(2011,9,10), Holidays.new(2011,:at,:kaernten,:sommer).result.last
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_pfingsten_schleswig_holstein_2012_nur_ein_tag
|
191
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
192
|
+
assert_equal Date.new(2012,5,18), Holidays.new(2012,:de,:schleswig_holstein,:pfingsten).result.first
|
193
|
+
assert_equal Date.new(2012,5,18), Holidays.new(2012,:de,:schleswig_holstein,:pfingsten).result.last
|
194
|
+
assert_equal 1, Holidays.new(2012,:de,:schleswig_holstein,:pfingsten).result.size
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_pfingsten_niedersachsen_2012_nur_ein_tag_und_extra_tag
|
198
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
199
|
+
assert_equal([Date.new(2012,5,18),Date.new(2012,5,29)],
|
200
|
+
Holidays.new(2012,:de,:niedersachsen,:pfingsten).result)
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_pfingsten_berlin_2012_nur_ein_tag
|
204
|
+
#ENV['HOLIDAYS_SOURCE'] = File.join(TESTDIR,'ferien.ods')
|
205
|
+
assert_equal([Date.new(2012,5,18)],
|
206
|
+
Holidays.new(2012,:de,:berlin,:pfingsten).result)
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_first_missing
|
210
|
+
# problematisch, weil nicht jede Region jede Ferienart hat
|
211
|
+
# z.B. BW mit Winterferien
|
212
|
+
# TODO:
|
213
|
+
#assert_equal [2013,:de,:baden_wuerttemberg,:sommer],
|
214
|
+
#Holidays.check_next
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_from_hash_hessen_herbst
|
218
|
+
assert_equal Date.new(2011,10,10),
|
219
|
+
Holidays.new(2011,:de,:hessen,:herbst).days.first
|
220
|
+
assert_equal Date.new(2011,10,22),
|
221
|
+
Holidays.new(2011,:de,:hessen,:herbst).days.last
|
222
|
+
end
|
223
|
+
end
|
data/version.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rholidays
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thomas Preymesser
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-24 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: roo
|
16
|
+
requirement: &19575336 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.10.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *19575336
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bones
|
27
|
+
requirement: &19574988 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.7.1
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *19574988
|
36
|
+
description: Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern
|
37
|
+
im Jahr 2011)
|
38
|
+
email: thopre@gmail.com
|
39
|
+
executables:
|
40
|
+
- rholidays
|
41
|
+
extensions: []
|
42
|
+
extra_rdoc_files:
|
43
|
+
- History.txt
|
44
|
+
- README.txt
|
45
|
+
- bin/rholidays
|
46
|
+
files:
|
47
|
+
- History.txt
|
48
|
+
- README.md
|
49
|
+
- README.txt
|
50
|
+
- Rakefile
|
51
|
+
- bin/rholidays
|
52
|
+
- lib/hash.rb
|
53
|
+
- lib/holidays.rb
|
54
|
+
- lib/rholidays.rb
|
55
|
+
- nbproject/private/private.properties
|
56
|
+
- nbproject/project.properties
|
57
|
+
- nbproject/project.xml
|
58
|
+
- spec/rholidays_spec.rb
|
59
|
+
- spec/spec_helper.rb
|
60
|
+
- test/check_spreadsheet.rb
|
61
|
+
- test/ferien_free.ods
|
62
|
+
- test/ferien_paid - Kopie.ods
|
63
|
+
- test/test_rholidays.rb
|
64
|
+
- version.txt
|
65
|
+
homepage: http://rholidays.rubyforge.net
|
66
|
+
licenses: []
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options:
|
69
|
+
- --main
|
70
|
+
- README.txt
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project: rholidays
|
87
|
+
rubygems_version: 1.8.11
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern im
|
91
|
+
Jahr 2011)
|
92
|
+
test_files:
|
93
|
+
- test/test_rholidays.rb
|