holidate 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/holidate.rb +16 -17
  2. metadata +2 -2
data/lib/holidate.rb CHANGED
@@ -1,62 +1,61 @@
1
1
  require 'date'
2
2
 
3
3
  class Holidate
4
+ def self.find_day nth, wday, month, year=Date.today.year
5
+ if nth > 0
6
+ Date.new year, month, ( 1 + ( nth - 1) * 7 + (wday - Date.new(year, month, 1).wday) % 7)
7
+ elsif nth < 0
8
+ days_in_month = ((Date.new(year, month) >> 1) -1).day
9
+ Date.new year, month, (days_in_month - (-nth - 1) * 7 - (Date.new(year, month, days_in_month).wday - wday) % 7)
10
+ end
11
+ end
12
+
4
13
  def self.new_years_day year
5
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
6
- Date.new year, 1
14
+ Date.new year, 1, 1
7
15
  end
8
16
  self.singleton_class.send(:alias_method, :new_year, :new_years_day)
9
17
 
10
18
  def self.martin_luther_king_jr_day year
11
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
12
- Date.new year, 1, (15 + (1 - Date.new(year, 1).wday)%7)
19
+ self.find_day 3, 1, 1, year
13
20
  end
14
21
  self.singleton_class.send(:alias_method, :mlk, :martin_luther_king_jr_day)
15
22
 
16
23
  def self.washingtons_birthday year
17
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
18
- Date.new year, 2, (15 + (1 - Date.new(year, 2).wday)%7)
24
+ self.find_day 3, 1, 2, year
19
25
  end
20
26
  self.singleton_class.send(:alias_method, :washington, :washingtons_birthday)
21
27
 
22
28
  def self.memorial_day year
23
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
24
- Date.new year, 5, (31 - (Date.new(year, 5, 31).wday - 1)%7)
29
+ self.find_day -1, 1, 5, year
25
30
  end
26
31
  self.singleton_class.send(:alias_method, :memorial, :memorial_day)
27
32
 
28
33
  def self.independence_day year
29
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
30
34
  Date.new year, 7, 4
31
35
  end
32
36
  self.singleton_class.send(:alias_method, :july_4, :independence_day)
33
37
 
34
38
  def self.labor_day year
35
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
36
- Date.new year, 9, (1 + (1 - Date.new(year, 9).wday)%7)
39
+ self.find_day 1, 1, 9, year
37
40
  end
38
41
  self.singleton_class.send(:alias_method, :labor, :labor_day)
39
42
 
40
43
  def self.columbus_day year
41
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
42
- Date.new year, 10, (8 + (1 - Date.new(year, 10).wday)%7)
44
+ self.find_day 2, 1, 10, year
43
45
  end
44
46
  self.singleton_class.send(:alias_method, :columbus, :columbus_day)
45
47
 
46
48
  def self.veterans_day year
47
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
48
49
  Date.new year, 11, 11
49
50
  end
50
51
  self.singleton_class.send(:alias_method, :veteran, :veterans_day)
51
52
 
52
53
  def self.thanksgiving_day year
53
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
54
- Date.new year, 11, (22 + (4 - Date.new(year, 11).wday)%7)
54
+ self.find_day 4, 4, 11, year
55
55
  end
56
56
  self.singleton_class.send(:alias_method, :thanksgiving, :thanksgiving_day)
57
57
 
58
58
  def self.christmas_day year
59
- raise ArgumentError, "Invalid value for method #{__method__}: #{year.inspect}" unless year.is_a? Integer
60
59
  Date.new year, 12, 25
61
60
  end
62
61
  self.singleton_class.send(:alias_method, :xmas, :christmas_day)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: holidate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-19 00:00:00.000000000 Z
12
+ date: 2015-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler