Sha256: 835513f188688d758add7d6636e49e6271461fd6adce000e7c1dd47849ab9795

Contents?: true

Size: 899 Bytes

Versions: 5

Compression:

Stored size: 899 Bytes

Contents

require 'task'
module Orchestration
  # Represents tasks queue for orchestration
  class Queue

    attr_reader :items
    STATUS = %w[ pending running failed completed rollbacked conflict canceled]

    def initialize
      @items = []
    end

    def create options
      options[:status] ||= default_status
      items << Task.new(options)
    end

    def delete item
      @items.delete item
    end

    def find_by_name name
      items.each {|task| return task if task.name == name}
    end

    def all
      items.sort
    end

    def count
      items.count
    end

    def empty?
      items.empty?
    end

    def clear
      @items = [] && true
    end

    def to_json
      all.to_json
    end

    STATUS.each do |s|
      define_method s do
        all.delete_if {|t| t.status != s}.sort
      end
    end

    private

    def default_status
      "pending"
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
foreman_discovery-1.0.0 test/foreman_app/lib/orchestration/queue.rb
foreman_discovery-1.0.0.rc4 test/foreman_app/lib/orchestration/queue.rb
foreman_discovery-1.0.0.rc3 test/foreman_app/lib/orchestration/queue.rb
foreman_discovery-1.0.0.rc2 test/foreman_app/lib/orchestration/queue.rb
foreman_discovery-1.0.0.rc1 test/foreman_app/lib/orchestration/queue.rb