Skip to content

Commit

Permalink
Merge bba90ba into 629b93f
Browse files Browse the repository at this point in the history
  • Loading branch information
ppeble committed Jun 29, 2015
2 parents 629b93f + bba90ba commit 8f56b84
Show file tree
Hide file tree
Showing 104 changed files with 1,592 additions and 855 deletions.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,21 @@ Multiple files can also be passed:

### Extending Ruby's Date class

Check which holidays occur in Iceland on January 1, 2008.
To extend the 'Date' class:

require 'holidays/core_extensions/date'
class Date
include Holidays::CoreExtensions::Date
end

Now you can check which holidays occur in Iceland on January 1, 2008:

d = Date.civil(2008,7,1)

d.holidays(:is)
=> [{:name => 'Nýársdagur'}...]

Lookup Canada Day in different regions.
Or lookup Canada Day in different regions:

d = Date.civil(2008,7,1)

Expand All @@ -96,6 +103,11 @@ Lookup Canada Day in different regions.
d.holiday?(:fr) # France
=> false

Or you can calculate the day of the month:

Date.calculate_mday(2015, 4, :first, 2)
=> 7

### Caching Holiday Lookups

If you are checking holidays regularly you can cache your results for improved performance. Run this before looking up a holiday (eg. in an initializer):
Expand Down
12 changes: 6 additions & 6 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,26 @@ task :default => :test

namespace :generate do
DATA_PATH = 'data'
TEST_DEFS_PATH = 'test/defs'

desc 'Generate the holiday definition files'
task :definitions do
# load the index
def_index = YAML.load_file("#{DATA_PATH}/index.yaml")

# create a dir for the generated tests
FileUtils.mkdir_p('test/defs')
FileUtils.mkdir_p(TEST_DEFS_PATH)

def_index['defs'].each do |region, files|
puts "Building #{region} definition module:"
files = files.collect { |f| "#{DATA_PATH}/#{f}" }.uniq

module_src, test_src = Holidays.parse_definition_files_and_return_source(region, files)
File.open("lib/holidays/#{region.downcase.to_s}.rb","w") do |file|
File.open("lib/#{Holidays::DEFINITIONS_PATH}/#{region.downcase.to_s}.rb","w") do |file|
file.puts module_src
end
unless test_src.empty?
File.open("test/defs/test_defs_#{region.downcase.to_s}.rb","w") do |file|
File.open("#{TEST_DEFS_PATH}/test_defs_#{region.downcase.to_s}.rb","w") do |file|
file.puts test_src
end
end
Expand All @@ -44,13 +45,13 @@ namespace :generate do

desc 'Build the definition manifest'
task :manifest do
File.open("lib/holidays/MANIFEST","w") do |file|
File.open("lib/#{Holidays::DEFINITIONS_PATH}/MANIFEST","w") do |file|
file.puts <<-EOH
==== Regional definitions
The following definition files are included in this installation:
EOH
FileList.new('lib/holidays/*.rb').exclude(/version/).each do |str|
FileList.new("lib/#{Holidays::DEFINITIONS_PATH}/*.rb").exclude(/version/).each do |str|
file.puts('* ' + str.gsub(/^lib\/|\.rb$/, ''))
end
end
Expand All @@ -59,4 +60,3 @@ The following definition files are included in this installation:
end

task :generate => ['generate:definitions', 'generate:manifest']

