holidays 1.0.5 → 1.0.6

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.
Files changed (80) hide show
  1. data/.travis.yml +8 -1
  2. data/{CHANGELOG → CHANGELOG.rdoc} +29 -3
  3. data/LICENSE +2 -2
  4. data/README.rdoc +41 -28
  5. data/data/ar.yaml +82 -0
  6. data/data/au.yaml +40 -4
  7. data/data/be.yaml +65 -0
  8. data/data/br.yaml +12 -12
  9. data/data/ca.yaml +30 -17
  10. data/data/ch.yaml +187 -0
  11. data/data/federal_reserve.yaml +151 -0
  12. data/data/fi.yaml +19 -0
  13. data/data/fr.yaml +5 -5
  14. data/data/gb.yaml +19 -14
  15. data/data/hr.yaml +77 -0
  16. data/data/ie.yaml +36 -8
  17. data/data/index.yaml +12 -2
  18. data/data/ma.yaml +52 -0
  19. data/data/nerc.yaml +51 -0
  20. data/data/north_america_informal.yaml +13 -1
  21. data/data/pt.yaml +14 -13
  22. data/data/ro.yaml +76 -0
  23. data/data/sk.yaml +74 -0
  24. data/data/us.yaml +5 -1
  25. data/data/ve.yaml +70 -0
  26. data/holidays.gemspec +41 -9
  27. data/lib/holidays.rb +57 -34
  28. data/lib/holidays/MANIFEST +35 -24
  29. data/lib/holidays/ar.rb +42 -0
  30. data/lib/holidays/at.rb +3 -3
  31. data/lib/holidays/au.rb +28 -4
  32. data/lib/holidays/be.rb +40 -0
  33. data/lib/holidays/br.rb +1 -1
  34. data/lib/holidays/ca.rb +7 -3
  35. data/lib/holidays/ch.rb +92 -0
  36. data/lib/holidays/europe.rb +173 -53
  37. data/lib/holidays/federal_reserve.rb +50 -0
  38. data/lib/holidays/fi.rb +14 -1
  39. data/lib/holidays/fr.rb +1 -1
  40. data/lib/holidays/gb.rb +1 -1
  41. data/lib/holidays/hr.rb +42 -0
  42. data/lib/holidays/hu.rb +38 -0
  43. data/lib/holidays/ie.rb +16 -7
  44. data/lib/holidays/ma.rb +37 -0
  45. data/lib/holidays/mx.rb +3 -1
  46. data/lib/holidays/nerc.rb +34 -0
  47. data/lib/holidays/north_america.rb +9 -4
  48. data/lib/holidays/pt.rb +1 -1
  49. data/lib/holidays/ro.rb +40 -0
  50. data/lib/holidays/scandinavia.rb +13 -0
  51. data/lib/holidays/sk.rb +42 -0
  52. data/lib/holidays/us.rb +6 -3
  53. data/lib/holidays/ve.rb +40 -0
  54. data/rakefile.rb +1 -1
  55. data/test/defs/test_defs_ar.rb +27 -0
  56. data/test/defs/test_defs_au.rb +10 -0
  57. data/test/defs/test_defs_be.rb +25 -0
  58. data/test/defs/test_defs_br.rb +5 -5
  59. data/test/defs/test_defs_ca.rb +22 -2
  60. data/test/defs/test_defs_ch.rb +39 -0
  61. data/test/defs/test_defs_europe.rb +160 -10
  62. data/test/defs/test_defs_federal_reserve.rb +84 -0
  63. data/test/defs/test_defs_fi.rb +5 -0
  64. data/test/defs/test_defs_fr.rb +1 -1
  65. data/test/defs/test_defs_gb.rb +7 -2
  66. data/test/defs/test_defs_hr.rb +31 -0
  67. data/test/defs/test_defs_hu.rb +29 -0
  68. data/test/defs/test_defs_ie.rb +18 -3
  69. data/test/defs/test_defs_ma.rb +22 -0
  70. data/test/defs/test_defs_mx.rb +13 -0
  71. data/test/defs/test_defs_nerc.rb +23 -0
  72. data/test/defs/test_defs_north_america.rb +23 -2
  73. data/test/defs/test_defs_pt.rb +4 -3
  74. data/test/defs/test_defs_ro.rb +37 -0
  75. data/test/defs/test_defs_scandinavia.rb +5 -0
  76. data/test/defs/test_defs_sk.rb +28 -0
  77. data/test/defs/test_defs_us.rb +14 -0
  78. data/test/defs/test_defs_ve.rb +28 -0
  79. data/test/test_all_regions.rb +10 -0
  80. metadata +40 -6
