Sha256: 3f7f6672c1305115f546afe1e70eefb9a7828a601532fb03224850ef599147d4

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

require_relative '../result'

module CircleCI
  module CoverageReporter
    module Reporters
      class Link
        # @attr name [String]
        # @attr url [String]
        # @attr base_url [String, nil]
        # @attr previous_url [String, nil]
        LinkReport = Struct.new(:name, :url, :base_url, :previous_url) do
          # @return [String]
          def to_s
            links = []
            links << "[master](#{base_url})" if base_url
            links << "[previous](#{previous_url})" if previous_url
            link = links.empty? ? nil : " (#{links.join(', ')})"
            "[#{name}](#{url})#{link}"
          end
        end

        # @param path [String]
        # @param name [String]
        def initialize(path:, name:)
          @path = path
          @name = name
        end

        # @note Implementation for {Base#active?}
        def active?
          File.file?(File.join(configuration.artifacts_dir, path))
        end

        # @note Override {Base#name}
        attr_reader :name

        # @param base_build [Build, nil]
        # @param previous_build [Build, nil]
        # @return [LinkReport]
        def report(base_build, previous_build)
          LinkReport.new(name, url, extract_artifact_url(base_build), extract_artifact_url(previous_build))
        end

        private

        attr_reader :path

        # @return [String]
        def url
          [
            'https://circle-artifacts.com/gh',
            configuration.project,
            configuration.current_build_number,
            'artifacts',
            "0#{configuration.artifacts_dir}",
            path
          ].join('/')
        end

        def configuration
          CoverageReporter.configuration
        end

        # @param build [Build, nil]
        # @return [String, nil]
        def extract_artifact_url(build)
          return unless build
          artifact = build.find_artifact(path)
          artifact ? artifact.url : nil
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
circleci-coverage_reporter-0.8.0 lib/circleci/coverage_reporter/reporters/link.rb
circleci-coverage_reporter-0.7.0 lib/circleci/coverage_reporter/reporters/link.rb