Class: ReminderRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/reminder/runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeReminderRunner

Returns a new instance of ReminderRunner.



3
4
5
6
# File 'lib/reminder/runner.rb', line 3

def initialize()
  @reminders = []
  @started = false
end

Instance Attribute Details

#redisObject

Returns the value of attribute redis.



2
3
4
# File 'lib/reminder/runner.rb', line 2

def redis
  @redis
end

#remindersObject

Returns the value of attribute reminders.



2
3
4
# File 'lib/reminder/runner.rb', line 2

def reminders
  @reminders
end

#robotObject

Returns the value of attribute robot.



2
3
4
# File 'lib/reminder/runner.rb', line 2

def robot
  @robot
end

#schedulerObject

Returns the value of attribute scheduler.



2
3
4
# File 'lib/reminder/runner.rb', line 2

def scheduler
  @scheduler
end

Instance Method Details

#add(response) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/reminder/runner.rb', line 28

def add(response)
  task = ReminderTask.from_message(@reminder_count, response.match_data, response.message.source)
  @redis.rpush("reminders", task.dump)
  @reminders << task
  task.start_job(self)
  response.reply("Task #{task.index} added, next run at #{task.job.next_time.strftime('%Y-%m-%d %H:%M:%S')}")
  @reminder_count += 1
end

#clearObject



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

def clear
  @redis.ltrim("reminders", 0, 0)
  @reminders.reject{|task| task.nil? }.map(&:die)
  @reminders = []
  @reminder_count = 0
end

#delete(response) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/reminder/runner.rb', line 41

def delete(response)
  index = response.match_data[1].to_i
  if @reminders[index].nil?
    response.reply("Task #{index} does not exist")
  elsif index != @reminders[index].index
    response.reply("Task #{index} is broken (bot internal error)")
  else
    kill(index)
    response.reply("Task #{index} deleted")
  end
end

#done(response) ⇒ Object



37
38
39
# File 'lib/reminder/runner.rb', line 37

def done(response)
  @reminders[response.match_data[1].to_i].stop_repeat
end

#kill(index) ⇒ Object



69
70
71
72
73
74
# File 'lib/reminder/runner.rb', line 69

def kill(index)
  @reminders[index].die
  @reminders[index] = nil
  @redis.lset("reminders", index, nil)
  index
end

#list(response) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/reminder/runner.rb', line 53

def list(response)
  reminders = @reminders.reject{|r| r.nil? }
  if reminders.empty?
    response.reply "no active reminders"
  else
    response.reply(reminders.map(&:to_s).join("\n"))
  end
end

#start(robot, redis) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/reminder/runner.rb', line 8

def start(robot, redis)
  @robot = robot
  @redis = redis
  return if @started
  @started = true
  @reminder_count = redis.llen("reminders")
  @scheduler = Rufus::Scheduler.start_new
  @redis.lrange('reminders', 0, -1).each_with_index do |task, index|
    if task.nil? || task == ''
      @reminders[index] = nil
    else
      @reminders << ReminderTask.load(index, task)
    end
  end
  @reminders.each do |task|
    task.start_job(self) unless task.nil?
  end

end