undercover 0.3.0 → 0.4.0
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 +14 -1
- data/CHANGELOG.md +31 -1
- data/LICENSE.txt +1 -1
- data/README.md +15 -4
- data/bin/undercover +1 -0
- data/docs/codeship.md +1 -1
- data/docs/travis.yml +5 -4
- 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 +18 -3
- data/lib/undercover/options.rb +1 -1
- data/lib/undercover/result.rb +50 -17
- data/lib/undercover/version.rb +1 -1
- data/undercover.gemspec +8 -6
- metadata +35 -24
- data/.travis.yml +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5104b390e6cc5e103274e4621c3ec1f01a75091703e2a3549ad7a629b0edd9e1
|
4
|
+
data.tar.gz: d7346137e3b284a8815e3b0c55c22ee154fbb2e781576204eef898e3f221218d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a7cda81269eb9f3e5cb1e752c83e5b203dc01b64409765ba69c2e9fb9ef8a456d324a631f7eb5341938a3781328a688556292c552d13b8ef431490e7304875b
|
7
|
+
data.tar.gz: 980ecc847bee0a649ed9953e07118b22df8ed691ea5e72711511cd5759ad1ec507f56fdbc190f9824197f82f8d244fcb8a7f9545b75fda24d68cb5abb9311097
|
@@ -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
|
|
@@ -10,6 +11,9 @@ Style/RegexpLiteral:
|
|
10
11
|
Style/Documentation:
|
11
12
|
Enabled: false
|
12
13
|
|
14
|
+
Style/TrailingCommaInArrayLiteral:
|
15
|
+
EnforcedStyleForMultiline: comma
|
16
|
+
|
13
17
|
Layout/SpaceInsideHashLiteralBraces:
|
14
18
|
Enabled: true
|
15
19
|
EnforcedStyle: no_space
|
@@ -18,3 +22,12 @@ Metrics/BlockLength:
|
|
18
22
|
Enabled: true
|
19
23
|
Exclude:
|
20
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.0] - 2021-02-06
|
10
|
+
### Added
|
11
|
+
- [Minimal implementation of branch coverage in LCOV parser](https://github.com/grodowski/undercover/pull/112) by [@magneland](https://github.com/magneland)
|
12
|
+
- Branch coverage output support in Undercover::Formatter
|
13
|
+
### Changed
|
14
|
+
- Min Ruby requirement bumped to 2.5.0
|
15
|
+
- Dependency updates: Rubocop 1.0 and Rugged 1.1.0
|
16
|
+
|
17
|
+
|
18
|
+
## [0.3.4] - 2020-04-05
|
19
|
+
### Changed
|
20
|
+
- Updated parsing performance by scoping `all_results` to git diff
|
21
|
+
- Dependecy updates
|
22
|
+
|
23
|
+
## [0.3.3] - 2019-12-29
|
24
|
+
### Fixed
|
25
|
+
- `.gemspec` requires `imagen >= 0.1.8` to address compatibility issues
|
26
|
+
|
27
|
+
## [0.3.2] - 2019-05-08
|
28
|
+
### Fixed
|
29
|
+
- LCOV parser fix for incorrect file path handling by @RepoCorp
|
30
|
+
|
31
|
+
## [0.3.1] - 2019-03-19
|
32
|
+
### Changed
|
33
|
+
- Compatibility with `pronto > 0.9` and `rainbow > 2.1`
|
34
|
+
|
9
35
|
## [0.3.0] - 2019-01-05
|
10
36
|
### Added
|
11
37
|
- Support for `.undercover` config file by @cgeorgii
|
@@ -69,7 +95,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
69
95
|
### Added
|
70
96
|
- First release of `undercover` 🎉
|
71
97
|
|
72
|
-
[Unreleased]: https://github.com/grodowski/undercover/compare/v0.3.
|
98
|
+
[Unreleased]: https://github.com/grodowski/undercover/compare/v0.3.4...HEAD
|
99
|
+
[0.3.4]: https://github.com/grodowski/undercover/compare/v0.3.3...v0.3.4
|
100
|
+
[0.3.3]: https://github.com/grodowski/undercover/compare/v0.3.2...v0.3.3
|
101
|
+
[0.3.2]: https://github.com/grodowski/undercover/compare/v0.3.1...v0.3.2
|
102
|
+
[0.3.1]: https://github.com/grodowski/undercover/compare/v0.3.0...v0.3.1
|
73
103
|
[0.3.0]: https://github.com/grodowski/undercover/compare/v0.2.3...v0.3.0
|
74
104
|
[0.2.3]: https://github.com/grodowski/undercover/compare/v0.2.2...v0.2.3
|
75
105
|
[0.2.2]: https://github.com/grodowski/undercover/compare/v0.2.1...v0.2.2
|
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
|
|
@@ -81,6 +81,17 @@ Check out `docs/` for CI configuration examples:
|
|
81
81
|
- [Semaphore](docs/semaphore.yml)
|
82
82
|
- [Codeship](docs/codeship.md)
|
83
83
|
|
84
|
+
Merging coverage results ([sample gist](https://gist.github.com/grodowski/9744ff91034dce8df20c2a8210409fb0)) is required for parallel tests before processing with `undercover`.
|
85
|
+
|
86
|
+
## Code review integrations
|
87
|
+
|
88
|
+
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.
|
89
|
+
|
90
|
+
- [UndercoverCI](https://undercover-ci.com) - `undercover` Pull Request feedback delivered natively with GitHub Checks
|
91
|
+
- [pronto-undercover](https://github.com/grodowski/pronto-undercover)
|
92
|
+
- [danger-undercover](https://github.com/nimblehq/danger-undercover)
|
93
|
+
- [undercover-checkstyle](https://github.com/aki77/undercover-checkstyle)
|
94
|
+
|
84
95
|
## Configuration
|
85
96
|
|
86
97
|
### 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
@@ -1,12 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
3
|
+
- 2.6.2
|
4
|
+
- 2.5.5
|
5
|
+
- 2.4.5
|
6
|
+
- 2.3.7
|
6
7
|
before_install:
|
7
8
|
- gem install bundler undercover --no-doc
|
8
9
|
- gem update --system
|
9
10
|
script:
|
10
11
|
- bundle exec rake
|
11
|
-
- git
|
12
|
+
- git fetch origin master:master
|
12
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
|
-
|
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,24 +22,39 @@ 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
|
-
when /^SF:(
|
37
|
+
when /^SF:(.+)/
|
31
38
|
@current_filename = $~[1].gsub(/^\.\//, '')
|
32
39
|
source_files[@current_filename] = []
|
33
40
|
when /^DA:(\d+),(\d+)/
|
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,43 @@ 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)
|
31
|
+
coverage.each do |ln, _block, _branch, cov|
|
32
|
+
return true if ln == line_no && cov && cov.zero?
|
33
|
+
end
|
34
|
+
|
33
35
|
line_cov = coverage.find { |ln, _cov| ln == line_no }
|
34
36
|
line_cov && line_cov[1].zero?
|
35
37
|
end
|
36
38
|
|
39
|
+
# Method `coverage_f` returns the total coverage of this Undercover::Result
|
40
|
+
# as a % value, taking into account missing branches. Line coverage will be counted
|
41
|
+
# as 0 if any branch is untested.
|
42
|
+
# rubocop:disable Metrics/AbcSize
|
37
43
|
def coverage_f
|
38
|
-
|
39
|
-
|
44
|
+
lines = {}
|
45
|
+
coverage.each do |ln, block_or_line_cov, _, branch_cov|
|
46
|
+
lines[ln] = 1 unless lines.key?(ln)
|
47
|
+
if branch_cov
|
48
|
+
lines[ln] = 0 if branch_cov.zero?
|
49
|
+
elsif block_or_line_cov.zero?
|
50
|
+
lines[ln] = 0
|
51
|
+
end
|
40
52
|
end
|
41
|
-
(
|
53
|
+
(lines.values.sum.to_f / lines.keys.size).round(4)
|
42
54
|
end
|
55
|
+
# rubocop:enable Metrics/AbcSize
|
43
56
|
|
44
57
|
# TODO: create a formatter interface instead and add some tests.
|
45
58
|
# TODO: re-enable rubocops
|
@@ -51,10 +64,10 @@ module Undercover
|
|
51
64
|
cov_enum = coverage.each
|
52
65
|
cov_source_lines = (node.first_line..node.last_line).map do |line_no|
|
53
66
|
cov_line_no = begin
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
67
|
+
cov_enum.peek[0]
|
68
|
+
rescue StopIteration
|
69
|
+
-1
|
70
|
+
end
|
58
71
|
cov_enum.next[1] if cov_line_no == line_no
|
59
72
|
end
|
60
73
|
cov_source_lines.zip(node.source_lines_with_numbers)
|
@@ -72,10 +85,12 @@ module Undercover
|
|
72
85
|
Rainbow(' hits: n/a').italic.darkgray.dark
|
73
86
|
elsif covered.positive?
|
74
87
|
Rainbow(formatted_line).green + \
|
75
|
-
Rainbow(" hits: #{covered}").italic.darkgray.dark
|
88
|
+
Rainbow(" hits: #{covered}").italic.darkgray.dark + \
|
89
|
+
count_covered_branches(num)
|
76
90
|
elsif covered.zero?
|
77
91
|
Rainbow(formatted_line).red + \
|
78
|
-
Rainbow(" hits: #{covered}").italic.darkgray.dark
|
92
|
+
Rainbow(" hits: #{covered}").italic.darkgray.dark + \
|
93
|
+
count_covered_branches(num)
|
79
94
|
end
|
80
95
|
end.join("\n")
|
81
96
|
end
|
@@ -90,5 +105,23 @@ module Undercover
|
|
90
105
|
" name: #{node.name}, coverage: #{coverage_f}>"
|
91
106
|
end
|
92
107
|
alias to_s inspect
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
# rubocop:disable Metrics/AbcSize
|
112
|
+
def count_covered_branches(line_number)
|
113
|
+
branches = coverage.select { |cov| cov.size == 4 && cov[0] == line_number }
|
114
|
+
count_covered = branches.count { |cov| cov[3].positive? }
|
115
|
+
|
116
|
+
return '' if branches.size.zero?
|
117
|
+
|
118
|
+
if count_covered < branches.size
|
119
|
+
Rainbow(' branches: ').italic.darkgray.dark + \
|
120
|
+
Rainbow("#{count_covered}/#{branches.size}").italic.red
|
121
|
+
else
|
122
|
+
Rainbow(" branches: #{count_covered}/#{branches.size}").italic.darkgray.dark
|
123
|
+
end
|
124
|
+
end
|
125
|
+
# rubocop:enable Metrics/AbcSize
|
93
126
|
end
|
94
127
|
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.
|
27
|
-
|
28
|
-
spec.add_dependency '
|
26
|
+
spec.required_ruby_version = '>= 2.5.0'
|
27
|
+
|
28
|
+
spec.add_dependency 'imagen', '>= 0.1.8'
|
29
|
+
spec.add_dependency 'rainbow', '>= 2.1', '< 4.0'
|
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.9.1'
|
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,57 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: undercover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
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-02-06 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
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.1'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '4.0'
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '2.1'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '4.0'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: rugged
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - ">="
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.27
|
53
|
+
version: '0.27'
|
54
|
+
- - "<"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.2'
|
48
57
|
type: :runtime
|
49
58
|
prerelease: false
|
50
59
|
version_requirements: !ruby/object:Gem::Requirement
|
51
60
|
requirements:
|
52
|
-
- - "
|
61
|
+
- - ">="
|
53
62
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.27
|
63
|
+
version: '0.27'
|
64
|
+
- - "<"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.2'
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: bundler
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +98,14 @@ dependencies:
|
|
86
98
|
requirements:
|
87
99
|
- - "~>"
|
88
100
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
101
|
+
version: '13.0'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
93
105
|
requirements:
|
94
106
|
- - "~>"
|
95
107
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
108
|
+
version: '13.0'
|
97
109
|
- !ruby/object:Gem::Dependency
|
98
110
|
name: rspec
|
99
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +126,14 @@ dependencies:
|
|
114
126
|
requirements:
|
115
127
|
- - "~>"
|
116
128
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
129
|
+
version: 1.9.1
|
118
130
|
type: :development
|
119
131
|
prerelease: false
|
120
132
|
version_requirements: !ruby/object:Gem::Requirement
|
121
133
|
requirements:
|
122
134
|
- - "~>"
|
123
135
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
136
|
+
version: 1.9.1
|
125
137
|
- !ruby/object:Gem::Dependency
|
126
138
|
name: simplecov
|
127
139
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,16 +166,16 @@ dependencies:
|
|
154
166
|
name: simplecov-lcov
|
155
167
|
requirement: !ruby/object:Gem::Requirement
|
156
168
|
requirements:
|
157
|
-
- - "
|
169
|
+
- - "~>"
|
158
170
|
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
171
|
+
version: '0.8'
|
160
172
|
type: :development
|
161
173
|
prerelease: false
|
162
174
|
version_requirements: !ruby/object:Gem::Requirement
|
163
175
|
requirements:
|
164
|
-
- - "
|
176
|
+
- - "~>"
|
165
177
|
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
178
|
+
version: '0.8'
|
167
179
|
- !ruby/object:Gem::Dependency
|
168
180
|
name: timecop
|
169
181
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,11 +199,11 @@ extensions: []
|
|
187
199
|
extra_rdoc_files: []
|
188
200
|
files:
|
189
201
|
- ".codebeatsettings"
|
202
|
+
- ".github/workflows/ruby.yml"
|
190
203
|
- ".gitignore"
|
191
204
|
- ".overcommit.yml"
|
192
205
|
- ".rspec"
|
193
206
|
- ".rubocop.yml"
|
194
|
-
- ".travis.yml"
|
195
207
|
- CHANGELOG.md
|
196
208
|
- Gemfile
|
197
209
|
- LICENSE.txt
|
@@ -226,15 +238,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
226
238
|
requirements:
|
227
239
|
- - ">="
|
228
240
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
241
|
+
version: 2.5.0
|
230
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
243
|
requirements:
|
232
244
|
- - ">="
|
233
245
|
- !ruby/object:Gem::Version
|
234
246
|
version: '0'
|
235
247
|
requirements: []
|
236
|
-
|
237
|
-
rubygems_version: 2.7.6
|
248
|
+
rubygems_version: 3.2.3
|
238
249
|
signing_key:
|
239
250
|
specification_version: 4
|
240
251
|
summary: Actionable code coverage - detects untested code blocks in recent changes
|