kettle-soup-cover 1.0.5 → 1.0.6

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: b79eab6c78028cb61a9cdf3a9fcc99750a8a77934f258e068f34471cbb16ff33
4
- data.tar.gz: 598f21459d351d9fecdbae69418dbc3869e4ab56d82446b5724df06e8ba462b4
3
+ metadata.gz: 82f4891a6e2c54e8489c5f559557d7b19b96d85cabea4e90d060921ed9c4dd44
4
+ data.tar.gz: b04646d864b370984405e13252fdc1b2f7a87b9883a39059978db469f9934077
5
5
  SHA512:
6
- metadata.gz: e8e7dbcd76f206db85cf918f0d7dce2ee4523ad97e6eb53c1044e6a085c1f2c287dbd04079c5f421dd238e282daaa4e476467357dd0e97c252bbc5653f92482b
7
- data.tar.gz: 953a7e8b3e684bb86163dd5fce7c7a00e79fe50fe2cf991be6d2a94e6dd93f3353019459b985108adf131fe40e209248c3699c1f3d1a49c9503af915076cf316
6
+ metadata.gz: 963943e8faea0ea864f4e6ca8a2023e672f6b63267d868cbbb50a6a7721cddb556f2b9ab1d8c3bc3bfba71cfb7e79d87e743bed011be995378ab1835080650f1
7
+ data.tar.gz: 76ba3aed9e242db065daa636a4c034d5c41fc9fdf542a4af7facdc88322fdb3fa5319a9d7eee083b3028dd83f7259f156cd5317133da5fad3f5dc5c9c765f2b7
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -11,6 +11,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
  ### Fixed
12
12
  ### Removed
13
13
 
14
+ ## [1.0.6] - 2025-05-04
15
+ - COVERAGE: 93.43% -- 128/137 lines in 10 files
16
+ - BRANCH COVERAGE: 50.00% -- 16/32 branches in 10 files
17
+ - 11.11% documented
18
+ ### Added
19
+ - Support for linux, and other OSes, in `coverage` rake task
20
+ - previously was macOS only (would raise error on other OSes)
21
+ - ✨ `Kettle::Soup::Cover::OPEN_BIN`
22
+ - Set `export K_SOUP_COV_OPEN_BIN=open` to use macOS' `open` command in `coverage` task
23
+ - Set `export K_SOUP_COV_OPEN_BIN=xdg-open` to use Linux' `xdg-open` command in `coverage` task
24
+ - Set `export K_SOUP_COV_OPEN_BIN=` to just print the path to the HTML coverage report in `coverage` task
25
+ - Test coverage increased from 55 => 81 for lines
26
+ - Test coverage increased from 25 => 53 for branches
27
+ ### Changed
28
+ - Refactored internals in ways that should not affect public APIs
29
+ - allows much greater test coverage
30
+ - report a bug if anything breaks!
31
+ - Going forward all releases will be signed by my key that expires 2045-05-04
32
+ ### Fixed
33
+ - require hooks such that both work equally well:
34
+ - `require "kettle/soup/cover"`
35
+ - `require "kettle-soup-cover"`
36
+ - Allow unsigned gem builds (for linux distros)
37
+ - In the ENV set `SKIP_GEM_SIGNING` to any value
38
+
14
39
  ## [1.0.5] - 2025-04-03
15
40
  ### Added
16
41
  - Documentation
@@ -80,7 +105,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
80
105
  ## [0.1.0] - 2023-10-17
81
106
  - Initial release
82
107
 
83
- [Unreleased]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.4...HEAD
108
+ [Unreleased]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.6...HEAD
109
+ [1.0.6]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.5...v1.0.6
110
+ [1.0.5]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.4...v1.0.5
84
111
  [1.0.4]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.3...v1.0.4
85
112
  [1.0.3]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.2...v1.0.3
86
113
  [1.0.2]: https://gitlab.com/kettle-rb/kettle-soup-cover/-/compare/v1.0.1...v1.0.2
data/CONTRIBUTING.md CHANGED
@@ -67,11 +67,14 @@ Also see GitLab Contributors: [https://gitlab.com/kettle-rb/kettle-soup-cover/-/
67
67
 
68
68
  ### One-time, Per-maintainer, Setup
69
69
 
70
- **IMPORTANT**: Your public key for signing gems will need to be picked up by the line in the
71
- `gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there),
72
- in order to sign the new release.
70
+ **IMPORTANT**: If you want to sign the build you create,
71
+ your public key for signing gems will need to be picked up by the line in the
72
+ `gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there).
73
+ All releases to RubyGems.org will be signed.
73
74
  See: [RubyGems Security Guide][🔒️rubygems-security-guide]
74
75
 
76
+ NOTE: To build without signing the gem you must set `SKIP_GEM_SIGNING` to some value in your environment.
77
+
75
78
  ### To release a new version:
76
79
 
77
80
  1. Run `bin/setup && bin/rake` as a tests, coverage, & linting sanity check
@@ -87,10 +90,11 @@ See: [RubyGems Security Guide][🔒️rubygems-security-guide]
87
90
  - Run `export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH`
88
91
  - If the echo above has no output, then it didn't work.
89
92
  - Note that you'll need the `zsh/datetime` module, if running `zsh`.
90
- - In `bash` you can use `date +%s` instead, i.e. `export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH`
93
+ - In older versions of `bash` you can use `date +%s` instead, i.e. `export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH`
91
94
  10. Run `bundle exec rake build`
92
- 11. Run `bin/gem_checksums` (more context [1][🔒️rubygems-checksums-pr] and [2][🔒️rubygems-guides-pr])
93
- to create SHA-256 and SHA-512 checksums
95
+ 11. Run `bin/gem_checksums` (more context [1][🔒️rubygems-checksums-pr], [2][🔒️rubygems-guides-pr])
96
+ to create SHA-256 and SHA-512 checksums. This functionality is provided by the `stone_checksums`
97
+ [gem][💎stone_checksums].
94
98
  - Checksums will be committed automatically by the script, but not pushed
95
99
  12. Run `bundle exec rake release` which will create a git tag for the version,
96
100
  push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems]