2 changes: 1 addition & 1 deletion data/at.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ tests: |
assert_equal name, (Holidays.on(date, :at, :informal)[0] || {})[:name]
end
assert !Date.civil(2010,5,8).holiday?(:at), '2010-05-08 is not a holiday in Austria'
assert_equal [], Holidays.on(Date.civil(2010,5,8), :at), '2010-05-08 is not a holiday in Austria'
110 changes: 55 additions & 55 deletions data/au.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -153,13 +153,13 @@ methods:
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
# changed from may to october after 2012
def self.qld_labour_day_may(year)
year <= 2012 ? Date.calculate_mday(year, 5, 1, 1) : nil
year <= 2012 ? Holidays::DateCalculator.day_of_month(year, 5, 1, 1) : nil
end
qld_labour_day_october: |
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
# changed from may to october after 2012
def self.qld_labour_day_october(year)
year <= 2012 ? nil : Date.calculate_mday(year, 10, 1, 1)
year <= 2012 ? nil : Holidays::DateCalculator.day_of_month(year, 10, 1, 1)
end
g20_day_2014_only: |
# http://www.justice.qld.gov.au/fair-and-safe-work/industrial-relations/public-holidays/dates
Expand All @@ -171,7 +171,7 @@ methods:
# http://worksafe.tas.gov.au/__data/assets/pdf_file/0008/287036/Public_Holidays_2014.pdf
# The Thursday before the fourth Saturday in October.
def self.hobart_show_day(year)
fourth_sat_in_oct = Date.civil(year, 10, Date.calculate_mday(year, 10, 4, :saturday))
fourth_sat_in_oct = Date.civil(year, 10, Holidays::DateCalculator.day_of_month(year, 10, 4, :saturday))
fourth_sat_in_oct - 2 # the thursday before
end
march_pub_hol_sa: |
Expand Down Expand Up @@ -206,76 +206,76 @@ tests: |
end
[:au_sa, :au_act, :au_nsw, :au_].each do |r|
assert_equal 'Labour Day', Date.civil(2007,10,1).holidays(r)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2007,10,1), r)[0][:name]
end
[:au_sa, :au_act, :au_nsw, :au_vic, :au_tas, :au_qld, :au_nt, :au_].each do |r|
assert_equal 'Queen\'s Birthday', Date.civil(2007,6,11).holidays(r)[0][:name]
assert_equal 'Queen\'s Birthday', Holidays.on(Date.civil(2007,6,11), r)[0][:name]
end
assert_equal 'Labour Day', Date.civil(2007,3,5).holidays(:au_wa)[0][:name]
assert_equal 'Labour Day', Date.civil(2007,3,12).holidays(:au_vic)[0][:name]
assert_equal 'Labour Day', Date.civil(2007,5,7).holidays(:au_qld)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2007,3,5), :au_wa)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2007,3,12), :au_vic)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2007,5,7), :au_qld)[0][:name]
assert_equal 'Easter Sunday', Date.civil(2007,4,8).holidays(:au_nsw)[0][:name]
assert_equal 'Easter Sunday', Holidays.on(Date.civil(2007,4,8), :au_nsw)[0][:name]
assert_equal 'May Day', Date.civil(2007,5,7).holidays(:au_nt)[0][:name]
assert_equal 'Eight Hours Day', Date.civil(2007,3,12).holidays(:au_tas)[0][:name]
assert_equal 'May Day', Holidays.on(Date.civil(2007,5,7), :au_nt)[0][:name]
assert_equal 'Labour Day', Date.civil(2013,10,7).holidays(:au_qld)[0][:name]
assert_equal 'Labour Day', Date.civil(2012,5,7).holidays(:au_qld)[0][:name]
assert_equal 'Eight Hours Day', Holidays.on(Date.civil(2007,3,12), :au_tas)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2012,6,11).holidays(:au_qld)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2012,10,1).holidays(:au_qld)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2013,6,10).holidays(:au_qld)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2013,10,7), :au_qld)[0][:name]
assert_equal 'Labour Day', Holidays.on(Date.civil(2012,5,7), :au_qld)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2014, 9, 29).holidays(:au_wa)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2015, 9, 28).holidays(:au_wa)[0][:name]
assert_equal "Queen's Birthday", Date.civil(2016, 9, 26).holidays(:au_wa)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2012,6,11), :au_qld)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2012,10,1), :au_qld)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2013,6,10), :au_qld)[0][:name]
assert_equal "Family & Community Day", Date.civil(2014, 9, 29).holidays(:au_act)[0][:name]
assert_equal "Family & Community Day", Date.civil(2015, 9, 28).holidays(:au_act)[0][:name]
assert_equal "Family & Community Day", Date.civil(2016, 9, 26).holidays(:au_act)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2014, 9, 29), :au_wa)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2015, 9, 28), :au_wa)[0][:name]
assert_equal "Queen's Birthday", Holidays.on(Date.civil(2016, 9, 26), :au_wa)[0][:name]
assert_equal 'Australia Day', Date.civil(2014,1,26).holidays(:au_qld)[0][:name]
assert_equal 'Australia Day', Date.civil(2014,1,27).holidays(:au_qld, :observed)[0][:name]
assert_equal "Family & Community Day", Holidays.on(Date.civil(2014, 9, 29), :au_act)[0][:name]
assert_equal "Family & Community Day", Holidays.on(Date.civil(2015, 9, 28), :au_act)[0][:name]
assert_equal "Family & Community Day", Holidays.on(Date.civil(2016, 9, 26), :au_act)[0][:name]
assert_equal 'Cairns Show', Date.civil(2014,7,18).holidays(:au_qld_cairns)[0][:name]
assert_equal 'Cairns Show', Date.civil(2013,7,19).holidays(:au_qld_cairns)[0][:name]
assert_equal 'Australia Day', Holidays.on(Date.civil(2014,1,26), :au_qld)[0][:name]
assert_equal 'Australia Day', Holidays.on(Date.civil(2014,1,27), :au_qld, :observed)[0][:name]
assert_equal 'Royal Hobart Show', Date.civil(2013, 10, 24).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Date.civil(2014, 10, 23).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Date.civil(2015, 10, 22).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Date.civil(2016, 10, 20).holidays(:au_tas_south)[0][:name]
assert_equal 'Cairns Show', Holidays.on(Date.civil(2014,7,18), :au_qld_cairns)[0][:name]
assert_equal 'Cairns Show', Holidays.on(Date.civil(2013,7,19), :au_qld_cairns)[0][:name]
assert_equal 'Recreation Day', Date.civil(2013, 11, 4).holidays(:au_tas_north)[0][:name]
assert_equal 'Recreation Day', Date.civil(2014, 11, 3).holidays(:au_tas_north)[0][:name]
assert_equal 'Recreation Day', Date.civil(2015, 11, 2).holidays(:au_tas_north)[0][:name]
assert_equal 'Recreation Day', Date.civil(2016, 11, 7).holidays(:au_tas_north)[0][:name]
assert_equal 'Royal Hobart Show', Holidays.on(Date.civil(2013, 10, 24), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Holidays.on(Date.civil(2014, 10, 23), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Holidays.on(Date.civil(2015, 10, 22), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Show', Holidays.on(Date.civil(2016, 10, 20), :au_tas_south)[0][:name]
assert_equal 'G20 Day', Date.civil(2014,11,14).holidays(:au_qld_brisbane)[0][:name]
assert_equal [], Date.civil(2014,11,14).holidays(:au_qld)
assert_equal [], Date.civil(2015,11,14).holidays(:au_qld_brisbane)
assert_equal 'Recreation Day', Holidays.on(Date.civil(2013, 11, 4), :au_tas_north)[0][:name]
assert_equal 'Recreation Day', Holidays.on(Date.civil(2014, 11, 3), :au_tas_north)[0][:name]
assert_equal 'Recreation Day', Holidays.on(Date.civil(2015, 11, 2), :au_tas_north)[0][:name]
assert_equal 'Recreation Day', Holidays.on(Date.civil(2016, 11, 7), :au_tas_north)[0][:name]
assert_equal 'Melbourne Cup Day', Date.civil(2014,11,4).holidays(:au_vic)[0][:name]
assert_equal 'Melbourne Cup Day', Date.civil(2015,11,3).holidays(:au_vic)[0][:name]
assert_equal 'G20 Day', Holidays.on(Date.civil(2014,11,14), :au_qld_brisbane)[0][:name]
assert_equal [], Holidays.on(Date.civil(2014,11,14), :au_qld)
assert_equal [], Holidays.on(Date.civil(2015,11,14), :au_qld_brisbane)
assert_equal 'Royal Hobart Regatta', Date.civil(2012, 2, 13).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Date.civil(2014, 2, 10).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Date.civil(2015, 2, 9).holidays(:au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Date.civil(2016, 2, 8).holidays(:au_tas_south)[0][:name]
assert_equal 'Melbourne Cup Day', Holidays.on(Date.civil(2014,11,4), :au_vic)[0][:name]
assert_equal 'Melbourne Cup Day', Holidays.on(Date.civil(2015,11,3), :au_vic)[0][:name]
assert_equal "May Public Holiday", Date.civil(2005, 5, 16).holidays(:au_sa)[0][:name]
assert_equal [], Date.civil(2014, 5, 19).holidays(:au_sa)
assert_equal 'Royal Hobart Regatta', Holidays.on(Date.civil(2012, 2, 13), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Holidays.on(Date.civil(2014, 2, 10), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Holidays.on(Date.civil(2015, 2, 9), :au_tas_south)[0][:name]
assert_equal 'Royal Hobart Regatta', Holidays.on(Date.civil(2016, 2, 8), :au_tas_south)[0][:name]
assert_equal [], Date.civil(2005, 3, 14).holidays(:au_sa)
assert_equal "March Public Holiday", Date.civil(2014, 3, 10).holidays(:au_sa)[0][:name]
assert_equal "March Public Holiday", Date.civil(2015, 3, 9).holidays(:au_sa)[0][:name]
assert_equal "March Public Holiday", Date.civil(2016, 3, 14).holidays(:au_sa)[0][:name]
assert_equal "March Public Holiday", Date.civil(2017, 3, 13).holidays(:au_sa)[0][:name]
assert_equal "May Public Holiday", Holidays.on(Date.civil(2005, 5, 16), :au_sa)[0][:name]
assert_equal [], Holidays.on(Date.civil(2014, 5, 19), :au_sa)
assert_equal "ANZAC Day", Date.civil(2015, 4, 25).holidays(:au_qld)[0][:name]
assert_equal "ANZAC Day", Date.civil(2015, 4, 25).holidays(:au_wa)[0][:name]
assert_equal [], Date.civil(2015, 4, 27).holidays(:au_qld, :observed)
assert_equal "ANZAC Day", Date.civil(2015, 4, 27).holidays(:au_wa, :observed)[0][:name]
assert_equal [], Holidays.on(Date.civil(2005, 3, 14), :au_sa)
assert_equal "March Public Holiday", Holidays.on(Date.civil(2014, 3, 10), :au_sa)[0][:name]
assert_equal "March Public Holiday", Holidays.on(Date.civil(2015, 3, 9), :au_sa)[0][:name]
assert_equal "March Public Holiday", Holidays.on(Date.civil(2016, 3, 14), :au_sa)[0][:name]
assert_equal "March Public Holiday", Holidays.on(Date.civil(2017, 3, 13), :au_sa)[0][:name]
assert_equal "ANZAC Day", Holidays.on(Date.civil(2015, 4, 25), :au_qld)[0][:name]
assert_equal "ANZAC Day", Holidays.on(Date.civil(2015, 4, 25), :au_wa)[0][:name]
assert_equal [], Holidays.on(Date.civil(2015, 4, 27), :au_qld, :observed)
assert_equal "ANZAC Day", Holidays.on(Date.civil(2015, 4, 27), :au_wa, :observed)[0][:name]
32 changes: 16 additions & 16 deletions data/de.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,53 +85,53 @@ tests: |
end
[:de_bw, :de_by, :de_st, :de_].each do |r|
assert_equal 'Heilige Drei Könige', Date.civil(2009,1,6).holidays(r)[0][:name]
assert_equal 'Heilige Drei Könige', Holidays.on(Date.civil(2009,1,6), r)[0][:name]
end
[:de_bw, :de_by, :de_he, :de_nw, :de_rp, :de_sl, :de_].each do |r|
assert_equal 'Fronleichnam', Date.civil(2009,6,11).holidays(r)[0][:name]
assert_equal 'Fronleichnam', Holidays.on(Date.civil(2009,6,11), r)[0][:name]
end
[:de_by, :de_sl, :de_].each do |r|
assert_equal 'Mariä Himmelfahrt', Date.civil(2009,8,15).holidays(r)[0][:name]
assert_equal 'Mariä Himmelfahrt', Holidays.on(Date.civil(2009,8,15), r)[0][:name]
end
[:de_bb, :de_mv, :de_sn, :de_st, :de_th, :de_].each do |r|
assert_equal 'Reformationstag', Date.civil(2009,10,31).holidays(r)[0][:name]
assert_equal 'Reformationstag', Holidays.on(Date.civil(2009,10,31), r)[0][:name]
end
[:de_bw, :de_by, :de_nw, :de_rp, :de_sl, :de_].each do |r|
assert_equal 'Allerheiligen', Date.civil(2009,11,1).holidays(r)[0][:name]
assert_equal 'Allerheiligen', Holidays.on(Date.civil(2009,11,1), r)[0][:name]
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert_equal 'Tag der Deutschen Einheit', Date.civil(2009,10,3).holidays(r)[0][:name]
assert_equal 'Tag der Deutschen Einheit', Holidays.on(Date.civil(2009,10,3), r)[0][:name]
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert !Date.civil(2009,1,6).holiday?(r), "Heilige Drei Könige is not a holiday in #{r}"
assert_equal [], Holidays.on(Date.civil(2009,1,6), r), "Heilige Drei Könige is not a holiday in #{r}"
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert !Date.civil(2009,6,11).holiday?(r), "Fronleichnam is not a holiday in #{r}"
assert_equal [], Holidays.on(Date.civil(2009,6,11), r), "Fronleichnam is not a holiday in #{r}"
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert !Date.civil(2009,8,15).holiday?(r), "Mariä Himmelfahrt is not a holiday in #{r}"
assert_equal [], Holidays.on(Date.civil(2009,8,15), r), "Mariä Himmelfahrt is not a holiday in #{r}"
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert !Date.civil(2009,10,31).holiday?(r), 'Reformationstag is not a holiday in #{r}'
assert_equal [], Holidays.on(Date.civil(2009,10,31), r), 'Reformationstag is not a holiday in #{r}'
end
[:de_be, :de_hb, :de_hh, :de_ni, :de_sh].each do |r|
assert !Date.civil(2009,11,1).holiday?(r), "Allerheiligen is not a holiday in #{r}"
assert_equal [], Holidays.on(Date.civil(2009,11,1), r), "Allerheiligen is not a holiday in #{r}"
end
assert !Date.civil(2010,5,8).holiday?(:de), '2010-05-08 is not a holiday in Germany'
assert_equal [], Holidays.on(Date.civil(2010,5,8), :de), '2010-05-08 is not a holiday in Germany'
# Repentance Day
assert_equal 'Buß- und Bettag', Date.civil(2004,11,17).holidays(:de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Date.civil(2005,11,16).holidays(:de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Date.civil(2006,11,22).holidays(:de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Date.civil(2009,11,18).holidays(:de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Holidays.on(Date.civil(2004,11,17), :de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Holidays.on(Date.civil(2005,11,16), :de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Holidays.on(Date.civil(2006,11,22), :de_sn)[0][:name]
assert_equal 'Buß- und Bettag', Holidays.on(Date.civil(2009,11,18), :de_sn)[0][:name]
4 changes: 2 additions & 2 deletions data/ecb_target.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ tests: |
assert_equal name, (Holidays.on(date, :ecb_target)[0] || {})[:name]
end
assert_equal 'Good Friday', Date.civil(2013,3,29).holidays(:ecb_target)[0][:name]
assert_equal 'Easter Monday', Date.civil(2013,4,1).holidays(:ecb_target)[0][:name]
assert_equal 'Good Friday', Holidays.on(Date.civil(2013,3,29), :ecb_target)[0][:name]
assert_equal 'Easter Monday', Holidays.on(Date.civil(2013,4,1), :ecb_target)[0][:name]

0 comments on commit 8f56b84

Please sign in to comment.