undercover 0.3.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0410ce10f2df935e82424b6835de041e8b76f6e8d39159304f89b3c0328b2351
4
- data.tar.gz: 1adb668cbb1f1d4fa97e32f6115dc370d180a16d11798d286d8785d716c7ab69
3
+ metadata.gz: fb2b1b1bd08b3e0cee5d4078f630f044e0c6b0439e10f3ee0fff6fda6690f66d
4
+ data.tar.gz: c0944771464ed6b6569ea637d868a495b73790dce296ed09e940e8036ea1f1e4
5
5
  SHA512:
6
- metadata.gz: ad15fa91d622e7f8e5a1c8737adbc994b893de4a43711ae39684fd1bb0cd9b00b9a9a8f2dac283e5b02174edbe74e2a959cfb65f3485052bbf9e6191ec3b7b97
7
- data.tar.gz: c6afa3315bf8c4859f3a13dd40ebad9bf522ba92e17c694a9204c8bbde6f9b9b3d4de254a35bc2d35a2fade6eb914aedecb2d45e5a396c6800a6005103f2ccff
6
+ metadata.gz: 8184500fa7887d8a7163f43e748970726b750fc9eab05a952fe842895504629458025a038e5d7a30e0179a18e32e88d54909633c0e9eb055dbb58272cf9f5d4d
7
+ data.tar.gz: 176828f523ca2d4479a3b04807007d147c36b234e65ee6815bc2a20ab19dce04af27a44cbecfc31c60d738ea553b1560144fe315c26a4da247a73dcf41ad1efb
@@ -0,0 +1,21 @@
1
+ name: Ruby
2
+ on: [push]
3
+ jobs:
4
+ build:
5
+ runs-on: ubuntu-latest
6
+ strategy:
7
+ matrix:
8
+ ruby: ['3.0.x', '2.7.x', '2.6.x', '2.5.x']
9
+ steps:
10
+ - uses: actions/checkout@v1
11
+ - name: Set up Ruby ${{ matrix.ruby }}
12
+ uses: actions/setup-ruby@v1
13
+ with:
14
+ ruby-version: ${{ matrix.ruby }}
15
+ - name: Build and test with Rake
16
+ run: |
17
+ gem install bundler undercover --no-doc
18
+ bundle install --jobs 4 --retry 3
19
+ bundle exec rake
20
+ git fetch origin master:master
21
+ undercover --compare master
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4.4
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.5.0
3
4
  Exclude:
4
5
  - spec/fixtures/**/*
5
6
 
@@ -21,3 +22,12 @@ Metrics/BlockLength:
21
22
  Enabled: true
22
23
  Exclude:
23
24
  - spec/**/*
