Class: Jumbotron::Scheduling::Clock

Inherits:
Object
  • Object
show all
Defined in:
app/scheduling/jumbotron/scheduling/clock.rb

Constant Summary collapse

MINUTE =
17
HOUR =
6
WEEKDAY =
3
WEEKDAY_NAME =
"wednesday"

Class Method Summary collapse

Class Method Details

.canonical_unit(unit) ⇒ Object



40
41
42
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 40

def self.canonical_unit(unit)
  unit.to_s.sub(/s\z/, "").to_sym
end

.clock_timeObject



11
12
13
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 11

def self.clock_time
  "#{HOUR}:#{format('%02d', MINUTE)} am"
end

.cron(cadence) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 28

def self.cron(cadence)
  every = cadence.every
  case canonical_unit(cadence.unit)
  when :minute then "*/#{every} * * * *"
  when :hour then hour_cron(every)
  when :day then day_cron(every)
  when :week then "#{MINUTE} #{HOUR} * * #{WEEKDAY}"
  else
    raise ArgumentError, "unsupported cadence unit: #{cadence.unit}"
  end
end

.day_cron(every) ⇒ Object



56
57
58
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 56

def self.day_cron(every)
  every == 1 ? "#{MINUTE} #{HOUR} * * *" : "#{MINUTE} #{HOUR} */#{every} * *"
end

.day_fugit(every) ⇒ Object



48
49
50
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 48

def self.day_fugit(every)
  every == 1 ? "every day at #{clock_time}" : "every #{every} days at #{clock_time}"
end

.fugit(cadence) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 15

def self.fugit(cadence)
  every = cadence.every
  case canonical_unit(cadence.unit)
  when :second then every == 1 ? "every second" : "every #{every} seconds"
  when :minute then every == 1 ? "every minute" : "every #{every} minutes"
  when :hour then hour_fugit(every)
  when :day then day_fugit(every)
  when :week then "every #{WEEKDAY_NAME} at #{clock_time}"
  else
    raise ArgumentError, "unsupported cadence unit: #{cadence.unit}"
  end
end

.hour_cron(every) ⇒ Object



52
53
54
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 52

def self.hour_cron(every)
  every == 1 ? "#{MINUTE} * * * *" : "#{MINUTE} */#{every} * * *"
end

.hour_fugit(every) ⇒ Object



44
45
46
# File 'app/scheduling/jumbotron/scheduling/clock.rb', line 44

def self.hour_fugit(every)
  every == 1 ? "every hour at minute #{MINUTE}" : "every #{every} hours at minute #{MINUTE}"
end