rholidays 0.1.0 → 0.2.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 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