25
+
26
+ Style/HashEachMethods:
27
+ Enabled: true
28
+
29
+ Style/HashTransformKeys:
30
+ Enabled: true
31
+
32
+ Style/HashTransformValues:
33
+ Enabled: true
data/CHANGELOG.md CHANGED
@@ -6,6 +6,32 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ # [0.4.2] - 2021-03-16
10
+ ### Fixed
11
+ - Branch coverage without line coverage marked as uncovered - fix by @GCorbel
12
+
13
+ # [0.4.1] - 2021-03-11
14
+ ### Fixed
15
+ - Fix zero-division edge case resulting in NaN from Result#coverage_f
16
+
17
+ # [0.4.0] - 2021-02-06
18
+ ### Added
19
+ - [Minimal implementation of branch coverage in LCOV parser](https://github.com/grodowski/undercover/pull/112) by [@magneland](https://github.com/magneland)
20
+ - Branch coverage output support in Undercover::Formatter
21
+ ### Changed
22
+ - Min Ruby requirement bumped to 2.5.0
23
+ - Dependency updates: Rubocop 1.0 and Rugged 1.1.0
24
+
25
+
26
+ ## [0.3.4] - 2020-04-05
27
+ ### Changed
28
+ - Updated parsing performance by scoping `all_results` to git diff
29
+ - Dependecy updates
30
+
31
+ ## [0.3.3] - 2019-12-29
32
+ ### Fixed
33
+ - `.gemspec` requires `imagen >= 0.1.8` to address compatibility issues
34
+
9
35
  ## [0.3.2] - 2019-05-08
10
36
  ### Fixed
11
37
  - LCOV parser fix for incorrect file path handling by @RepoCorp
@@ -77,7 +103,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77
103
  ### Added
78
104
  - First release of `undercover` 🎉
79
105
 
80
- [Unreleased]: https://github.com/grodowski/undercover/compare/v0.3.2...HEAD
106
+ [Unreleased]: https://github.com/grodowski/undercover/compare/v0.4.2...HEAD
107
+ [0.4.1]: https://github.com/grodowski/undercover/compare/v0.4.1...v0.4.2
108
+ [0.4.1]: https://github.com/grodowski/undercover/compare/v0.4.0...v0.4.1
109
+ [0.4.0]: https://github.com/grodowski/undercover/compare/v0.3.4...v0.4.0
110
+ [0.3.4]: https://github.com/grodowski/undercover/compare/v0.3.3...v0.3.4
111
+ [0.3.3]: https://github.com/grodowski/undercover/compare/v0.3.2...v0.3.3
81
112
  [0.3.2]: https://github.com/grodowski/undercover/compare/v0.3.1...v0.3.2
82
113
  [0.3.1]: https://github.com/grodowski/undercover/compare/v0.3.0...v0.3.1
83
114
  [0.3.0]: https://github.com/grodowski/undercover/compare/v0.2.3...v0.3.0
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 Jan Grodowski
3
+ Copyright (c) 2018-2020 Jan Grodowski
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # undercover 👮‍♂️
2
2
 
3
- **Like RuboCop but for code coverage**
3
+ **Like RuboCop but for code coverage**. Inspects files in a git diff and warns on changed methods, classes and blocks which need to be tested. Use it locally or as part of an automated build to shorten your code coverage feedback loop!
4
4
 
5
- **Inspects files in a git diff and warns on methods, classes and blocks which need test coverage.** Use it locally or as part of an automated build to shorten your code coverage feedback loop!
5
+ - Visit **[https://undercover-ci.com](https://undercover-ci.com)** to set up actionable GitHub code review checks, or use one of the [integrations](#code-review-integrations)
6
+ - Learn how to find untested code changes locally with the [CLI](#usage)
6
7
 
7
8
  A sample output of `undercover` ran before a commit may look like this:
8
9
 
@@ -12,9 +13,8 @@ And like this, given that specs were added:
12
13
 
13
14
  ![screenshot success](docs/screenshot_success.png)
14
15
 
15
- [![Build Status](https://travis-ci.org/grodowski/undercover.svg?branch=master)](https://travis-ci.org/grodowski/undercover)
16
+ [![Build Status](https://action-badges.now.sh/grodowski/undercover)](https://github.com/grodowski/undercover/actions)
16
17
  [![Maintainability](https://api.codeclimate.com/v1/badges/b403feed68a18c072ec5/maintainability)](https://codeclimate.com/github/grodowski/undercover/maintainability)
17
- [![codebeat badge](https://codebeat.co/badges/be548247-2421-4448-bdab-896d13eb02e9)](https://codebeat.co/projects/github-com-grodowski-undercover-master)
18
18
 
19
19
  ## Installation
20
20
 
@@ -51,6 +51,7 @@ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
51
51
  SimpleCov.start do
52
52
  add_filter(/^\/spec\//) # For RSpec
53
53
  add_filter(/^\/test\//) # For Minitest
54
+ enable_coverage(:branch) # Report branch coverage to trigger branch-level undercover warnings
54
55
  end
55
56
 
56
57
  require 'undercover'
@@ -81,6 +82,17 @@ Check out `docs/` for CI configuration examples:
81
82
  - [Semaphore](docs/semaphore.yml)
82
83
  - [Codeship](docs/codeship.md)
83
84
 
85
+ Merging coverage results ([sample gist](https://gist.github.com/grodowski/9744ff91034dce8df20c2a8210409fb0)) is required for parallel tests before processing with `undercover`.
86
+
87
+ ## Code review integrations
88
+
89
+ A few options exist to provide automated comments from `undercover` in Pull Request reviews, which is the most streamlined way to add Undercover to your development workflow.
90
+
91
+ - [UndercoverCI](https://undercover-ci.com) - `undercover` Pull Request feedback delivered natively with GitHub Checks
92
+ - [pronto-undercover](https://github.com/grodowski/pronto-undercover)
93
+ - [danger-undercover](https://github.com/nimblehq/danger-undercover)
94
+ - [undercover-checkstyle](https://github.com/aki77/undercover-checkstyle)
95
+
84
96
  ## Configuration
85
97
 
86
98
  ### CLI Options
data/bin/undercover CHANGED
@@ -2,6 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  $LOAD_PATH.unshift("#{__dir__}/../lib")
5
+ $VERBOSE = nil
5
6
 
6
7
  require 'undercover'
7
8
  require 'benchmark'
data/docs/codeship.md CHANGED
@@ -12,7 +12,7 @@ gem install undercover
12
12
 
13
13
  ```
14
14
  bundle exec rspec --format documentation --color
15
- # pull origin/master to have a ref to compare against
15
+ # fetch origin/master to have a ref to compare against
16
16
  git remote set-branches --add origin master
17
17
  git fetch
18
18
  undercover -c origin/master
data/docs/travis.yml CHANGED
@@ -9,5 +9,5 @@ before_install:
9
9
  - gem update --system
10
10
  script:
11
11
  - bundle exec rake
12
- - git pull origin master:master
12
+ - git fetch origin master:master
13
13
  - undercover --compare master
data/lib/undercover.rb CHANGED
@@ -32,25 +32,12 @@ module Undercover
32
32
  @lcov = LcovParser.parse(File.open(opts.lcov))
33
33
  @code_dir = opts.path
34
34
  @changeset = changeset.update
35
+ @loaded_files = {}
35
36
  @results = {}
36
37
  end
37
38
 
39
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
38
40
  def build
39
- each_result_arg do |filename, coverage, imagen_node|
40
- key = filename.gsub(/^\.\//, '')
41
- results[key] ||= []
42
- results[key] << Result.new(
43
- imagen_node, coverage, filename
44
- )
45
- end
46
- self
47
- end
48
-
49
- # TODO: this is experimental and might be incorrect!
50
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
51
- def build_warnings
52
- flagged_results = Set.new
53
-
54
41
  changeset.each_changed_line do |filepath, line_no|
55
42
  dist_from_line_no = lambda do |res|
56
43
  return BigDecimal::INFINITY if line_no < res.first_line
@@ -63,17 +50,31 @@ module Undercover
63
50
  dist_from_line_no_sorter = lambda do |res1, res2|
64
51
  dist_from_line_no[res1] <=> dist_from_line_no[res2]
65
52
  end
66
- next unless results[filepath]
53
+ load_and_parse_file(filepath)
54
+
55
+ next unless loaded_files[filepath]
67
56
 
68
- res = results[filepath].min(&dist_from_line_no_sorter)
69
- flagged_results << res if res&.uncovered?(line_no)
57
+ res = loaded_files[filepath].min(&dist_from_line_no_sorter)
58
+ res.flag if res&.uncovered?(line_no)
59
+ results[filepath] ||= Set.new
60
+ results[filepath] << res
70
61
  end
71
- flagged_results
62
+ self
63
+ end
64
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
65
+
66
+ def build_warnings
67
+ warn('Undercover::Report#build_warnings is deprecated! ' \
68
+ 'Please use the #flagged_results accessor instead.')
69
+ all_results.select(&:flagged?)
72
70
  end
73
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
74
71
 
75
72
  def all_results
76
- results.values.flatten
73
+ results.values.map(&:to_a).flatten
74
+ end
75
+
76
+ def flagged_results
77
+ all_results.select(&:flagged?)
77
78
  end
78
79
 
79
80
  def inspect
@@ -83,20 +84,27 @@ module Undercover
83
84
 
84
85
  private
85
86
 
86
- # TODO: should that start from changeset.file_paths?
87
- # this way we could report things that weren't even loaded in any spec,
88
- # so is this still good idea? (Rakefile, .gemspec etc)
89
- def each_result_arg
90
- match_all = ->(_) { true }
91
- lcov.source_files.each do |relative_filename, coverage|
92
- path = File.join(code_dir, relative_filename)
93
- root_ast = Imagen::Node::Root.new.build_from_file(path)
94
- next if root_ast.children.empty?
95
-
96
- root_ast.children[0].find_all(match_all).each do |node|
97
- yield(relative_filename, coverage, node)
98
- end
87
+ attr_reader :loaded_files
88
+
89
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
90
+ def load_and_parse_file(filepath)
91
+ key = filepath.gsub(/^\.\//, '')
92
+ return if loaded_files[key]
93
+
94
+ coverage = lcov.coverage(filepath)
95
+ return if coverage.empty?
96
+
97
+ root_ast = Imagen::Node::Root.new.build_from_file(
98
+ File.join(code_dir, filepath)
99
+ )
100
+ return if root_ast.children.empty?
101
+
102
+ loaded_files[key] = []
103
+ # TODO: children[0] ignores the lonely_method (see spec fixtures)!
104
+ root_ast.children[0].find_all(->(_) { true }).each do |imagen_node|
105
+ loaded_files[key] << Result.new(imagen_node, coverage, filepath)
99
106
  end
100
107
  end
108
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
101
109
  end
102
110
  end
@@ -12,7 +12,8 @@ module Undercover
12
12
  include Enumerable
13
13
 
14
14
  attr_reader :files
15
- def_delegators :files, :each, :'<=>'
15
+
16
+ def_delegators :files, :each, :<=>
16
17
 
17
18
  def initialize(dir, compare_base = nil)
18
19
  @dir = dir
@@ -31,9 +31,9 @@ module Undercover
31
31
  return 0 if error == :no_changes
32
32
  end
33
33
 
34
- warnings = report.build_warnings
35
- puts Undercover::Formatter.new(warnings)
36
- warnings.any? ? 1 : 0
34
+ flagged = report.flagged_results
35
+ puts Undercover::Formatter.new(flagged)
36
+ flagged.any? ? 1 : 0
37
37
  end
38
38
 
39
39
  def self.syntax_version(version)
@@ -22,9 +22,16 @@ module Undercover
22
22
  self
23
23
  end
24
24
 
25
+ def coverage(filepath)
26
+ _filename, coverage = source_files.find do |relative_path, _|
27
+ relative_path == filepath
28
+ end
29
+ coverage || []
30
+ end
31
+
25
32
  private
26
33
 
27
- # rubocop:disable Metrics/MethodLength, Style/SpecialGlobalVars
34
+ # rubocop:disable Metrics/MethodLength, Style/SpecialGlobalVars, Metrics/AbcSize
28
35
  def parse_line(line)
29
36
  case line
30
37
  when /^SF:(.+)/
@@ -34,12 +41,20 @@ module Undercover
34
41
  line_no = $~[1]
35
42
  covered = $~[2]
36
43
  source_files[@current_filename] << [line_no.to_i, covered.to_i]
44
+ when /^(BRF|BRH):(\d+)/
45
+ # branches found/hit; no-op
46
+ when /^BRDA:(\d+),(\d+),(\d+),(-|\d+)/
47
+ line_no = $~[1]
48
+ block_no = $~[2]
49
+ branch_no = $~[3]
50
+ covered = ($~[4] == '-' ? '0' : $~[4])
51
+ source_files[@current_filename] << [line_no.to_i, block_no.to_i, branch_no.to_i, covered.to_i]
37
52
  when /^end_of_record$/, /^$/
38
53
  @current_filename = nil
39
54
  else
40
55
  raise LcovParseError, "could not recognise '#{line}' as valid LCOV"
41
56
  end
42
57
  end
43
- # rubocop:enable Metrics/MethodLength, Style/SpecialGlobalVars
58
+ # rubocop:enable Metrics/MethodLength, Style/SpecialGlobalVars, Metrics/AbcSize
44
59
  end
45
60
  end
@@ -74,7 +74,7 @@ module Undercover
74
74
  def args_from_options_file(path)
75
75
  return [] unless File.exist?(path)
76
76
 
77
- File.read(path).split('\n').flat_map { |line| line.split(' ') }
77
+ File.read(path).split('\n').flat_map(&:split)
78
78
  end
79
79
 
80
80
  def project_options_file
@@ -8,7 +8,7 @@ module Undercover
8
8
 
9
9
  attr_reader :node, :coverage, :file_path
10
10
 
11
- def_delegators :node, :first_line, :last_line
11
+ def_delegators :node, :first_line, :last_line, :name
12
12
 
13
13
  def initialize(node, file_cov, file_path)
14
14
  @node = node
@@ -16,30 +16,47 @@ module Undercover
16
16
  ln > first_line && ln < last_line
17
17
  end
18
18
  @file_path = file_path
19
+ @flagged = false
19
20
  end
20
21
 
21
- # TODO: make DRY
22
- def non_code?(line_no)
23
- line_cov = coverage.find { |ln, _cov| ln == line_no }
24
- !line_cov
22
+ def flag
23
+ @flagged = true
25
24
  end
26
25
 
27
- def covered?(line_no)
28
- line_cov = coverage.find { |ln, _cov| ln == line_no }
29
- line_cov && line_cov[1].positive?
26
+ def flagged?
27
+ @flagged
30
28
  end
31
29
 
32
30
  def uncovered?(line_no)
33
- line_cov = coverage.find { |ln, _cov| ln == line_no }
31
+ # check branch coverage for line_no
32
+ coverage.each do |ln, _block, _branch, cov|
33
+ return true if ln == line_no && cov && cov.zero?
34
+ end
35
+
36
+ # check line coverage for line_no
37
+ line_cov = coverage.select { |cov| cov.size == 2 }.find { |ln, _cov| ln == line_no }
34
38
  line_cov && line_cov[1].zero?
35
39
  end
36
40
 
41
+ # Method `coverage_f` returns the total coverage of this Undercover::Result
42
+ # as a % value, taking into account missing branches. Line coverage will be counted
43
+ # as 0 if any branch is untested.
44
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
37
45
  def coverage_f
38
- covered = coverage.reduce(0) do |sum, (_, cov)|
39
- sum + [[0, cov].max, 1].min
46
+ lines = {}
47
+ coverage.each do |ln, block_or_line_cov, _, branch_cov|
48
+ lines[ln] = 1 unless lines.key?(ln)
49
+ if branch_cov
50
+ lines[ln] = 0 if branch_cov.zero?
51
+ elsif block_or_line_cov.zero?
52
+ lines[ln] = 0
53
+ end
40
54
  end
41
- (covered.to_f / coverage.size).round(4)
55
+ return 1.0 if lines.keys.size.zero?
56
+
57
+ (lines.values.sum.to_f / lines.keys.size).round(4)
42
58
  end
59
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
43
60
 
44
61
  # TODO: create a formatter interface instead and add some tests.
45
62
  # TODO: re-enable rubocops
@@ -51,10 +68,10 @@ module Undercover
51
68
  cov_enum = coverage.each
52
69
  cov_source_lines = (node.first_line..node.last_line).map do |line_no|
53
70
  cov_line_no = begin
54
- cov_enum.peek[0]
55
- rescue StopIteration
56
- -1
57
- end
71
+ cov_enum.peek[0]
72
+ rescue StopIteration
73
+ -1
74
+ end
58
75
  cov_enum.next[1] if cov_line_no == line_no
59
76
  end
60
77
  cov_source_lines.zip(node.source_lines_with_numbers)
@@ -72,10 +89,12 @@ module Undercover
72
89
  Rainbow(' hits: n/a').italic.darkgray.dark
73
90
  elsif covered.positive?
74
91
  Rainbow(formatted_line).green + \
75
- Rainbow(" hits: #{covered}").italic.darkgray.dark
92
+ Rainbow(" hits: #{covered}").italic.darkgray.dark + \
93
+ count_covered_branches(num)
76
94
  elsif covered.zero?
77
95
  Rainbow(formatted_line).red + \
78
- Rainbow(" hits: #{covered}").italic.darkgray.dark
96
+ Rainbow(" hits: #{covered}").italic.darkgray.dark + \
97
+ count_covered_branches(num)
79
98
  end
80
99
  end.join("\n")
81
100
  end
@@ -90,5 +109,23 @@ module Undercover
90
109
  " name: #{node.name}, coverage: #{coverage_f}>"
91
110
  end
92
111
  alias to_s inspect
112
+
113
+ private
114
+
115
+ # rubocop:disable Metrics/AbcSize
116
+ def count_covered_branches(line_number)
117
+ branches = coverage.select { |cov| cov.size == 4 && cov[0] == line_number }
118
+ count_covered = branches.count { |cov| cov[3].positive? }
119
+
120
+ return '' if branches.size.zero?
121
+
122
+ if count_covered < branches.size
123
+ Rainbow(' branches: ').italic.darkgray.dark + \
124
+ Rainbow("#{count_covered}/#{branches.size}").italic.red
125
+ else
126
+ Rainbow(" branches: #{count_covered}/#{branches.size}").italic.darkgray.dark
127
+ end
128
+ end
129
+ # rubocop:enable Metrics/AbcSize
93
130
  end
94
131
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Undercover
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4.3'
5
5
  end
data/undercover.gemspec CHANGED
@@ -23,18 +23,20 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
24
24
  spec.require_paths = ['lib']
25
25
 
26
- spec.add_dependency 'imagen', '~> 0.1'
26
+ spec.required_ruby_version = '>= 2.5.0'
27
+
28
+ spec.add_dependency 'imagen', '>= 0.1.8'
27
29
  spec.add_dependency 'rainbow', '>= 2.1', '< 4.0'
28
- spec.add_dependency 'rugged', '>= 0.27', '< 0.29'
30
+ spec.add_dependency 'rugged', '>= 0.27', '< 1.2'
29
31
 
30
32
  spec.add_development_dependency 'bundler'
31
33
  spec.add_development_dependency 'pry'
32
- spec.add_development_dependency 'rake', '~> 12.3'
34
+ spec.add_development_dependency 'rake', '~> 13.0'
33
35
  spec.add_development_dependency 'rspec', '~> 3.0'
34
- spec.add_development_dependency 'rubocop', '~> 0.68.1'
36
+ spec.add_development_dependency 'rubocop', '~> 1.11.0'
35
37
  spec.add_development_dependency 'simplecov'
36
38
  spec.add_development_dependency 'simplecov-html'
37
- spec.add_development_dependency 'simplecov-lcov'
39
+ spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
38
40
  spec.add_development_dependency 'timecop'
39
41
  end
40
42
  # rubocop:enable Metrics/BlockLength
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: undercover
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Grodowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-08 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: imagen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.1'
19
+ version: 0.1.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0.1'
26
+ version: 0.1.8
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rainbow
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  version: '0.27'
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.29'
56
+ version: '1.2'
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +63,7 @@ dependencies:
63
63
  version: '0.27'
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '0.29'
66
+ version: '1.2'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: bundler
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +98,14 @@ dependencies:
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '12.3'
101
+ version: '13.0'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '12.3'
108
+ version: '13.0'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: rspec
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -126,14 +126,14 @@ dependencies:
126
126
  requirements:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: 0.68.1
129
+ version: 1.11.0
130
130
  type: :development
131
131
  prerelease: false
132
132
  version_requirements: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
- version: 0.68.1
136
+ version: 1.11.0
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: simplecov
139
139
  requirement: !ruby/object:Gem::Requirement
@@ -166,16 +166,16 @@ dependencies:
166
166
  name: simplecov-lcov
167
167
  requirement: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - ">="
169
+ - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: '0'
171
+ version: '0.8'
172
172
  type: :development
173
173
  prerelease: false
174
174
  version_requirements: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - ">="
176
+ - - "~>"
177
177
  - !ruby/object:Gem::Version
178
- version: '0'
178
+ version: '0.8'
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: timecop
181
181
  requirement: !ruby/object:Gem::Requirement
@@ -199,11 +199,11 @@ extensions: []
199
199
  extra_rdoc_files: []
200
200
  files:
201
201
  - ".codebeatsettings"
202
+ - ".github/workflows/ruby.yml"
202
203
  - ".gitignore"
203
204
  - ".overcommit.yml"
204
205
  - ".rspec"
205
206
  - ".rubocop.yml"
206
- - ".travis.yml"
207
207
  - CHANGELOG.md
208
208
  - Gemfile
209
209
  - LICENSE.txt
@@ -238,15 +238,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
238
  requirements:
239
239
  - - ">="
240
240
  - !ruby/object:Gem::Version
241
- version: '0'
241
+ version: 2.5.0
242
242
  required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  requirements:
244
244
  - - ">="
245
245
  - !ruby/object:Gem::Version
246
246
  version: '0'
247
247
  requirements: []
248
- rubyforge_project:
249
- rubygems_version: 2.7.6
248
+ rubygems_version: 3.2.3
250
249
  signing_key:
251
250
  specification_version: 4
252
251
  summary: Actionable code coverage - detects untested code blocks in recent changes
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.6.2
4
- - 2.5.5
5
- - 2.4.5
6
- - 2.3.7
7
- before_install:
8
- - gem install bundler undercover --no-doc
9
- - gem update --system
10
- script:
11
- - bundle exec rake
12
- - git pull origin master:master
13
- - undercover --compare master