Sha256: 95068224e8f08994d035fcd0509a201e8f869468482f309090314b4a15ec8716

Contents?: true

Size: 1.86 KB

Versions: 29

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module Bolt
  class ResultSet
    attr_reader :results

    include Enumerable

    # We only want want to include these when puppet is loaded
    def self.include_iterable
      include(Puppet::Pops::Types::Iterable)
      include(Puppet::Pops::Types::IteratorProducer)
    end

    def iterator
      if Object.const_defined?(:Puppet) && Puppet.const_defined?(:Pops) &&
         self.class.included_modules.include?(Puppet::Pops::Types::Iterable)
        Puppet::Pops::Types::Iterable.on(@results, Bolt::Result)
      else
        raise NotImplementedError, "iterator requires puppet code to be loaded."
      end
    end

    def initialize(results)
      @results = results
    end

    def each
      @results.each { |r| yield r }
      self
    end

    def result_hash
      @result_hash ||= @results.each_with_object({}) do |result, acc|
        acc[result.target.name] = result
      end
    end

    def count
      @results.size
    end
    alias length count
    alias size count

    def empty
      @results.empty?
    end
    alias empty? empty

    def targets
      results.map(&:target)
    end

    def names
      @results.map { |r| r.target.name }
    end

    def ok
      @results.all?(&:ok?)
    end
    alias ok? ok

    def error_set
      filtered = @results.reject(&:ok?)
      ResultSet.new(filtered)
    end

    def ok_set
      filtered = @results.select(&:success?)
      self.class.new(filtered)
    end

    def find(target_name)
      result_hash[target_name]
    end

    def first
      @results.first
    end

    def eql?(other)
      self.class == other.class && @results == other.results
    end

    def to_a
      @results.map(&:status_hash)
    end

    def to_json(opts = nil)
      @results.map(&:status_hash).to_json(opts)
    end

    def to_s
      to_json
    end

    def ==(other)
      eql?(other)
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
bolt-1.19.0 lib/bolt/result_set.rb
bolt-1.18.0 lib/bolt/result_set.rb
bolt-1.17.0 lib/bolt/result_set.rb
bolt-1.16.0 lib/bolt/result_set.rb
bolt-1.15.0 lib/bolt/result_set.rb
bolt-1.14.0 lib/bolt/result_set.rb
bolt-1.13.1 lib/bolt/result_set.rb
bolt-1.13.0 lib/bolt/result_set.rb
bolt-1.12.0 lib/bolt/result_set.rb
bolt-1.11.0 lib/bolt/result_set.rb
bolt-1.10.0 lib/bolt/result_set.rb
bolt-1.9.0 lib/bolt/result_set.rb
bolt-1.8.1 lib/bolt/result_set.rb
bolt-1.8.0 lib/bolt/result_set.rb
bolt-1.7.0 lib/bolt/result_set.rb
bolt-1.6.0 lib/bolt/result_set.rb
bolt-1.5.0 lib/bolt/result_set.rb
bolt-1.4.0 lib/bolt/result_set.rb
bolt-1.3.0 lib/bolt/result_set.rb
bolt-1.2.0 lib/bolt/result_set.rb