holidays 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +19 -0
  4. data/Rakefile +1 -2
  5. data/data/au.yaml +81 -1
  6. data/data/ca.yaml +40 -3
  7. data/data/cr.yaml +63 -0
  8. data/data/federal_reserve.yaml +4 -28
  9. data/data/fedex.yaml +56 -0
  10. data/data/index.yaml +2 -0
  11. data/data/jp.yaml +8 -1
  12. data/lib/holidays.rb +219 -0
  13. data/lib/holidays/MANIFEST +2 -0
  14. data/lib/holidays/ar.rb +1 -1
  15. data/lib/holidays/at.rb +1 -1
  16. data/lib/holidays/au.rb +27 -4
  17. data/lib/holidays/be.rb +1 -1
  18. data/lib/holidays/br.rb +1 -1
  19. data/lib/holidays/ca.rb +6 -3
  20. data/lib/holidays/ch.rb +1 -1
  21. data/lib/holidays/cl.rb +1 -1
  22. data/lib/holidays/cr.rb +39 -0
  23. data/lib/holidays/cz.rb +1 -1
  24. data/lib/holidays/de.rb +2 -2
  25. data/lib/holidays/dk.rb +1 -1
  26. data/lib/holidays/ecb_target.rb +1 -1
  27. data/lib/holidays/el.rb +1 -1
  28. data/lib/holidays/es.rb +1 -1
  29. data/lib/holidays/europe.rb +75 -32
  30. data/lib/holidays/fed_ex.rb +36 -0
  31. data/lib/holidays/federal_reserve.rb +5 -8
  32. data/lib/holidays/fi.rb +1 -1
  33. data/lib/holidays/fr.rb +1 -1
  34. data/lib/holidays/gb.rb +1 -1
  35. data/lib/holidays/hr.rb +1 -1
  36. data/lib/holidays/hu.rb +1 -1
  37. data/lib/holidays/ie.rb +1 -1
  38. data/lib/holidays/is.rb +1 -1
  39. data/lib/holidays/it.rb +1 -1
  40. data/lib/holidays/jp.rb +3 -2
  41. data/lib/holidays/li.rb +1 -1
  42. data/lib/holidays/lt.rb +1 -1
  43. data/lib/holidays/ma.rb +1 -1
  44. data/lib/holidays/mx.rb +1 -1
  45. data/lib/holidays/nerc.rb +1 -1
  46. data/lib/holidays/nl.rb +1 -1
  47. data/lib/holidays/no.rb +1 -1
  48. data/lib/holidays/north_america.rb +8 -5
  49. data/lib/holidays/nyse.rb +1 -1
  50. data/lib/holidays/nz.rb +1 -1
  51. data/lib/holidays/pl.rb +1 -1
  52. data/lib/holidays/pt.rb +1 -1
  53. data/lib/holidays/ro.rb +1 -1
  54. data/lib/holidays/scandinavia.rb +18 -11
  55. data/lib/holidays/se.rb +1 -1
  56. data/lib/holidays/sg.rb +1 -1
  57. data/lib/holidays/si.rb +1 -1
  58. data/lib/holidays/sk.rb +1 -1
  59. data/lib/holidays/united_nations.rb +3 -3
  60. data/lib/holidays/ups.rb +1 -1
  61. data/lib/holidays/us.rb +1 -1
  62. data/lib/holidays/ve.rb +1 -1
  63. data/lib/holidays/version.rb +1 -1
  64. data/lib/holidays/vi.rb +1 -1
  65. data/lib/holidays/za.rb +1 -1
  66. data/test/data/test_custom_govt_holiday_defs.yaml +5 -0
  67. data/test/data/test_multiple_custom_holiday_defs.yaml +9 -0
  68. data/test/data/test_single_custom_holiday_defs.yaml +9 -0
  69. data/test/defs/test_defs_au.rb +32 -0
  70. data/test/defs/test_defs_ca.rb +25 -0
  71. data/test/defs/test_defs_cr.rb +22 -0
  72. data/test/defs/test_defs_de.rb +6 -6
  73. data/test/defs/test_defs_europe.rb +24 -0
  74. data/test/defs/test_defs_fed_ex.rb +21 -0
  75. data/test/defs/test_defs_federal_reserve.rb +2 -15
  76. data/test/defs/test_defs_jp.rb +1 -0
  77. data/test/defs/test_defs_north_america.rb +25 -0
  78. data/test/defs/test_defs_united_nations.rb +12 -0
  79. data/test/test_custom_holidays.rb +35 -0
  80. data/test/test_parse_definitions.rb +24 -0
  81. metadata +22 -3
  82. data/data/build_defs.rb +0 -157
