class CircleCIReporter::Reporters::Base

@abstract Subclass and override {.default_dir}, {.default_html_file_name},

{.default_json_file_name} and {#parse_json} to implement a custom Reporter class.

Public Class Methods

default_dir() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 10
def self.default_dir
  raise NotImplementedError
end
default_html_file_name() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 14
def self.default_html_file_name
  raise NotImplementedError
end
default_json_file_name() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 18
def self.default_json_file_name
  raise NotImplementedError
end
new(options = {}) click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 22
def initialize(options = {})
  @options = options
end

Public Instance Methods

active?() click to toggle source

@return [Boolean]

# File lib/circleci_reporter/reporters/base.rb, line 27
def active?
  File.directory?(File.join(configuration.artifacts_dir, dir))
end
name() click to toggle source

Name of reporter.

@return [String]

# File lib/circleci_reporter/reporters/base.rb, line 46
def name
  self.class.name.split('::').last
end
report(base_build, previous_build) click to toggle source

@param base_build [Build, nil] @param previous_build [Build, nil] @return [Report]

# File lib/circleci_reporter/reporters/base.rb, line 34
def report(base_build, previous_build)
  Report.new(
    self,
    create_current_result,
    base: base_build ? create_build_result(base_build) : nil,
    previous: previous_build ? create_build_result(previous_build) : nil
  )
end

Private Instance Methods

build_coverage(build) click to toggle source

@param build [Build] @return [Float]

# File lib/circleci_reporter/reporters/base.rb, line 96
def build_coverage(build)
  artifact = build.find_artifact(json_file_name, node_index: 0) or return Float::NAN
  parse_json(artifact.body)
end
build_url(build) click to toggle source

@param build [Build] @return [String]

# File lib/circleci_reporter/reporters/base.rb, line 103
def build_url(build)
  artifact = build.find_artifact(html_file_name, node_index: 0) or return '#'
  artifact.url
end
configuration() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 108
def configuration
  CircleCIReporter.configuration
end
create_build_result(build) click to toggle source

@param build [Build, nil] @return [Result, nil]

# File lib/circleci_reporter/reporters/base.rb, line 67
def create_build_result(build)
  Result.new(build_coverage(build), build_url(build))
end
create_current_result() click to toggle source

@return [AbstractResult]

# File lib/circleci_reporter/reporters/base.rb, line 72
def create_current_result
  Result.new(current_coverage, current_url)
end
current_coverage() click to toggle source

@return [Float]

# File lib/circleci_reporter/reporters/base.rb, line 77
def current_coverage
  parse_json(File.read(File.join(configuration.artifacts_dir, dir, json_file_name)))
end
current_url() click to toggle source

@return [String]

# File lib/circleci_reporter/reporters/base.rb, line 82
def current_url
  [
    'https://circle-artifacts.com/gh',
    configuration.project,
    configuration.current_build_number,
    'artifacts',
    "0/#{configuration.artifacts_dir}",
    dir,
    html_file_name
  ].join('/')
end
dir() click to toggle source

@return [String]

# File lib/circleci_reporter/reporters/base.rb, line 53
def dir
  @options[:dir] || self.class.default_dir
end
html_file_name() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 57
def html_file_name
  @options[:html_file_name] || self.class.default_html_file_name
end
json_file_name() click to toggle source
# File lib/circleci_reporter/reporters/base.rb, line 61
def json_file_name
  @options[:json_file_name] || self.class.default_json_file_name
end
parse_json(json) click to toggle source

@param json [String] @return [Float]

# File lib/circleci_reporter/reporters/base.rb, line 114
def parse_json(json)
  raise NotImplementedError
end