@@ -17,7 +17,7 @@ require 'date'
17
17
  # By region and sub regions. For example, return holidays in Germany
18
18
  # and all its sub regions with <tt>:de_</tt>.
19
19
  # [<tt>:region_sub</tt>]
20
- # By sub region. Return national holidays in Spain plus holidays in Spain's
20
+ # By sub region. Return national holidays in Spain plus holidays in Spain's
21
21
  # Valencia region with <tt>:es_v</tt>.
22
22
  # [<tt>:any</tt>]
23
23
  # Any region. Return holidays from any loaded region.
@@ -46,7 +46,7 @@ module Holidays
46
46
  # Exception thrown when an unknown region is requested.
47
47
  class UnknownRegionError < ArgumentError; end
48
48
 
49
- VERSION = '1.0.5'
49
+ VERSION = '1.0.6'
50
50
 
51
51
  @@regions = []
52
52
  @@holidays_by_month = {}
@@ -62,7 +62,7 @@ module Holidays
62
62
  # [<tt>date</tt>] A Date object.
63
63
  # [<tt>:options</tt>] One or more region symbols, <tt>:informal</tt> and/or <tt>:observed</tt>.
64
64
  #
65
- # Returns an array of hashes or nil. See Holidays#between for the output
65
+ # Returns an array of hashes or nil. See Holidays#between for the output
66
66
  # format.
67
67
  #
68
68
  # Also available via Date#holidays.
@@ -86,7 +86,7 @@ module Holidays
86
86
  options.delete(:no_observed)
87
87
  self.between(start_date, end_date, options).empty?
88
88
  end
89
-
89
+
90
90
  # Get all holidays occuring between two dates, inclusively.
91
91
  #
92
92
  # Returns an array of hashes or nil.
@@ -110,16 +110,16 @@ module Holidays
110
110
 
111
111
  # get simple dates
112
112
  if start_date.respond_to?(:to_date)
113
- start_date = start_date.to_date
113
+ start_date = start_date.to_date
114
114
  else
115
115
  start_date = Date.civil(start_date.year, start_date.mon, start_date.mday)
116
- end
116
+ end
117
117
 
118
118
  if end_date.respond_to?(:to_date)
119
119
  end_date = end_date.to_date
120
120
  else
121
121
  end_date = Date.civil(end_date.year, end_date.mon, end_date.mday)
122
- end
122
+ end
123
123
 
124
124
  regions, observed, informal = parse_options(options)
125
125
  holidays = []
@@ -127,7 +127,7 @@ module Holidays
127
127
  dates = {}
128
128
  (start_date..end_date).each do |date|
129
129
  # Always include month '0' for variable-month holidays
130
- dates[date.year] = [0] unless dates[date.year]
130
+ dates[date.year] = [0] unless dates[date.year]
131
131
  # TODO: test this, maybe should push then flatten
132
132
  dates[date.year] << date.month unless dates[date.year].include?(date.month)
133
133
  end
@@ -138,14 +138,14 @@ module Holidays
138
138
 
139
139
  hbm.each do |h|
140
140
  next unless in_region?(regions, h[:regions])