data/data/index.yaml CHANGED
@@ -9,6 +9,7 @@ defs:
9
9
  CA: ['ca.yaml', 'north_america_informal.yaml']
10
10
  CH: ['ch.yaml']
11
11
  CL: ['cl.yaml']
12
+ CR: ['cr.yaml']
12
13
  CZ: ['cz.yaml']
13
14
  DK: ['dk.yaml']
14
15
  DE: ['de.yaml']
@@ -16,6 +17,7 @@ defs:
16
17
  EL: ['el.yaml']
17
18
  ES: ['es.yaml']
18
19
  Federal_Reserve: ['federal_reserve.yaml']
20
+ Fed_Ex: ['fedex.yaml']
19
21
  FI: ['fi.yaml']
20
22
  FR: ['fr.yaml']
21
23
  GB: ['gb.yaml']
data/data/jp.yaml CHANGED
@@ -1,11 +1,14 @@
1
1
  # Japanese holiday definitions for Ruby Holiday gem.
2
- # Reference: http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
2
+ # Reference:
3
+ # - http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
4
+ # - http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
3
5
  #
4
6
  # This definition can calculate current Japanese holidays,
5
7
  # don't compat with past changes of Japan Holiday Act.
6
8
  #
7
9
  # CHANGES:
8
10
  # 2010-12-25: Initial version by Tatsuki Sugiura <sugi@nemui.org>
11
+ # 2014-11-09: Added substitute holiday by Yoshiyuki Hirano <yoshiyuki.hirano@henteco-labs.com>
9
12
  #
10
13
  ---
11
14
  months:
@@ -17,6 +20,9 @@ months:
17
20
  regions: [jp]
18
21
  wday: 1
19
22
  week: 2
23
+ - name: 振替休日
24
+ regions: [jp]
25
+ function: jp_substitute_holiday(year, 1, 1)
20
26
  2:
21
27
  - name: 建国記念日
22
28
  regions: [jp]
@@ -176,6 +182,7 @@ tests: |
176
182
  Date.civil(2008,12,23) => '天皇誕生日',
177
183
  Date.civil(2010,3,22) => '振替休日',
178
184
  Date.civil(2008,11,24) => '振替休日',
185
+ Date.civil(2012,1,2) => '振替休日',
179
186
  }.each do |date, name|
180
187
  assert_equal name, (Holidays.on(date, :jp, :informal)[0] || {})[:name]
181
188
  end
data/lib/holidays.rb CHANGED
@@ -3,6 +3,7 @@ $:.unshift File.dirname(__FILE__)
3
3
 
4
4
  require 'digest/md5'
5
5
  require 'date'
6
+ require 'yaml'
6
7
 
7
8
  # == Region options
8
9
  # Holidays can be defined as belonging to one or more regions and sub regions.
@@ -311,6 +312,20 @@ module Holidays
311
312
  self.available(true).each { |path| require path }
312
313
  end
313
314
 
315
+ # Parses provided holiday definition file(s) and loads them so that they are immediately available.
316
+ def self.load_custom(*files)
317
+ regions, rules_by_month, custom_methods, tests = self.parse_definition_files(files)
318
+ merge_defs(regions, rules_by_month)
319
+ end
320
+
321
+ # Parses provided holiday definition file(s) and returns strings containing the generated module and test source
322
+ def self.parse_definition_files_and_return_source(module_name, *files)
323
+ regions, rules_by_month, custom_methods, tests = self.parse_definition_files(files)
324
+ module_src, test_src = self.generate_definition_source(module_name, files, regions, rules_by_month, custom_methods, tests)
325
+
326
+ return module_src, test_src
327
+ end
328
+
314
329
  private
315
330
  # Returns [(arr)regions, (bool)observed, (bool)informal]
316
331
  def self.parse_options(*options) # :nodoc:
@@ -423,6 +438,210 @@ private
423
438
  @@proc_cache[proc_key] = function.call(year) unless @@proc_cache[proc_key]
