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 ADDED
@@ -0,0 +1,4 @@
1
+ == 1.0.0 / 2011-06-30
2
+
3
+ * 1 major enhancement
4
+ * Birthday!
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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(
4
+ File.join(File.dirname(__FILE__), %w[.. lib rholidays]))
5
+ require 'rubygems'
6
+ require 'choice'
7
+ # Put your code here
8
+
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,2 @@
1
+ file.reference.rholidays-lib=C:\\Users\\thopre\\rholidays\\lib
2
+ file.reference.rholidays-test=C:\\Users\\thopre\\rholidays\\test
@@ -0,0 +1,7 @@
1
+ file.reference.rholidays-lib=lib
2
+ file.reference.rholidays-test=test
3
+ main.file=
4
+ platform.active=Ruby
5
+ source.encoding=UTF-8
6
+ src.dir=${file.reference.rholidays-lib}
7
+ test.src.dir=${file.reference.rholidays-test}
@@ -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>
@@ -0,0 +1,6 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
3
+
4
+ describe Rholidays do
5
+ end
6
+
@@ -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