141
-
141
+
142
142
  # Skip informal holidays unless they have been requested
143
143
  next if h[:type] == :informal and not informal
144
-
144
+
145
145
  if h[:function]
146
146
  # Holiday definition requires a calculation
147
147
  result = call_proc(h[:function], year)
148
-
148
+
149
149
  # Procs may return either Date or an integer representing mday
150
150
  if result.kind_of?(Date)
151
151
  month = result.month
@@ -187,7 +187,7 @@ module Holidays
187
187
  def self.merge_defs(regions, holidays) # :nodoc:
188
188
  @@regions = @@regions | regions
189
189
  @@regions.uniq!
190
-
190
+
191
191
  holidays.each do |month, holiday_defs|
192
192
  @@holidays_by_month[month] = [] unless @@holidays_by_month[month]
193
193
  holiday_defs.each do |holiday_def|
@@ -198,15 +198,15 @@ module Holidays
198
198
  if ex[:name] == holiday_def[:name] and ex[:wday] == holiday_def[:wday] and ex[:mday] == holiday_def[:mday] and ex[:week] == holiday_def[:week] and ex[:function_id] == holiday_def[:function_id] and ex[:type] == holiday_def[:type] and ex[:observed_id] == holiday_def[:observed_id]
199
199
  # append regions
200
200
  ex[:regions] << holiday_def[:regions]
201
-
201
+
202
202
  # Should do this once we're done
203
203
  ex[:regions].flatten!
204
204
  ex[:regions].uniq!
205
205
  exists = true
206
206
  end
207
207
  end
208
-
209
- @@holidays_by_month[month] << holiday_def unless exists
208
+
209
+ @@holidays_by_month[month] << holiday_def unless exists
210
210
  end
211
211
  end
212
212
  end
@@ -232,7 +232,7 @@ module Holidays
232
232
  day = ((h + l - 7 * m + 114) % 31) + 1
233
233
  Date.civil(year, month, day)
234
234
  end
235
-
235
+
236
236
  # A method to calculate the orthodox easter date, returns date in the Gregorian (western) calendar
237
237
  # Safe until appr. 4100 AD, when one leap day will be removed.
238
238
  # Returns a Date object.
@@ -251,12 +251,12 @@ module Holidays
251
251
  # between the years 1583 and 1699 10 days are added to the julian day count
252
252
  when (year >= 1583 and year <= 1699)
253
253
  offset = 10
254
- # after 1700, 1 day is added for each century, except if the century year is exactly divisible by 400 (in which case no days are added).
254
+ # after 1700, 1 day is added for each century, except if the century year is exactly divisible by 400 (in which case no days are added).
255
255
  # Safe until 4100 AD, when one leap day will be removed.
256
- when year >= 1700
256
+ when year >= 1700
257
257
  offset = (year - 1700).divmod(100)[0] + ((year - year.divmod(100)[1]).divmod(400)[1] == 0 ? 0 : 1) - (year - year.divmod(100)[1] - 1700).divmod(400)[0] + 10
258
258
  end
259
- # add offset to the julian day
259
+ # add offset to the julian day
260
260
  return Date.jd(j_date.jd + offset)
261
261
  end
262
262
 
@@ -278,7 +278,11 @@ module Holidays
278
278
  # Move Boxing Day if it falls on a weekend, leaving room for Christmas.
279
279
  # Used as a callback function.
280
280
  def self.to_weekday_if_boxing_weekend(date)
281
- date += 2 if date.wday == 6 or date.wday == 0
281
+ if date.wday == 6 or date.wday == 0
282
+ date += 2
283
+ elsif date.wday == 1
284
+ date += 1
285
+ end
282
286
  date
283
287
  end
284
288
 
@@ -290,7 +294,7 @@ module Holidays
290
294
  date -= 1 if date.wday == 6
291
295
  date
292
296
  end
293
-
297
+
294
298
  # Returns an array of symbols all the available holiday definitions.