424
439
  @@proc_cache[proc_key]
425
440
  end
441
+
442
+ def self.parse_definition_files(files)
443
+ raise ArgumentError, "Must have at least one file to parse" if files.empty?
444
+
445
+ all_regions = []
446
+ all_rules_by_month = {}
447
+ all_custom_methods = {}
448
+ all_tests = []
449
+
450
+ files.flatten!
451
+
452
+ files.each do |file|
453
+ definition_file = YAML.load_file(file)
454
+
455
+ regions, rules_by_month = self.parse_month_definitions(definition_file['months'])
456
+
457
+ all_regions << regions.flatten
458
+
459
+ all_rules_by_month.merge!(rules_by_month) { |month, existing, new|
460
+ existing << new
461
+ existing.flatten!
462
+ }
463
+
464
+ custom_methods = self.parse_method_definitions(definition_file['methods'])
465
+ all_custom_methods.merge!(custom_methods)
466
+
467
+ all_tests << self.parse_test_definitions(definition_file['tests'])
468
+ end
469
+
470
+ all_regions.flatten!.uniq!
471
+
472
+ [all_regions, all_rules_by_month, all_custom_methods, all_tests]
473
+ end
474
+
475
+ def self.parse_month_definitions(month_definitions)
476
+ regions = []
477
+ rules_by_month = {}
478
+
479
+ if month_definitions
480
+ month_definitions.each do |month, definitions|
481
+ rules_by_month[month] = [] unless rules_by_month[month]
482
+ definitions.each do |definition|
483
+ rule = {}
484
+
485
+ definition.each do |key, val|
486
+ rule[key.to_sym] = val
487
+ end
488
+
489
+ rule[:regions] = rule[:regions].collect { |r| r.to_sym }
490
+
491
+ regions << rule[:regions]
492
+
493
+ exists = false
494
+ rules_by_month[month].each do |ex|
495
+ if ex[:name] == rule[:name] and ex[:wday] == rule[:wday] and ex[:mday] == rule[:mday] and ex[:week] == rule[:week] and ex[:type] == rule[:type] and ex[:function] == rule[:function] and ex[:observed] == rule[:observed]
496
+ ex[:regions] << rule[:regions].flatten
497
+ exists = true
498
+ end
499
+ end
500
+
501
+ unless exists
502
+ rules_by_month[month] << rule
503
+ end
504
+ end
505
+ end
506
+ end
507
+
508
+ [regions, rules_by_month]
509
+ end
510
+
511
+ def self.parse_method_definitions(methods)
512
+ custom_methods = {}
513
+
514
+ if methods
515
+ methods.each do |name, code|
516
+ custom_methods[name] = code
517
+ end
518
+ end
519
+
520
+ custom_methods
521
+ end
522
+
523
+ def self.parse_test_definitions(tests)
524
+ test_strings = []
525
+
526
+ if tests
527
+ test_strings << tests
528
+ end
529
+
530
+ test_strings
531
+ end
532
+
533
+ def self.generate_definition_source(module_name, files, regions, rules_by_month, custom_methods, tests)
534
+ month_strings = self.generate_month_definition_strings(rules_by_month)
535
+
536
+ # Build the custom methods string
537
+ custom_method_string = ''
538
+ custom_methods.each do |key, code|
539
+ custom_method_string << code + "\n\n"
540
+ end
541
+
542
+ module_src = self.generate_module_src(module_name, files, regions, month_strings, custom_method_string)
543
+ test_src = self.generate_test_src(module_name, files, tests)
544
+
545
+ return module_src, test_src || ''
546
+ end
547
+
548
+ def self.generate_month_definition_strings(rules_by_month)
549
+ month_strings = []
550
+
551
+ rules_by_month.each do |month, rules|
552
+ month_string = " #{month.to_s} => ["
553
+ rule_strings = []
554
+ rules.each do |rule|
555
+ string = '{'
556
+ if rule[:mday]
557
+ string << ":mday => #{rule[:mday]}, "
558
+ elsif rule[:function]
559
+ string << ":function => lambda { |year| Holidays.#{rule[:function]} }, "
560
+ string << ":function_id => \"#{rule[:function].to_s}\", "
561
+ else
562
+ string << ":wday => #{rule[:wday]}, :week => #{rule[:week]}, "
563
+ end
564
+
565
+ if rule[:observed]
566
+ string << ":observed => lambda { |date| Holidays.#{rule[:observed]}(date) }, "
567
+ string << ":observed_id => \"#{rule[:observed].to_s}\", "
568
+ end
569
+
570
+ if rule[:type]
571
+ string << ":type => :#{rule[:type]}, "
572
+ end
573
+
574
+ # shouldn't allow the same region twice
575
+ string << ":name => \"#{rule[:name]}\", :regions => [:" + rule[:regions].uniq.join(', :') + "]}"
576
+ rule_strings << string
577
+ end
578
+ month_string << rule_strings.join(",\n ") + "]"
579
+ month_strings << month_string
580
+ end
581
+
582
+ return month_strings
583
+ end
584
+
585
+ def self.generate_module_src(module_name, files, regions, month_strings, custom_methods)
586
+ module_src = ""
587
+
588
+ module_src =<<-EOM
589
+ # encoding: utf-8
590
+ module Holidays
591
+ # This file is generated by the Ruby Holidays gem.
592
+ #
593
+ # Definitions loaded: #{files.join(', ')}
594
+ #
595
+ # To use the definitions in this file, load it right after you load the
596
+ # Holiday gem:
597
+ #
598
+ # require 'holidays'
599
+ # require 'holidays/#{module_name.to_s.downcase}'
600
+ #
601
+ # All the definitions are available at https://github.com/alexdunae/holidays
602
+ module #{module_name.to_s.upcase} # :nodoc:
603
+ def self.defined_regions
604
+ [:#{regions.join(', :')}]
605
+ end
606
+
607
+ def self.holidays_by_month
608
+ {
609
+ #{month_strings.join(",\n")}
610
+ }
611
+ end
612
+ end
613
+
614
+ #{custom_methods}
615
+ end
616
+
617
+ Holidays.merge_defs(Holidays::#{module_name.to_s.upcase}.defined_regions, Holidays::#{module_name.to_s.upcase}.holidays_by_month)
618
+ EOM
619
+
620
+ return module_src
621
+ end
622
+
623
+ def self.generate_test_src(module_name, files, tests)
624
+ unless tests.empty?
625
+ test_src = ""
626
+
627
+ test_src =<<-EndOfTests
628
+ # encoding: utf-8
629
+ require File.expand_path(File.dirname(__FILE__)) + '/../test_helper'
630
+
631
+ # This file is generated by the Ruby Holiday gem.
632
+ #
633
+ # Definitions loaded: #{files.join(', ')}
634
+ class #{module_name.to_s.capitalize}DefinitionTests < Test::Unit::TestCase # :nodoc:
635
+
636
+ def test_#{module_name.to_s.downcase}
637
+ #{tests.join("\n\n")}
638
+ end
639
+ end
640
+ EndOfTests
641
+ end
642
+
643
+ return test_src
644
+ end
426
645
  end
427
646
 
428
647
  # === Extending Ruby's Date class with the Holidays gem
@@ -9,6 +9,7 @@ The following definition files are included in this installation:
9
9
  * holidays/ca
10
10
  * holidays/ch
11
11
  * holidays/cl
12
+ * holidays/cr
12
13
  * holidays/cz
13
14
  * holidays/de
14
15
  * holidays/dk
@@ -16,6 +17,7 @@ The following definition files are included in this installation:
16
17
  * holidays/el
17
18
  * holidays/es
18
19
  * holidays/europe
20
+ * holidays/fed_ex
19
21
  * holidays/federal_reserve
20
22
  * holidays/fi
21
23
  * holidays/fr
data/lib/holidays/ar.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/ar.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
data/lib/holidays/at.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/at.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
data/lib/holidays/au.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/au.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
@@ -13,18 +13,19 @@ 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_nsw, :au_vic, :au_qld, :au_nt, :au_act, :au_sa, :au_qld_brisbane, :au_tas, :au_wa]
16
+ [:au, :au_nsw, :au_vic, :au_qld, :au_nt, :au_act, :au_sa, :au_qld_brisbane, :au_qld_cairns, :au_tas, :au_tas_south, :au_wa, :au_tas_north]
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
- {:function => lambda { |year| Holidays.easter(year)-1 }, :function_id => "easter(year)-1", :name => "Easter Saturday", :regions => [:au_nsw, :au_vic, :au_qld, :au_nt, :au_act, :au_sa, :au_qld_brisbane]},
22
+ {:function => lambda { |year| Holidays.easter(year)-1 }, :function_id => "easter(year)-1", :name => "Easter Saturday", :regions => [:au_nsw, :au_vic, :au_qld, :au_nt, :au_act, :au_sa, :au_qld_brisbane, :au_qld_cairns]},
23
23
  {:function => lambda { |year| Holidays.easter(year) }, :function_id => "easter(year)", :name => "Easter Sunday", :regions => [:au_nsw]},
24
24
  {:function => lambda { |year| Holidays.easter(year)+1 }, :function_id => "easter(year)+1", :name => "Easter Monday", :regions => [:au]},
25
25
  {:function => lambda { |year| Holidays.easter(year)+2 }, :function_id => "easter(year)+2", :name => "Easter Monday", :regions => [:au_tas]}],
