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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c55fedc1b13694df2a9042c5e78543fcfd5d5417d5c99c61831ff8ff53a0f28
4
- data.tar.gz: 3a7466522f20c47bd9b131b1d76e7ecbe2ec3c10a6b0d9c2d72c66dd7616d214
3
+ metadata.gz: 5104b390e6cc5e103274e4621c3ec1f01a75091703e2a3549ad7a629b0edd9e1
4
+ data.tar.gz: d7346137e3b284a8815e3b0c55c22ee154fbb2e781576204eef898e3f221218d
5
5
  SHA512:
6
- metadata.gz: d2057a6288f575e76c21dc6a747622b231817353bd695aab512188cd10785c1e7423364d053201f8396b4694f0b2734cf744a2d696b7c2c7db33c3f2dff80b9b
7
- data.tar.gz: 000140b3cefe4e22e8b25660b3c30060cf8cc881853d2044b9a9b50a9d69ef22cbf859d47de6b1d4be707ec0a385969af38678d92350b1ee30eeb3a50f13a3cd
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
- TargetRubyVersion: 2.4.4
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.0...HEAD
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
@@ -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
 
@@ -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
@@ -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
@@ -1,12 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.5.1
4
- - 2.4.4
5
- - 2.3.4
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 pull origin master:master
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
- 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,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:([\.\/\w]+)/
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
@@ -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,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
- # 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)
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
- covered = coverage.reduce(0) do |sum, (_, cov)|
39
- sum + [[0, cov].max, 1].min
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
- (covered.to_f / coverage.size).round(4)
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
- cov_enum.peek[0]
55
- rescue StopIteration
56
- -1
57
- end
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Undercover
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
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.5'
27
- spec.add_dependency 'rainbow', '~> 2.1'
28
- spec.add_dependency 'rugged', '~> 0.27.0'
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', '~> 10.0'
34
+ spec.add_development_dependency 'rake', '~> 13.0'
33
35
  spec.add_development_dependency 'rspec', '~> 3.0'
34
- spec.add_development_dependency 'rubocop', '~> 0.55.0'
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.3.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: 2019-01-05 00:00:00.000000000 Z
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.5
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.5
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.0
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.0
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: '10.0'
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: '10.0'
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: 0.55.0
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: 0.55.0
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: '0'
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
- rubyforge_project:
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
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.5.3
4
- - 2.4.5
5
- - 2.3.8
6
- before_install:
7
- - gem install bundler undercover
8
- - gem update --system
9
- script:
10
- - bundle exec rake
11
- - git pull origin master:master
12
- - undercover --compare master