295
299
  #
296
300
  # Optional `full_path` param is used internally for loading all the definitions.
@@ -298,7 +302,12 @@ module Holidays
298
302
  paths = Dir.glob(DEFINITION_PATH + '/*.rb')
299
303
  full_path ? paths : paths.collect { |path| path.match(/([a-z_-]+)\.rb/i)[1].to_sym }
300
304
  end
301
-
305
+
306
+ # Returns an array of symbols of all the available holiday regions.
307
+ def self.regions
308
+ @@regions
309
+ end
310
+
302
311
  # Load all available holiday definitions
303
312
  def self.load_all
304
313
  self.available(true).each { |path| require path }
@@ -314,7 +323,7 @@ private
314
323
  return regions, observed, informal
315
324
  end
316
325
 
317
- # Check regions against list of supported regions and return an array of
326
+ # Check regions against list of supported regions and return an array of
318
327
  # symbols.
319
328
  #
320
329
  # If a wildcard region is found (e.g. <tt>:ca_</tt>) it is expanded into all
@@ -329,17 +338,31 @@ private
329
338
  regions.delete_if do |reg|
330
339
  if reg.to_s =~ /_$/
331
340
  prefix = reg.to_s.split('_').first
332
- raise UnknownRegionError unless @@regions.include?(prefix.to_sym) or begin require "holidays/#{prefix}"; rescue LoadError; false; end
341
+ unless @@regions.include?(prefix.to_sym)
342
+ begin
343
+ require "holidays/#{prefix}"
344
+ rescue LoadError
345
+ raise UnknownRegionError, "Could not load holidays/#{prefix}"
346
+ end
347
+ end
333
348
  regions << @@regions.select { |dr| dr.to_s =~ Regexp.new("^#{reg}") }
334
349
  true
335
350
  end
336
351
  end
337
352
 
338
353
  regions.flatten!
339
-
354
+
340
355
  require "holidays/north_america" if regions.include?(:us) # special case for north_america/US cross-linking
341
356
 
342
- raise UnknownRegionError unless regions.all? { |r| r == :any or @@regions.include?(r) or begin require "holidays/#{r.to_s}"; rescue LoadError; false; end }
357
+ regions.each do |r|
358
+ unless r == :any or @@regions.include?(r)
359
+ begin
360
+ require "holidays/#{r.to_s}"
361
+ rescue LoadError => e
362
+ raise UnknownRegionError, "Could not load holidays/#{r}"
363
+ end
364
+ end
365
+ end
343
366
  regions
344
367
  end
345
368
 
@@ -350,7 +373,7 @@ private
350
373
  # When requesting :ca, holidays in :ca but not its subregions should be returned.
351
374
  def self.in_region?(requested, available) # :nodoc:
352
375
  return true if requested.include?(:any)
353
-
376
+
354
377
  # When an underscore is encountered, derive the parent regions
355
378
  # symbol and include both in the requested array.
356
379
  requested = requested.collect do |r|
@@ -369,16 +392,16 @@ private
369
392
  # ==== Benchmarks
370
393
  #
371
394
  # Lookup Easter Sunday, with caching, by number of iterations:
372
- #
395
+ #
373
396
  # user system total real
374
397
  # 0001 0.000000 0.000000 0.000000 ( 0.000000)
375
398
  # 0010 0.000000 0.000000 0.000000 ( 0.000000)
376
399
  # 0100 0.078000 0.000000 0.078000 ( 0.078000)
377
400
  # 1000 0.641000 0.000000 0.641000 ( 0.641000)
378
401
  # 5000 3.172000 0.015000 3.187000 ( 3.219000)
379
- #
402
+ #
380
403
  # Lookup Easter Sunday, without caching, by number of iterations:
381
- #
404
+ #
382
405
  # user system total real
383
406
  # 0001 0.000000 0.000000 0.000000 ( 0.000000)