26
26
  1 => [{:mday => 1, :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "New Year's Day", :regions => [:au]},
27
27
  {:mday => 26, :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "Australia Day", :regions => [:au]}],
28
+ 2 => [{:wday => 1, :week => 2, :name => "Royal Hobart Regatta", :regions => [:au_tas_south]}],
28
29
  3 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_wa]},
29
30
  {:wday => 1, :week => 2, :name => "Eight Hours Day", :regions => [:au_tas]},
30
31
  {:wday => 1, :week => 2, :name => "Labour Day", :regions => [:au_vic]}],
@@ -34,10 +35,17 @@ module Holidays
34
35
  6 => [{:wday => 1, :week => 1, :name => "Foundation Day", :regions => [:au_wa]},
35
36
  {:wday => 1, :week => 2, :name => "Queen's Birthday", :regions => [:au_act, :au_nsw, :au_sa, :au_qld, :au_tas, :au_nt, :au_vic]},
36
37
  {:mday => 6, :type => :informal, :name => "Queensland Day", :regions => [:au_qld]}],
38
+ 7 => [{:wday => 5, :week => 3, :name => "Cairns Show", :regions => [:au_qld_cairns]}],
37
39
  8 => [{:wday => 3, :week => -3, :name => "Ekka", :regions => [:au_qld_brisbane]}],
