diff --git a/README b/README index bf043f4..1d70098 100644 --- a/README +++ b/README @@ -23,11 +23,11 @@ Extends Ruby's built-in Date class and supports custom holiday definition lists. ==== Extending Ruby's Date class # Lookup Canada Day in the :ca region - Date.civil(2008,7,1).is_holiday?(:ca) + Date.civil(2008,7,1).holiday?(:ca) => true # Lookup Canada Day in the :fr region - Date.civil(2008,7,1).is_holiday?(:fr) + Date.civil(2008,7,1).holiday?(:fr) => false === Installation @@ -39,10 +39,6 @@ To install the gem from RubyForge: Or, download the source .tgz file from http://rubyforge.org/holidays/ and extract it somewhere in your include path. -=== Custom holiday definitions - - - === Credits and code * Project page: http://code.dunae.ca/holidays diff --git a/bin/build_defs.rb b/bin/build_defs.rb index 60e17b0..f335b4d 100644 --- a/bin/build_defs.rb +++ b/bin/build_defs.rb @@ -36,6 +36,7 @@ def parse_holiday_defs(module_name, files) end # /defs.each end end + if def_file['methods'] puts " - importing methods..." def_file['methods'].each do |name, code| @@ -89,11 +90,11 @@ module Holidays # # Definitions loaded: #{files.join(', ')} # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/#{module_name.downcase}' + # require 'holidays/#{module_name.downcase}' # # More definitions are available at http://code.dunae.ca/holidays. module #{module_name} # :nodoc: @@ -102,13 +103,13 @@ module Holidays HOLIDAYS_BY_MONTH = { #{month_strs.join(",\n")} } + end #{method_str} - end end Holidays.merge_defs(Holidays::#{module_name}::DEFINED_REGIONS, Holidays::#{module_name}::HOLIDAYS_BY_MONTH) - EOC +EOC end \ No newline at end of file diff --git a/data/au.yaml b/data/au.yaml index 6999a50..960d252 100644 --- a/data/au.yaml +++ b/data/au.yaml @@ -6,16 +6,16 @@ months: 0: - name: Good Friday regions: [au] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Easter Saturday regions: [au] - function: lambda { |year| easter(year)-1 } + function: lambda { |year| Holidays.easter(year)-1 } - name: Easter Monday regions: [au] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } - name: Easter Monday regions: [au_tas] - function: lambda { |year| easter(year)+2 } + function: lambda { |year| Holidays.easter(year)+2 } 1: - name: New Year's Day regions: [au] diff --git a/data/ca.yaml b/data/ca.yaml index e9d0f45..d0346f6 100644 --- a/data/ca.yaml +++ b/data/ca.yaml @@ -5,10 +5,10 @@ months: 0: - name: Good Friday regions: [ca] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Easter Monday regions: [ca_qc] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: New Year's Day regions: [ca] @@ -36,10 +36,10 @@ months: 5: - name: Victoria Day regions: [ca] - function: lambda { |year| ca_victoria_day(year) } + function: lambda { |year| Holidays.ca_victoria_day(year) } - name: National Patriotes Day regions: [ca_qc] - function: lambda { |year| ca_victoria_day(year) } + function: lambda { |year| Holidays.ca_victoria_day(year) } 6: - name: Discovery Day regions: [ca_nf] diff --git a/data/christian.yaml b/data/christian.yaml index ab6778a..6240401 100644 --- a/data/christian.yaml +++ b/data/christian.yaml @@ -4,13 +4,13 @@ 0: - name: Easter Sunday regions: [christian] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Palm Sunday regions: [christian] - function: lambda { |year| easter(year)-7 } + function: lambda { |year| Holidays.easter(year)-7 } - name: Good Friday regions: [christian] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } 12: - name: Christmas Day regions: [christian] diff --git a/data/de.yaml b/data/de.yaml index d26ac95..f9a298d 100644 --- a/data/de.yaml +++ b/data/de.yaml @@ -8,24 +8,24 @@ months: 0: - name: Karfreitag regions: [de] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Ostermontag regions: [de] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } - name: Christi Himmelfahrt regions: [de] - function: lambda { |year| easter(year)+39 } + function: lambda { |year| Holidays.easter(year)+39 } - name: Pfingstmontag regions: [de] - function: lambda { |year| easter(year)+50 } + function: lambda { |year| Holidays.easter(year)+50 } - name: Fronleichnam regions: [de_bw, de_by, de_he, de_nw, de_rp, de_sl, de_sn, de_th] - function: lambda { |year| easter(year)+60 } + function: lambda { |year| Holidays.easter(year)+60 } 1: - name: Neujahrstag regions: [de] mday: 1 - - name: Heilige Drei Könige + - name: Heilige Drei Könige regions: [de_bw, de_by] mday: 6 5: @@ -36,7 +36,7 @@ months: regions: [de] mday: 8 8: - - name: Mariä Himmelfahrt + - name: Mariä Himmelfahrt regions: [de_by] mday: 15 10: diff --git a/data/dk.yaml b/data/dk.yaml index 66d1e5d..81c88f6 100644 --- a/data/dk.yaml +++ b/data/dk.yaml @@ -10,38 +10,38 @@ months: 0: - name: Fastelavn regions: [dk] - function: lambda { |year| easter(year)-49 } + function: lambda { |year| Holidays.easter(year)-49 } type: informal - name: Palmesøndag regions: [dk] - function: lambda { |year| easter(year)-7 } + function: lambda { |year| Holidays.easter(year)-7 } - name: Skærtorsdag regions: [dk] - function: lambda { |year| easter(year)-3 } + function: lambda { |year| Holidays.easter(year)-3 } - name: Langfredag regions: [dk] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Påskedag regions: [dk] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: 2. påskedag regions: [dk] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } - name: Store Bededag regions: [dk] - function: lambda { |year| easter(year)+26 } + function: lambda { |year| Holidays.easter(year)+26 } - name: Kristi Himmelfartsdag regions: [dk] - function: lambda { |year| easter(year)+40 } + function: lambda { |year| Holidays.easter(year)+40 } - name: Kristi Himmelfartsdag regions: [dk] - function: lambda { |year| easter(year)+40 } + function: lambda { |year| Holidays.easter(year)+40 } - name: 2. Pinsedag regions: [dk] - function: lambda { |year| easter(year)+49 } + function: lambda { |year| Holidays.easter(year)+49 } - name: Pinsedag regions: [dk] - function: lambda { |year| easter(year)+50 } + function: lambda { |year| Holidays.easter(year)+50 } 1: - name: Nytårsdag regions: [dk] @@ -96,5 +96,5 @@ months: regions: [dk] mday: 25 - name: 2. juledag - regions: [dk_] + regions: [dk] mday: 26 diff --git a/data/es.yaml b/data/es.yaml index 250cbe4..c0a6cc5 100644 --- a/data/es.yaml +++ b/data/es.yaml @@ -11,13 +11,13 @@ months: 0: - name: Jueves Santo regions: [es_pv, es_ct, es_na, es_v, es_vc] - function: lambda { |year| easter(year)-3 } + function: lambda { |year| Holidays.easter(year)-3 } - name: Viernes Santo regions: [es] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Lunes de Pascua regions: [es_pv, es_ct, es_na, es_v, es_vc] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: Año Nuevo regions: [es] diff --git a/data/fr.yaml b/data/fr.yaml index c034ee7..63d57f2 100644 --- a/data/fr.yaml +++ b/data/fr.yaml @@ -8,16 +8,16 @@ months: 0: - name: Pâques regions: [fr] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Ascension regions: [fr] - function: lambda { |year| easter(year)+40 } + function: lambda { |year| Holidays.easter(year)+40 } - name: Pentecôte regions: [fr] - function: lambda { |year| easter(year)+49 } + function: lambda { |year| Holidays.easter(year)+49 } - name: Lundi de Pentecôte regions: [fr] - function: lambda { |year| easter(year)+50 } + function: lambda { |year| Holidays.easter(year)+50 } 1: - name: Jour de l'an regions: [fr] diff --git a/data/gb.yaml b/data/gb.yaml index 9b94b9b..c7b00e6 100644 --- a/data/gb.yaml +++ b/data/gb.yaml @@ -13,13 +13,13 @@ months: 0: - name: Good Friday regions: [gb] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Easter Sunday regions: [gb] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Easter Monday regions: [gb_eng, gb_wls, gb_eaw, gb_nir] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: New Year's Day regions: [gb] diff --git a/data/ie.yaml b/data/ie.yaml index 3bef2de..fbf43e3 100644 --- a/data/ie.yaml +++ b/data/ie.yaml @@ -7,7 +7,7 @@ months: 0: - name: Easter Monday regions: [ie] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: New Year's Day regions: [ie] diff --git a/data/is.yaml b/data/is.yaml index 1b05cbd..e3b5265 100644 --- a/data/is.yaml +++ b/data/is.yaml @@ -10,43 +10,43 @@ months: 0: - name: Bolludagur regions: [is] - function: lambda { |year| easter(year)-48 } + function: lambda { |year| Holidays.easter(year)-48 } - name: Sprengidagur regions: [is] - function: lambda { |year| easter(year)-47 } + function: lambda { |year| Holidays.easter(year)-47 } - name: Öskudagur regions: [is] - function: lambda { |year| easter(year)-46 } + function: lambda { |year| Holidays.easter(year)-46 } - name: Pálmasunnudagur regions: [is] - function: lambda { |year| easter(year)-7 } + function: lambda { |year| Holidays.easter(year)-7 } - name: Skírdagur regions: [is] - function: lambda { |year| easter(year)-3 } + function: lambda { |year| Holidays.easter(year)-3 } - name: Föstudaginn langi regions: [is] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Páskadagur regions: [is] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Annar í páskum regions: [is] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } - name: Store Bededag regions: [is] - function: lambda { |year| easter(year)+26 } + function: lambda { |year| Holidays.easter(year)+26 } - name: Kristi Himmelfartsdag regions: [is] - function: lambda { |year| easter(year)+40 } + function: lambda { |year| Holidays.easter(year)+40 } - name: Kristi Himmelfartsdag regions: [is] - function: lambda { |year| easter(year)+40 } + function: lambda { |year| Holidays.easter(year)+40 } - name: 2. Pinsedag regions: [is] - function: lambda { |year| easter(year)+49 } + function: lambda { |year| Holidays.easter(year)+49 } - name: Pinsedag regions: [is] - function: lambda { |year| easter(year)+50 } + function: lambda { |year| Holidays.easter(year)+50 } 1: - name: Nýársdagur regions: [is] diff --git a/data/it.yaml b/data/it.yaml index 03f2153..74013a8 100644 --- a/data/it.yaml +++ b/data/it.yaml @@ -8,10 +8,10 @@ months: 0: - name: Pasqua regions: [it] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Lunedì dell'Angelo regions: [it] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: Capodanno regions: [it] diff --git a/data/lv.yaml b/data/lv.yaml index 14024e2..4f34db2 100644 --- a/data/lv.yaml +++ b/data/lv.yaml @@ -8,13 +8,13 @@ months: 0: - name: Liela Piektdiena regions: [lv] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Lieldienas regions: [lv] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: 2. Lieldienas regions: [lv] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: Jaunais Gads regions: [lv] diff --git a/data/mx.yaml b/data/mx.yaml index 7042fac..559f311 100644 --- a/data/mx.yaml +++ b/data/mx.yaml @@ -5,13 +5,13 @@ months: 0: - name: Good Thursday regions: [mx] - function: lambda { |year| easter(year)-3 } + function: lambda { |year| Holidays.easter(year)-3 } - name: Good Friday regions: [mx] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Easter Sunday regions: [mx] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } 1: - name: New Year's Day regions: [mx] diff --git a/data/nl.yaml b/data/nl.yaml index 4f8c77f..2239ea1 100644 --- a/data/nl.yaml +++ b/data/nl.yaml @@ -9,22 +9,22 @@ months: 0: - name: Goede Vrijdag regions: [nl] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Pasen regions: [nl] - function: lambda { |year| easter(year) } + function: lambda { |year| Holidays.easter(year) } - name: Pasen regions: [nl] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } - name: Hemelvaartsdag regions: [nl] - function: lambda { |year| easter(year)+39 } + function: lambda { |year| Holidays.easter(year)+39 } - name: Pinksteren regions: [nl] - function: lambda { |year| easter(year)+49 } + function: lambda { |year| Holidays.easter(year)+49 } - name: Pinksteren regions: [nl] - function: lambda { |year| easter(year)+50 } + function: lambda { |year| Holidays.easter(year)+50 } 1: - name: Nieuwjaar regions: [nl] diff --git a/data/north_america_informal.yaml b/data/north_america_informal.yaml index e51e062..d6c34c1 100644 --- a/data/north_america_informal.yaml +++ b/data/north_america_informal.yaml @@ -5,7 +5,7 @@ months: 0: - name: Good Friday regions: [us] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } type: informal 2: - name: Groundhog Day diff --git a/data/us.yaml b/data/us.yaml index 1334303..4b5950c 100644 --- a/data/us.yaml +++ b/data/us.yaml @@ -13,7 +13,7 @@ months: regions: [us] wday: 1 - name: Inauguration Day - function: lambda { |year| us_inauguration_day(year) } + function: lambda { |year| Holidays.us_inauguration_day(year) } regions: [us] 3: - name: Presidents' Day diff --git a/data/za.yaml b/data/za.yaml index c4339be..060debd 100644 --- a/data/za.yaml +++ b/data/za.yaml @@ -9,10 +9,10 @@ months: 0: - name: Good Friday regions: [za] - function: lambda { |year| easter(year)-2 } + function: lambda { |year| Holidays.easter(year)-2 } - name: Family Day regions: [za] - function: lambda { |year| easter(year)+1 } + function: lambda { |year| Holidays.easter(year)+1 } 1: - name: New Year's Day regions: [za] diff --git a/lib/holidays.rb b/lib/holidays.rb index d36d1e7..c1fa7f4 100644 --- a/lib/holidays.rb +++ b/lib/holidays.rb @@ -1,7 +1,38 @@ $:.unshift File.dirname(__FILE__) require 'digest/md5' - +# == Ruby Holidays module +# +# === Using regions +# Holidays can be defined as belonging to one or more regions and sub regions. +# The Holidays#on, Holidays#between, Date#holidays and Date#holiday? methods +# each allow you to specify a specific region. +# +# ==== Regions +# To select all holidays during May in the CA region (Canada), you might call: +# Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca) +# +# Which would return Victoria Day, a national holiday in Canada. +# => [{:name => 'Victoria Day',...}...] +# +# ==== Sub regions +# In the Canadian Province of Québec, there's another holiday in May. +# Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_pq) +# +# This query would return all holidays in both the parent region (:ca) and the +# sub region (:ca_pq). +# => [{:name => 'Victoria Day',...}, {:name => 'Journée nationale des Patriotes',...}...] +# +# ==== Wildcard sub regions +# To avoid having to return enter a long list of regions, you can append an underscore +# to the end of the region symbol. This selects an entire region, including its sub-regions. +# Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_) +# => [{:name => 'Victoria Day',...}, {:name => 'Journée nationale des Patriotes',...}...] +# +# ==== All regions +# Finally, you can select holidays that occur in any region using :any. +# +# module Holidays # Exception thrown when an unknown region is requested. class UnkownRegionError < ArgumentError; end @@ -38,9 +69,7 @@ module Holidays # Returns an array of hashes or nil. # # Each holiday is returned as a hash with the following fields: - # [:year] Integer. - # [:month] Integer. - # [:day] Integer. + # [:date] Ruby Date object. # [:name] String. # [:regions] An array of region symbols. #-- @@ -64,7 +93,6 @@ module Holidays next unless in_region?(regions, h[:regions]) if h[:function] - #result = h[:function].call(year) result = call_proc(h[:function], year) if result.kind_of?(Date) month = result.month @@ -76,8 +104,9 @@ module Holidays mday = h[:mday] || Date.calculate_mday(year, month, h[:week], h[:wday]) end - if Date.new(year, month, mday).between?(start_date, end_date) - holidays << {:month => month, :day => mday, :year => year, :name => h[:name], :regions => h[:regions]} + date = Date.new(year, month, mday) + if date.between?(start_date, end_date) + holidays << {:date => date, :name => h[:name], :regions => h[:regions]} end end @@ -91,7 +120,7 @@ module Holidays # # This method is automatically called when including holiday definition # files. - def self.merge_defs(regions, holidays) + def self.merge_defs(regions, holidays) # :nodoc: @@regions = @@regions | regions @@regions.uniq! @@ -103,13 +132,56 @@ module Holidays end end + # Get the date of Easter Sunday in a given year. From Easter Sunday, it is + # possible to calculate many traditional holidays in Western countries. + # + # +year+ must be a valid Gregorian year. + # + # Returns a Date object. + #-- + # from http://snippets.dzone.com/posts/show/765 + # TODO: check year to ensure Gregorian + def self.easter(year) + y = year + a = y % 19 + b = y / 100 + c = y % 100 + d = b / 4 + e = b % 4 + f = (b + 8) / 25 + g = (b - f + 1) / 3 + h = (19 * a + b - d - g + 15) % 30 + i = c / 4 + k = c % 4 + l = (32 + 2 * e + 2 * i - h - k) % 7 + m = (a + 11 * h + 22 * l) / 451 + month = (h + l - 7 * m + 114) / 31 + day = ((h + l - 7 * m + 114) % 31) + 1 + Date.civil(year, month, day) + end + + + private # Check regions against list of supported regions and return an array of # symbols. + # + # If a wildcard region is found (e.g. :ca_) it is expanded into all + # of its available sub regions. def self.validate_regions(regions) # :nodoc: regions = [regions] unless regions.kind_of?(Array) regions = regions.collect { |r| r.to_sym } + # Found sub region wild-card + regions.delete_if do |reg| + if reg.to_s =~ /_$/ + regions << @@regions.select { |dr| dr.to_s =~ Regexp.new("^#{reg}") } + true + end + end + + regions.flatten! + raise UnkownRegionError unless regions.all? { |r| r == :any or @@regions.include?(r) } regions @@ -119,7 +191,7 @@ private # # When request :any, all holidays should be returned. # When requesting :ca_bc, holidays in :ca or :ca_bc should be returned. - # When requesting :ca, only holidays in :ca should be returned. + # When requesting :ca, holidays in :ca but not its subregions should be returned. def self.in_region?(requested, available) # :nodoc: return true if requested.include?(:any) @@ -131,11 +203,9 @@ private requested = requested.flatten.uniq - available.any? { |r| requested.include?(r) } + available.any? { |avail| requested.include?(avail) } end - - # Call a proc function defined in a holiday definition file. # # Procs are cached. @@ -164,8 +234,6 @@ private @@proc_cache[proc_key] = function.call(year) unless @@proc_cache[proc_key] @@proc_cache[proc_key] end - - end @@ -240,7 +308,4 @@ class Date return days - ((Date.civil(year, month, days).wday - wday + 7) % 7) end - - - end \ No newline at end of file diff --git a/MANIFEST b/lib/holidays/MANIFEST similarity index 89% rename from MANIFEST rename to lib/holidays/MANIFEST index 8e09cf7..f1f503e 100644 --- a/MANIFEST +++ b/lib/holidays/MANIFEST @@ -17,6 +17,7 @@ installation: * holidays/mx * holidays/nl * holidays/north_america +* holidays/scandinavia * holidays/united_nations * holidays/us * holidays/za diff --git a/lib/holidays/au.rb b/lib/holidays/au.rb index b44d61d..4f8f3f5 100644 --- a/lib/holidays/au.rb +++ b/lib/holidays/au.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/au.yaml, data/common_methods.yaml + # Definitions loaded: data/au.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/au' + # require 'holidays/au' # # More definitions are available at http://code.dunae.ca/holidays. module AU # :nodoc: @@ -15,10 +15,10 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_qld, :au_nt]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:au]}, - {:function => lambda { |year| easter(year)-1 }, :name => "Easter Saturday", :regions => [:au]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:au]}, - {:function => lambda { |year| easter(year)+2 }, :name => "Easter Monday", :regions => [:au_tas]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:au]}, + {:function => lambda { |year| Holidays.easter(year)-1 }, :name => "Easter Saturday", :regions => [:au]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:au]}, + {:function => lambda { |year| Holidays.easter(year)+2 }, :name => "Easter Monday", :regions => [:au_tas]}], 6 => [{:wday => 1, :week => 2, :name => "Queen's Birthday", :regions => [:au]}, {:mday => 6, :type => :informal, :name => "Queensland Day", :regions => [:au_qld]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:au]}, @@ -30,34 +30,7 @@ module Holidays 4 => [{:mday => 25, :name => "ANZAC Day", :regions => [:au]}], 10 => [{:wday => 1, :week => 1, :name => "Labour Day", :regions => [:au_act, :au_nsw, :au_sa]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - + end # Monday on or before May 24 def self.ca_victoria_day(year) @@ -71,7 +44,6 @@ def self.ca_victoria_day(year) end - end end Holidays.merge_defs(Holidays::AU::DEFINED_REGIONS, Holidays::AU::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/ca.rb b/lib/holidays/ca.rb index 4994605..8c286a5 100644 --- a/lib/holidays/ca.rb +++ b/lib/holidays/ca.rb @@ -1,24 +1,24 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/ca.yaml, data/common_methods.yaml, data/north_america_informal.yaml + # Definitions loaded: data/ca.yaml, data/north_america_informal.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/ca' + # require 'holidays/ca' # # More definitions are available at http://code.dunae.ca/holidays. module CA # :nodoc: DEFINED_REGIONS = [:ca, :ca_qc, :us, :ca_nf, :ca_nt, :ca_nu, :ca_ab, :ca_on, :ca_sk, :ca_mb, :ca_bc, :ca_ns, :ca_yk] HOLIDAYS_BY_MONTH = { - 5 => [{:function => lambda { |year| ca_victoria_day(year) }, :name => "Victoria Day", :regions => [:ca]}, - {:function => lambda { |year| ca_victoria_day(year) }, :name => "National Patriotes Day", :regions => [:ca_qc]}, + 5 => [{:function => lambda { |year| Holidays.ca_victoria_day(year) }, :name => "Victoria Day", :regions => [:ca]}, + {:function => lambda { |year| Holidays.ca_victoria_day(year) }, :name => "National Patriotes Day", :regions => [:ca_qc]}, {:wday => 0, :week => 3, :type => :informal, :name => "Father's Day", :regions => [:us, :ca]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:ca, :us]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:ca_qc]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:ca, :us]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:ca_qc]}], 11 => [{:mday => 11, :name => "Rememberance Day", :regions => [:ca]}], 6 => [{:mday => 24, :name => "Discovery Day", :regions => [:ca_nf]}, {:mday => 24, :name => "Fête Nationale", :regions => [:ca_qc]}, @@ -48,34 +48,7 @@ module Holidays 10 => [{:wday => 1, :week => 2, :name => "Thanksgiving", :regions => [:ca]}, {:mday => 31, :type => :informal, :name => "Halloween", :regions => [:us, :ca]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - + end # Monday on or before May 24 def self.ca_victoria_day(year) @@ -89,7 +62,6 @@ def self.ca_victoria_day(year) end - end end Holidays.merge_defs(Holidays::CA::DEFINED_REGIONS, Holidays::CA::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/de.rb b/lib/holidays/de.rb index ee52028..5aad441 100644 --- a/lib/holidays/de.rb +++ b/lib/holidays/de.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/de.yaml, data/common_methods.yaml + # Definitions loaded: data/de.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/de' + # require 'holidays/de' # # More definitions are available at http://code.dunae.ca/holidays. module DE # :nodoc: @@ -16,11 +16,11 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Tag der Arbeit", :regions => [:de]}, {:mday => 8, :name => "Victoire 1945", :regions => [:de]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Karfreitag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Ostermontag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+39 }, :name => "Christi Himmelfahrt", :regions => [:de]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pfingstmontag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+60 }, :name => "Fronleichnam", :regions => [:de_bw, :de_by, :de_he, :de_nw, :de_rp, :de_sl, :de_sn, :de_th]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Karfreitag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Ostermontag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+39 }, :name => "Christi Himmelfahrt", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pfingstmontag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+60 }, :name => "Fronleichnam", :regions => [:de_bw, :de_by, :de_he, :de_nw, :de_rp, :de_sl, :de_sn, :de_th]}], 11 => [{:mday => 1, :name => "Allerheiligen", :regions => [:de_bw, :de_by, :de_nw, :de_rp, :de_sl]}], 1 => [{:mday => 1, :name => "Neujahrstag", :regions => [:de]}, {:mday => 6, :name => "Heilige Drei Könige", :regions => [:de_bw, :de_by]}], @@ -30,37 +30,9 @@ module Holidays 10 => [{:mday => 3, :name => "Tag der Deutschen Einheit", :regions => [:de]}, {:mday => 31, :name => "Reformationstag", :regions => [:de_bb, :de_mv, :de_sn, :de_st, :de_th]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::DE::DEFINED_REGIONS, Holidays::DE::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/dk.rb b/lib/holidays/dk.rb index 46869fe..404d880 100644 --- a/lib/holidays/dk.rb +++ b/lib/holidays/dk.rb @@ -1,31 +1,31 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/dk.yaml, data/common_methods.yaml + # Definitions loaded: data/dk.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/dk' + # require 'holidays/dk' # # More definitions are available at http://code.dunae.ca/holidays. module DK # :nodoc: - DEFINED_REGIONS = [:dk, :dk_] + DEFINED_REGIONS = [:dk] HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Arbejdernes kampdag", :regions => [:dk]}, {:mday => 5, :type => :informal, :name => "Danmarks befrielse", :regions => [:dk]}], - 0 => [{:function => lambda { |year| easter(year)-49 }, :type => :informal, :name => "Fastelavn", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-7 }, :name => "Palmesøndag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Skærtorsdag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Langfredag", :regions => [:dk]}, - {:function => lambda { |year| easter(year) }, :name => "Påskedag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+1 }, :name => "2. påskedag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+26 }, :name => "Store Bededag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:dk, :dk]}, - {:function => lambda { |year| easter(year)+49 }, :name => "2. Pinsedag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pinsedag", :regions => [:dk]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-49 }, :type => :informal, :name => "Fastelavn", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Palmesøndag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skærtorsdag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Langfredag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "2. påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+26 }, :name => "Store Bededag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:dk, :dk]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "2. Pinsedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinsedag", :regions => [:dk]}], 11 => [{:mday => 10, :type => :informal, :name => "Mortensaften", :regions => [:dk]}], 6 => [{:mday => 5, :name => "Grundlovsdag", :regions => [:dk]}, {:mday => 15, :type => :informal, :name => "Valdemarsdag og Genforeningsdag", :regions => [:dk]}, @@ -34,42 +34,14 @@ module Holidays 12 => [{:mday => 13, :type => :informal, :name => "Sankt Lucia", :regions => [:dk]}, {:mday => 24, :name => "Juleaftensdag", :regions => [:dk]}, {:mday => 25, :name => "1. juledag", :regions => [:dk]}, - {:mday => 26, :name => "2. juledag", :regions => [:dk_]}], + {:mday => 26, :name => "2. juledag", :regions => [:dk]}], 4 => [{:mday => 1, :type => :informal, :name => "1. april", :regions => [:dk]}, {:mday => 9, :type => :informal, :name => "Danmarks besættelse", :regions => [:dk]}, {:mday => 16, :type => :informal, :name => "Dronningens fødselsdag", :regions => [:dk]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::DK::DEFINED_REGIONS, Holidays::DK::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/es.rb b/lib/holidays/es.rb index c966ec3..c7c7a72 100644 --- a/lib/holidays/es.rb +++ b/lib/holidays/es.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/es.yaml, data/common_methods.yaml + # Definitions loaded: data/es.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/es' + # require 'holidays/es' # # More definitions are available at http://code.dunae.ca/holidays. module ES # :nodoc: @@ -18,9 +18,9 @@ module Holidays {:mday => 2, :name => "Fiesta de la Comunidad", :regions => [:es_m]}, {:mday => 30, :name => "Día de las Canarias", :regions => [:es_cn]}, {:mday => 31, :name => "Día de la Región Castilla-La Mancha", :regions => [:es_cm]}], - 0 => [{:function => lambda { |year| easter(year)-3 }, :name => "Jueves Santo", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Viernes Santo", :regions => [:es]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Lunes de Pascua", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Jueves Santo", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Viernes Santo", :regions => [:es]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Lunes de Pascua", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}], 11 => [{:mday => 1, :name => "Todos los Santos", :regions => [:es]}], 6 => [{:mday => 9, :name => "Día de la Región de Murcia", :regions => [:es_mu]}, {:mday => 9, :name => "Día de La Rioja", :regions => [:es_lo]}], @@ -44,37 +44,9 @@ module Holidays 10 => [{:mday => 9, :name => "Día de Valencia", :regions => [:es_vc, :es_v]}, {:mday => 12, :name => "Día de la Hispanidad", :regions => [:es]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::ES::DEFINED_REGIONS, Holidays::ES::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/europe.rb b/lib/holidays/europe.rb index 04d2cf5..933bb95 100644 --- a/lib/holidays/europe.rb +++ b/lib/holidays/europe.rb @@ -1,17 +1,17 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/dk.yaml, data/common_methods.yaml, data/de.yaml, data/es.yaml, data/fr.yaml, data/gb.yaml, data/ie.yaml, data/is.yaml, data/it.yaml, data/nl.yaml, data/lv.yaml + # Definitions loaded: data/dk.yaml, data/de.yaml, data/es.yaml, data/fr.yaml, data/gb.yaml, data/ie.yaml, data/is.yaml, data/it.yaml, data/nl.yaml, data/lv.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/europe' + # require 'holidays/europe' # # More definitions are available at http://code.dunae.ca/holidays. module EUROPE # :nodoc: - DEFINED_REGIONS = [:dk, :is, :dk_, :de, :fr, :de_bw, :de_by, :de_nw, :de_rp, :de_sl, :de_he, :de_sn, :de_th, :de_bb, :de_mv, :de_st, :es, :es_m, :es_cn, :es_cm, :es_pv, :es_ct, :es_na, :es_v, :es_vc, :es_mu, :es_lo, :es_ib, :es_ga, :es_an, :es_ce, :es_o, :es_ex, :es_ar, :es_cl, :gb, :ie, :je, :gb_jsy, :gg, :gb_gsy, :gb_eng, :gb_wls, :gb_eaw, :gb_nir, :gb_sct, :im, :gb_iom, :gb_con, :it, :nl, :lv] + DEFINED_REGIONS = [:dk, :is, :de, :fr, :de_bw, :de_by, :de_nw, :de_rp, :de_sl, :de_he, :de_sn, :de_th, :de_bb, :de_mv, :de_st, :es, :es_m, :es_cn, :es_cm, :es_pv, :es_ct, :es_na, :es_v, :es_vc, :es_mu, :es_lo, :es_ib, :es_ga, :es_an, :es_ce, :es_o, :es_ex, :es_ar, :es_cl, :gb, :ie, :je, :gb_jsy, :gg, :gb_gsy, :gb_eng, :gb_wls, :gb_eaw, :gb_nir, :gb_sct, :im, :gb_iom, :gb_con, :it, :nl, :lv] HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Arbejdernes kampdag", :regions => [:dk]}, @@ -33,50 +33,50 @@ module Holidays {:mday => 5, :name => "Bevrijdingsdag", :regions => [:nl]}, {:mday => 1, :name => "Darba svetki", :regions => [:lv]}, {:mday => 4, :name => "Neatkaribas deklaracijas pasludinašanas diena", :regions => [:lv]}], - 0 => [{:function => lambda { |year| easter(year)-49 }, :type => :informal, :name => "Fastelavn", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-7 }, :name => "Palmesøndag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Skærtorsdag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Langfredag", :regions => [:dk]}, - {:function => lambda { |year| easter(year) }, :name => "Påskedag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+1 }, :name => "2. påskedag", :regions => [:dk]}, - {:function => lambda { |year| easter(year)+26 }, :name => "Store Bededag", :regions => [:dk, :is]}, - {:function => lambda { |year| easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:dk, :dk, :is]}, - {:function => lambda { |year| easter(year)+49 }, :name => "2. Pinsedag", :regions => [:dk, :is]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pinsedag", :regions => [:dk, :is]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Karfreitag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Ostermontag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+39 }, :name => "Christi Himmelfahrt", :regions => [:de]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pfingstmontag", :regions => [:de]}, - {:function => lambda { |year| easter(year)+60 }, :name => "Fronleichnam", :regions => [:de_bw, :de_by, :de_he, :de_nw, :de_rp, :de_sl, :de_sn, :de_th]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Jueves Santo", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Viernes Santo", :regions => [:es]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Lunes de Pascua", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, - {:function => lambda { |year| easter(year) }, :name => "Pâques", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+40 }, :name => "Ascension", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+49 }, :name => "Pentecôte", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Lundi de Pentecôte", :regions => [:fr]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:gb]}, - {:function => lambda { |year| easter(year) }, :name => "Easter Sunday", :regions => [:gb]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:gb_eng, :gb_wls, :gb_eaw, :gb_nir, :ie]}, - {:function => lambda { |year| easter(year)-48 }, :name => "Bolludagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-47 }, :name => "Sprengidagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-46 }, :name => "Öskudagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-7 }, :name => "Pálmasunnudagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Skírdagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Föstudaginn langi", :regions => [:is]}, - {:function => lambda { |year| easter(year) }, :name => "Páskadagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Annar í páskum", :regions => [:is]}, - {:function => lambda { |year| easter(year) }, :name => "Pasqua", :regions => [:it]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Lunedì dell'Angelo", :regions => [:it]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Goede Vrijdag", :regions => [:nl]}, - {:function => lambda { |year| easter(year) }, :name => "Pasen", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Pasen", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+39 }, :name => "Hemelvaartsdag", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+49 }, :name => "Pinksteren", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pinksteren", :regions => [:nl]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Liela Piektdiena", :regions => [:lv]}, - {:function => lambda { |year| easter(year) }, :name => "Lieldienas", :regions => [:lv]}, - {:function => lambda { |year| easter(year)+1 }, :name => "2. Lieldienas", :regions => [:lv]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-49 }, :type => :informal, :name => "Fastelavn", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Palmesøndag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skærtorsdag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Langfredag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "2. påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+26 }, :name => "Store Bededag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:dk, :dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "2. Pinsedag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinsedag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Karfreitag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Ostermontag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+39 }, :name => "Christi Himmelfahrt", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pfingstmontag", :regions => [:de]}, + {:function => lambda { |year| Holidays.easter(year)+60 }, :name => "Fronleichnam", :regions => [:de_bw, :de_by, :de_he, :de_nw, :de_rp, :de_sl, :de_sn, :de_th]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Jueves Santo", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Viernes Santo", :regions => [:es]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Lunes de Pascua", :regions => [:es_pv, :es_ct, :es_na, :es_v, :es_vc]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Pâques", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Ascension", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "Pentecôte", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Lundi de Pentecôte", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:gb]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Easter Sunday", :regions => [:gb]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:gb_eng, :gb_wls, :gb_eaw, :gb_nir, :ie]}, + {:function => lambda { |year| Holidays.easter(year)-48 }, :name => "Bolludagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-47 }, :name => "Sprengidagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-46 }, :name => "Öskudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Pálmasunnudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skírdagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Föstudaginn langi", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Páskadagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Annar í páskum", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Pasqua", :regions => [:it]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Lunedì dell'Angelo", :regions => [:it]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Goede Vrijdag", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Pasen", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Pasen", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+39 }, :name => "Hemelvaartsdag", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "Pinksteren", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinksteren", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Liela Piektdiena", :regions => [:lv]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Lieldienas", :regions => [:lv]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "2. Lieldienas", :regions => [:lv]}], 11 => [{:mday => 10, :type => :informal, :name => "Mortensaften", :regions => [:dk]}, {:mday => 1, :name => "Allerheiligen", :regions => [:de_bw, :de_by, :de_nw, :de_rp, :de_sl]}, {:mday => 1, :name => "Todos los Santos", :regions => [:es]}, @@ -112,7 +112,7 @@ module Holidays 12 => [{:mday => 13, :type => :informal, :name => "Sankt Lucia", :regions => [:dk]}, {:mday => 24, :name => "Juleaftensdag", :regions => [:dk]}, {:mday => 25, :name => "1. juledag", :regions => [:dk]}, - {:mday => 26, :name => "2. juledag", :regions => [:dk_]}, + {:mday => 26, :name => "2. juledag", :regions => [:dk]}, {:mday => 25, :name => "1. Weihnachtstag", :regions => [:de]}, {:mday => 25, :name => "2. Weihnachtstag", :regions => [:de]}, {:mday => 6, :name => "Día de la Constitución", :regions => [:es]}, @@ -171,6 +171,7 @@ module Holidays {:mday => 12, :name => "Día de la Hispanidad", :regions => [:es]}, {:wday => 1, :week => -1, :name => "October Holiday", :regions => [:ie]}] } + end # Iceland: first day of summer (Thursday after 18 April) def self.is_sumardagurinn_fyrsti(year) @@ -183,36 +184,7 @@ def self.is_sumardagurinn_fyrsti(year) date end -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end end Holidays.merge_defs(Holidays::EUROPE::DEFINED_REGIONS, Holidays::EUROPE::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/fr.rb b/lib/holidays/fr.rb index bb38997..79b3610 100644 --- a/lib/holidays/fr.rb +++ b/lib/holidays/fr.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/fr.yaml, data/common_methods.yaml + # Definitions loaded: data/fr.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/fr' + # require 'holidays/fr' # # More definitions are available at http://code.dunae.ca/holidays. module FR # :nodoc: @@ -16,10 +16,10 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Fête du travail", :regions => [:fr]}, {:mday => 8, :name => "Victoire 1945", :regions => [:fr]}], - 0 => [{:function => lambda { |year| easter(year) }, :name => "Pâques", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+40 }, :name => "Ascension", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+49 }, :name => "Pentecôte", :regions => [:fr]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Lundi de Pentecôte", :regions => [:fr]}], + 0 => [{:function => lambda { |year| Holidays.easter(year) }, :name => "Pâques", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Ascension", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "Pentecôte", :regions => [:fr]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Lundi de Pentecôte", :regions => [:fr]}], 11 => [{:mday => 1, :name => "Toussaint", :regions => [:fr]}, {:mday => 11, :name => "Armistice 1918", :regions => [:fr]}], 1 => [{:mday => 1, :name => "Jour de l'an", :regions => [:fr]}], @@ -27,37 +27,9 @@ module Holidays 7 => [{:mday => 14, :name => "Fête nationale", :regions => [:fr]}], 8 => [{:mday => 15, :name => "Assomption", :regions => [:fr]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::FR::DEFINED_REGIONS, Holidays::FR::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/gb.rb b/lib/holidays/gb.rb index 363149b..c291a6b 100644 --- a/lib/holidays/gb.rb +++ b/lib/holidays/gb.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/gb.yaml, data/common_methods.yaml + # Definitions loaded: data/gb.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/gb' + # require 'holidays/gb' # # More definitions are available at http://code.dunae.ca/holidays. module GB # :nodoc: @@ -17,9 +17,9 @@ module Holidays 5 => [{:wday => 1, :week => 1, :name => "May Day", :regions => [:gb]}, {:mday => 9, :name => "Liberation Day", :regions => [:je, :gb_jsy, :gg, :gb_gsy]}, {:wday => 1, :week => -1, :name => "Bank Holiday", :regions => [:gb]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:gb]}, - {:function => lambda { |year| easter(year) }, :name => "Easter Sunday", :regions => [:gb]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:gb_eng, :gb_wls, :gb_eaw, :gb_nir]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:gb]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Easter Sunday", :regions => [:gb]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:gb_eng, :gb_wls, :gb_eaw, :gb_nir]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:gb]}, {:mday => 2, :name => "New Year's", :regions => [:gb_sct]}], 12 => [{:mday => 25, :name => "Christmas Day", :regions => [:gb]}, @@ -31,37 +31,9 @@ module Holidays 3 => [{:mday => 5, :name => "St. Piran's Day", :regions => [:gb_con]}, {:mday => 17, :name => "St. Patrick's Day", :regions => [:gb_nir]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::GB::DEFINED_REGIONS, Holidays::GB::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/ie.rb b/lib/holidays/ie.rb index fe325ac..55c0697 100644 --- a/lib/holidays/ie.rb +++ b/lib/holidays/ie.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/ie.yaml, data/common_methods.yaml + # Definitions loaded: data/ie.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/ie' + # require 'holidays/ie' # # More definitions are available at http://code.dunae.ca/holidays. module IE # :nodoc: @@ -15,7 +15,7 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:wday => 1, :week => 1, :name => "May Day", :regions => [:ie]}], - 0 => [{:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:ie]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:ie]}], 6 => [{:wday => 1, :week => 1, :name => "Labour Day/May Day", :regions => [:ie]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:ie]}], 12 => [{:mday => 25, :name => "Christmas Day", :regions => [:ie]}, @@ -24,37 +24,9 @@ module Holidays 3 => [{:mday => 17, :name => "St. Patrick's Day", :regions => [:ie]}], 10 => [{:wday => 1, :week => -1, :name => "October Holiday", :regions => [:ie]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::IE::DEFINED_REGIONS, Holidays::IE::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/is.rb b/lib/holidays/is.rb index ad8c076..40218d0 100644 --- a/lib/holidays/is.rb +++ b/lib/holidays/is.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/is.yaml, data/common_methods.yaml + # Definitions loaded: data/is.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/is' + # require 'holidays/is' # # More definitions are available at http://code.dunae.ca/holidays. module IS # :nodoc: @@ -16,18 +16,18 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 3, :type => :informal, :name => "Sjómannadagurinn", :regions => [:is]}, {:mday => 17, :name => "Lýðveldisdagurinn", :regions => [:is]}], - 0 => [{:function => lambda { |year| easter(year)-48 }, :name => "Bolludagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-47 }, :name => "Sprengidagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-46 }, :name => "Öskudagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-7 }, :name => "Pálmasunnudagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Skírdagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Föstudaginn langi", :regions => [:is]}, - {:function => lambda { |year| easter(year) }, :name => "Páskadagur", :regions => [:is]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Annar í páskum", :regions => [:is]}, - {:function => lambda { |year| easter(year)+26 }, :name => "Store Bededag", :regions => [:is]}, - {:function => lambda { |year| easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:is, :is]}, - {:function => lambda { |year| easter(year)+49 }, :name => "2. Pinsedag", :regions => [:is]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pinsedag", :regions => [:is]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-48 }, :name => "Bolludagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-47 }, :name => "Sprengidagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-46 }, :name => "Öskudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Pálmasunnudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skírdagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Föstudaginn langi", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Páskadagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Annar í páskum", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+26 }, :name => "Store Bededag", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:is, :is]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "2. Pinsedag", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinsedag", :regions => [:is]}], 11 => [{:mday => 16, :name => "Dagur íslenskrar tungu", :regions => [:is]}], 1 => [{:mday => 1, :name => "Nýársdagur", :regions => [:is]}, {:mday => 6, :name => "Þrettándinn", :regions => [:is]}, @@ -39,6 +39,7 @@ module Holidays 2 => [{:mday => 18, :type => :informal, :name => "Konudagur", :regions => [:is]}], 8 => [{:wday => 1, :week => 1, :name => "Frídagur verslunarmanna", :regions => [:is]}] } + end # Iceland: first day of summer (Thursday after 18 April) def self.is_sumardagurinn_fyrsti(year) @@ -51,36 +52,7 @@ def self.is_sumardagurinn_fyrsti(year) date end -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end end Holidays.merge_defs(Holidays::IS::DEFINED_REGIONS, Holidays::IS::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/it.rb b/lib/holidays/it.rb index 90b345a..1c54e7c 100644 --- a/lib/holidays/it.rb +++ b/lib/holidays/it.rb @@ -1,63 +1,35 @@ -module Holidays - # This file is generated by the Ruby Holiday gem. - # - # Definitions loaded: data/it.yaml, data/common_methods.yaml - # - # To use the definitions in the file, load them right after you load the - # Holiday gem: - # - # require 'holidays' - # require 'path/to/it' - # - # More definitions are available at http://code.dunae.ca/holidays. - module IT # :nodoc: - DEFINED_REGIONS = [:it] - - HOLIDAYS_BY_MONTH = { - 5 => [{:mday => 1, :name => "Festa dei Lavoratori", :regions => [:it]}], - 0 => [{:function => lambda { |year| easter(year) }, :name => "Pasqua", :regions => [:it]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Lunedì dell'Angelo", :regions => [:it]}], - 11 => [{:mday => 1, :name => "Ognissanti", :regions => [:it]}], - 6 => [{:mday => 2, :name => "Festa della Repubblica", :regions => [:it]}], - 1 => [{:mday => 1, :name => "Capodanno", :regions => [:it]}, - {:mday => 6, :name => "Epifania", :regions => [:it]}], - 12 => [{:mday => 8, :name => "Immacolata Concezione", :regions => [:it]}, - {:mday => 25, :name => "Natale", :regions => [:it]}, - {:mday => 26, :name => "Santo Stefano", :regions => [:it]}], - 8 => [{:mday => 15, :name => "Assunzione", :regions => [:it]}], - 4 => [{:mday => 25, :name => "Festa della Liberazione", :regions => [:it]}] - } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - - end -end - -Holidays.merge_defs(Holidays::IT::DEFINED_REGIONS, Holidays::IT::HOLIDAYS_BY_MONTH) +module Holidays + # This file is generated by the Ruby Holiday gem. + # + # Definitions loaded: data/it.yaml + # + # To use the definitions in this file, load them right after you load the + # Holiday gem: + # + # require 'holidays' + # require 'holidays/it' + # + # More definitions are available at http://code.dunae.ca/holidays. + module IT # :nodoc: + DEFINED_REGIONS = [:it] + + HOLIDAYS_BY_MONTH = { + 5 => [{:mday => 1, :name => "Festa dei Lavoratori", :regions => [:it]}], + 0 => [{:function => lambda { |year| Holidays.easter(year) }, :name => "Pasqua", :regions => [:it]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Lunedì dell'Angelo", :regions => [:it]}], + 11 => [{:mday => 1, :name => "Ognissanti", :regions => [:it]}], + 6 => [{:mday => 2, :name => "Festa della Repubblica", :regions => [:it]}], + 1 => [{:mday => 1, :name => "Capodanno", :regions => [:it]}, + {:mday => 6, :name => "Epifania", :regions => [:it]}], + 12 => [{:mday => 8, :name => "Immacolata Concezione", :regions => [:it]}, + {:mday => 25, :name => "Natale", :regions => [:it]}, + {:mday => 26, :name => "Santo Stefano", :regions => [:it]}], + 8 => [{:mday => 15, :name => "Assunzione", :regions => [:it]}], + 4 => [{:mday => 25, :name => "Festa della Liberazione", :regions => [:it]}] + } + end + + +end + +Holidays.merge_defs(Holidays::IT::DEFINED_REGIONS, Holidays::IT::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/lv.rb b/lib/holidays/lv.rb index faf52cd..fbdde74 100644 --- a/lib/holidays/lv.rb +++ b/lib/holidays/lv.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/lv.yaml, data/common_methods.yaml + # Definitions loaded: data/lv.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/lv' + # require 'holidays/lv' # # More definitions are available at http://code.dunae.ca/holidays. module LV # :nodoc: @@ -16,9 +16,9 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Darba svetki", :regions => [:lv]}, {:mday => 4, :name => "Neatkaribas deklaracijas pasludinašanas diena", :regions => [:lv]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Liela Piektdiena", :regions => [:lv]}, - {:function => lambda { |year| easter(year) }, :name => "Lieldienas", :regions => [:lv]}, - {:function => lambda { |year| easter(year)+1 }, :name => "2. Lieldienas", :regions => [:lv]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Liela Piektdiena", :regions => [:lv]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Lieldienas", :regions => [:lv]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "2. Lieldienas", :regions => [:lv]}], 11 => [{:mday => 18, :name => "Latvijas Republikas proklamešanas diena", :regions => [:lv]}], 6 => [{:mday => 23, :name => "Ligo Diena", :regions => [:lv]}, {:mday => 24, :name => "Jani", :regions => [:lv]}], @@ -27,37 +27,9 @@ module Holidays {:mday => 25, :name => "2. Ziemassvetki", :regions => [:lv]}, {:mday => 31, :name => "Vecgada vakars", :regions => [:lv]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::LV::DEFINED_REGIONS, Holidays::LV::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/mx.rb b/lib/holidays/mx.rb index d3702f8..489acbe 100644 --- a/lib/holidays/mx.rb +++ b/lib/holidays/mx.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/mx.yaml, data/common_methods.yaml, data/north_america_informal.yaml + # Definitions loaded: data/mx.yaml, data/north_america_informal.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/mx' + # require 'holidays/mx' # # More definitions are available at http://code.dunae.ca/holidays. module MX # :nodoc: @@ -17,9 +17,9 @@ module Holidays 5 => [{:mday => 1, :name => "D\xC3\xADa del Trabajo", :regions => [:mx]}, {:mday => 5, :name => "La Batalla de Puebla", :regions => [:mx]}, {:wday => 0, :week => 3, :type => :informal, :name => "Father's Day", :regions => [:us, :ca]}], - 0 => [{:function => lambda { |year| easter(year)-3 }, :name => "Good Thursday", :regions => [:mx]}, - {:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:mx, :us]}, - {:function => lambda { |year| easter(year) }, :name => "Easter Sunday", :regions => [:mx]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Good Thursday", :regions => [:mx]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:mx, :us]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Easter Sunday", :regions => [:mx]}], 11 => [{:mday => 2, :name => "Dia de Muertos", :regions => [:mx]}, {:wday => 1, :week => 3, :name => "D\xC3\xADa de la Revoluci\xC3\xB3n", :regions => [:mx]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:mx]}, @@ -36,37 +36,9 @@ module Holidays {:mday => 22, :type => :informal, :name => "Earth Day", :regions => [:us, :ca]}], 10 => [{:mday => 31, :type => :informal, :name => "Halloween", :regions => [:us, :ca]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::MX::DEFINED_REGIONS, Holidays::MX::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/nl.rb b/lib/holidays/nl.rb index 08cf42a..814bdfa 100644 --- a/lib/holidays/nl.rb +++ b/lib/holidays/nl.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/nl.yaml, data/common_methods.yaml + # Definitions loaded: data/nl.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/nl' + # require 'holidays/nl' # # More definitions are available at http://code.dunae.ca/holidays. module NL # :nodoc: @@ -16,49 +16,21 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 4, :name => "Dodenherdenking", :regions => [:nl]}, {:mday => 5, :name => "Bevrijdingsdag", :regions => [:nl]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Goede Vrijdag", :regions => [:nl]}, - {:function => lambda { |year| easter(year) }, :name => "Pasen", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Pasen", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+39 }, :name => "Hemelvaartsdag", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+49 }, :name => "Pinksteren", :regions => [:nl]}, - {:function => lambda { |year| easter(year)+50 }, :name => "Pinksteren", :regions => [:nl]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Goede Vrijdag", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Pasen", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Pasen", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+39 }, :name => "Hemelvaartsdag", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "Pinksteren", :regions => [:nl]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinksteren", :regions => [:nl]}], 1 => [{:mday => 1, :name => "Nieuwjaar", :regions => [:nl]}], 12 => [{:mday => 5, :type => :informal, :name => "Sinterklaas", :regions => [:nl]}, {:mday => 25, :name => "Kerstmis", :regions => [:nl]}, {:mday => 26, :name => "Kerstmis", :regions => [:nl]}], 4 => [{:mday => 30, :name => "Koninginnedag", :regions => [:nl]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::NL::DEFINED_REGIONS, Holidays::NL::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/north_america.rb b/lib/holidays/north_america.rb index 2f19af8..5a5767d 100644 --- a/lib/holidays/north_america.rb +++ b/lib/holidays/north_america.rb @@ -1,29 +1,29 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/ca.yaml, data/common_methods.yaml, data/north_america_informal.yaml, data/mx.yaml, data/us.yaml + # Definitions loaded: data/ca.yaml, data/north_america_informal.yaml, data/mx.yaml, data/us.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/north_america' + # require 'holidays/north_america' # # More definitions are available at http://code.dunae.ca/holidays. module NORTH_AMERICA # :nodoc: DEFINED_REGIONS = [:ca, :ca_qc, :us, :mx, :ca_nf, :ca_nt, :ca_nu, :ca_ab, :ca_on, :ca_sk, :ca_mb, :ca_bc, :ca_ns, :ca_yk] HOLIDAYS_BY_MONTH = { - 5 => [{:function => lambda { |year| ca_victoria_day(year) }, :name => "Victoria Day", :regions => [:ca]}, - {:function => lambda { |year| ca_victoria_day(year) }, :name => "National Patriotes Day", :regions => [:ca_qc]}, + 5 => [{:function => lambda { |year| Holidays.ca_victoria_day(year) }, :name => "Victoria Day", :regions => [:ca]}, + {:function => lambda { |year| Holidays.ca_victoria_day(year) }, :name => "National Patriotes Day", :regions => [:ca_qc]}, {:wday => 0, :week => 3, :type => :informal, :name => "Father's Day", :regions => [:us, :ca]}, {:mday => 1, :name => "D\xC3\xADa del Trabajo", :regions => [:mx]}, {:mday => 5, :name => "La Batalla de Puebla", :regions => [:mx]}, {:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:us]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:ca, :us, :mx]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Easter Monday", :regions => [:ca_qc]}, - {:function => lambda { |year| easter(year)-3 }, :name => "Good Thursday", :regions => [:mx]}, - {:function => lambda { |year| easter(year) }, :name => "Easter Sunday", :regions => [:mx]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:ca, :us, :mx]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Easter Monday", :regions => [:ca_qc]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Good Thursday", :regions => [:mx]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Easter Sunday", :regions => [:mx]}], 11 => [{:mday => 11, :name => "Rememberance Day", :regions => [:ca]}, {:mday => 2, :name => "Dia de Muertos", :regions => [:mx]}, {:wday => 1, :week => 3, :name => "D\xC3\xADa de la Revoluci\xC3\xB3n", :regions => [:mx]}, @@ -36,7 +36,7 @@ module Holidays {:mday => 2, :name => "New Year's", :regions => [:ca_qc]}, {:mday => 2, :name => "New Year's Day", :regions => [:mx]}, {:wday => 1, :week => 3, :name => "Martin Luther King, Jr. Day", :regions => [:us]}, - {:function => lambda { |year| us_inauguration_day(year) }, :name => "Inauguration Day", :regions => [:us]}], + {:function => lambda { |year| Holidays.us_inauguration_day(year) }, :name => "Inauguration Day", :regions => [:us]}], 12 => [{:mday => 25, :name => "Christmas Day", :regions => [:ca, :mx, :us]}, {:mday => 26, :name => "Boxing Day", :regions => [:ca]}, {:mday => 12, :name => "Our Lady of Guadalupe's day", :regions => [:mx]}], @@ -68,34 +68,7 @@ module Holidays {:mday => 31, :type => :informal, :name => "Halloween", :regions => [:us, :ca]}, {:wday => 1, :week => 2, :name => "Columbus Day", :regions => [:us]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - + end # Monday on or before May 24 def self.ca_victoria_day(year) @@ -114,7 +87,6 @@ def self.us_inauguration_day(year) end - end end Holidays.merge_defs(Holidays::NORTH_AMERICA::DEFINED_REGIONS, Holidays::NORTH_AMERICA::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/scandinavia.rb b/lib/holidays/scandinavia.rb new file mode 100644 index 0000000..d1dd86b --- /dev/null +++ b/lib/holidays/scandinavia.rb @@ -0,0 +1,78 @@ +module Holidays + # This file is generated by the Ruby Holiday gem. + # + # Definitions loaded: data/dk.yaml, data/is.yaml + # + # To use the definitions in this file, load them right after you load the + # Holiday gem: + # + # require 'holidays' + # require 'holidays/scandinavia' + # + # More definitions are available at http://code.dunae.ca/holidays. + module SCANDINAVIA # :nodoc: + DEFINED_REGIONS = [:dk, :is] + + HOLIDAYS_BY_MONTH = { + 5 => [{:mday => 1, :name => "Arbejdernes kampdag", :regions => [:dk]}, + {:mday => 5, :type => :informal, :name => "Danmarks befrielse", :regions => [:dk]}, + {:mday => 3, :type => :informal, :name => "Sjómannadagurinn", :regions => [:is]}, + {:mday => 17, :name => "Lýðveldisdagurinn", :regions => [:is]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-49 }, :type => :informal, :name => "Fastelavn", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Palmesøndag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skærtorsdag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Langfredag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "2. påskedag", :regions => [:dk]}, + {:function => lambda { |year| Holidays.easter(year)+26 }, :name => "Store Bededag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+40 }, :name => "Kristi Himmelfartsdag", :regions => [:dk, :dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+49 }, :name => "2. Pinsedag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)+50 }, :name => "Pinsedag", :regions => [:dk, :is]}, + {:function => lambda { |year| Holidays.easter(year)-48 }, :name => "Bolludagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-47 }, :name => "Sprengidagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-46 }, :name => "Öskudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-7 }, :name => "Pálmasunnudagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-3 }, :name => "Skírdagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Föstudaginn langi", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year) }, :name => "Páskadagur", :regions => [:is]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Annar í páskum", :regions => [:is]}], + 11 => [{:mday => 10, :type => :informal, :name => "Mortensaften", :regions => [:dk]}, + {:mday => 16, :name => "Dagur íslenskrar tungu", :regions => [:is]}], + 6 => [{:mday => 5, :name => "Grundlovsdag", :regions => [:dk]}, + {:mday => 15, :type => :informal, :name => "Valdemarsdag og Genforeningsdag", :regions => [:dk]}, + {:mday => 23, :type => :informal, :name => "Sankt Hans aften", :regions => [:dk]}], + 1 => [{:mday => 1, :name => "Nytårsdag", :regions => [:dk]}, + {:mday => 1, :name => "Nýársdagur", :regions => [:is]}, + {:mday => 6, :name => "Þrettándinn", :regions => [:is]}, + {:mday => 19, :type => :informal, :name => "Bóndadagur", :regions => [:is]}], + 12 => [{:mday => 13, :type => :informal, :name => "Sankt Lucia", :regions => [:dk]}, + {:mday => 24, :name => "Juleaftensdag", :regions => [:dk]}, + {:mday => 25, :name => "1. juledag", :regions => [:dk]}, + {:mday => 26, :name => "2. juledag", :regions => [:dk]}, + {:mday => 24, :name => "Jól", :regions => [:is]}, + {:mday => 25, :name => "Jól", :regions => [:is]}, + {:mday => 26, :name => "Jól", :regions => [:is]}, + {:mday => 31, :name => "Gamlárskvöld", :regions => [:is]}], + 2 => [{:mday => 18, :type => :informal, :name => "Konudagur", :regions => [:is]}], + 8 => [{:wday => 1, :week => 1, :name => "Frídagur verslunarmanna", :regions => [:is]}], + 4 => [{:mday => 1, :type => :informal, :name => "1. april", :regions => [:dk]}, + {:mday => 9, :type => :informal, :name => "Danmarks besættelse", :regions => [:dk]}, + {:mday => 16, :type => :informal, :name => "Dronningens fødselsdag", :regions => [:dk]}] + } + end + +# Iceland: first day of summer (Thursday after 18 April) +def self.is_sumardagurinn_fyrsti(year) + date = Date.civil(year,4,18) + if date.wday < 4 + date += (4 - date.wday) + else date + date += (11 - date.wday) + end + date +end + + +end + +Holidays.merge_defs(Holidays::SCANDINAVIA::DEFINED_REGIONS, Holidays::SCANDINAVIA::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/united_nations.rb b/lib/holidays/united_nations.rb index ef4af07..ab5d2c2 100644 --- a/lib/holidays/united_nations.rb +++ b/lib/holidays/united_nations.rb @@ -3,11 +3,11 @@ module Holidays # # Definitions loaded: data/united_nations.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/united_nations' + # require 'holidays/united_nations' # # More definitions are available at http://code.dunae.ca/holidays. module UNITED_NATIONS # :nodoc: @@ -16,9 +16,9 @@ module Holidays HOLIDAYS_BY_MONTH = { } - - end + + end Holidays.merge_defs(Holidays::UNITED_NATIONS::DEFINED_REGIONS, Holidays::UNITED_NATIONS::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/us.rb b/lib/holidays/us.rb index 3c1a2d4..e45da61 100644 --- a/lib/holidays/us.rb +++ b/lib/holidays/us.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/us.yaml, data/common_methods.yaml, data/north_america_informal.yaml + # Definitions loaded: data/us.yaml, data/north_america_informal.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/us' + # require 'holidays/us' # # More definitions are available at http://code.dunae.ca/holidays. module US # :nodoc: @@ -16,12 +16,12 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:wday => 1, :week => -1, :name => "Memorial Day", :regions => [:us]}, {:wday => 0, :week => 3, :type => :informal, :name => "Father's Day", :regions => [:us, :ca]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :type => :informal, :name => "Good Friday", :regions => [:us]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :type => :informal, :name => "Good Friday", :regions => [:us]}], 11 => [{:mday => 11, :name => "Veterans Day", :regions => [:us]}, {:wday => 4, :week => 4, :name => "Thanksgiving Day", :regions => [:us]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:us]}, {:wday => 1, :week => 3, :name => "Martin Luther King, Jr. Day", :regions => [:us]}, - {:function => lambda { |year| us_inauguration_day(year) }, :name => "Inauguration Day", :regions => [:us]}], + {:function => lambda { |year| Holidays.us_inauguration_day(year) }, :name => "Inauguration Day", :regions => [:us]}], 12 => [{:mday => 25, :name => "Christmas Day", :regions => [:us]}], 7 => [{:mday => 4, :name => "Independence Day", :regions => [:us]}], 2 => [{:mday => 2, :type => :informal, :name => "Groundhog Day", :regions => [:us, :ca]}, @@ -34,34 +34,7 @@ module Holidays 10 => [{:wday => 1, :week => 2, :name => "Columbus Day", :regions => [:us]}, {:mday => 31, :type => :informal, :name => "Halloween", :regions => [:us, :ca]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - + end # January 20, every fourth year, following Presidential election def self.us_inauguration_day(year) @@ -69,7 +42,6 @@ def self.us_inauguration_day(year) end - end end Holidays.merge_defs(Holidays::US::DEFINED_REGIONS, Holidays::US::HOLIDAYS_BY_MONTH) diff --git a/lib/holidays/za.rb b/lib/holidays/za.rb index 2aa08a6..501a790 100644 --- a/lib/holidays/za.rb +++ b/lib/holidays/za.rb @@ -1,13 +1,13 @@ module Holidays # This file is generated by the Ruby Holiday gem. # - # Definitions loaded: data/za.yaml, data/common_methods.yaml + # Definitions loaded: data/za.yaml # - # To use the definitions in the file, load them right after you load the + # To use the definitions in this file, load them right after you load the # Holiday gem: # # require 'holidays' - # require 'path/to/za' + # require 'holidays/za' # # More definitions are available at http://code.dunae.ca/holidays. module ZA # :nodoc: @@ -15,8 +15,8 @@ module Holidays HOLIDAYS_BY_MONTH = { 5 => [{:mday => 1, :name => "Workers' Day", :regions => [:za]}], - 0 => [{:function => lambda { |year| easter(year)-2 }, :name => "Good Friday", :regions => [:za]}, - {:function => lambda { |year| easter(year)+1 }, :name => "Family Day", :regions => [:za]}], + 0 => [{:function => lambda { |year| Holidays.easter(year)-2 }, :name => "Good Friday", :regions => [:za]}, + {:function => lambda { |year| Holidays.easter(year)+1 }, :name => "Family Day", :regions => [:za]}], 6 => [{:mday => 16, :name => "Youth Day", :regions => [:za]}], 1 => [{:mday => 1, :name => "New Year's Day", :regions => [:za]}], 12 => [{:mday => 16, :name => "Day of Reconciliation", :regions => [:za]}, @@ -27,37 +27,9 @@ module Holidays 9 => [{:mday => 24, :name => "Heritage Day", :regions => [:za]}], 4 => [{:mday => 27, :name => "Freedom Day", :regions => [:za]}] } - -# Get the date of Easter in a given year. -# -# +year+ must be a valid Gregorian year. -# -# Returns a Date object. -#-- -# from http://snippets.dzone.com/posts/show/765 -# TODO: check year to ensure Gregorian -def self.easter(year) - y = year - a = y % 19 - b = y / 100 - c = y % 100 - d = b / 4 - e = b % 4 - f = (b + 8) / 25 - g = (b - f + 1) / 3 - h = (19 * a + b - d - g + 15) % 30 - i = c / 4 - k = c % 4 - l = (32 + 2 * e + 2 * i - h - k) % 7 - m = (a + 11 * h + 22 * l) / 451 - month = (h + l - 7 * m + 114) / 31 - day = ((h + l - 7 * m + 114) % 31) + 1 - Date.civil(year, month, day) -end - - - end + + end Holidays.merge_defs(Holidays::ZA::DEFINED_REGIONS, Holidays::ZA::HOLIDAYS_BY_MONTH) diff --git a/rakefile.rb b/rakefile.rb index 112c9bb..88d477c 100644 --- a/rakefile.rb +++ b/rakefile.rb @@ -7,26 +7,28 @@ require 'lib/holidays' require 'bin/build_defs' def_list = { - :au => ['data/au.yaml', 'data/common_methods.yaml'], - :ca => ['data/ca.yaml', 'data/common_methods.yaml', 'data/north_america_informal.yaml'], - :dk => ['data/dk.yaml', 'data/common_methods.yaml'], - :de => ['data/de.yaml', 'data/common_methods.yaml'], - :es => ['data/es.yaml', 'data/common_methods.yaml'], - :fr => ['data/fr.yaml', 'data/common_methods.yaml'], - :gb => ['data/gb.yaml', 'data/common_methods.yaml'], - :ie => ['data/ie.yaml', 'data/common_methods.yaml'], - :is => ['data/is.yaml', 'data/common_methods.yaml'], - :it => ['data/it.yaml', 'data/common_methods.yaml'], - :lv => ['data/lv.yaml', 'data/common_methods.yaml'], - :mx => ['data/mx.yaml', 'data/common_methods.yaml', 'data/north_america_informal.yaml'], - :nl => ['data/nl.yaml', 'data/common_methods.yaml'], - :us => ['data/us.yaml', 'data/common_methods.yaml', 'data/north_america_informal.yaml'], + :au => ['data/au.yaml'], + :ca => ['data/ca.yaml', 'data/north_america_informal.yaml'], + :dk => ['data/dk.yaml'], + :de => ['data/de.yaml'], + :es => ['data/es.yaml'], + :fr => ['data/fr.yaml'], + :gb => ['data/gb.yaml'], + :ie => ['data/ie.yaml'], + :is => ['data/is.yaml'], + :it => ['data/it.yaml'], + :lv => ['data/lv.yaml'], + :mx => ['data/mx.yaml', 'data/north_america_informal.yaml'], + :nl => ['data/nl.yaml'], + :us => ['data/us.yaml', 'data/north_america_informal.yaml'], :united_nations => ['data/united_nations.yaml'], - :za => ['data/za.yaml', 'data/common_methods.yaml'] + :za => ['data/za.yaml'] } def_list[:north_america] = def_list[:ca] | def_list[:mx] | def_list[:us] +def_list[:scandinavia] = def_list[:dk] | def_list[:is] + def_list[:europe] = def_list[:dk] | def_list[:de] | def_list[:es] | def_list[:fr] | def_list[:gb] | def_list[:ie] | def_list[:is] | def_list[:it] |def_list[:nl] |def_list[:lv] @@ -54,27 +56,17 @@ end task :manifest do - File.open("MANIFEST","w") do |file| + File.open("lib/holidays/MANIFEST","w") do |file| file.puts <<-EOH ==== Regional definitions The following definition files are included in the default installation: EOH - -# def_list.each do |region, includes| -# file.puts('* holidays/' + region.to_s) -# includes.each do |inc| -# file.puts(' * holidays/' + inc.gsub(/^data\/|\.yaml$/, '')) -# end -# end - FileList.new('lib/holidays/*.rb').each do |str| file.puts('* ' + str.gsub(/^lib\/|\.rb$/, '')) end end - - end @@ -83,8 +75,9 @@ Rake::RDocTask.new(:rdoc) do |rdoc| rdoc.rdoc_dir = 'doc' rdoc.title = 'Ruby Holidays Gem' rdoc.options << '--all' << '--inline-source' << '--line-numbers' + rdoc.options << '--charset' << 'utf-8' rdoc.rdoc_files.include('README') - rdoc.rdoc_files.include('MANIFEST') + rdoc.rdoc_files.include('lib/holidays/MANIFEST') rdoc.rdoc_files.include('CUSTOM DATES') rdoc.rdoc_files.include('REFERENCES') rdoc.rdoc_files.include('LICENSE') @@ -104,8 +97,8 @@ spec = Gem::Specification.new do |s| s.files = FileList["{lib}/**/*"].to_a s.test_files = Dir.glob('test/test_*.rb') s.has_rdoc = true - s.extra_rdoc_files = ['README', 'CUSTOM DATES', 'REFERENCES', 'LICENSE'] - s.rdoc_options << '--all' << '--inline-source' << '--line-numbers' + s.extra_rdoc_files = ['README', 'lib/holidays/MANIFEST', 'CUSTOM DATES', 'REFERENCES', 'LICENSE'] + s.rdoc_options << '--all' << '--inline-source' << '--line-numbers' << '--charset' << 'utf-8' end desc 'Build the gem.' diff --git a/test/test_common_methods.rb b/test/test_common_methods.rb deleted file mode 100644 index 4f386f9..0000000 --- a/test/test_common_methods.rb +++ /dev/null @@ -1,29 +0,0 @@ -require File.dirname(__FILE__) + '/test_helper' - -class CommonMethodsTests < Test::Unit::TestCase - - def test_inclusion - flunk - assert_equal '1800-04-13', Holidays.easter(1800).to_s - assert_equal '1899-04-02', Holidays.easter(1899).to_s - assert_equal '1900-04-15', Holidays.easter(1900).to_s - assert_equal '1999-04-04', Holidays.easter(1999).to_s - assert_equal '2000-04-23', Holidays.easter(2000).to_s - assert_equal '2025-04-20', Holidays.easter(2025).to_s - assert_equal '2035-03-25', Holidays.easter(2035).to_s - assert_equal '2067-04-03', Holidays.easter(2067).to_s - assert_equal '2099-04-12', Holidays.easter(2099).to_s - end - - def test_easter_lambda - [Date.civil(1800,4,11), Date.civil(1899,3,31), Date.civil(1900,4,13), - Date.civil(2008,3,21), Date.civil(2035,3,23)].each do |date| - assert_equal 'Good Friday', Holidays.on(date, :ca)[0][:name] - end - - [Date.civil(1800,4,14), Date.civil(1899,4,3), Date.civil(1900,4,16), - Date.civil(2008,3,24), Date.civil(2035,3,26)].each do |date| - assert_equal 'Easter Monday', Holidays.on(date, :ca_qc)[0][:name] - end - end -end diff --git a/test/test_helper.rb b/test/test_helper.rb index 5eab881..55f2dcd 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,5 +1,8 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../')) $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../lib/')) + +$KCODE = 'u' + require 'rubygems' require 'test/unit' require 'date' diff --git a/test/test_holidays.rb b/test/test_holidays.rb index 310b0f3..e2eff32 100644 --- a/test/test_holidays.rb +++ b/test/test_holidays.rb @@ -1,7 +1,6 @@ require File.dirname(__FILE__) + '/test_helper' class HolidaysTests < Test::Unit::TestCase - def setup @date = Date.civil(2008,1,1) end @@ -48,22 +47,53 @@ class HolidaysTests < Test::Unit::TestCase end def test_any_region - # Should return Victoria Day and Father's Day + # Should return Victoria Day and Father's Day. holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca) assert_equal 2, holidays.length - # Should return Victoria Day, Father's Day and National Patriotes Day - holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :any) - assert_equal 3, holidays.length + # Should return Victoria Day, Father's Day and National Patriotes Day. + # + # Should be 3 in the CA region but other regional files are loaded during the + # unit tests add to the :any count. + holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), [:any]) + assert holidays.length >= 3 end def test_sub_regions - # Should return Victoria Day and Father's Day + # Should return Victoria Day and Father's Day. holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca) assert_equal 2, holidays.length - # Should return Victoria Day, Father's Day and National Patriotes Day + # Should return Victoria Day, Father's Day and National Patriotes Day. holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_qc) + assert 3, holidays.length + + # Should return Victoria Day, Father's Day and National Patriotes Day. + holidays = Holidays.between(Date.civil(2008,5,1), Date.civil(2008,5,31), :ca_) assert_equal 3, holidays.length end + + def test_easter_sunday + assert_equal '1800-04-13', Holidays.easter(1800).to_s + assert_equal '1899-04-02', Holidays.easter(1899).to_s + assert_equal '1900-04-15', Holidays.easter(1900).to_s + assert_equal '1999-04-04', Holidays.easter(1999).to_s + assert_equal '2000-04-23', Holidays.easter(2000).to_s + assert_equal '2025-04-20', Holidays.easter(2025).to_s + assert_equal '2035-03-25', Holidays.easter(2035).to_s + assert_equal '2067-04-03', Holidays.easter(2067).to_s + assert_equal '2099-04-12', Holidays.easter(2099).to_s + end + + def test_easter_lambda + [Date.civil(1800,4,11), Date.civil(1899,3,31), Date.civil(1900,4,13), + Date.civil(2008,3,21), Date.civil(2035,3,23)].each do |date| + assert_equal 'Good Friday', Holidays.on(date, :ca)[0][:name] + end + + [Date.civil(1800,4,14), Date.civil(1899,4,3), Date.civil(1900,4,16), + Date.civil(2008,3,24), Date.civil(2035,3,26)].each do |date| + assert_equal 'Easter Monday', Holidays.on(date, :ca_qc)[0][:name] + end + end end diff --git a/test/test_multiple_regions.rb b/test/test_multiple_regions.rb index 486eb95..7034b0b 100644 --- a/test/test_multiple_regions.rb +++ b/test/test_multiple_regions.rb @@ -8,12 +8,6 @@ class MultipleRegionsTests < Test::Unit::TestCase @date = Date.civil(2008,1,1) end - def test_defining_regions - #assert Holidays::DEFINED_REGIONS.include?(:gb) - #assert Holidays::DEFINED_REGIONS.include?(:ie) - #assert Holidays::DEFINED_REGIONS.include?(:gb_con) - end - def test_defining_holidays h = Holidays.on(Date.civil(2008,12,26), :ie) assert_equal 'St. Stephen\'s Day', h[0][:name] diff --git a/test/test_region_nl.rb b/test/test_region_nl.rb index 9249fef..808b513 100644 --- a/test/test_region_nl.rb +++ b/test/test_region_nl.rb @@ -1,6 +1,9 @@ require File.dirname(__FILE__) + '/test_helper' require 'holidays/europe' + class RegionTests < Test::Unit::TestCase + + # ==== Netherlands # New Year's Day 1 January # Good Friday 21 March @@ -28,4 +31,23 @@ class RegionTests < Test::Unit::TestCase assert_equal name, Holidays.on(date, :nl)[0][:name] end end + + + def test_it + {Date.civil(2007,1,1) => 'Capodanno', + Date.civil(2007,1,6) => 'Epifania', + Date.civil(2007,4,8) => 'Pasqua', + Date.civil(2007,4,9) => 'Lunedì dell\'Angelo', + Date.civil(2007,4,25) => 'Festa della Liberazione', + Date.civil(2007,5,1) => 'Festa dei Lavoratori', + Date.civil(2007,6,2) => 'Festa della Repubblica', + Date.civil(2007,8,15) => 'Assunzione', + Date.civil(2007,11,1) => 'Ognissanti', + Date.civil(2007,12,8) => 'Immacolata Concezione', + Date.civil(2007,12,25) => 'Natale', + Date.civil(2007,12,26) => 'Santo Stefano'}.each do |date, name| + assert_equal name, Holidays.on(date, :it)[0][:name] + end + end + end