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
151 152 153 |
# File 'lib/reminder/task.rb', line 151 def attrs [:c_at, :user_id, :user_name, :room, :type, :time, :first, :task, :repeat, :repeat_interval] end |
.from_message(index, message, source) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/reminder/task.rb', line 121 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']) if m.nil? attrs['user_name'] = ['who'] else attrs = attrs.merge(m) end 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
154 155 156 157 158 159 160 161 |
# File 'lib/reminder/task.rb', line 154 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
85 86 87 88 |
# File 'lib/reminder/task.rb', line 85 def die @job.unschedule unless @job.nil? @repeat_job.unschedule unless @repeat_job.nil? end |
#dump ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/reminder/task.rb', line 112 def dump hash = {} ReminderTask.attrs.each do |attr| hash[attr] = send(attr) unless send(attr).nil? end MultiJson.dump(hash) end |
#kill ⇒ Object
81 82 83 |
# File 'lib/reminder/task.rb', line 81 def kill @handler.kill(index) end |
#message ⇒ Object
90 91 92 |
# File 'lib/reminder/task.rb', line 90 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 78 79 |
# File 'lib/reminder/task.rb', line 71 def stop_repeat unless @repeat_job.nil? @repeat_job.unschedule @repeat_job = nil end 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: user, room: room) end |
#to_s ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/reminder/task.rb', line 94 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 |