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