384
407
  # 0010 0.016000 0.000000 0.016000 ( 0.016000)
@@ -435,7 +458,7 @@ class Date
435
458
  holidays && !holidays.empty?
436
459
  end
437
460
 
438
- # Calculate day of the month based on the week number and the day of the
461
+ # Calculate day of the month based on the week number and the day of the
439
462
  # week.
440
463
  #
441
464
  # ==== Parameters
@@ -476,11 +499,11 @@ class Date
476
499
  if week > 0
477
500
  return ((week - 1) * 7) + 1 + ((wday - Date.civil(year, month,(week-1)*7 + 1).wday) % 7)
478
501
  end
479
-
502
+
480
503
  days = MONTH_LENGTHS[month-1]
481
504
 
482
505
  days = 29 if month == 2 and Date.leap?(year)
483
-
506
+
484
507
  return days - ((Date.civil(year, month, days).wday - wday + 7) % 7) - (7 * (week.abs - 1))
485
508
  end
486
- end
509
+ end
@@ -1,34 +1,45 @@
1
1
  ==== Regional definitions
2
2
  The following definition files are included in this installation:
3
3
 
4
- * holidays/mx
4
+ * holidays/ar
5
5
  * holidays/at
6
- * holidays/nz
7
- * holidays/nl
8
- * holidays/dk
9
- * holidays/cz
10
- * holidays/scandinavia
11
- * holidays/no
12
- * holidays/pt
13
- * holidays/nyse
14
- * holidays/it
15
- * holidays/united_nations
16
6
  * holidays/au
17
- * holidays/us
18
- * holidays/ie
19
- * holidays/za
20
- * holidays/is
21
- * holidays/north_america
22
- * holidays/es
23
- * holidays/fi
7
+ * holidays/be
8
+ * holidays/br
9
+ * holidays/ca
10
+ * holidays/ch
11
+ * holidays/cz
12
+ * holidays/de
13
+ * holidays/dk
24
14
  * holidays/el
15
+ * holidays/es
25
16
  * holidays/europe
26
- * holidays/de
17
+ * holidays/federal_reserve
18
+ * holidays/fi
19
+ * holidays/fr
27
20
  * holidays/gb
28
- * holidays/ups
21
+ * holidays/hr
22
+ * holidays/hu
23
+ * holidays/ie
24
+ * holidays/is
25
+ * holidays/it
29
26
  * holidays/jp
30
- * holidays/fr
31
- * holidays/se
32
- * holidays/ca
33
- * holidays/br
27
+ * holidays/li
28
+ * holidays/ma
29
+ * holidays/mx
30
+ * holidays/nerc
31
+ * holidays/nl
32
+ * holidays/no
33
+ * holidays/north_america
34
+ * holidays/nyse
35
+ * holidays/nz
34
36
  * holidays/pl
