class Recurrent::TaskCollection
Public Class Methods
new()
click to toggle source
# File lib/recurrent/task_collection.rb, line 4 def initialize @mutex = Mutex.new @tasks = [] end
sort_by_frequency(task_list)
click to toggle source
# File lib/recurrent/task_collection.rb, line 57 def self.sort_by_frequency(task_list) task_list.sort_by do |task| task.schedule.rrules.sort_by do |rule| rule.frequency_in_seconds end.first.frequency_in_seconds end end
Public Instance Methods
add_or_update(new_task)
click to toggle source
# File lib/recurrent/task_collection.rb, line 9 def add_or_update(new_task) @mutex.synchronize do old_task_index = @tasks.index {|task| task.name == new_task.name } if old_task_index @tasks[old_task_index].schedule = new_task.schedule @tasks[old_task_index].action = new_task.action else @tasks << new_task end end end
method_missing(id, *args, &block)
click to toggle source
# File lib/recurrent/task_collection.rb, line 66 def method_missing(id, *args, &block) @mutex.synchronize do @tasks.send(id, *args, &block) end end
next_execution_time()
click to toggle source
# File lib/recurrent/task_collection.rb, line 28 def next_execution_time @mutex.synchronize do @tasks.map { |task| task.next_occurrence }.sort.first end end
next_for_execution_at_time(time)
click to toggle source
# File lib/recurrent/task_collection.rb, line 21 def next_for_execution_at_time(time) @mutex.synchronize do tasks_running_at_time = @tasks.select {|task| task.running? && task.thread['execution_time'] == time } TaskCollection.sort_by_frequency(tasks_running_at_time).first end end
remove(name)
click to toggle source
# File lib/recurrent/task_collection.rb, line 34 def remove(name) @mutex.synchronize do @tasks.reject! {|task| task.name == name } end end
running()
click to toggle source
# File lib/recurrent/task_collection.rb, line 40 def running @mutex.synchronize do @tasks.select {|task| task.running? } end end
scheduled_to_execute_at(time, opts={})
click to toggle source
# File lib/recurrent/task_collection.rb, line 46 def scheduled_to_execute_at(time, opts={}) @mutex.synchronize do current_tasks = @tasks.select {|task| task.next_occurrence == time } if opts[:sort_by_frequency] TaskCollection.sort_by_frequency(current_tasks) else current_tasks end end end