40
+ 9 => [{:wday => 1, :week => -1, :name => "Queen's Birthday", :regions => [:au_wa]},
41
+ {:wday => 1, :week => -1, :name => "Family & Community Day", :regions => [:au_act]}],
38
42
  10 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_act, :au_nsw, :au_sa]},
39
43
  {:function => lambda { |year| Holidays.qld_labour_day_october(year) }, :function_id => "qld_labour_day_october(year)", :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "Labour Day", :regions => [:au_qld]},
40
- {:function => lambda { |year| Holidays.qld_queens_bday_october(year) }, :function_id => "qld_queens_bday_october(year)", :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "Queen's Birthday", :regions => [:au_qld]}],
44
+ {:function => lambda { |year| Holidays.qld_queens_bday_october(year) }, :function_id => "qld_queens_bday_october(year)", :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "Queen's Birthday", :regions => [:au_qld]},
45
+ {:function => lambda { |year| Holidays.hobart_show_day(year) }, :function_id => "hobart_show_day(year)", :name => "Royal Hobart Show", :regions => [:au_tas_south]}],
46
+ 11 => [{:function => lambda { |year| Holidays.g20_day_2014_only(year) }, :function_id => "g20_day_2014_only(year)", :name => "G20 Day", :regions => [:au_qld_brisbane]},
47
+ {:wday => 1, :week => 1, :name => "Recreation Day", :regions => [:au_tas_north]},
48
+ {:wday => 2, :week => 1, :name => "Melbourne Cup Day", :regions => [:au_vic]}],
41
49
  12 => [{:mday => 25, :observed => lambda { |date| Holidays.to_monday_if_weekend(date) }, :observed_id => "to_monday_if_weekend", :name => "Christmas Day", :regions => [:au]},
42
50
  {:mday => 26, :observed => lambda { |date| Holidays.to_weekday_if_boxing_weekend(date) }, :observed_id => "to_weekday_if_boxing_weekend", :name => "Boxing Day", :regions => [:au]}]
