Sha256: a98380369f65eacf92cc4bdcdee195f3b70185345d412327d4446dbbb9a795c1

Contents?: true

Size: 1.61 KB

Versions: 15

Compression:

Stored size: 1.61 KB

Contents

module KnapsackPro
  class QueueAllocator
    def initialize(args)
      @test_files = args.fetch(:test_files)
      @ci_node_total = args.fetch(:ci_node_total)
      @ci_node_index = args.fetch(:ci_node_index)
      @ci_node_build_id = args.fetch(:ci_node_build_id)
      @repository_adapter = args.fetch(:repository_adapter)
    end

    def test_file_paths(can_initialize_queue)
      action = build_action(can_initialize_queue)
      connection = KnapsackPro::Client::Connection.new(action)
      response = connection.call
      if connection.success?
        raise ArgumentError.new(response) if connection.errors?
        prepare_test_files(response)
      else
        raise ArgumentError.new("Couldn't connect with Knapsack Pro API. Response: #{response}")
      end
    end

    private

    attr_reader :test_files,
      :ci_node_total,
      :ci_node_index,
      :ci_node_build_id,
      :repository_adapter

    def encrypted_test_files
      KnapsackPro::Crypto::Encryptor.call(test_files)
    end

    def build_action(can_initialize_queue)
      KnapsackPro::Client::API::V1::Queues.queue(
        can_initialize_queue: can_initialize_queue,
        commit_hash: repository_adapter.commit_hash,
        branch: repository_adapter.branch,
        node_total: ci_node_total,
        node_index: ci_node_index,
        node_build_id: ci_node_build_id,
        test_files: encrypted_test_files,
      )
    end

    def prepare_test_files(response)
      decrypted_test_files = KnapsackPro::Crypto::Decryptor.call(test_files, response['test_files'])
      KnapsackPro::TestFilePresenter.paths(decrypted_test_files)
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
knapsack_pro-0.31.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.30.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.29.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.28.1 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.28.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.27.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.26.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.25.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.24.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.23.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.22.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.21.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.20.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.19.0 lib/knapsack_pro/queue_allocator.rb
knapsack_pro-0.18.0 lib/knapsack_pro/queue_allocator.rb