class Ruboty::Handlers::Cron

Constants

NAMESPACE

Attributes

jobs[W]

Public Class Methods

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

Public Instance Methods

add(message) click to toggle source
# File lib/ruboty/handlers/cron.rb, line 23
def add(message)
  job = create(message)
  message.reply("Job #{job.id} created")
end
delete(message) click to toggle source
# File lib/ruboty/handlers/cron.rb, line 28
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/ruboty/handlers/cron.rb, line 40
def list(message)
  message.reply(summary, code: true)
end
resume(message) click to toggle source
# File lib/ruboty/handlers/cron.rb, line 60
def resume(message)
  id = message[:id].to_i
  if jobs.has_key?(id)
    job = Ruboty::Cron::Job.new(jobs[id])
    if job.suspended?
      job.resume(robot)
      jobs[id] = job.to_hash
      running_jobs[id] = job
      message.reply("Job #{id} resumed")
    else
      message.reply("Job #{id} is running")
    end
  else
    message.reply("Job #{id} does not exist")
  end
end
suspend(message) click to toggle source
# File lib/ruboty/handlers/cron.rb, line 44
def suspend(message)
  id = message[:id].to_i
  if jobs.has_key?(id)
    if running_jobs[id]
      running_jobs[id].suspend
      jobs[id] = running_jobs[id].to_hash
      running_jobs.delete(id)
      message.reply("Job #{id} suspended")
    else
      message.reply("Job #{id} had suspended")
    end
  else
    message.reply("Job #{id} does not exist")
  end
end

Private Instance Methods

create(message) click to toggle source
# File lib/ruboty/handlers/cron.rb, line 93
def create(message)
  job = Ruboty::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/ruboty/handlers/cron.rb, line 115
def empty_message
  "Job not found"
end
generate_id() click to toggle source
# File lib/ruboty/handlers/cron.rb, line 125
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/ruboty/handlers/cron.rb, line 119
def job_descriptions
  jobs.values.map do |attributes|
    Ruboty::Cron::Job.new(attributes).description
  end.join("\n")
end
jobs() click to toggle source
# File lib/ruboty/handlers/cron.rb, line 89
def jobs
  robot.brain.data[NAMESPACE] ||= {}
end
remember() click to toggle source
# File lib/ruboty/handlers/cron.rb, line 79
def remember
  jobs.each do |id, attributes|
    job = Ruboty::Cron::Job.new(attributes)
    unless job.suspended?
      running_jobs[id] = job
      job.start(robot)
    end
  end
end
running_jobs() click to toggle source
# File lib/ruboty/handlers/cron.rb, line 132
def running_jobs
  @running_jobs ||= {}
end
summary() click to toggle source
# File lib/ruboty/handlers/cron.rb, line 107
def summary
  if jobs.empty?
    empty_message
  else
    job_descriptions
  end
end