Class: ReminderRunner
- Inherits:
-
Object
- Object
- ReminderRunner
- Defined in:
- lib/reminder/runner.rb
Instance Attribute Summary collapse
-
#redis ⇒ Object
Returns the value of attribute redis.
-
#reminders ⇒ Object
Returns the value of attribute reminders.
-
#robot ⇒ Object
Returns the value of attribute robot.
-
#scheduler ⇒ Object
Returns the value of attribute scheduler.
Instance Method Summary collapse
- #add(response) ⇒ Object
- #clear ⇒ Object
- #delete(response) ⇒ Object
- #done(response) ⇒ Object
-
#initialize ⇒ ReminderRunner
constructor
A new instance of ReminderRunner.
- #kill(index) ⇒ Object
- #list(response) ⇒ Object
- #start(robot, redis) ⇒ Object
Constructor Details
#initialize ⇒ ReminderRunner
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
#redis ⇒ Object
Returns the value of attribute redis.
2 3 4 |
# File 'lib/reminder/runner.rb', line 2 def redis @redis end |
#reminders ⇒ Object
Returns the value of attribute reminders.
2 3 4 |
# File 'lib/reminder/runner.rb', line 2 def reminders @reminders end |
#robot ⇒ Object
Returns the value of attribute robot.
2 3 4 |
# File 'lib/reminder/runner.rb', line 2 def robot @robot end |
#scheduler ⇒ Object
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.(@reminder_count, response.match_data, response..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 |
#clear ⇒ Object
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 |