Module: WorkingDays

Defined in:
lib/ndr_support/concerns/working_days.rb

Overview

This module contains logic for #working_days_until, #weekday?, and #public_holiday?.

Constant Summary collapse

WEEK_DAYS =
1..5
HOLIDAYS =
[ # Sourced from https://www.gov.uk/bank-holidays
  # 2012
  '2012-01-02', # Monday    - New Year's Day (substitute day)
  '2012-04-06', # Friday    - Good Friday
  '2012-04-09', # Monday    - Easter Monday
  '2012-05-07', # Monday    - Early May bank holiday
  '2012-06-04', # Monday    - Spring bank holiday (substitute day)
  '2012-06-05', # Tuesday   - Queen's Diamond Jubilee (extra bank holiday)
  '2012-08-27', # Monday    - Summer bank holiday
  '2012-12-25', # Tuesday   - Christmas Day
  '2012-12-26', # Wednesday - Boxing Day
  # 2013
  '2013-01-01', # Tuesday   - New Year's Day
  '2013-03-29', # Friday    - Good Friday
  '2013-04-01', # Monday    - Easter Monday
  '2013-05-06', # Monday    - Early May bank holiday
  '2013-05-27', # Monday    - Spring bank holiday
  '2013-08-26', # Monday    - Summer bank holiday
  '2013-12-25', # Wednesday - Christmas Day
  '2013-12-26', # Thursday  - Boxing Day
  # 2014
  '2014-01-01', # Wednesday - New Year's Day
  '2014-04-18', # Friday    - Good Friday
  '2014-04-21', # Monday    - Easter Monday
  '2014-05-05', # Monday    - Early May bank holiday
  '2014-05-26', # Monday    - Spring bank holiday
  '2014-08-25', # Monday    - Summer bank holiday
  '2014-12-25', # Thursday  - Christmas Day
  '2014-12-26', # Friday    - Boxing Day
  # 2015
  '2015-01-01', # Thursday  - New Year's Day
  '2015-04-03', # Friday    - Good Friday
  '2015-04-06', # Monday    - Easter Monday
  '2015-05-04', # Monday    - Early May bank holiday
  '2015-05-25', # Monday    - Spring bank holiday
  '2015-08-31', # Monday    - Summer bank holiday
  '2015-12-25', # Friday    - Christmas Day
  '2015-12-28', # Monday    - Boxing Day (substitute day)
  # 2016
  '2016-01-01', # Friday    - New Year's Day
  '2016-03-25', # Friday    - Good Friday
  '2016-03-28', # Monday    - Easter Monday
  '2016-05-02', # Monday    - Early May bank holiday
  '2016-05-30', # Monday    - Spring bank holiday
  '2016-08-29', # Monday    - Summer bank holiday
  '2016-12-26', # Monday    - Boxing Day
  '2016-12-27', # Tuesday   - Christmas Day (substitute day)
].map { |str| Date.parse(str) }

Instance Method Summary collapse

Instance Method Details

#public_holiday?Boolean

Is this a public holiday (in England / Wales)?

Returns:

  • (Boolean)


78
79
80
# File 'lib/ndr_support/concerns/working_days.rb', line 78

def public_holiday?
  HOLIDAYS.include? to_date
end

#weekday?Boolean

Is this a weekday?

Returns:

  • (Boolean)


73
74
75
# File 'lib/ndr_support/concerns/working_days.rb', line 73

def weekday?
  WEEK_DAYS.include? wday
end

#weekdays_until(other) ⇒ Object

How many complete weekdays there are until the given ‘other`. Returns negative number if `other` is earlier.



67
68
69
70
# File 'lib/ndr_support/concerns/working_days.rb', line 67

def weekdays_until(other)
  return -other.weekdays_until(self) if other < self
  whole_days_to(other).count(&:weekday?)
end

#working_days_until(other) ⇒ Object

How many complete working days there are until the given ‘other`. Returns negative number if `other` is earlier.



57
58
59
60
61
62
63
# File 'lib/ndr_support/concerns/working_days.rb', line 57

def working_days_until(other)
  return -other.working_days_until(self) if other < self

  whole_days_to(other).count do |day|
    day.weekday? && !day.public_holiday?
  end
end