Sha256: 6583b49d770c653945d3d852cdf28e9f63a0a248838f03f11d3ec8289df94bc5

Contents?: true

Size: 1.92 KB

Versions: 3

Compression:

Stored size: 1.92 KB

Contents

=begin

    This file is part of the Raktr project and may be subject to
    redistribution and commercial restrictions. Please see the Raktr
    web site for more information on licensing and terms of use.

=end

require 'mutex_m'

require_relative 'tasks/base'
require_relative 'tasks/persistent'
require_relative 'tasks/one_off'
require_relative 'tasks/periodic'
require_relative 'tasks/delayed'

class Raktr

# {Tasks::Base Task} list.
#
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
class Tasks
    include Mutex_m

    def initialize
        super

        @tasks = []
    end

    # @note Only {Base#hash unique} tasks will be included.
    # @note Will assign `self` as the task's {Base#owner owner}.
    #
    # @param    [Base]  task
    #   Task to add to the list.
    # @return   [Tasks] `self`
    def <<( task )
        synchronize do
            task.owner = self
            @tasks << task
        end

        self
    end

    # @param    [Base]  task
    #   Task to check.
    # @return   [Bool]
    def include?( task )
        @tasks.include? task
    end

    # @param    [Base]  task
    #   Task to remove from the list.
    # @return   [Base,nil]
    #   The task if it was included, `nil` otherwise.
    def delete( task )
        synchronize do
            task = @tasks.delete( task )
            task.owner = nil if task
            task
        end
    end

    # @return   [Integer]
    def size
        @tasks.size
    end

    # @return   [Bool]
    def empty?
        @tasks.empty?
    end

    # @return   [Bool]
    def any?
        !empty?
    end

    # Removes all tasks.
    #
    # @return   [Tasks] `self`
    def clear
        synchronize do
            @tasks.clear
        end

        self
    end

    # {Base#call Calls} all tasks.
    #
    # @return   [Tasks] `self`
    def call( *args )
        @tasks.dup.each { |t| t.call *args }
        self
    end

    def hash
        @tasks.hash
    end

end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
raktr-0.0.3 lib/raktr/tasks.rb
raktr-0.0.2 lib/raktr/tasks.rb
raktr-0.0.1 lib/raktr/tasks.rb