43
51
  }
@@ -65,6 +73,21 @@ def self.qld_labour_day_october(year)
65
73
  end
66
74
 
67
75
 
76
+ # http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
77
+ # G20 day in brisbane, in 2014, on november 14
78
+ def self.g20_day_2014_only(year)
79
+ year == 2014 ? 14 : nil
80
+ end
81
+
82
+
83
+ # http://worksafe.tas.gov.au/__data/assets/pdf_file/0008/287036/Public_Holidays_2014.pdf
84
+ # The Thursday before the fourth Saturday in October.
85
+ def self.hobart_show_day(year)
86
+ fourth_sat_in_oct = Date.civil(year, 10, Date.calculate_mday(year, 10, 4, :saturday))
87
+ fourth_sat_in_oct - 2 # the thursday before
88
+ end
89
+
90
+
68
91
 
69
92
  end
70
93
 
data/lib/holidays/be.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/be.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
data/lib/holidays/br.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/br.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
data/lib/holidays/ca.rb CHANGED
@@ -4,7 +4,7 @@ module Holidays
4
4
  #
5
5
  # Definitions loaded: data/ca.yaml, data/north_america_informal.yaml
6
6
  #
7
- # To use the definitions in this file, load it right after you load the
7
+ # To use the definitions in this file, load it right after you load the
8
8
  # Holiday gem:
9
9
  #
10
10
  # require 'holidays'
@@ -13,7 +13,7 @@ module Holidays
13
13
  # All the definitions are available at https://github.com/alexdunae/holidays
14
14
  module CA # :nodoc:
15
15
  def self.defined_regions
16
- [:ca, :ca_qc, :ca_ab, :ca_on, :ca_sk, :ca_mb, :ca_bc, :ca_nf, :ca_nt, :ca_nu, :ca_ns, :ca_yk, :us]
16
+ [:ca, :ca_qc, :ca_ab, :ca_on, :ca_sk, :ca_mb, :ca_ns, :ca_pe, :ca_bc, :ca_nf, :ca_nt, :ca_nu, :ca_nb, :ca_yk, :us]
17
17
  end
18
18
 
19
19
  def self.holidays_by_month
@@ -25,6 +25,8 @@ module Holidays
25
25
  {:mday => 2, :name => "New Year's", :regions => [:ca_qc]}],
26
26
  2 => [{:wday => 1, :week => 3, :name => "Family Day", :regions => [:ca_ab, :ca_on, :ca_sk]},
27
27
  {:wday => 1, :week => 3, :name => "Louis Riel Day", :regions => [:ca_mb]},
28
+ {:wday => 1, :week => 3, :name => "Nova Scotia Heritage Day", :regions => [:ca_ns]},
29
+ {:wday => 1, :week => 3, :name => "Islander Day", :regions => [:ca_pe]},
28
30
  {:wday => 1, :week => 2, :name => "BC Family Day", :regions => [:ca_bc]},
29
31
  {:mday => 2, :type => :informal, :name => "Groundhog Day", :regions => [:us, :ca]},
30
32
  {:mday => 14, :type => :informal, :name => "Valentine's Day", :regions => [:us, :ca]}],
@@ -45,7 +47,8 @@ module Holidays
45
47
  {:wday => 1, :week => 1, :name => "Saskatchewan Day", :regions => [:ca_sk]},
46
48
  {:wday => 1, :week => 1, :name => "Heritage Day", :regions => [:ca_ab]},
47
49
  {:wday => 1, :week => 1, :name => "Natal Day", :regions => [:ca_ns]},
48
- {:wday => 1, :week => 1, :name => "Civic Holiday", :regions => [:ca_on]},
50
+ {:wday => 1, :week => 1, :name => "Civic Holiday", :regions => [:ca_on, :ca_nt, :ca_nu, :ca_pe]},
51
+ {:wday => 1, :week => 1, :name => "New Brunswick Day", :regions => [:ca_nb]},
49
52
  {:wday => 1, :week => 3, :name => "Discovery Day", :regions => [:ca_yk]}],
50
53
  9 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:ca]}],
51
54
  10 => [{:wday => 1, :week => 2, :name => "Thanksgiving", :regions => [:ca]},