rholidays 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,4 +1,9 @@
1
- == 1.0.0 / 2011-06-30
1
+ == 0.2.0 / 2011-10-25
2
+
3
+ * 1 enhancement
4
+ * Ferientypen optional auch je nach Region
5
+
6
+ == 0.1.0 / 2011-10-24
2
7
 
3
8
  * 1 major enhancement
4
9
  * Birthday!
data/README.txt CHANGED
@@ -4,16 +4,22 @@
4
4
 
5
5
  Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern im Jahr 2011)
6
6
 
7
+ == Unterstützung dieses Projekts
8
+
9
+ Dieses Gem kann frei verwendet werden. Um die weitere Entwicklung und Aktualisierungen zu gewährleisten, kann dieses Projekt per Bitcoin unterstützt werden - Adresse hierfür: 1H6n4m7rJzMmdMspmfkAxuX79tsZnGkN94
10
+
7
11
  == Features
8
12
 
9
13
  * Liste der unterstützten Länder
10
14
  * Liste der definierten Regionen (in Deutschland die Bundesländer) je Land
11
15
  * Liste der Ferienarten je Land
16
+ * Liste der Ferienarten je Land und nur für bestimmte Region (z. B. Hessen)
12
17
  * Ermitteln eines spezifischen Ferientyps (z.B. Sommerferien Bayern in Deutschland für 2011)
13
18
  * Momentan sind die Länder Deutschland und Österreich implementiert
14
19
 
15
20
  == Beispiele
16
21
 
22
+ require 'rubygems'
17
23
  require 'rholidays'
18
24
 
19
25
  # Sommerferien 2011 in Berlin (Deutschland)
@@ -42,6 +48,9 @@ Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern im Jahr 2
42
48
  # Ferienarten für ein Land:
43
49
  ferienarten = Holidays.holiday_types(:de)
44
50
  #=> [:winter, :ostern, :pfingsten, :sommer, :herbst, :weihnachten]
51
+ # Ferienarten nur fuer eine Region (kann anders als fuer andere Regionen sein)
52
+ ferienarten = Holidays.holiday_types(:de, :hessen)
53
+ #=> [:ostern, :sommer, :herbst, :weihnachten]
45
54
 
46
55
  == Installation
47
56
 
data/lib/holidays.rb CHANGED
@@ -17,9 +17,37 @@ class Holidays
17
17
  :salzburg,:steiermark, :tirol, :vorarlberg, :wien]
18
18
  HOLIDAY_CODES_AT =
19
19
  [:weihnachten, :semester, :ostern, :pfingsten, :sommer]
