undercover 0.4.7 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 208a99638c9f105ea5a9abde3de88efc756e4ca9f739246488b55a80a7118276
4
- data.tar.gz: c1a5926972f1404a0adbf570ef7b28678fb48ecbabe29f8b65469b09a2b4a25c
3
+ metadata.gz: c860e600589d92698fa5df94b1b8fe9283cbb00cdc595410b9c3a413d74b3095
4
+ data.tar.gz: e2c26b709c691201f473846e0cb6a7fa6844c5d1dc73169ca533d95482182f6c
5
5
  SHA512:
6
- metadata.gz: 69937cd20c436a78a403ba4b12eb52d727120771060de928617b81bcfa8c8010c2ef3af64ea0b986d9655b32934e70e33c9482b5d8b68b2149462c3933e143f7
7
- data.tar.gz: 9fe21bbb6cf9af2b45f51033eedb1fe75d744b6611c677c65c4052373251166ce54b870dc53f94b8b564aa7839963e3b038be3f36181a7a78c034583f209e9e8
6
+ metadata.gz: ace70eb4f75d2d57bda9d906925a7b5525c5a67520380ba0327a5344ed6718b79ea2587a5a0fb4d2a09d430d09b30eb2d1ac63c503be17197ff9c6455ab12b00
7
+ data.tar.gz: a2ec9a3b4d27cb9eaa7b4595f71ff9b12108e939864a6f5279aece22cd728e358dd50b16e63d0537780154e3ffd20e0712bce8322a8591e4f08f70d9d6818145
@@ -14,3 +14,7 @@ updates:
14
14
  - 1.12.1
15
15
  - 1.8.1
16
16
  - 1.9.0
17
+ - package-ecosystem: "github-actions"
18
+ directory: "/"
19
+ schedule:
20
+ interval: "weekly"
@@ -5,9 +5,9 @@ jobs:
5
5
  runs-on: ubuntu-latest
6
6
  strategy:
7
7
  matrix:
8
- ruby: ['3.2', '3.0', '2.7']
8
+ ruby: ['3.3', '3.0']
9
9
  steps:
10
- - uses: actions/checkout@v3
10
+ - uses: actions/checkout@v4
11
11
  with:
12
12
  fetch-depth: 0 # fetch all since test fixtures depend on history
13
13
  - name: Set up Ruby ${{ matrix.ruby }}
@@ -16,28 +16,27 @@ jobs:
16
16
  ruby-version: ${{ matrix.ruby }}
17
17
  - name: Build and test with Rake
18
18
  run: |
19
- gem install bundler -v 2.4.22
20
- gem install undercover --no-doc
19
+ gem install bundler undercover --no-doc
21
20
  bundle install --jobs 4 --retry 3
22
21
  bundle exec rake
23
22
  - name: undercover (local)
24
23
  run: |
25
24
  git fetch --update-head-ok origin master:master
26
25
  undercover --compare master
27
- - uses: actions/upload-artifact@v3
26
+ - uses: actions/upload-artifact@v4
28
27
  with:
29
- name: undercover.lcov
28
+ name: undercover-${{ matrix.ruby }}.lcov
30
29
  path: coverage/lcov/undercover.lcov
31
30
  coverage:
32
31
  runs-on: ubuntu-latest
33
32
  needs: build
34
33
  steps:
35
- - uses: actions/download-artifact@v3
34
+ - uses: actions/download-artifact@v4
36
35
  with:
37
- name: undercover.lcov
36
+ name: undercover-3.3.lcov
38
37
  - name: Upload coverage
39
38
  run: |
40
39
  ruby -e "$(curl -s https://undercover-ci.com/uploader.rb)" -- \
41
40
  --repo grodowski/undercover \
42
- --commit $GITHUB_SHA \
41
+ --commit ${{ github.event.pull_request.head.sha || github.sha }} \
43
42
  --lcov /home/runner/work/undercover/undercover/undercover.lcov
data/.rubocop.yml CHANGED
@@ -1,8 +1,9 @@
1
1
  AllCops:
2
2
  NewCops: enable
3
- TargetRubyVersion: 2.7.0
3
+ TargetRubyVersion: 3.0
4
4
  Exclude:
5
5
  - spec/fixtures/**/*
6
+ SuggestExtensions: false
6
7
 
7
8
  Style/RegexpLiteral:
8
9
  EnforcedStyle: slashes
@@ -23,6 +24,12 @@ Metrics/BlockLength:
23
24
  Exclude:
