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 +4 -4
- data/.github/workflows/ruby.yml +21 -0
- data/.rubocop.yml +11 -1
- data/CHANGELOG.md +32 -1
- data/LICENSE.txt +1 -1
- data/README.md +16 -4
- data/bin/undercover +1 -0
- data/docs/codeship.md +1 -1
- data/docs/travis.yml +1 -1
- data/lib/undercover.rb +42 -34
- data/lib/undercover/changeset.rb +2 -1
- data/lib/undercover/cli.rb +3 -3
- data/lib/undercover/lcov_parser.rb +17 -2
- data/lib/undercover/options.rb +1 -1
- data/lib/undercover/result.rb +55 -18
- data/lib/undercover/version.rb +1 -1
- data/undercover.gemspec +7 -5
- metadata +19 -20
- data/.travis.yml +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb2b1b1bd08b3e0cee5d4078f630f044e0c6b0439e10f3ee0fff6fda6690f66d
|
4
|
+
data.tar.gz: c0944771464ed6b6569ea637d868a495b73790dce296ed09e940e8036ea1f1e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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.
|
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
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
|
-
**
|
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://
|
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
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
|
-
#
|
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
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
|
-
|
53
|
+
load_and_parse_file(filepath)
|
54
|
+
|
55
|
+
next unless loaded_files[filepath]
|
67
56
|
|
68
|
-
res =
|
69
|
-
|
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
|
-
|
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
|
-
|
87
|
-
|
88
|
-
#
|
89
|
-
def
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
data/lib/undercover/changeset.rb
CHANGED
data/lib/undercover/cli.rb
CHANGED
@@ -31,9 +31,9 @@ module Undercover
|
|
31
31
|
return 0 if error == :no_changes
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
puts Undercover::Formatter.new(
|
36
|
-
|
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
|
data/lib/undercover/options.rb
CHANGED
data/lib/undercover/result.rb
CHANGED
@@ -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
|
-
|
22
|
-
|
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
|
28
|
-
|
29
|
-
line_cov && line_cov[1].positive?
|
26
|
+
def flagged?
|
27
|
+
@flagged
|
30
28
|
end
|
31
29
|
|
32
30
|
def uncovered?(line_no)
|
33
|
-
|
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
|
-
|
39
|
-
|
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
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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
|
data/lib/undercover/version.rb
CHANGED
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.
|
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', '<
|
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', '~>
|
34
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
33
35
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
34
|
-
spec.add_development_dependency 'rubocop', '~>
|
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
|
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:
|
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:
|
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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:
|
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:
|
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:
|
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
|
-
|
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