Module: RussianProductionCalendar

Extended by:
RussianProductionCalendar
Included in:
RussianProductionCalendar
Defined in:
lib/russian_production_calendar.rb,
lib/russian_production_calendar/error.rb,
lib/russian_production_calendar/version.rb

Constant Summary collapse

CALENDAR_PATH =

Звездочкой (*) отмечены предпраздничные (сокращенные) дни. Плюсом (+) отмечены перенесенные выходные дни

'russian_production_calendar/holidays.csv'
SHORTENED_POSTFIX =
'*'
WEEKEND_POSTPONED_POSTFIX =
'+'
DAY_SEP =
','
MONTHS_MAP =
{
  1 => 'Январь',
  2 => 'Февраль',
  3 => 'Март',
  4 => 'Апрель',
  5 => 'Май',
  6 => 'Июнь',
  7 => 'Июль',
  8 => 'Август',
  9 => 'Сентябрь',
  10 => 'Октябрь',
  11 => 'Ноябрь',
  12 => 'Декабрь'
}.freeze
Error =
Class.new(StandardError)
NotFoundError =
Class.new(Error)
VERSION =
'0.1.2020.10.26'

Instance Method Summary collapse

Instance Method Details

#gt_holiday(day) ⇒ Date

Returns следующий выходной день.

Parameters:

Returns:

  • (Date)

    следующий выходной день



96
97
98
99
100
101
# File 'lib/russian_production_calendar.rb', line 96

def gt_holiday(day)
  loop do
    day = day.next_day
    break day if holiday?(day)
  end
end

#gt_workday(day) ⇒ Date

Returns следующий рабочий день.

Parameters:

Returns:

  • (Date)

    следующий рабочий день



62
63
64
65
66
67
# File 'lib/russian_production_calendar.rb', line 62

def gt_workday(day)
  loop do
    day = day.next_day
    break day if workday?(day)
  end
end

#gte_holiday(day) ⇒ Date

Returns следующий выходной день (или текущий, если он выходной).

Parameters:

Returns:

  • (Date)

    следующий выходной день (или текущий, если он выходной)



88
89
90
91
92
# File 'lib/russian_production_calendar.rb', line 88

def gte_holiday(day)
  loop do
    holiday?(day) ? (break day) : (day = day.next_day)
  end
end

#gte_workday(day) ⇒ Date

Returns следующий рабочий день (или текущий, если он рабочий).

Parameters:

Returns:

  • (Date)

    следующий рабочий день (или текущий, если он рабочий)



54
55
56
57
58
# File 'lib/russian_production_calendar.rb', line 54

def gte_workday(day)
  loop do
    workday?(day) ? (break day) : (day = day.next_day)
  end
end

#holiday?(date) ⇒ Boolean

Returns true/false - выходной/рабочий.

Returns:

  • (Boolean)

    true/false - выходной/рабочий



34
35
36
37
# File 'lib/russian_production_calendar.rb', line 34

def holiday?(date)
  days = index.dig(date.year, date.month) || raise(NotFoundError, date)
  days.include?(date.day)
end

#lt_holiday(day) ⇒ Date

Returns предыдущий рабочий день.

Parameters:

Returns:

  • (Date)

    предыдущий рабочий день



105
106
107
108
109
110
# File 'lib/russian_production_calendar.rb', line 105

def lt_holiday(day)
  loop do
    day = day.prev_day
    break day if holiday?(day)
  end
end

#lt_workday(day) ⇒ Date

Returns предыдущий рабочий день.

Parameters:

Returns:

  • (Date)

    предыдущий рабочий день



71
72
73
74
75
76
# File 'lib/russian_production_calendar.rb', line 71

def lt_workday(day)
  loop do
    day = day.prev_day
    break day if workday?(day)
  end
end

#lte_holiday(day) ⇒ Date

Returns предыдущий выходной день (или текущий, если он выходной).

Parameters:

Returns:

  • (Date)

    предыдущий выходной день (или текущий, если он выходной)



80
81
82
83
84
# File 'lib/russian_production_calendar.rb', line 80

def lte_holiday(day)
  loop do
    holiday?(day) ? (break day) : (day = day.prev_day)
  end
end

#lte_workday(day) ⇒ Date

Returns предыдущий рабочий день (или текущий, если он рабочий).

Parameters:

Returns:

  • (Date)

    предыдущий рабочий день (или текущий, если он рабочий)



46
47
48
49
50
# File 'lib/russian_production_calendar.rb', line 46

def lte_workday(day)
  loop do
    workday?(day) ? (break day) : (day = day.prev_day)
  end
end

#workday?(date) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/russian_production_calendar.rb', line 40

def workday?(date)
  !holiday?(date)
end