24
25
  - spec/**/*
25
26
 
27
+ Metrics/CyclomaticComplexity:
28
+ Max: 10
29
+
30
+ Metrics/PerceivedComplexity:
31
+ Max: 10
32
+
26
33
  Style/HashEachMethods:
27
34
  Enabled: true
28
35
 
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.3.3
data/CHANGELOG.md CHANGED
@@ -6,7 +6,21 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- # [0.4.7] - 2022-07-28
9
+ # [0.6.0] - 2024-12-12
10
+ ### Added
11
+ - Add support for including and exluding files by glob patterns, supplied through CLI args and the configuration file (#146)
12
+
13
+ ### Fixed
14
+ - Files that were changed but don't appear in the coverage report at all will now be reported as uncovered, as expected.
15
+ - Fixed an issue where top-level methods were not being considered [#135](https://github.com/grodowski/undercover/issues/135). This was caused by a bug in the tree traversal logic.
16
+ - Fixed a bug where `--compare` didn't work with grafted commits as there was no merge base available ([#175](https://github.com/grodowski/undercover/issues/175)). Now it's possible to pass a graft commit as `--compare` which enables `undercover` to work with shallow clones.
17
+
18
+ # [0.5.0] - 2024-01-09
19
+ ### Changed
20
+ - Drop ruby 2.x support, require ruby 3.x in gemspec
21
+ - Dev dependency updates
22
+
23
+ # [0.4.7] - 2024-01-08
10
24
  ### Fixed
11
25
  - [Update of one-line block is ignored](https://github.com/grodowski/undercover/pull/207) by [@lizhangyuh](https://github.com/lizhangyuh)
12
26
 
@@ -123,7 +137,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
123
137
  ### Added
124
138
  - First release of `undercover` 🎉
125
139
 
126
- [Unreleased]: https://github.com/grodowski/undercover/compare/v0.4.7...HEAD
140
+ [Unreleased]: https://github.com/grodowski/undercover/compare/v0.6.0...HEAD
141
+ [0.6.0]: https://github.com/grodowski/undercover/compare/v0.6.0...v0.5.0
142
+ [0.5.0]: https://github.com/grodowski/undercover/compare/v0.4.7...v0.5.0
127
143
  [0.4.7]: https://github.com/grodowski/undercover/compare/v0.4.6...v0.4.7
128
144
  [0.4.6]: https://github.com/grodowski/undercover/compare/v0.4.5...v0.4.6
129
145
  [0.4.5]: https://github.com/grodowski/undercover/compare/v0.4.4...v0.4.5
data/Gemfile CHANGED
@@ -3,3 +3,14 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ gem 'base64'
8
+ gem 'bundler'
9
+ gem 'pry'
10
+ gem 'rake', '~> 13.0'
11
+ gem 'rspec', '~> 3.0'
12
+ gem 'rubocop'
13
+ gem 'simplecov'
14
+ gem 'simplecov-html'
15
+ gem 'simplecov-lcov', '~> 0.8'
16
+ gem 'timecop'
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ![logo](https://github.com/grodowski/undercover/assets/4991698/c4bf038b-4472-4406-8f1f-5ddc812908d6)
2
2
 
3
- `undercover` warns about methods, classes and blocks that **were changed without tests**, to help you easily find untested code and reduce the number of bugs. It does so by analysing data from git diffs, code structure and SimpleCov coverage reports.
3
+ `undercover` warns about methods, classes and blocks that **were changed without tests**, to help you easily find untested code and reduce the number of bugs. It does so by analysing data from git diffs, code structure and SimpleCov coverage reports.
4
4
 
5
5
  Works with any Ruby CI pipeline as well as locally as a CLI.
6
6
 
@@ -104,12 +104,14 @@ A few options exist to provide automated comments from `undercover` in Pull Requ
104
104
  Options can be passed when running the command from the command line:
105
105
 
106
106
  ```sh
107
- undercover -h
108
107
  Usage: undercover [options]
109
108
  -l, --lcov path LCOV report file path
110
109
  -p, --path path Project directory
111
110
  -g, --git-dir dir Override `.git` with a custom directory
112
111
  -c, --compare ref Generate coverage warnings for all changes after `ref`
112
+ -r, --ruby-syntax ver Ruby syntax version, one of: current, ruby18, ruby19, ruby20, ruby21, ruby22, ruby23, ruby24, ruby25, ruby26, ruby30, ruby31, ruby32, ruby33
113
+ -f, --include-files globs Include files matching specified glob patterns (comma separated). Defaults to '*.rb,*.rake,*.ru,Rakefile'
114
+ -x, --exclude-files globs Skip files matching specified glob patterns (comma separated). Empty by default.
113
115
  -h, --help Prints this help
114
116
  --version Show version
115
117
  ```
@@ -56,10 +56,10 @@ module Undercover
56
56
  end
57
57
 
58
58
  # TODO: refactor to a standalone validator (depending on changeset AND lcov)
59
- # TODO: add specs
60
59
  def validate(lcov_report_path)
61
60
  return :no_changes if files.empty?
62
- return :stale_coverage if last_modified > File.mtime(lcov_report_path)
61
+
62
+ :stale_coverage if last_modified > File.mtime(lcov_report_path)
63
63
  end
64
64
 
65
65
  private
@@ -74,7 +74,9 @@ module Undercover
74
74
  def compare_base_obj
75
75
  return nil unless compare_base
76
76
 
77
- repo.lookup(repo.merge_base(compare_base.to_s, head))
77
+ merge_base = repo.merge_base(compare_base.to_s, head)
78
+ # merge_base may be nil with --depth 1, compare two refs directly
79
+ merge_base ? repo.lookup(merge_base) : repo.rev_parse(compare_base)
78
80
  end
79
81
 
80
82
  def head
@@ -17,21 +17,21 @@ module Undercover
17
17
  def formatted_warnings
18
18
  @results.map.with_index(1) do |res, idx|
19
19
  "🚨 #{idx}) node `#{res.node.name}` type: #{res.node.human_name},\n" +
20
- (' ' * pad_size) + "loc: #{res.file_path_with_lines}," \
21
- " coverage: #{res.coverage_f * 100}%\n" +
20
+ (' ' * pad_size) + "loc: #{res.file_path_with_lines}, " \
21
+ "coverage: #{res.coverage_f * 100}%\n" +
22
22
  res.pretty_print
23
23
  end
24
24
  end
25
25
 
26
26
  def success
27
- "#{Rainbow('undercover').bold.green}: ✅ No coverage" \
28
- ' is missing in latest changes'
27
+ "#{Rainbow('undercover').bold.green}: ✅ No coverage " \
28
+ 'is missing in latest changes'
29
29
  end
30
30
 
31
31
  def warnings_header
32
32
  "#{Rainbow('undercover').bold.red}: " \
33
- '👮‍♂️ some methods have no test coverage! Please add specs for' \
34
- ' methods listed below'
33
+ '👮‍♂️ some methods have no test coverage! Please add specs for ' \
34
+ 'methods listed below'
35
35
  end
36
36
 
37
37
  def pad_size
@@ -4,7 +4,7 @@ require 'optparse'
4
4
  require 'pathname'
5
5
 
6
6
  module Undercover
7
- class Options
7
+ class Options # rubocop:disable Metrics/ClassLength
8
8
  RUN_MODE = [
9
9
  RUN_MODE_DIFF_STRICT = :diff_strict, # warn for changed lines
10
10
  # RUN_MODE_DIFF_FILES = :diff_files, # warn for changed whole files
@@ -17,7 +17,15 @@ module Undercover
17
17
  # OUTPUT_CIRCLEMATOR = :circlemator # posts warnings as review comments
18
18
  ].freeze
19
19
 
20
- attr_accessor :lcov, :path, :git_dir, :compare, :syntax_version
20
+ DEFAULT_FILE_INCLUDE_GLOBS = %w[*.rb *.rake *.ru Rakefile].freeze
21
+
22
+ attr_accessor :lcov,
23
+ :path,
24
+ :git_dir,
25
+ :compare,
26
+ :syntax_version,
27
+ :glob_allow_filters,
28
+ :glob_reject_filters
21
29
 
22
30
  def initialize
23
31
  # TODO: use run modes
@@ -27,6 +35,8 @@ module Undercover
27
35
  # set defaults
28
36
  self.path = '.'
29
37
  self.git_dir = '.git'
38
+ self.glob_allow_filters = DEFAULT_FILE_INCLUDE_GLOBS
39
+ self.glob_reject_filters = []
30
40
  end
31
41
 
32
42
  # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
@@ -51,9 +61,7 @@ module Undercover
51
61
  git_dir_option(opts)
52
62
  compare_option(opts)
53
63
  ruby_syntax_option(opts)
54
- # TODO: parse dem other options and assign to self
55
- # --quiet (skip progress bar)
56
- # --exit-status (do not print report, just exit)
64
+ file_filters(opts)
57
65
  end.parse(args)
58
66
 
59
67
  guess_lcov_path unless lcov
@@ -119,5 +127,18 @@ module Undercover
119
127
  cwd = Pathname.new(File.expand_path(path))
120
128
  self.lcov = File.join(cwd, 'coverage', 'lcov', "#{cwd.split.last}.lcov")
121
129
  end
130
+
131
+ def file_filters(parser)
132
+ desc = 'Include files matching specified glob patterns (comma separated). ' \
133
+ "Defaults to '#{DEFAULT_FILE_INCLUDE_GLOBS.join(',')}'"
134
+ parser.on('-f', '--include-files globs', desc) do |comma_separated_globs|
135
+ self.glob_allow_filters = comma_separated_globs.strip.split(',')
136
+ end
137
+
138
+ desc = 'Skip files matching specified glob patterns (comma separated). Empty by default.'
139
+ parser.on('-x', '--exclude-files globs', desc) do |comma_separated_globs|
140
+ self.glob_reject_filters = comma_separated_globs.strip.split(',')
141
+ end
142
+ end
122
143
  end
123
144
  end
@@ -13,7 +13,7 @@ module Undercover
13
13
  def initialize(node, file_cov, file_path)
14
14
  @node = node
15
15
  @coverage = file_cov.select do |ln, _|
16
- first_line == last_line ? ln == first_line : ln > first_line && ln < last_line
16
+ (node.empty_def? ? ln >= first_line : ln > first_line) && ln < last_line
17
17
  end
18
18
  @file_path = file_path
19
19
  @flagged = false
@@ -27,8 +27,9 @@ module Undercover
27
27
  @flagged
28
28
  end
29
29
 
30
- # rubocop:disable Metrics/CyclomaticComplexity
31
30
  def uncovered?(line_no)
31
+ return true if coverage.empty?
32
+
32
33
  # check branch coverage for line_no
33
34
  coverage.each do |ln, _block, _branch, cov|
34
35
  return true if ln == line_no && cov && cov.zero?
@@ -38,13 +39,14 @@ module Undercover
38
39
  line_cov = coverage.select { |cov| cov.size == 2 }.find { |ln, _cov| ln == line_no }
39
40
  line_cov && line_cov[1].zero?
40
41
  end
41
- # rubocop:enable Metrics/CyclomaticComplexity
42
42
 
43
43
  # Method `coverage_f` returns the total coverage of this Undercover::Result
44
44
  # as a % value, taking into account missing branches. Line coverage will be counted
45
45
  # as 0 if any branch is untested.
46
46
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
47
47
  def coverage_f
48
+ return 0.0 if coverage.empty?
49
+
48
50
  lines = {}
49
51
  coverage.each do |ln, block_or_line_cov, _, branch_cov|
50
52
  lines[ln] = 1 unless lines.key?(ln)
@@ -54,7 +56,6 @@ module Undercover
54
56
  lines[ln] = 0
55
57
  end
56
58
  end
57
- return 1.0 if lines.keys.size.zero?
58
59
 
59
60
  (lines.values.sum.to_f / lines.keys.size).round(4)
60
61
  end
@@ -84,17 +85,17 @@ module Undercover
84
85
  pad = node.last_line.to_s.length
85
86
  pretty_print_lines.map do |covered, (num, line)|
86
87
  formatted_line = "#{num.to_s.rjust(pad)}: #{line}"
87
- if line.strip.length.zero?
88
+ if line.strip.empty?
88
89
  Rainbow(formatted_line).darkgray.dark
89
90
  elsif covered.nil?
90
- Rainbow(formatted_line).darkgray.dark + \
91
+ Rainbow(formatted_line).darkgray.dark +
91
92
  Rainbow(' hits: n/a').italic.darkgray.dark
92
93
  elsif covered.positive?
93
- Rainbow(formatted_line).green + \
94
+ Rainbow(formatted_line).green +
94
95
  Rainbow(" hits: #{covered}").italic.darkgray.dark + \
95
96
  count_covered_branches(num)
96
97
  elsif covered.zero?
97
- Rainbow(formatted_line).red + \
98
+ Rainbow(formatted_line).red +
98
99
  Rainbow(" hits: #{covered}").italic.darkgray.dark + \
99
100
  count_covered_branches(num)
100
101
  end
@@ -107,8 +108,8 @@ module Undercover
107
108
  end
108
109
 
109
110
  def inspect
110
- "#<Undercover::Report::Result:#{object_id}" \
111
- " name: #{node.name}, coverage: #{coverage_f}>"
111
+ "#<Undercover::Report::Result:#{object_id} " \
112
+ "name: #{node.name}, coverage: #{coverage_f}>"
112
113
  end
113
114
  alias to_s inspect
114
115
 
@@ -119,10 +120,10 @@ module Undercover
119
120
  branches = coverage.select { |cov| cov.size == 4 && cov[0] == line_number }
120
121
  count_covered = branches.count { |cov| cov[3].positive? }
121
122
 
122
- return '' if branches.size.zero?
123
+ return '' if branches.empty?
123
124
 
124
125
  if count_covered < branches.size
125
- Rainbow(' branches: ').italic.darkgray.dark + \
126
+ Rainbow(' branches: ').italic.darkgray.dark +
126
127
  Rainbow("#{count_covered}/#{branches.size}").italic.red
127
128
  else
128
129
  Rainbow(" branches: #{count_covered}/#{branches.size}").italic.darkgray.dark
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Undercover
4
- VERSION = '0.4.7'
4
+ VERSION = '0.6.0'
5
5
  end
data/lib/undercover.rb CHANGED
@@ -22,7 +22,8 @@ module Undercover
22
22
  attr_reader :changeset,
23
23
  :lcov,
24
24
  :results,
25
- :code_dir
25
+ :code_dir,
26
+ :glob_filters
26
27
 
27
28
  # Initializes a new Undercover::Report
28
29
  #
@@ -32,11 +33,15 @@ module Undercover
32
33
  @lcov = LcovParser.parse(File.open(opts.lcov))
33
34
  @code_dir = opts.path
34
35
  @changeset = changeset.update
36
+ @glob_filters = {
37
+ allow: opts.glob_allow_filters,
38
+ reject: opts.glob_reject_filters
39
+ }
35
40
  @loaded_files = {}
36
41
  @results = {}
37
42
  end
38
43
 
39
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
44
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
40
45
  def build
41
46
  changeset.each_changed_line do |filepath, line_no|
42
47
  dist_from_line_no = lambda do |res|
@@ -50,6 +55,7 @@ module Undercover
50
55
  dist_from_line_no_sorter = lambda do |res1, res2|
51
56
  dist_from_line_no[res1] <=> dist_from_line_no[res2]
52
57
  end
58
+
53
59
  load_and_parse_file(filepath)
54
60
 
55
61
  next unless loaded_files[filepath]
@@ -61,7 +67,7 @@ module Undercover
61
67
  end
62
68
  self
63
69
  end
64
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
70
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
65
71
 
66
72
  def build_warnings
67
73
  warn('Undercover::Report#build_warnings is deprecated! ' \
@@ -92,7 +98,8 @@ module Undercover
92
98
  return if loaded_files[key]
93
99
 
94
100
  coverage = lcov.coverage(filepath)
95
- return if coverage.empty?
101
+
102
+ return unless include_file?(filepath)
96
103
 
97
104
  root_ast = Imagen::Node::Root.new.build_from_file(
98
105
  File.join(code_dir, filepath)
@@ -106,5 +113,10 @@ module Undercover
106
113
  end
107
114
  end
108
115
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
116
+
117
+ def include_file?(filepath)
118
+ fnmatch = proc { |glob| File.fnmatch(glob, filepath) }
119
+ glob_filters[:allow].any?(fnmatch) && glob_filters[:reject].none?(fnmatch)
120
+ end
109
121
  end
110
122
  end
data/undercover.gemspec CHANGED
@@ -4,15 +4,14 @@ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'undercover/version'
6
6
 
7
- # rubocop:disable Metrics/BlockLength
8
7
  Gem::Specification.new do |spec|
9
8
  spec.name = 'undercover'
10
9
  spec.version = Undercover::VERSION
11
10
  spec.authors = ['Jan Grodowski']
12
11
  spec.email = ['jgrodowski@gmail.com']
13
12
 
14
- spec.summary = 'Actionable code coverage - detects untested' \
15
- ' code blocks in recent changes'
13
+ spec.summary = 'Actionable code coverage - detects untested ' \
14
+ 'code blocks in recent changes'
16
15
  spec.homepage = 'https://github.com/grodowski/undercover'
17
16
  spec.license = 'MIT'
18
17
  spec.metadata = {
@@ -26,20 +25,10 @@ Gem::Specification.new do |spec|
26
25
  spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
27
26
  spec.require_paths = ['lib']
28
27
 
29
- spec.required_ruby_version = '>= 2.7.0'
28
+ spec.required_ruby_version = '>= 3.0.0'
30
29
 
31
- spec.add_dependency 'imagen', '>= 0.1.8'
30
+ spec.add_dependency 'bigdecimal'
31
+ spec.add_dependency 'imagen', '>= 0.2.0'
32
32
  spec.add_dependency 'rainbow', '>= 2.1', '< 4.0'
33
- spec.add_dependency 'rugged', '>= 0.27', '< 1.7'
34
-
35
- spec.add_development_dependency 'bundler'
36
- spec.add_development_dependency 'pry'
37
- spec.add_development_dependency 'rake', '~> 13.0'
38
- spec.add_development_dependency 'rspec', '~> 3.0'
39
- spec.add_development_dependency 'rubocop', '~> 1.28.2'
40
- spec.add_development_dependency 'simplecov'
41
- spec.add_development_dependency 'simplecov-html'
42
- spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
43
- spec.add_development_dependency 'timecop'
33
+ spec.add_dependency 'rugged', '>= 0.27', '< 1.8'
44
34
  end
45
- # rubocop:enable Metrics/BlockLength
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: undercover
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.6.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: 2024-01-08 00:00:00.000000000 Z
11
+ date: 2024-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: imagen
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: 0.1.8
33
+ version: 0.2.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: 0.1.8
40
+ version: 0.2.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rainbow
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +67,7 @@ dependencies:
53
67
  version: '0.27'
54
68
  - - "<"
55
69
  - !ruby/object:Gem::Version
56
- version: '1.7'
70
+ version: '1.8'
57
71
  type: :runtime
58
72
  prerelease: false
59
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,133 +77,7 @@ dependencies:
63
77
  version: '0.27'
64
78
  - - "<"
65
79
  - !ruby/object:Gem::Version
66
- version: '1.7'
67
- - !ruby/object:Gem::Dependency
68
- name: bundler
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: '0'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: '0'
81
- - !ruby/object:Gem::Dependency
82
- name: pry
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- version: '0'
95
- - !ruby/object:Gem::Dependency
96
- name: rake
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '13.0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '13.0'
109
- - !ruby/object:Gem::Dependency
110
- name: rspec
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '3.0'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '3.0'
123
- - !ruby/object:Gem::Dependency
124
- name: rubocop
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: 1.28.2
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: 1.28.2
137
- - !ruby/object:Gem::Dependency
138
- name: simplecov
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: '0'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
- - !ruby/object:Gem::Dependency
152
- name: simplecov-html
153
- requirement: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- type: :development
159
- prerelease: false
160
- version_requirements: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- version: '0'
165
- - !ruby/object:Gem::Dependency
166
- name: simplecov-lcov
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: '0.8'
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - "~>"
177
- - !ruby/object:Gem::Version
178
- version: '0.8'
179
- - !ruby/object:Gem::Dependency
180
- name: timecop
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- version: '0'
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - ">="
191
- - !ruby/object:Gem::Version
192
- version: '0'
80
+ version: '1.8'
193
81
  description:
194
82
  email:
195
83
  - jgrodowski@gmail.com
@@ -205,6 +93,7 @@ files:
205
93
  - ".overcommit.yml"
206
94
  - ".rspec"
207
95
  - ".rubocop.yml"
96
+ - ".tool-versions"
208
97
  - CHANGELOG.md
209
98
  - Gemfile
210
99
  - LICENSE.txt
@@ -240,14 +129,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
240
129
  requirements:
241
130
  - - ">="
242
131
  - !ruby/object:Gem::Version
243
- version: 2.7.0
132
+ version: 3.0.0
244
133
  required_rubygems_version: !ruby/object:Gem::Requirement
245
134
  requirements:
246
135
  - - ">="
247
136
  - !ruby/object:Gem::Version
248
137
  version: '0'
249
138
  requirements: []
250
- rubygems_version: 3.5.4
139
+ rubygems_version: 3.5.11
251
140
  signing_key:
252
141
  specification_version: 4
253
142
  summary: Actionable code coverage - detects untested code blocks in recent changes