Class: Holidays::DateCalculator::WeekendModifier

Inherits:
Object
  • Object
show all
Defined in:
lib/holidays/date_calculator/weekend_modifier.rb

Instance Method Summary collapse

Instance Method Details

#to_monday_if_sunday(date) ⇒ Object

Move date to Monday if it occurs on a Sunday. Does not modify the date if it is not a Sunday. Used as a callback function.



15
16
17
18
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 15

def to_monday_if_sunday(date)
  return date unless date.wday == 0
  to_next_weekday(date)
end

#to_monday_if_weekend(date) ⇒ Object

Move date to Monday if it occurs on a Saturday on Sunday. Does not modify date if it is not a weekend. Used as a callback function.



7
8
9
10
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 7

def to_monday_if_weekend(date)
  return date unless date.wday == 6 || date.wday == 0
  to_next_weekday(date)
end

#to_next_weekday(date) ⇒ Object

Finds the next weekday. For example, if a ‘Friday’ date is received it will return the following Monday. If Sunday then return Monday, if Saturday return Monday, if Tuesday return Wednesday, etc.



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 66

def to_next_weekday(date)
  case date.wday
  when 6
    date += 2
  when 5
    date += 3
  else
    date += 1
  end

  date
end

#to_tuesday_if_sunday_or_monday_if_saturday(date) ⇒ Object

if Christmas falls on a Saturday, move it to the next Monday (Boxing Day will be Sunday and potentially Tuesday) if Christmas falls on a Sunday, move it to the next Tuesday (Boxing Day will go on Monday)

if Boxing Day falls on a Saturday, move it to the next Monday (Christmas will go on Friday) if Boxing Day falls on a Sunday, move it to the next Tuesday (Christmas will go on Saturday & Monday)



37
38
39
40
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 37

def to_tuesday_if_sunday_or_monday_if_saturday(date)
  date += 2 if [0, 6].include?(date.wday)
  date
end

#to_weekday_if_boxing_weekend(date) ⇒ Object

Move Boxing Day if it falls on a weekend, leaving room for Christmas. Used as a callback function.



22
23
24
25
26
27
28
29
30
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 22

def to_weekday_if_boxing_weekend(date)
  if date.wday == 6 || date.wday == 0
    date += 2
  elsif date.wday == 1 # https://github.com/holidays/holidays/issues/27
    date += 1
  end

  date
end

#to_weekday_if_boxing_weekend_from_year(year) ⇒ Object

Call to_weekday_if_boxing_weekend but first get date based on year Used as a callback function.



50
51
52
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 50

def to_weekday_if_boxing_weekend_from_year(year)
  to_tuesday_if_sunday_or_monday_if_saturday(Date.civil(year, 12, 26))
end

#to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday(year) ⇒ Object

Call to_weekday_if_boxing_weekend but first get date based on year Used as a callback function.



44
45
46
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 44

def to_weekday_if_boxing_weekend_from_year_or_to_tuesday_if_monday(year)
  to_weekday_if_boxing_weekend(Date.civil(year, 12, 26))
end

#to_weekday_if_weekend(date) ⇒ Object

Move date to Monday if it occurs on a Sunday or to Friday if it occurs on a Saturday. Used as a callback function.



57
58
59
60
61
# File 'lib/holidays/date_calculator/weekend_modifier.rb', line 57

def to_weekday_if_weekend(date)
  date += 1 if date.wday == 0
  date -= 1 if date.wday == 6
  date
end