Sha256: 3b576a2f65f5fbe7229abf01b573daf33540ec39fa6d735522bc2ce82b13868e

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

module Knapsack
  class Allocator
    def initialize(args={})
      @config = default_args.merge(args)
      @report_distributor = Knapsack::Distributors::ReportDistributor.new(@config)
      @leftover_distributor = Knapsack::Distributors::LeftoverDistributor.new(@config)
    end

    def report_node_specs
      @report_node_specs ||= @report_distributor.specs_for_current_node
    end

    def leftover_node_specs
      @leftover_node_specs ||= @leftover_distributor.specs_for_current_node
    end

    def node_specs
      @node_specs ||= report_node_specs + leftover_node_specs
    end

    def stringify_node_specs
      node_specs.join(' ')
    end

    def custom_spec_dir
      return unless @config[:spec_pattern]
      @config[:spec_pattern].gsub(/^(.*?)\//).first
    end

    private

    def default_args
      {
        ci_node_total: env_ci_node_total,
        ci_node_index: env_ci_node_index,
        spec_pattern: env_spec_pattern,
        report: report
      }
    end

    def env_ci_node_total
      ENV['CI_NODE_TOTAL'] || ENV['CIRCLE_NODE_TOTAL']
    end

    def env_ci_node_index
      ENV['CI_NODE_INDEX'] || ENV['CIRCLE_NODE_INDEX']
    end

    def env_spec_pattern
      ENV['KNAPSACK_SPEC_PATTERN']
    end

    def env_report_path
      ENV['KNAPSACK_REPORT_PATH']
    end

    def report
      return unless env_report_path
      Knapsack.report.config({
        report_path: env_report_path
      })
      Knapsack.report.open
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
knapsack-0.1.1 lib/knapsack/allocator.rb
knapsack-0.1.0 lib/knapsack/allocator.rb