rholidays 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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