37
+ * holidays/pt
38
+ * holidays/ro
39
+ * holidays/scandinavia
40
+ * holidays/se
41
+ * holidays/united_nations
42
+ * holidays/ups
43
+ * holidays/us
44
+ * holidays/ve
45
+ * holidays/za
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ module Holidays
3
+ # This file is generated by the Ruby Holidays gem.
4
+ #
5
+ # Definitions loaded: data/ar.yaml
6
+ #
7
+ # To use the definitions in this file, load it right after you load the
8
+ # Holiday gem:
9
+ #
10
+ # require 'holidays'
11
+ # require 'holidays/ar'
12
+ #
13
+ # All the definitions are available at https://github.com/alexdunae/holidays
14
+ module AR # :nodoc:
15
+ def self.defined_regions
16
+ [:ar]
17
+ end
18
+
19
+ def self.holidays_by_month
20
+ {
21
+ 0 => [{:function => lambda { |year| Holidays.easter(year)-3 }, :function_id => "easter(year)-3", :name => "Jueves Santo", :regions => [:ar]},
22
+ {:function => lambda { |year| Holidays.easter(year)-2 }, :function_id => "easter(year)-2", :name => "Viernes Santo", :regions => [:ar]}],
23
+ 1 => [{:mday => 1, :name => "Año Nuevo", :regions => [:ar]}],
24
+ 3 => [{:mday => 24, :name => "Día Nacional de la Memoria por la Verdad y la Justicia", :regions => [:ar]}],
25
+ 4 => [{:mday => 2, :name => "Día del Veterano y de los Caídos en la Guerra de Malvinas", :regions => [:ar]}],
26
+ 5 => [{:mday => 1, :name => "Día del Trabajador", :regions => [:ar]},
27
+ {:mday => 25, :name => "Día de la Revolución de Mayo", :regions => [:ar]}],
28
+ 6 => [{:mday => 20, :name => "Día de la Bandera", :regions => [:ar]}],
29
+ 7 => [{:mday => 9, :name => "Día de la Independencia", :regions => [:ar]}],
30
+ 8 => [{:wday => 1, :week => 3, :name => "Paso a la Inmortalidad del General José de San Martín", :regions => [:ar]}],
31
+ 10 => [{:wday => 1, :week => 2, :name => "Día del Respeto a la Diversidad Cultural", :regions => [:ar]}],
32
+ 11 => [{:wday => 1, :week => 4, :name => "Día de la Soberanía nacional", :regions => [:ar]}],
33
+ 12 => [{:mday => 8, :name => "Inmaculada Concepción de María", :regions => [:ar]},
34
+ {:mday => 25, :name => "Navidad", :regions => [:ar]}]
35
+ }
36
+ end
37
+ end
38
+
39
+
40
+ end
41
+
42
+ Holidays.merge_defs(Holidays::AR.defined_regions, Holidays::AR.holidays_by_month)
@@ -23,12 +23,12 @@ module Holidays
23
23
  {:function => lambda { |year| Holidays.easter(year)+50 }, :function_id => "easter(year)+50", :name => "Pfingstmontag", :regions => [:at]},
24
24
  {:function => lambda { |year| Holidays.easter(year)+60 }, :function_id => "easter(year)+60", :name => "Fronleichnam", :regions => [:at]}],
25
25
  1 => [{:mday => 1, :name => "Neujahrstag", :regions => [:at]},
26
- {:mday => 6, :name => "Heilige Drei Könige", :regions => [:at]}],
26
+ {:mday => 6, :name => "Heilige Drei Könige", :regions => [:at]}],
27
27
  5 => [{:mday => 1, :name => "Staatsfeiertag", :regions => [:at]}],
28
- 8 => [{:mday => 15, :name => "Mari√§ Himmelfahrt", :regions => [:at]}],
28
+ 8 => [{:mday => 15, :name => "Mariä Himmelfahrt", :regions => [:at]}],
29
29
  10 => [{:mday => 26, :name => "Nationalfeiertag", :regions => [:at]}],
30
30
  11 => [{:mday => 1, :name => "Allerheiligen", :regions => [:at]}],
31
- 12 => [{:mday => 8, :name => "Mari√§ Empf√§ngnis", :regions => [:at]},
31
+ 12 => [{:mday => 8, :name => "Mariä Empfägnis", :regions => [:at]},
32
32
  {:mday => 25, :name => "1. Weihnachtstag", :regions => [:at]},
33
33
  {:mday => 26, :name => "2. Weihnachtstag", :regions => [:at]}]
34
34
  }
@@ -13,13 +13,14 @@ module Holidays
13
13
  # All the definitions are available at https://github.com/alexdunae/holidays
14
14
  module AU # :nodoc:
15
15
  def self.defined_regions
16
- [:au, :au_tas, :au_wa, :au_vic, :au_qld, :au_nt, :au_act, :au_nsw, :au_sa, :au_qld_brisbane]
16
+ [:au, :au_nsw, :au_tas, :au_wa, :au_vic, :au_qld, :au_nt, :au_act, :au_sa, :au_qld_brisbane]
17
17
  end
