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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +28 -1
- data/CONTRIBUTING.md +11 -6
- data/README.md +77 -28
- data/SECURITY.md +12 -4
- data/lib/kettle/change.rb +39 -0
- data/lib/kettle/soup/cover/config.rb +10 -10
- data/lib/kettle/soup/cover/constants.rb +113 -0
- data/lib/kettle/soup/cover/filters/gt_line_filter.rb +0 -0
- data/lib/kettle/soup/cover/filters/lt_line_filter.rb +0 -0
- data/lib/kettle/soup/cover/loaders.rb +36 -0
- data/lib/kettle/soup/cover/rakelib/coverage.rake +20 -2
- data/lib/kettle/soup/cover/tasks.rb +0 -0
- data/lib/kettle/soup/cover/version.rb +1 -1
- data/lib/kettle/soup/cover.rb +23 -139
- data/lib/kettle-soup-cover.rb +5 -10
- data/sig/kettle/soup/cover/version.rbs +0 -0
- data/sig/kettle/soup/cover.rbs +1 -1
- data.tar.gz.sig +0 -0
- metadata +74 -44
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82f4891a6e2c54e8489c5f559557d7b19b96d85cabea4e90d060921ed9c4dd44
|
4
|
+
data.tar.gz: b04646d864b370984405e13252fdc1b2f7a87b9883a39059978db469f9934077
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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**:
|
71
|
-
|
72
|
-
|
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]
|
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
|
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
|
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
|
-
|
35
|
+
Four lines of code to get a configured, curated, opinionated, set of dependencies for Test Coverage.
|
36
36
|
|
37
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
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 "
|
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/
|
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://
|
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/
|
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.
|
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
|
-
##
|
9
|
+
## Security contact information
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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"]
|
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
|
-
|
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
|
data/lib/kettle/soup/cover.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
24
|
-
|
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
|
122
|
-
|
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
|
140
|
-
|
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
|
data/lib/kettle-soup-cover.rb
CHANGED
@@ -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
|
-
#
|
14
|
-
|
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
|
data/sig/kettle/soup/cover.rbs
CHANGED
@@ -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.
|
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
|
-
|
14
|
+
A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
|
15
15
|
DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
/
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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-
|
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.
|
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.
|
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.
|
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.
|
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.
|
284
|
+
version: '0.6'
|
279
285
|
- - ">="
|
280
286
|
- !ruby/object:Gem::Version
|
281
|
-
version: 0.
|
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.
|
294
|
+
version: '0.6'
|
289
295
|
- - ">="
|
290
296
|
- !ruby/object:Gem::Version
|
291
|
-
version: 0.
|
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: '
|
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: '
|
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.
|
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.
|
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://
|
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://
|
411
|
-
changelog_uri: https://
|
412
|
-
bug_tracker_uri: https://
|
413
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-soup-cover/1.0.
|
414
|
-
wiki_uri: https://
|
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 -
|
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.
|
468
|
+
rubygems_version: 3.6.8
|
439
469
|
specification_version: 4
|
440
|
-
summary:
|
470
|
+
summary: Code Coverage Meta Gem for SimpleCov on every/any CI
|
441
471
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|