Class: JobBoard::CronDescription

Inherits:
Object
  • Object
show all
Defined in:
app/models/job_board/cron_description.rb

Overview

Turns a cron expression into an English frequency description, e.g. "30 9 * * 1-5" => "At 09:30 on Monday through Friday". Returns nil for anything it can't describe faithfully.

Constant Summary collapse

DAYS =
%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday].freeze
MONTHS =
%w[January February March April May June
July August September October November December].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cron) ⇒ CronDescription

Returns a new instance of CronDescription.



19
20
21
# File 'app/models/job_board/cron_description.rb', line 19

def initialize(cron)
  @cron = cron
end

Class Method Details

.describe(schedule) ⇒ Object



12
13
14
15
16
17
# File 'app/models/job_board/cron_description.rb', line 12

def self.describe(schedule)
  cron = Fugit.parse(schedule.to_s)
  new(cron).to_s if cron.instance_of?(Fugit::Cron)
rescue StandardError
  nil
end

Instance Method Details

#to_sObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/job_board/cron_description.rb', line 23

def to_s
  time = time_clause
  return nil if time.nil?

  days = day_clause
  description =
    if days
      "#{time} #{days}"
    elsif time.start_with?("At ")
      "Every day #{time.sub(/\AAt /, "at ")}"
    else
      time
    end
  cron.zone ? "#{description} (#{cron.zone})" : description
end