20
-
20
+ TYPES={
21
+ [:de,:baden_wuerttemberg] => [:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
22
+ [:de,:bayern] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
23
+ [:de,:berlin] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
24
+ [:de,:brandenburg] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
25
+ [:de,:bremen] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
26
+ [:de,:hamburg] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
27
+ [:de,:hessen] => [:ostern,:sommer,:herbst,:weihnachten],
28
+ [:de,:mecklenburg_vorpommern] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
29
+ [:de,:niedersachsen] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
30
+ [:de,:nordrhein_westfalen] => [:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
31
+ [:de,:rheinland_pfalz] => [:ostern,:sommer,:herbst,:weihnachten],
32
+ [:de,:saarland] => [:winter,:ostern,:sommer,:herbst,:weihnachten],
33
+ [:de,:sachsen] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
34
+ [:de,:sachsen_anhalt] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
35
+ [:de,:schleswig_holstein] => [:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
36
+ [:de,:thueringen] => [:winter,:ostern,:pfingsten,:sommer,:herbst,:weihnachten],
37
+
38
+ [:at,:burgenland] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
39
+ [:at,:kaernten] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
40
+ [:at,:niederoesterreich] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
41
+ [:at,:oberoesterreich] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
42
+ [:at,:salzburg] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
43
+ [:at,:steiermark] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
44
+ [:at,:tirol] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
45
+ [:at,:vorarlberg] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
46
+ [:at,:wien] => [:semester,:ostern,:pfingsten,:sommer,:weihnachten],
47
+ }
21
48
  require 'hash'
22
49
 
50
+ # Creates a new Holiday object
23
51
  def initialize(year,country,region,holiday_type)
24
52
  @year = year
25
53
  @country = country
@@ -213,10 +241,12 @@ class Holidays
213
241
 
214
242
  alias :days :result
215
243
 
244
+ # Returns an array of all implemented countries ([:de, :at, ..])
216
245
  def self.countries
217
246
  COUNTRY_CODES
218
247
  end
219
248
 
249
+ # Returns an array of all regions of a country ([:baden_wuerttemberg, ..])
220
250
  def self.regions(country)
221
251
  case country
222
252
  when :de
@@ -230,56 +260,44 @@ class Holidays
230
260
  end
231
261
  end
232
262
 
233
- def self.holiday_types(country)
263
+ # Returns an array of all holiday types of a country and optionally a region
264
+ # ([:winter, :ostern, ..])
265
+ def self.holiday_types(country,region=nil)
234
266
  case country
235
267
  when :de
236
- HOLIDAY_CODES_DE
268
+ if region
269
+ TYPES[[country,region]]
270
+ else
271
+ HOLIDAY_CODES_DE
272
+ end
237
273
  when :at
238
- HOLIDAY_CODES_AT
274
+ if region
275
+ TYPES[[country,region]]
276
+ else
277
+ HOLIDAY_CODES_AT
278
+ end
239
279
  when :ch
280
+ #TODO: unterschiedliche in Schweiz?
240
281
  [:sport, :fruehling, :sommer, :herbst, :weihnachten]
241
282
  else
242
283
  raise ArgumentError, "Unknown country #{country}"
243
284
  end
244
285
  end
245
286
 
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
287
+ # Obsolete - always returns :from_hash
288
+ def self.source #:nodoc
289
+ return :from_hash # TODO:
290
+ # unless ENV['HOLIDAYS_SOURCE']
291
+ # :internal
292
+ # else
293
+ # if File.exist? ENV['HOLIDAYS_SOURCE']
294
+ # :from_spreadsheet
295
+ # else
296
+ # :file_not_found
297
+ # end
298
+ # end
258
299
  end
259
300
 
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
301
  private
284
302
 
285
303
  def build_result
@@ -291,9 +309,8 @@ class Holidays
291
309
  lfd += 1
292
310
  end
293
311
  @extra_days.each do |d|
294
- result << d
312
+ result << d
295
313
  end
296
-
297
314
  result.sort
298
315
  end
299
316
 
@@ -302,34 +319,3 @@ class Holidays
302
319
  end
303
320
 
304
321
  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/version.txt CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rholidays
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-24 00:00:00.000000000Z
12
+ date: 2011-10-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: roo
16
- requirement: &19575336 !ruby/object:Gem::Requirement
16
+ requirement: &20035068 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.10.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *19575336
24
+ version_requirements: *20035068
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bones
27
- requirement: &19574988 !ruby/object:Gem::Requirement
27
+ requirement: &20034780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 3.7.1
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *19574988
35
+ version_requirements: *20034780
36
36
  description: Rholidays ermittelt Ferientermine (zum Beispiel Sommerferien in Bayern
37
37
  im Jahr 2011)
38
38
  email: thopre@gmail.com
@@ -45,7 +45,6 @@ extra_rdoc_files:
45
45
  - bin/rholidays
46
46
  files:
47
47
  - History.txt
48
- - README.md
49
48
  - README.txt
50
49
  - Rakefile
51
50
  - bin/rholidays
@@ -57,9 +56,6 @@ files:
57
56
  - nbproject/project.xml
58
57
  - spec/rholidays_spec.rb
59
58
  - spec/spec_helper.rb
60
- - test/check_spreadsheet.rb
61
- - test/ferien_free.ods
62
- - test/ferien_paid - Kopie.ods
63
59
  - test/test_rholidays.rb
64
60
  - version.txt
65
61
  homepage: http://rholidays.rubyforge.net
data/README.md DELETED
@@ -1,64 +0,0 @@
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.
@@ -1,117 +0,0 @@
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
-
data/test/ferien_free.ods DELETED
Binary file
Binary file