18
18
 
19
19
  def self.holidays_by_month
20
20
  {
21
21
  0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :function_id => "easter(year)-2", :name => "Good Friday", :regions => [:au]},
22
22
  {:function => lambda { |year| Holidays.easter(year)-1 }, :function_id => "easter(year)-1", :name => "Easter Saturday", :regions => [:au]},
23
+ {:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :name => "Easter Sunday", :regions => [:au_nsw]},
23
24
  {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Easter Monday", :regions => [:au]},
24
25
  {:function => lambda { |year| Holidays.easter(year)+2 }, :function_id => "easter(year)+2", :name => "Easter Monday", :regions => [:au_tas]}],
25
26
  1 => [{:mday => 1, :name => "New Year's Day", :regions => [:au]},
@@ -28,19 +29,42 @@ module Holidays
28
29
  {:wday => 1, :week => 2, :name => "Eight Hours Day", :regions => [:au_tas]},
29
30
  {:wday => 1, :week => 2, :name => "Labour Day", :regions => [:au_vic]}],
30
31
  4 => [{:mday => 25, :name => "ANZAC Day", :regions => [:au]}],
31
- 5 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_qld]},
32
+ 5 => [{:function => lambda { |year| Holidays.qld_labour_day_may(year) }, :function_id => "qld_labour_day_may(year)", :name => "Labour Day", :regions => [:au_qld]},
32
33
  {:wday => 1, :week => 1, :name => "May Day", :regions => [:au_nt]}],
33
34
  6 => [{:wday => 1, :week => 1, :name => "Foundation Day", :regions => [:au_wa]},
34
- {:wday => 1, :week => 2, :name => "Queen's Birthday", :regions => [:au_act, :au_nsw, :au_sa, :au_tas, :au_nt, :au_qld, :au_vic]},
35
+ {:wday => 1, :week => 2, :name => "Queen's Birthday", :regions => [:au_act, :au_nsw, :au_sa, :au_qld, :au_tas, :au_nt, :au_vic]},
35
36
  {:mday => 6, :type => :informal, :name => "Queensland Day", :regions => [:au_qld]}],
36
37
  8 => [{:wday => 3, :week => -3, :name => "Ekka", :regions => [:au_qld_brisbane]}],
37
- 10 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_act, :au_nsw, :au_sa]}],
38
+ 10 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_act, :au_nsw, :au_sa]},
39
+ {:function => lambda { |year| Holidays.qld_labour_day_october(year) }, :function_id => "qld_labour_day_october(year)", :name => "Labour Day", :regions => [:au_qld]},
40
+ {:function => lambda { |year| Holidays.qld_queens_bday_october(year) }, :function_id => "qld_queens_bday_october(year)", :name => "Queen's Birthday", :regions => [:au_qld]}],
38
41
  12 => [{:mday => 25, :name => "Christmas Day", :regions => [:au]},
39
42
  {:mday => 26, :name => "Boxing Day", :regions => [:au]}]
40
43
  }
41
44
  end
42
45
  end
43
46
 
47
+ # http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
48
+ # celebrated twice in 2012
49
+ def self.qld_queens_bday_october(year)
50
+ year == 2012 ? 1 : nil
51
+ end
52
+
53
+
54
+ # http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
55
+ # changed from may to october after 2012
56
+ def self.qld_labour_day_may(year)
57
+ year <= 2012 ? Date.calculate_mday(year, 5, 1, 1) : nil
58
+ end
59
+
60
+
61
+ # http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
62
+ # changed from may to october after 2012
63
+ def self.qld_labour_day_october(year)
64
+ year <= 2012 ? nil : Date.calculate_mday(year, 10, 1, 1)
65
+ end
66
+
67
+
44
68
 
45
69
  end
46
70