class Ellen::Handlers::Cron

Constants

NAMESPACE

Attributes

jobs[W]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/ellen/handlers/cron.rb, line 14
def initialize(*args)
  super
  remember
end

Public Instance Methods

add(message) click to toggle source
# File lib/ellen/handlers/cron.rb, line 19
def add(message)
  job = create(message)
  message.reply("Job #{job.id} created")
end
delete(message) click to toggle source
# File lib/ellen/handlers/cron.rb, line 24
def delete(message)
  id = message[:id].to_i
  if jobs.has_key?(id)
    jobs.delete(id)
    running_jobs[id].stop
    running_jobs.delete(id)
    message.reply("Job #{id} deleted")
  else
    message.reply("Job #{id} does not exist")
  end
end
list(message) click to toggle source
# File lib/ellen/handlers/cron.rb, line 36
def list(message)
  message.reply(summary, code: true)
end

Private Instance Methods

create(message) click to toggle source
# File lib/ellen/handlers/cron.rb, line 54
def create(message)
  job = Ellen::Cron::Job.new(
    message.original.except(:robot).merge(
      body: message[:body],
      id: generate_id,
      schedule: message[:schedule],
    ),
  )
  jobs[job.id] = job.to_hash
  job.start(robot)
  running_jobs[job.id] = job
  job
end
empty_message() click to toggle source
# File lib/ellen/handlers/cron.rb, line 76
def empty_message
  "Job not found"
end
generate_id() click to toggle source
# File lib/ellen/handlers/cron.rb, line 86
def generate_id
  loop do
    id = rand(10000)
    break id unless jobs.has_key?(id)
  end
end
job_descriptions() click to toggle source
# File lib/ellen/handlers/cron.rb, line 80
def job_descriptions
  jobs.values.map do |attributes|
    Ellen::Cron::Job.new(attributes).description
  end.join("\n")
end
jobs() click to toggle source
# File lib/ellen/handlers/cron.rb, line 50
def jobs
  robot.brain.data[NAMESPACE] ||= {}
end
remember() click to toggle source
# File lib/ellen/handlers/cron.rb, line 42
def remember
  jobs.each do |id, attributes|
    job = Ellen::Cron::Job.new(attributes)
    running_jobs[id] = job
    job.start(robot)
  end
end
running_jobs() click to toggle source
# File lib/ellen/handlers/cron.rb, line 93
def running_jobs
  @running_jobs ||= {}
end
summary() click to toggle source
# File lib/ellen/handlers/cron.rb, line 68
def summary
  if jobs.empty?
    empty_message
  else
    job_descriptions
  end
end