Class: ReminderTask
- Inherits:
-
Object
- Object
- ReminderTask
- Defined in:
- lib/reminder/task.rb
Instance Attribute Summary collapse
-
#index ⇒ Object
Returns the value of attribute index.
-
#job ⇒ Object
Returns the value of attribute job.
-
#repeat_count ⇒ Object
Returns the value of attribute repeat_count.
-
#repeat_job ⇒ Object
Returns the value of attribute repeat_job.
Class Method Summary collapse
Instance Method Summary collapse
- #die ⇒ Object
- #dump ⇒ Object
-
#initialize(index, attrs) ⇒ ReminderTask
constructor
A new instance of ReminderTask.
- #kill ⇒ Object
- #message ⇒ Object
- #repeat ⇒ Object
- #run ⇒ Object
- #start_job(handler) ⇒ Object
- #stop_repeat ⇒ Object
- #target ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(index, attrs) ⇒ ReminderTask
Returns a new instance of ReminderTask.
5 6 7 8 9 10 11 |
# File 'lib/reminder/task.rb', line 5 def initialize(index, attrs) @index = index attrs.each_pair do |attr, val| send("#{attr.to_s}=".to_sym, val) unless val.nil? end end |
Instance Attribute Details
#index ⇒ Object
Returns the value of attribute index.
4 5 6 |
# File 'lib/reminder/task.rb', line 4 def index @index end |
#job ⇒ Object
Returns the value of attribute job.
4 5 6 |
# File 'lib/reminder/task.rb', line 4 def job @job end |
#repeat_count ⇒ Object
Returns the value of attribute repeat_count.
4 5 6 |
# File 'lib/reminder/task.rb', line 4 def repeat_count @repeat_count end |
#repeat_job ⇒ Object
Returns the value of attribute repeat_job.
4 5 6 |
# File 'lib/reminder/task.rb', line 4 def repeat_job @repeat_job end |
Class Method Details
.attrs ⇒ Object
145 146 147 |
# File 'lib/reminder/task.rb', line 145 def attrs [:c_at, :user_id, :user_name, :room, :type, :time, :first, :task, :repeat, :repeat_interval] end |
.from_message(index, message, source) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/reminder/task.rb', line 119 def (index, , source) attrs = {} if ['who'] == 'me' attrs['user_id'] = source.user.id attrs['user_name'] = source.user.name elsif ['who'] == 'here' attrs['room'] = source.room else re = /^(user\s+id\s+(?<user_id>.*))?^(user\s+name\s+(?<user_id>.*))?(room \s+(?<room>.*))?$/ m = re.match(['who']) attrs = attrs.merge(m) end attrs['type'] = ['type'] attrs['time'] = ['time'] attrs['first'] = Chronic.parse(['first']) unless ['first'].nil? attrs['repeat'] = ['repeat'] attrs['repeat_interval'] = ['repeat_interval'] || '10m' attrs['task'] = ['task'] if attrs['type'] == 'in' attrs['type'] = 'at' attrs['time'] = (Time.now + Rufus.parse_time_string(attrs['time'])).to_s end attrs['c_at'] = Time.now.to_s ReminderTask.new index, attrs end |
.load(index, string) ⇒ Object
148 149 150 151 152 153 154 155 |
# File 'lib/reminder/task.rb', line 148 def load(index, string) if string.nil? || string == '' nil else attrs = MultiJson.load(string) ReminderTask.new index, attrs end end |
Instance Method Details
#die ⇒ Object
83 84 85 86 |
# File 'lib/reminder/task.rb', line 83 def die @job.unschedule unless @job.nil? @repeat_job.unschedule unless @repeat_job.nil? end |
#dump ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/reminder/task.rb', line 110 def dump hash = {} ReminderTask.attrs.each do |attr| hash[attr] = send(attr) unless send(attr).nil? end MultiJson.dump(hash) end |
#kill ⇒ Object
79 80 81 |
# File 'lib/reminder/task.rb', line 79 def kill @handler.kill(index) end |
#message ⇒ Object
88 89 90 |
# File 'lib/reminder/task.rb', line 88 def "Reminder #{index}: #{task}" end |
#repeat ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/reminder/task.rb', line 62 def repeat @handler.robot.(target, ) if repeat != 'many' if repeat_count > repeat stop_repeat end end end |
#run ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/reminder/task.rb', line 51 def run @handler.robot.(target, ) if repeat @repeat_job = @handler.scheduler.every repeat_interval do repeat() end elsif !@periodic kill end end |
#start_job(handler) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/reminder/task.rb', line 13 def start_job(handler) @handler = handler scheduler = @handler.scheduler @periodic = false @job = # "in" is converted to "at" upon creation if type == 'at' at = Chronic.parse(@time, now: Time.parse(@c_at)) if at < Time.now run() else scheduler.at at do run() end end elsif type == 'cron' @periodic = true scheduler.cron @time do run() end elsif type == 'every' @periodic = true scheduler.every @time, first_at: Time.parse(@first) do run() end end end |
#stop_repeat ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/reminder/task.rb', line 71 def stop_repeat @repeat_job.unschedule @repeat_job = nil unless @periodic kill end end |
#target ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/reminder/task.rb', line 42 def target if user_id.nil? && user_name.nil? user = nil else user = Lita::User.create(user_id, name: user_name) end Lita::Source.new(user, room) end |
#to_s ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/reminder/task.rb', line 92 def to_s ret = "reminder #{index}, next run: #{@job.nil? ? 'unknown yet' : @job.next_time.to_s} " if room.nil? || room == '' ret += "user:#{user_id} #{user_name}" else ret += "room:#{room}" end ret += " type:#{type} time:#{time}" if type == "every" ret += " first_at:#{first}" end ret += " task:#{task}" if !repeat.nil? && repeat != "" ret += " repeat:#{repeat} times every #{repeat_interval}" end ret end |