@@ -106,5 +110,6 @@ See: [RubyGems Security Guide][🔒️rubygems-security-guide]
106
110
  [🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems
107
111
  [🔒️rubygems-checksums-pr]: https://github.com/rubygems/rubygems/pull/6022
108
112
  [🔒️rubygems-guides-pr]: https://github.com/rubygems/guides/pull/325
113
+ [💎stone_checksums]: https://github.com/pboling/stone_checksums
109
114
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
110
115
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
data/README.md CHANGED
@@ -25,19 +25,16 @@
25
25
 
26
26
  ---
27
27
 
28
- [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
28
+ [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay]
29
29
  [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
30
30
  [![Buy me a coffee][🖇buyme-small-img]][🖇buyme]
31
- [![Polar Shield][🖇polar-img]][🖇polar]
31
+ [![Donate on Polar][🖇polar-img]][🖇polar]
32
32
  [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
33
33
  [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
34
34
 
35
- A Covered Kettle of SOUP (Software of Unknown Provenance)
35
+ Four lines of code to get a configured, curated, opinionated, set of dependencies for Test Coverage.
36
36
 
37
- The name is derived in part from the medical devices field,
38
- where this library is considered a package of [SOUP](https://en.wikipedia.org/wiki/Software_of_unknown_pedigree).
39
-
40
- Just add four lines of code to get a configured, curated, opinionated, set of dependencies for Test Coverage.
37
+ Configured for what? To work out of the box on every CI. Batteries included.
41
38
 
42
39
  One of the major benefits of using this library is not having to figure
43
40
  out how to get multiple coverage output formats working. I did that for you,
@@ -54,23 +51,33 @@ export K_SOUP_COV_MIN_LINE=69 # Means you want to enforce X% line coverage
54
51
  export MAX_ROWS=5 # Setting for simplecov-console gem for tty output, limits to the worst N rows of bad coverage
55
52
  ```
56
53
 
57
- I hope I've piqued your interest.
54
+ I hope I've piqued your interest enough to give it a ⭐️ if the forge you are on supports it.
55
+
56
+ <details>
57
+ <summary>What does the name mean?</summary>
58
58
 
59
- ## Info you can shake a stick at
59
+ A Covered Kettle of SOUP (Software of Unknown Provenance)
60
+
61
+ The name is derived in part from the medical devices field,
62
+ where this library is considered a package of [SOUP](https://en.wikipedia.org/wiki/Software_of_unknown_pedigree).
63
+
64
+ </details>
65
+
66
+ ## 💡 Info you can shake a stick at
60
67
 
61
68
  | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
62
69
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
63
70
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
64
71
  | Works with MRI Ruby 2 | [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
65
- | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
72
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
66
73
  | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
67
- | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] |
74
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
68
75
  | Expert 1:1 Support | [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] `or` [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
69
76
  | Enterprise Support | [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]<br/>💡Subscribe for support guarantees covering _all_ FLOSS dependencies!<br/>💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]!<br/>💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers! |
70
77
  | Comrade BDFL 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact BDFL][🚂bdfl-contact-img]][🚂bdfl-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
71
- | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] |
78
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
72
79
 
73
- ## Installation
80
+ ## Installation
74
81
 
75
82
  Install the gem and add to the application's Gemfile by executing:
76
83
 
@@ -80,24 +87,53 @@ If bundler is not being used to manage dependencies, install the gem by executin
80
87
 
81
88
  $ gem install kettle-soup-cover
82
89
 
83
- ## Usage
90
+ ### 🔒 Secure Installation
91
+
92
+ `kettle-soup-cover` is cryptographically signed. To be sure the gem you install hasn’t been tampered with:
93
+
94
+ Add my public key (if you haven’t already, expires 2045-05-04) as a trusted certificate:
95
+
96
+ ```shell
97
+ gem cert --add <(curl -Ls https://raw.github.com/kettle-rb/kettle-soup-cover/main/certs/pboling.pem)
98
+ ```
99
+
100
+ You only need to do that once. Then proceed to install with:
84
101
 
85
- In your `spec/spec_helper.rb`, just prior to loading the library under test:
102
+ ```shell
103
+ gem install kettle-soup-cover -P MediumSecurity
104
+ ```
105
+
106
+ The MediumSecurity trust profile will verify signed gems, but allow the installation of unsigned dependencies.
107
+
108
+ This is necessary because not all of `kettle-soup-cover`’s dependencies are signed, so we cannot use HighSecurity.
109
+
110
+ If you want to up your security game full-time:
111
+
112
+ ```shell
113
+ bundle config set --global trust-policy MediumSecurity
114
+ ```
115
+
116
+ NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
117
+
118
+ ## 🔧 Basic Usage
119
+
120
+ In your `spec/spec_helper.rb`, just prior to loading the library under test, add 2 lines of code:
86
121
 
87
122
  ```ruby
88
123
  # This does not require "simplecov",
89
- # because that has a side-effect of running `.simplecov`
124
+ # because that has a side effect of running `.simplecov`
90
125
  require "kettle-soup-cover"
91
126
 
92
127
  # Later in your spec setup, do this;
93
128
  require "simplecov" if Kettle::Soup::Cover::DO_COV
94
129
  ```
95
130
 
96
- In your `.simplecov` file:
131
+ In your `.simplecov` file, add 2 lines of code:
97
132
 
98
133
  ```ruby
99
134
  require "kettle/soup/cover/config"
100
- SimpleCov.start # you could do this somewhere else, up to you, but you do have to do it
135
+ # you could do this somewhere else, up to you, but you do have to do it somewhere
136
+ SimpleCov.start
101
137
  ```
102
138
 
103
139
  See [Advanced Usage](#advanced-usage) below for more info,
@@ -113,10 +149,10 @@ That's it!
113
149
  ### Rakefile
114
150
 
115
151
  You'll need to have your `test` task defined.
116
- If you use `spec` instead, you can alias `test` to `spec` as follows:
152
+ If you use `spec` instead, you can make it a pre-requisite of the `test` task with:
117
153
 
118
154
  ```ruby
119
- desc "alias test task to spec"
155
+ desc "run spec task with test task"
120
156
  task test: :spec
121
157
  ```
122
158
 
@@ -162,6 +198,7 @@ K_SOUP_COV_MIN_HARD
162
198
  K_SOUP_COV_MIN_LINE
163
199
  K_SOUP_COV_MULTI_FORMATTERS
164
200
  K_SOUP_COV_PREFIX
201
+ K_SOUP_COV_OPEN_BIN
165
202
  K_SOUP_COV_USE_MERGING
166
203
  K_SOUP_COV_VERBOSE
167
204
  ```
@@ -172,6 +209,10 @@ have their own complete suite of ENV variables you can configure.
172
209
  [env-constants]: /lib/kettle/soup/cover.rb
173
210
  [simplecov-console]: https://github.com/chetan/simplecov-console#options
174
211
 
212
+ ### 🚀 Release Instructions
213
+
214
+ See [CONTRIBUTING.md][🤝contributing].
215
+
175
216
  ## 🔐 Security
176
217
 
177
218
  See [SECURITY.md][🔐security].
@@ -232,7 +273,7 @@ It is obvious to many, but not all, and since the spec is silent, the bike shedd
232
273
 
233
274
  > dropping support for a platform is both obviously and objectively a breaking change
234
275
 
235
- - Jordan Harband (@ljharb) [in SemVer issue 716][📌semver-breaking]
276
+ - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
236
277
 
237
278
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
238
279
  read this article from the creator of SemVer:
@@ -305,6 +346,10 @@ or one of the others at the head of this README.
305
346
  [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
306
347
  [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
307
348
  [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
349
+ [💖🧊berg]: https://codeberg.org/pboling
350
+ [💖🐙hub]: https://github.org/pboling
351
+ [💖🛖hut]: https://sr.ht/~galtzo/
352
+ [💖🧪lab]: https://gitlab.com/pboling
308
353
  [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
309
354
  [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
310
355
  [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
@@ -316,6 +361,8 @@ or one of the others at the head of this README.
316
361
  [🚂railsbling]: http://www.railsbling.com
317
362
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
318
363
  [📜src-gl]: https://gitlab.com/kettle-rb/kettle-soup-cover/
364
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
365
+ [📜src-cb]: https://codeberg.org/kettle-rb/kettle-soup-cover
319
366
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
320
367
  [📜src-gh]: https://github.com/kettle-rb/kettle-soup-cover
321
368
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
@@ -358,16 +405,19 @@ or one of the others at the head of this README.
358
405
  [🚎8-ho-wfi]: https://github.com/kettle-rb/kettle-soup-cover/actions/workflows/hoary.yml/badge.svg
359
406
  [🚎11-c-wf]: https://github.com/kettle-rb/kettle-soup-cover/actions/workflows/current.yml
360
407
  [🚎11-c-wfi]: https://github.com/kettle-rb/kettle-soup-cover/actions/workflows/current.yml/badge.svg
361
- [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
408
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
362
409
  [⛳liberapay]: https://liberapay.com/pboling/donate
363
410
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
364
411
  [🖇sponsor]: https://github.com/sponsors/pboling
365
- [🖇polar-img]: https://polar.sh/embed/seeks-funding-shield.svg?org=pboling
412
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
366
413
  [🖇polar]: https://polar.sh/pboling
367
- [🖇kofi-img]: https://img.shields.io/badge/buy_me_coffee-donate-yellow.svg
414
+ [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
368
415
  [🖇kofi]: https://ko-fi.com/O5O86SNP4
369
416
  [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
370
417
  [🖇patreon]: https://patreon.com/galtzo
418
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
419
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
420
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
371
421
  [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
372
422
  [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
373
423
  [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
@@ -393,8 +443,10 @@ or one of the others at the head of this README.
393
443
  [📌changelog]: CHANGELOG.md
394
444
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
395
445
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
446
+ [📌gitmoji]:https://gitmoji.dev
447
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg?style=flat-square
396
448
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
397
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.075-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
449
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.137-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
398
450
  [🔐security]: SECURITY.md
399
451
  [🔐security-img]: https://img.shields.io/badge/security-policy-brightgreen.svg?style=flat
400
452
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -405,6 +457,3 @@ or one of the others at the head of this README.
405
457
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-brightgreen.svg?style=flat
406
458
  [🚎yard-current]: http://rubydoc.info/gems/kettle-soup-cover
407
459
  [🚎yard-head]: https://rubydoc.info/github/kettle-rb/kettle-soup-cover/main
408
- [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
409
- [🖇buyme]: https://www.buymeacoffee.com/pboling
410
- [🖇buyme-small-img]: https://img.shields.io/badge/Buy--Me--A--Coffee-✓-brightgreen.svg?style=flat
data/SECURITY.md CHANGED
@@ -6,8 +6,16 @@
6
6
  |-----------|-----------|
7
7
  | 1.latest | ✅ |
8
8
 
9
- ## Reporting a Vulnerability
9
+ ## Security contact information
10
10
 
11
- Peter Boling is the primary maintainer of this gem. Please find a way
12
- to [contact him directly](https://railsbling.com/contact) to report the issue. Include as much relevant information as
13
- possible.
11
+ To report a security vulnerability, please use the
12
+ [Tidelift security contact](https://tidelift.com/security).
13
+ Tidelift will coordinate the fix and disclosure.
14
+
15
+ ## Additional Support
16
+
17
+ If you are interested in support for versions older than the latest release,
18
+ please consider sponsoring the project / maintainer @ https://liberapay.com/pboling/donate,
19
+ or find other sponsorship links in the [README].
20
+
21
+ [README]: README.md
@@ -0,0 +1,39 @@
1
+ module Kettle
2
+ class Change < Module
3
+ def initialize(constants: nil, path: nil)
4
+ super()
5
+ @constants = Array(constants) if constants
6
+ @path = path if path
7
+ end
8
+
9
+ def included(base)
10
+ constant_changer = ConstantChange.to_mod(constants: @constants, path: @path)
11
+ base.send(:extend, constant_changer)
12
+ end
13
+
14
+ module ConstantChange
15
+ class << self
16
+ def to_mod(constants: nil, path: nil)
17
+ Module.new do
18
+ if constants && path
19
+ define_method(:reset_const) do |*_args, &block|
20
+ delete_const do
21
+ block&.call
22
+ load(path)
23
+ end
24
+ end
25
+
26
+ define_method(:delete_const) do |*_args, &block|
27
+ constants.each do |var|
28
+ remove_const(var) if defined?(var)
29
+ end
30
+ block&.call
31
+ nil
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -15,38 +15,38 @@
15
15
  SimpleCov.configure do
16
16
  track_files("lib/**/*.rb")
17
17
 
18
- command_name Kettle::Soup::Cover::COMMAND_NAME
18
+ command_name Kettle::Soup::Cover::Constants::COMMAND_NAME
19
19
 
20
20
  enable_coverage :branch
21
21
  primary_coverage :branch
22
22
 
23
23
  # Filters (skip these paths for coverage tracking)
24
- add_filter Kettle::Soup::Cover::FILTER_DIRS
24
+ add_filter Kettle::Soup::Cover::Constants::FILTER_DIRS
25
25
 
26
26
  # Setup Coverage Dir
27
- coverage_dir(Kettle::Soup::Cover::COVERAGE_DIR)
27
+ coverage_dir(Kettle::Soup::Cover::Constants::COVERAGE_DIR)
28
28
 
29
29
  # Formatters
30
- if Kettle::Soup::Cover::MULTI_FORMATTERS
31
- Kettle::Soup::Cover.load_formatters
30
+ if Kettle::Soup::Cover::Constants::MULTI_FORMATTERS
31
+ Kettle::Soup::Cover::Loaders.load_formatters
32
32
  else
33
33
  require "simplecov-html"
34
34
  formatter SimpleCov::Formatter::HTMLFormatter
35
35
  end
36
36
 
37
37
  # Use Merging (merges RSpec + Cucumber Test Results)
38
- use_merging(Kettle::Soup::Cover::USE_MERGING) unless Kettle::Soup::Cover::USE_MERGING.nil?
39
- merge_timeout(Kettle::Soup::Cover::MERGE_TIMEOUT) if Kettle::Soup::Cover::MERGE_TIMEOUT
38
+ use_merging(Kettle::Soup::Cover::Constants::USE_MERGING) unless Kettle::Soup::Cover::Constants::USE_MERGING.nil?
39
+ merge_timeout(Kettle::Soup::Cover::Constants::MERGE_TIMEOUT) if Kettle::Soup::Cover::Constants::MERGE_TIMEOUT
40
40
 
41
41
  # Fail build when missed coverage targets
42
42
  # NOTE: Checking SpecTracker.instance.full_suite? here would be awesome, but won't work
43
43
  # SpecTracker must wait for instantiation until it has
44
44
  # RSpec's config.world.all_examples,
45
45
  # and that doesn't happen until the before(:suite) hook
46
- if Kettle::Soup::Cover::IS_CI || Kettle::Soup::Cover::MIN_COVERAGE_HARD
46
+ if Kettle::Soup::Cover::Constants::IS_CI || Kettle::Soup::Cover::Constants::MIN_COVERAGE_HARD
47
47
  minimum_coverage(
48
- branch: Kettle::Soup::Cover::MIN_COVERAGE_BRANCH,
49
- line: Kettle::Soup::Cover::MIN_COVERAGE_LINE,
48
+ branch: Kettle::Soup::Cover::Constants::MIN_COVERAGE_BRANCH,
49
+ line: Kettle::Soup::Cover::Constants::MIN_COVERAGE_LINE,
50
50
  )
51
51
  end
52
52
  end
@@ -0,0 +1,113 @@
1
+ module Kettle
2
+ module Soup
3
+ module Cover
4
+ module Constants
5
+ FALSE = "false"
6
+ TRUE = "true"
7
+ PREFIX = ENV.fetch("K_SOUP_COV_PREFIX", "K_SOUP_COV_")
8
+ ENV_GET = ->(suffix, default) { ENV.fetch("#{PREFIX}#{suffix}", default) }
9
+ FORMATTER_PLUGINS = {
10
+ # HTML for Humans
11
+ html: {
12
+ type: :html,
13
+ klass: "HTMLFormatter",
14
+ lib: "simplecov-html",
15
+ },
16
+ # XML for Jenkins
17
+ xml: {
18
+ type: :xml,
19
+ klass: "CoberturaFormatter",
20
+ lib: "simplecov-cobertura",
21
+ },
22
+ # RCOV for Hudson
23
+ rcov: {
24
+ type: :rcov,
25
+ klass: "RcovFormatter",
26
+ lib: "simplecov-rcov",
27
+ },
28
+ # LCOV for GCOV
29
+ lcov: {
30
+ type: :lcov,
31
+ klass: "LcovFormatter",
32
+ lib: "simplecov-lcov",
33
+ },
34
+ # JSON for CodeClimate
35
+ json: {
36
+ type: :json,
37
+ klass: "JSONFormatter",
38
+ lib: "simplecov_json_formatter",
39
+ },
40
+ # TTY / Console output
41
+ tty: {
42
+ type: :tty,
43
+ klass: "Console",
44
+ lib: "simplecov-console",
45
+ },
46
+ }
47
+
48
+ CI = ENV.fetch("CI", FALSE)
49
+ IS_CI = CI.casecmp?(TRUE)
50
+ COMMAND_NAME = ENV_GET.call("COMMAND_NAME", "RSpec (COVERAGE)")
51
+ COVERAGE_DIR = ENV_GET.call("DIR", "coverage")
52
+ DEBUG = ENV_GET.call("DEBUG", FALSE).casecmp?(TRUE)
53
+ DO_COV = ENV_GET.call("DO", CI).casecmp?(TRUE)
54
+ FILTER_DIRS = ENV_GET.call(
55
+ "FILTER_DIRS",
56
+ "bin,certs,checksums,config,coverage,docs,features,gemfiles,pkg,results,sig,spec,src,test,test-results,vendor",
57
+ )
58
+ .split(",")
59
+ .map { |dir_name| %r{^/#{Regexp.escape(dir_name)}/} }
60
+ FORMATTERS = ENV_GET.call(
61
+ "FORMATTERS",
62
+ IS_CI ? "html,xml,rcov,lcov,json,tty" : "html,tty",
63
+ )
64
+ .split(",")
65
+ .map { |fmt_name| FORMATTER_PLUGINS[fmt_name.strip.to_sym] }
66
+ MIN_COVERAGE_HARD = ENV_GET.call("MIN_HARD", CI).casecmp?(TRUE)
67
+ MIN_COVERAGE_BRANCH = ENV_GET.call("MIN_BRANCH", "80").to_i
68
+ MIN_COVERAGE_LINE = ENV_GET.call("MIN_LINE", "80").to_i
69
+ MULTI_FORMATTERS_DEFAULT = if IS_CI
70
+ TRUE
71
+ else
72
+ FORMATTERS.any? ? TRUE : FALSE
73
+ end
74
+ MULTI_FORMATTERS = ENV_GET.call("MULTI_FORMATTERS", MULTI_FORMATTERS_DEFAULT).casecmp?(TRUE)
75
+ # A wild approximation, but will suffice for nearly all users
76
+ is_mac = RbConfig::CONFIG["host_os"].include?("darwin")
77
+ # Set to "" to prevent opening a browser with the coverage rake task
78
+ OPEN_BIN = ENV_GET.call("OPEN_BIN", is_mac ? "open" : "xdg-open")
79
+ USE_MERGING = ENV_GET.call("USE_MERGING", nil)&.casecmp?(TRUE)
80
+ MERGE_TIMEOUT = ENV_GET.call("MERGE_TIMEOUT", nil)&.to_i
81
+ VERBOSE = ENV_GET.call("VERBOSE", FALSE).casecmp?(TRUE)
82
+
83
+ include Kettle::Change.new(
84
+ constants: %w[
85
+ CI
86
+ COMMAND_NAME
87
+ COVERAGE_DIR
88
+ DEBUG
89
+ DO_COV
90
+ ENV_GET
91
+ FALSE
92
+ FILTER_DIRS
93
+ FORMATTER_PLUGINS
94
+ FORMATTERS
95
+ IS_CI
96
+ MERGE_TIMEOUT
97
+ MIN_COVERAGE_BRANCH
98
+ MIN_COVERAGE_LINE
99
+ MIN_COVERAGE_HARD
100
+ MULTI_FORMATTERS_DEFAULT
101
+ MULTI_FORMATTERS
102
+ OPEN_BIN
103
+ PREFIX
104
+ TRUE
105
+ USE_MERGING
106
+ VERBOSE
107
+ ],
108
+ path: "kettle/soup/cover/constants.rb",
109
+ )
110
+ end
111
+ end
112
+ end
113
+ end
File without changes
File without changes
@@ -0,0 +1,36 @@
1
+ module Kettle
2
+ module Soup
3
+ module Cover
4
+ module Loaders
5
+ extend self
6
+
7
+ def load_formatters
8
+ SimpleCov.formatters = Kettle::Soup::Cover::Constants::FORMATTERS
9
+ .each_with_object([]) do |fmt_data, formatters|
10
+ require fmt_data[:lib].to_s
11
+
12
+ klass = SimpleCov::Formatter.const_get(fmt_data[:klass])
13
+
14
+ if fmt_data[:type] == :lcov
15
+ klass.config do |c|
16
+ c.report_with_single_file = true
17
+ c.single_report_path = "#{Kettle::Soup::Cover::Constants::COVERAGE_DIR}/lcov.info"
18
+ end
19
+ end
20
+
21
+ formatters << klass
22
+ end
23
+ end
24
+
25
+ def load_filters
26
+ require "kettle/soup/cover/filters/gt_line_filter"
27
+ require "kettle/soup/cover/filters/lt_line_filter"
28
+ end
29
+
30
+ def install_tasks
31
+ load("kettle/soup/cover/tasks.rb")
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -5,9 +5,27 @@ task :coverage do
5
5
  ENV["K_SOUP_COV_PREFIX"] = "K_SOUP_COV_"
6
6
  ENV["K_SOUP_COV_DO"] = "true"
7
7
  ENV["K_SOUP_COV_MULTI_FORMATTERS"] = "true"
8
- ENV["K_SOUP_COV_FORMATTERS"] = "html"
8
+ ENV["K_SOUP_COV_FORMATTERS"] ||= "html"
9
9
  ENV["K_SOUP_COV_DIR"] ||= "coverage"
10
10
  end
11
11
  Rake::Task["test"].invoke
12
- %x(open #{Kettle::Soup::Cover::COVERAGE_DIR}/index.html)
12
+ html_report = "#{Kettle::Soup::Cover::COVERAGE_DIR}/index.html"
13
+ if Kettle::Soup::Cover::OPEN_BIN.empty?
14
+ puts "Kettle::Soup::Cover::OPEN_BIN not configured. Coverage report is at #{html_report}"
15
+ else
16
+ begin
17
+ %x(#{Kettle::Soup::Cover::OPEN_BIN} #{html_report})
18
+ rescue Errno::ENOENT => error
19
+ message = error.message || ""
20
+ # `open` command is macOS only. xdg-open is a decent alternative on many Linux systems.
21
+ if message.include?("No such file or directory - #{Kettle::Soup::Cover::OPEN_BIN}")
22
+ puts "Configured Kettle::Soup::Cover::OPEN_BIN (#{Kettle::Soup::Cover::OPEN_BIN}) not available. Coverage report is at #{html_report}"
23
+ elsif message.include?("No such file or directory")
24
+ puts "No coverage report found at #{html_report}"
25
+ puts message
26
+ else
27
+ raise error
28
+ end
29
+ end
30
+ end
13
31
  end
File without changes
@@ -4,7 +4,7 @@ module Kettle
4
4
  module Soup
5
5
  module Cover
6
6
  module Version
7
- VERSION = "1.0.5"
7
+ VERSION = "1.0.6"
8
8
  end
9
9
  end
10
10
  end
@@ -14,156 +14,40 @@
14
14
  # SimpleCov.start
15
15
  #
16
16
 
17
+ # Standard Lib
18
+ require "rbconfig"
19
+
20
+ # External gems
21
+ require "version_gem"
22
+
23
+ # This gem
24
+ require_relative "../change"
25
+ require_relative "cover/version"
26
+ require_relative "cover/constants"
27
+ require_relative "cover/loaders"
28
+
17
29
  module Kettle
18
30
  module Soup
19
31
  module Cover
20
32
  class Error < StandardError; end
21
33
 
22
- CONSTANTS = %w[
23
- CI
24
- COMMAND_NAME
25
- COVERAGE_DIR
26
- DEBUG
27
- DO_COV
28
- ENV_GET
29
- FALSE
30
- FILTER_DIRS
31
- FORMATTER_PLUGINS
32
- FORMATTERS
33
- IS_CI
34
- MERGE_TIMEOUT
35
- MIN_COVERAGE_BRANCH
36
- MIN_COVERAGE_LINE
37
- MIN_COVERAGE_HARD
38
- MULTI_FORMATTERS_DEFAULT
39
- MULTI_FORMATTERS
40
- PREFIX
41
- TRUE
42
- USE_MERGING
43
- VERBOSE
44
- ]
45
- FALSE = "false"
46
- TRUE = "true"
47
- PREFIX = ENV.fetch("K_SOUP_COV_PREFIX", "K_SOUP_COV_")
48
- ENV_GET = ->(suffix, default) { ENV.fetch("#{PREFIX}#{suffix}", default) }
49
- FORMATTER_PLUGINS = {
50
- # HTML for Humans
51
- html: {
52
- type: :html,
53
- klass: "HTMLFormatter",
54
- lib: "simplecov-html",
55
- },
56
- # XML for Jenkins
57
- xml: {
58
- type: :xml,
59
- klass: "CoberturaFormatter",
60
- lib: "simplecov-cobertura",
61
- },
62
- # RCOV for Hudson
63
- rcov: {
64
- type: :rcov,
65
- klass: "RcovFormatter",
66
- lib: "simplecov-rcov",
67
- },
68
- # LCOV for GCOV
69
- lcov: {
70
- type: :lcov,
71
- klass: "LcovFormatter",
72
- lib: "simplecov-lcov",
73
- },
74
- # JSON for CodeClimate
75
- json: {
76
- type: :json,
77
- klass: "JSONFormatter",
78
- lib: "simplecov_json_formatter",
79
- },
80
- # TTY / Console output
81
- tty: {
82
- type: :tty,
83
- klass: "Console",
84
- lib: "simplecov-console",
85
- },
86
- }
87
-
88
- CI = ENV.fetch("CI", FALSE)
89
- IS_CI = CI.casecmp?(TRUE)
90
- COMMAND_NAME = ENV_GET.call("COMMAND_NAME", "RSpec (COVERAGE)")
91
- COVERAGE_DIR = ENV_GET.call("DIR", "coverage")
92
- DEBUG = ENV_GET.call("DEBUG", FALSE).casecmp?(TRUE)
93
- DO_COV = ENV_GET.call("DO", CI).casecmp?(TRUE)
94
- FILTER_DIRS = ENV_GET.call(
95
- "FILTER_DIRS",
96
- "bin,certs,checksums,config,coverage,docs,features,gemfiles,pkg,results,sig,spec,src,test,test-results,vendor",
97
- )
98
- .split(",")
99
- .map { |dir_name| %r{^/#{Regexp.escape(dir_name)}/} }
100
- FORMATTERS = ENV_GET.call(
101
- "FORMATTERS",
102
- IS_CI ? "html,xml,rcov,lcov,json,tty" : "html,tty",
103
- )
104
- .split(",")
105
- .map { |fmt_name| FORMATTER_PLUGINS[fmt_name.strip.to_sym] }
106
- MIN_COVERAGE_HARD = ENV_GET.call("MIN_HARD", CI).casecmp?(TRUE)
107
- MIN_COVERAGE_BRANCH = ENV_GET.call("MIN_BRANCH", "80").to_i
108
- MIN_COVERAGE_LINE = ENV_GET.call("MIN_LINE", "80").to_i
109
- MULTI_FORMATTERS_DEFAULT = if IS_CI
110
- CI
111
- else
112
- FORMATTERS.any? ? TRUE : FALSE
113
- end
114
- MULTI_FORMATTERS = ENV_GET.call("MULTI_FORMATTERS", MULTI_FORMATTERS_DEFAULT).casecmp?(TRUE)
115
- USE_MERGING = ENV_GET.call("USE_MERGING", nil)&.casecmp?(TRUE)
116
- MERGE_TIMEOUT = ENV_GET.call("MERGE_TIMEOUT", nil)&.to_i
117
- VERBOSE = ENV_GET.call("VERBOSE", FALSE).casecmp?(TRUE)
34
+ # Provide a public API for constants that is a bit less namespaced
35
+ include Constants
36
+ extend Loaders
118
37
 
119
38
  module_function
120
39
 
121
- def load_formatters
122
- SimpleCov.formatters = FORMATTERS
123
- .each_with_object([]) do |fmt_data, formatters|
124
- require fmt_data[:lib].to_s
125
-
126
- klass = SimpleCov::Formatter.const_get(fmt_data[:klass])
127
-
128
- if fmt_data[:type] == :lcov
129
- klass.config do |c|
130
- c.report_with_single_file = true
131
- c.single_report_path = "#{Kettle::Soup::Cover::COVERAGE_DIR}/lcov.info"
132
- end
133
- end
134
-
135
- formatters << klass
136
- end
40
+ def reset_const(&block)
41
+ Constants.reset_const(&block)
137
42
  end
138
43
 
139
- def load_filters
140
- require "kettle/soup/cover/filters/gt_line_filter"
141
- require "kettle/soup/cover/filters/lt_line_filter"
142
- end
143
-
144
- def install_tasks
145
- load("kettle/soup/cover/tasks.rb")
146
- end
147
-
148
- # Const manipulation is to help with testing this gem
149
- def reset_const(&_)
150
- delete_const do
151
- yield if block_given?
152
- # Loading myself... Woah.
153
- load("kettle/soup/cover.rb")
154
- end
155
- end
156
-
157
- # Const manipulation is to help with testing this gem
158
- def delete_const(&_)
159
- CONSTANTS.each do |var|
160
- remove_const(var)
161
- end
162
- remove_const(:CONSTANTS)
163
- yield if block_given?
164
-
165
- nil
44
+ def delete_const(&block)
45
+ Constants.delete_const(&block)
166
46
  end
167
47
  end
168
48
  end
169
49
  end
50
+
51
+ Kettle::Soup::Cover::Version.class_eval do
52
+ extend VersionGem::Basic
53
+ end
@@ -1,4 +1,4 @@
1
- # USAGE:
1
+ # rubocop:disable Naming/FileName# USAGE:
2
2
  # In your `spec/spec_helper.rb`,
3
3
  # just prior to loading the library under test:
4
4
  #
@@ -10,13 +10,8 @@
10
10
  # SimpleCov.start
11
11
  #
12
12
 
13
- # External gems
14
- require "version_gem"
15
-
16
- require_relative "kettle/soup/cover/version"
17
-
13
+ # For technical reasons, if we move to Zeitwerk, this cannot be require_relative.
14
+ # See: https://github.com/fxn/zeitwerk#for_gem_extension
15
+ # Hook for other libraries to load this library (e.g. via bundler)
18
16
  require "kettle/soup/cover"
19
-
20
- Kettle::Soup::Cover::Version.class_eval do
21
- extend VersionGem::Basic
22
- end
17
+ # rubocop:enable Naming/FileName
File without changes
@@ -4,7 +4,6 @@ module Kettle
4
4
  module Cover
5
5
  CI: String
6
6
  COMMAND_NAME: String
7
- CONSTANTS: Array[String]
8
7
  COVERAGE_DIR: String
9
8
  DEBUG: bool
10
9
  DO_COV: bool
@@ -22,6 +21,7 @@ module Kettle
22
21
  MULTI_FORMATTERS_DEFAULT: String
23
22
  PREFIX: String
24
23
  TRUE: String
24
+ OPEN_BIN: String
25
25
  USE_MERGING: bool?
26
26
  VERBOSE: bool
27
27
  VERSION: String
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-soup-cover
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -11,31 +11,31 @@ cert_chain:
11
11
  -----BEGIN CERTIFICATE-----
12
12
  MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
13
13
  ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
14
- A2NvbTAeFw0yNDA5MjAwODU4NDJaFw0yNTA5MjAwODU4NDJaMEMxFTATBgNVBAMM
14
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
15
15
  DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
16
- LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAjrxsKObI
17
- rFQjBpzvVfqnT6JlF8/pkpgEEjFh7ex3zIerfuHzZvSrx+sRDGxQ8koWWG0Wjx8s
18
- wkBZ5dIqvl0g3sWP5asa28u/09opxkQTC1Ao77iYxcBcwoCe/Dpf1m4Q/m6oH0kL
19
- 2AZVNJQL3UkqAcLS0tsj/s/jAKnVlsaZZE5gQiIIi8HtkvSsajtx+Cq2AxDvcWvV
20
- /CliD+pmzYkTjvjwGm8yeyFGGGgrisJMryiZdZlkTwrQSjCzudIKbLeuG8Se4JTD
21
- TAcT+rPubr27v1jwmtIjtiot3rf4nof7LHLb122a/0VR7cC7xPLnXw0Cq1BShvoq
22
- /GKRdSwMNinTOGkFTK1gKnjN+3iD4zyXU3XO3CXoTr+Ju8fXPN1x4tpOMgbv8dme
23
- WbcQMOH9ZjmA5w0bSVRL1c3NhRRpUzrKTNXBEvqOyWjUnintxWKj+cRXx+z+dUgI
24
- dL3kj68fcsiTgl75In3C485pnCMmq1eLuVoiy3jkLNOn2lHeLt9ZK63LAgMBAAGj
25
- fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRhfc+2UaVYd74p
26
- yJ1JclGiUYN8+jAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
16
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
17
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
18
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
19
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
20
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
21
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
22
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
23
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
24
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
25
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
26
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
27
27
  A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
28
- ggGBAA4fLU2+mQ++jBhVM2IeyvQdw1nm+0thkH4Ldv8ZOBm5ZxCPGIMoYliDDzg4
29
- 4JDFxZR1wR4sdrz/K5tWtEkN23SKzopwbNb1NIQRSLQ7nOoc+4bkuz9xwKinmIvF
30
- D+5qsl2S27WLKFreMDtGoh0CREIMBUxU4rGTh0gtzmweGR+fnOShg4Jo0kxrjU5h
31
- uYk/uVE+bn/jOEGs43GvKXZLyshpBrZjQ+ArbvxDht5t35zbSxerbUxUPZUbXUCW
32
- tTyh38a9UYjAAHvnh6Y4Fi9wd4/pGNsektrzB3z/zlVj4YF2TMLX9XfNJWEGRGpO
33
- sSkLYdtEX1WQAmuZtActVW2cL3HdQaRbiv7VbfpA0eSk0ZdZHvBCl516ZZu10uX6
34
- 82W1mg6fuezdpeBOiXwrEbZSt/oGiF4V511F6nd55p0okwHc/6nS10F/3aKJ4gwC
35
- I5o+DRfXQHqKucx1ldFHvI2rE/kSCWqGTHN2eyu1sqCPeOoIMxrltJhaejKPkxqj
36
- zaF9Og==
28
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
29
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
30
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
31
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
32
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
33
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
34
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
35
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
+ L9nRqA==
37
37
  -----END CERTIFICATE-----
38
- date: 2025-04-04 00:00:00.000000000 Z
38
+ date: 2025-05-04 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: version_gem
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.1'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.1.4
49
+ version: 1.1.7
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '1.1'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.1.4
59
+ version: 1.1.7
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rake
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -224,7 +224,7 @@ dependencies:
224
224
  version: '0.9'
225
225
  - - ">="
226
226
  - !ruby/object:Gem::Version
227
- version: 0.9.36
227
+ version: 0.9.37
228
228
  type: :development
229
229
  prerelease: false
230
230
  version_requirements: !ruby/object:Gem::Requirement
@@ -234,7 +234,7 @@ dependencies:
234
234
  version: '0.9'
235
235
  - - ">="
236
236
  - !ruby/object:Gem::Version
237
- version: 0.9.36
237
+ version: 0.9.37
238
238
  - !ruby/object:Gem::Dependency
239
239
  name: yard-junk
240
240
  requirement: !ruby/object:Gem::Requirement
@@ -242,6 +242,9 @@ dependencies:
242
242
  - - "~>"
243
243
  - !ruby/object:Gem::Version
244
244
  version: '0.0'
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: 0.0.10
245
248
  type: :development
246
249
  prerelease: false
247
250
  version_requirements: !ruby/object:Gem::Requirement
@@ -249,6 +252,9 @@ dependencies:
249
252
  - - "~>"
250
253
  - !ruby/object:Gem::Version
251
254
  version: '0.0'
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: 0.0.10
252
258
  - !ruby/object:Gem::Dependency
253
259
  name: rubocop-lts
254
260
  requirement: !ruby/object:Gem::Requirement
@@ -275,48 +281,48 @@ dependencies:
275
281
  requirements:
276
282
  - - "~>"
277
283
  - !ruby/object:Gem::Version
278
- version: '0.5'
284
+ version: '0.6'
279
285
  - - ">="
280
286
  - !ruby/object:Gem::Version
281
- version: 0.5.2
287
+ version: 0.6.0
282
288
  type: :development
283
289
  prerelease: false
284
290
  version_requirements: !ruby/object:Gem::Requirement
285
291
  requirements:
286
292
  - - "~>"
287
293
  - !ruby/object:Gem::Version
288
- version: '0.5'
294
+ version: '0.6'
289
295
  - - ">="
290
296
  - !ruby/object:Gem::Version
291
- version: 0.5.2
297
+ version: 0.6.0
292
298
  - !ruby/object:Gem::Dependency
293
299
  name: rubocop-rspec
294
300
  requirement: !ruby/object:Gem::Requirement
295
301
  requirements:
296
302
  - - "~>"
297
303
  - !ruby/object:Gem::Version
298
- version: '2.24'
304
+ version: '3.5'
299
305
  type: :development
300
306
  prerelease: false
301
307
  version_requirements: !ruby/object:Gem::Requirement
302
308
  requirements:
303
309
  - - "~>"
304
310
  - !ruby/object:Gem::Version
305
- version: '2.24'
311
+ version: '3.5'
306
312
  - !ruby/object:Gem::Dependency
307
313
  name: rspec
308
314
  requirement: !ruby/object:Gem::Requirement
309
315
  requirements:
310
316
  - - "~>"
311
317
  - !ruby/object:Gem::Version
312
- version: '3.12'
318
+ version: '3.13'
313
319
  type: :development
314
320
  prerelease: false
315
321
  version_requirements: !ruby/object:Gem::Requirement
316
322
  requirements:
317
323
  - - "~>"
318
324
  - !ruby/object:Gem::Version
319
- version: '3.12'
325
+ version: '3.13'
320
326
  - !ruby/object:Gem::Dependency
321
327
  name: rspec-block_is_expected
322
328
  requirement: !ruby/object:Gem::Requirement
@@ -371,9 +377,30 @@ dependencies:
371
377
  - - ">="
372
378
  - !ruby/object:Gem::Version
373
379
  version: 1.0.1
380
+ - !ruby/object:Gem::Dependency
381
+ name: silent_stream
382
+ requirement: !ruby/object:Gem::Requirement
383
+ requirements:
384
+ - - "~>"
385
+ - !ruby/object:Gem::Version
386
+ version: '1.0'
387
+ - - ">="
388
+ - !ruby/object:Gem::Version
389
+ version: 1.0.8
390
+ type: :development
391
+ prerelease: false
392
+ version_requirements: !ruby/object:Gem::Requirement
393
+ requirements:
394
+ - - "~>"
395
+ - !ruby/object:Gem::Version
396
+ version: '1.0'
397
+ - - ">="
398
+ - !ruby/object:Gem::Version
399
+ version: 1.0.8
374
400
  description: |
375
401
  A Covered Kettle of Test Coverage SOUP (Software of Unknown Provenance)
376
402
  Four-line SimpleCov config, w/ curated, opinionated, pre-configured, dependencies
403
+ for every CI platform, batteries included.
377
404
  email:
378
405
  - peter.boling@gmail.com
379
406
  executables: []
@@ -393,30 +420,33 @@ files:
393
420
  - README.md
394
421
  - SECURITY.md
395
422
  - lib/kettle-soup-cover.rb
423
+ - lib/kettle/change.rb
396
424
  - lib/kettle/soup/cover.rb
397
425
  - lib/kettle/soup/cover/config.rb
426
+ - lib/kettle/soup/cover/constants.rb
398
427
  - lib/kettle/soup/cover/filters/gt_line_filter.rb
399
428
  - lib/kettle/soup/cover/filters/lt_line_filter.rb
429
+ - lib/kettle/soup/cover/loaders.rb
400
430
  - lib/kettle/soup/cover/rakelib/coverage.rake
401
431
  - lib/kettle/soup/cover/tasks.rb
402
432
  - lib/kettle/soup/cover/version.rb
403
433
  - sig/kettle/soup/cover.rbs
404
434
  - sig/kettle/soup/cover/version.rbs
405
- homepage: https://gitlab.com/kettle-rb/kettle-soup-cover
435
+ homepage: https://github.com/kettle-rb/kettle-soup-cover
406
436
  licenses:
407
437
  - MIT
408
438
  metadata:
409
439
  homepage_uri: https://kettle-rb.gitlab.io/
410
- source_code_uri: https://gitlab.com/kettle-rb/kettle-soup-cover/-/tree/v1.0.5
411
- changelog_uri: https://gitlab.com/kettle-rb/kettle-soup-cover/-/blob/v1.0.5/CHANGELOG.md
412
- bug_tracker_uri: https://gitlab.com/kettle-rb/kettle-soup-cover/-/issues
413
- documentation_uri: https://www.rubydoc.info/gems/kettle-soup-cover/1.0.5
414
- wiki_uri: https://gitlab.com/kettle-rb/kettle-soup-cover/-/wiki
440
+ source_code_uri: https://github.com/kettle-rb/kettle-soup-cover/tree/v1.0.6
441
+ changelog_uri: https://github.com/kettle-rb/kettle-soup-cover/blob/v1.0.6/CHANGELOG.md
442
+ bug_tracker_uri: https://github.com/kettle-rb/kettle-soup-cover/issues
443
+ documentation_uri: https://www.rubydoc.info/gems/kettle-soup-cover/1.0.6
444
+ wiki_uri: https://github.com/kettle-rb/kettle-soup-cover/wiki
415
445
  funding_uri: https://liberapay.com/pboling
416
446
  rubygems_mfa_required: 'true'
417
447
  rdoc_options:
418
448
  - "--title"
419
- - kettle-soup-cover - A Covered Kettle of SOUP, A Code Coverage Meta Gem
449
+ - kettle-soup-cover - Code Coverage Meta Gem for SimpleCov on every/any CI
420
450
  - "--main"
421
451
  - README.md
422
452
  - "--line-numbers"
@@ -435,7 +465,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
435
465
  - !ruby/object:Gem::Version
436
466
  version: '0'
437
467
  requirements: []
438
- rubygems_version: 3.6.6
468
+ rubygems_version: 3.6.8
439
469
  specification_version: 4
440
- summary: A Covered Kettle of SOUP, A Code Coverage Meta Gem
470
+ summary: Code Coverage Meta Gem for SimpleCov on every/any CI
441
471
  test_files: []
metadata.gz.sig CHANGED
Binary file