Sha256: 2129016af94c9d062956e3b7f1bc579ddb342bb895f67b7e88cb59b2e2aee1de

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require 'keylime'
require 'travis'

module ProspectusTravis
  GOOD_STATUSES = %w[created received started passed].freeze

  FAKE_BUILD = Struct.new(:state)

  ##
  # Helper for automatically adding build status check
  class Build < Module
    def initialize(repo_slug)
      @repo_slug = repo_slug || raise('No repo specified')
    end

    def extended(other) # rubocop:disable Metrics/MethodLength
      actual_val, expected_val = parse_status

      other.deps do
        item do
          name 'circleci'

          expected do
            static
            set expected_val
          end

          actual do
            static
            set actual_val
          end
        end
      end
    end

    private

    def client
      @client ||= Travis::Client.new(uri: uri, access_token: token)
    end

    def parse_status
      return [status, status] if GOOD_STATUSES.include?(status)
      [status, 'passed']
    end

    def status
      @status ||= last_build.state
    end

    def last_build
      @last_build ||= repo.last_build || FAKE_BUILD.new('no_results')
    end

    def repo
      @repo ||= client.repo(@repo_slug)
    end

    def uri
      @uri ||= Travis::Client::COM_URI
    end

    def token
      return @token if @token
      credential = Keylime.new(server: uri)
      msg = 'TravisCI Token (run `travis token --com` to generate)'
      @token = credential.get!(msg).password
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
prospectus_travis-0.0.2 lib/prospectus_travis.rb