Module: Kettle::Soup::Cover

Defined in:
lib/kettle/soup/cover.rb,
lib/kettle/soup/cover/version.rb,
lib/kettle/soup/cover/filters/gt_line_filter.rb,
lib/kettle/soup/cover/filters/lt_line_filter.rb

Defined Under Namespace

Modules: Filters, Version Classes: Error

Constant Summary collapse

CONSTANTS =
%w[
  CI
  COMMAND_NAME
  COVERAGE_DIR
  DEBUG
  DO_COV
  ENV_GET
  FALSE
  FILTER_DIRS
  FORMATTER_PLUGINS
  FORMATTERS
  IS_CI
  MERGE_TIMEOUT
  MIN_COVERAGE_BRANCH
  MIN_COVERAGE_LINE
  MIN_COVERAGE_HARD
  MULTI_FORMATTERS_DEFAULT
  MULTI_FORMATTERS
  PREFIX
  TRUE
  USE_MERGING
  VERBOSE
]
FALSE =
"false"
TRUE =
"true"
PREFIX =
ENV.fetch("K_SOUP_COV_PREFIX", "K_SOUP_COV_")
ENV_GET =
->(suffix, default) { ENV.fetch("#{PREFIX}#{suffix}", default) }
FORMATTER_PLUGINS =
{
  # HTML for Humans
  html: {
    type: :html,
    klass: "HTMLFormatter",
    lib: "simplecov-html",
  },
  # XML for Jenkins
  xml: {
    type: :xml,
    klass: "CoberturaFormatter",
    lib: "simplecov-cobertura",
  },
  # RCOV for Hudson
  rcov: {
    type: :rcov,
    klass: "RcovFormatter",
    lib: "simplecov-rcov",
  },
  # LCOV for GCOV
  lcov: {
    type: :lcov,
    klass: "LcovFormatter",
    lib: "simplecov-lcov",
  },
  # JSON for CodeClimate
  json: {
    type: :json,
    klass: "JSONFormatter",
    lib: "simplecov_json_formatter",
  },
  # TTY / Console output
  tty: {
    type: :tty,
    klass: "Console",
    lib: "simplecov-console",
  },
}
CI =
ENV.fetch("CI", FALSE)
IS_CI =
CI.casecmp?(TRUE)
COMMAND_NAME =
ENV_GET.call("COMMAND_NAME", "RSpec (COVERAGE)")
COVERAGE_DIR =
ENV_GET.call("DIR", "coverage")
DEBUG =
ENV_GET.call("DEBUG", FALSE).casecmp?(TRUE)
DO_COV =
ENV_GET.call("DO", CI).casecmp?(TRUE)
FILTER_DIRS =
ENV_GET.call(
"FILTER_DIRS",
"bin,certs,checksums,config,coverage,docs,features,gemfiles,pkg,results,sig,spec,src,test,test-results,vendor",
      )
.split(",")
.map { |dir_name| %r{^/#{Regexp.escape(dir_name)}/} }
FORMATTERS =
ENV_GET.call(
"FORMATTERS",
IS_CI ? "html,xml,rcov,lcov,json,tty" : "html,tty",
      )
.split(",")
.map { |fmt_name| FORMATTER_PLUGINS[fmt_name.strip.to_sym] }
MIN_COVERAGE_HARD =
ENV_GET.call("MIN_HARD", CI).casecmp?(TRUE)
MIN_COVERAGE_BRANCH =
ENV_GET.call("MIN_BRANCH", "80").to_i
MIN_COVERAGE_LINE =
ENV_GET.call("MIN_LINE", "80").to_i
MULTI_FORMATTERS_DEFAULT =
if IS_CI
  CI
else
  FORMATTERS.any? ? TRUE : FALSE
end
MULTI_FORMATTERS =
ENV_GET.call("MULTI_FORMATTERS", MULTI_FORMATTERS_DEFAULT).casecmp?(TRUE)
USE_MERGING =
ENV_GET.call("USE_MERGING", nil)&.casecmp?(TRUE)
MERGE_TIMEOUT =
ENV_GET.call("MERGE_TIMEOUT", nil)&.to_i
VERBOSE =
ENV_GET.call("VERBOSE", FALSE).casecmp?(TRUE)

Class Method Summary collapse

Class Method Details

.delete_const(&_) ⇒ Object

Const manipulation is to help with testing this gem



158
159
160
161
162
163
164
165
166
# File 'lib/kettle/soup/cover.rb', line 158

def delete_const(&_)
  CONSTANTS.each do |var|
    remove_const(var)
  end
  remove_const(:CONSTANTS)
  yield if block_given?

  nil
end

.install_tasksObject



144
145
146
# File 'lib/kettle/soup/cover.rb', line 144

def install_tasks
  load("kettle/soup/cover/tasks.rb")
end

.load_filtersObject



139
140
141
142
# File 'lib/kettle/soup/cover.rb', line 139

def load_filters
  require "kettle/soup/cover/filters/gt_line_filter"
  require "kettle/soup/cover/filters/lt_line_filter"
end

.load_formattersObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/kettle/soup/cover.rb', line 121

def load_formatters
  SimpleCov.formatters = FORMATTERS
    .each_with_object([]) do |fmt_data, formatters|
    require fmt_data[:lib].to_s

    klass = SimpleCov::Formatter.const_get(fmt_data[:klass])

    if fmt_data[:type] == :lcov
      klass.config do |c|
        c.report_with_single_file = true
        c.single_report_path = "#{Kettle::Soup::Cover::COVERAGE_DIR}/lcov.info"
      end
    end

    formatters << klass
  end
end

.reset_const(&_) ⇒ Object

Const manipulation is to help with testing this gem



149
150
151
152
153
154
155
# File 'lib/kettle/soup/cover.rb', line 149

def reset_const(&_)
  delete_const do
    yield if block_given?
    # Loading myself... Woah.
    load("kettle/soup/cover.rb")
  end
end