silent_stream 1.0.10 → 1.0.12

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.
data/README.md CHANGED
@@ -1,63 +1,94 @@
1
- # SilentStream
2
-
3
- [![Version][👽versioni]][👽version]
4
- [![License: MIT][📄license-img]][📄license-ref]
5
- [![Downloads Rank][👽dl-ranki]][👽dl-rank]
6
- [![Open Source Helpers][👽oss-helpi]][👽oss-help]
7
- [![Depfu][🔑depfui♻️]][🔑depfu]
8
- [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov]
9
- [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
10
- [![CodeClimate Test Coverage][🔑cc-covi♻️]][🔑cc-cov]
11
- [![Maintainability][🔑cc-mnti♻️]][🔑cc-mnt]
12
- [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf]
13
- [![CI Current][🚎11-c-wfi]][🚎11-c-wf]
14
- [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf]
15
- [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf]
16
- [![CI Supported][🚎6-s-wfi]][🚎6-s-wf]
17
- [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf]
18
- [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf]
19
- [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf]
20
- [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf]
21
- [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
1
+ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![silent_stream Logo by Aboling0, CC BY-SA 4.0][🖼️silent_stream-i]][🖼️silent_stream]
2
+
3
+ [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
4
+ [🖼️galtzo-discord]: https://discord.gg/3qme4XHNKN
5
+ [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
6
+ [🖼️ruby-lang]: https://www.ruby-lang.org/
7
+ [🖼️silent_stream-i]: https://logos.galtzo.com/assets/images/galtzo-floss/silent_stream/avatar-192px.svg
8
+ [🖼️silent_stream]: https://github.com/galtzo-floss/silent_stream
9
+
10
+ # 🪶 SilentStream
11
+
12
+ [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] [![QLTY Maintainability][🔑qlty-mnti]][🔑qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf] [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
13
+
14
+ If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
22
15
 
23
16
  ---
24
17
 
25
- [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay]
26
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
27
- [![Buy me a coffee][🖇buyme-small-img]][🖇buyme]
28
- [![Donate on Polar][🖇polar-img]][🖇polar]
29
- [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
30
- [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
18
+ OTOH, if `ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS is now my full-time job.
19
+
20
+ [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
21
+
22
+ ## 🌻 Synopsis
31
23
 
32
24
  SilentStream is an extraction of some parts of ActiveSupport's Kernel Reporting Core Extentions around silencing IO streams.
33
25
 
34
26
  Since July 2014 `silence_stream`, `silence_stderr`, `capture`, `silence`, and `quietly` have been deprecated because they are not thread safe. See that discussion in the [PR where it all went down](https://github.com/rails/rails/pull/13392). I rely on them a lot in *single threaded* code, and so I plan to keep them alive. With the exception of `silence`, which was just an alias of `capture`.
35
27
 
36
- This gem was taken out of Rails but it is *not* Rails dependent. The extraction was total (**even the tests**!), and this is now a pure Ruby library, which can be used in any Ruby project without encumbrances. *This gem has no runtime dependencies*.
28
+ This gem was taken out of Rails but it is *not* Rails dependent. The extraction was total (**even the tests**!), and this is now a pure Ruby library, which can be used in any Ruby project without encumbrances. I dramatically increased test coverage to 100% / 100% for lines / branches, and fixed issues with modern Rubies, *This gem has no runtime dependencies*.
29
+
30
+ ### NOTE
31
+
32
+ One aspect of what this gem provides can be achieved with the Rails' built-in [`LoggerSilence`](https://github.com/rails/rails/blob/5-2-stable/activesupport/lib/active_support/logger_silence.rb), which is thread safe. You will have to decide what is right for you!
33
+
34
+ ### Doing a Rails <= 4 to Rails >= 5 Upgrade?
35
+
36
+ The reason for not keeping `silence` as it was in Rails 4, i.e. an alias of `capture`, is that the just mentioned `LoggerSilence` now uses this term, and it is shipping with Rails 5. I don't want to make this gem incompatible with Rails 5, so you will have to convert Rails <= 4 implementations that utilize `silence` over to `capture` when using this gem. One further point of difference is this gem does not add the methods to `Kernel` or `Object`. You can do that if you like via `include`. By default this gem does not pollute anything, so you will need to `include SilentStream` in any class, or RSpec context, using these methods.
37
+
38
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 |
39
+ |------------------------------------------------|-------------------------------------------------------------------------------------|
40
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
37
41
 
38
42
  ## 💡 Info you can shake a stick at
39
43
 
40
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
41
- |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
42
- | Works with JRuby | [![JRuby 9.1 Compat][💎jruby-9.1i]][🚎10-j-wf] [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
43
- | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎9-t-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎9-t-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
44
- | 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] |
45
- | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
46
- | 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] |
47
- | 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] |
48
- | 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] |
49
- | 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] |
50
- | 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! |
51
- | 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] |
52
- | `...` 💖 | [![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] |
53
-
54
- ## NOTE
44
+ ### Federated DVCS
55
45
 
56
- One aspect of what this gem provides can be achieved with the Rails' built-in [`LoggerSilence`](https://github.com/rails/rails/blob/5-2-stable/activesupport/lib/active_support/logger_silence.rb), which is thread safe. You will have to decide what is right for you!
46
+ <details>
47
+ <summary>Find this repo on other forges</summary>
48
+
49
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
50
+ |--------------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
51
+ | 🧪 [galtzo-floss/silent_stream on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
52
+ | 🧊 [galtzo-floss/silent_stream on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
53
+ | 🐙 [galtzo-floss/silent_stream on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
54
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
55
+
56
+ </details>
57
+
58
+ [gh-discussions]: https://github.com/galtzo-floss/silent_stream/discussions
59
+
60
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/timecop-rspec)](https://tidelift.com/subscription/pkg/rubygems-timecop-rspec?utm_source=rubygems-timecop-rspec&utm_medium=referral&utm_campaign=readme)
61
+
62
+ <details>
63
+ <summary>Need enterprise-level guarantees?</summary>
64
+
65
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
66
+
67
+ - 💡Subscribe for support guarantees covering _all_ FLOSS dependencies
68
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
69
+ - 💡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
+
71
+ Alternatively:
72
+
73
+ - [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
74
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
75
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
57
76
 
58
- ## Doing a Rails <= 4 to Rails >= 5 Upgrade?
77
+ </details>
59
78
 
60
- The reason for not keeping `silence` as it was in Rails 4, i.e. an alias of `capture`, is that the just mentioned `LoggerSilence` now uses this term, and it is shipping with Rails 5. I don't want to make this gem incompatible with Rails 5, so you will have to convert Rails <= 4 implementations that utilize `silence` over to `capture` when using this gem. One further point of difference is this gem does not add the methods to `Kernel` or `Object`. You can do that if you like via `include`. By default this gem does not pollute anything, so you will need to `include SilentStream` in any class using these methods.
79
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
80
+ |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
81
+ | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] <br/> [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
82
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] <br/> [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎9-t-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] ![Truffle Ruby HEAD Compat][💎truby-headi] |
83
+ | 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] |
84
+ | Works with MRI Ruby 2 | ![Ruby 2.3 Compat][💎ruby-2.3i] ![Ruby 2.4 Compat][💎ruby-2.4i] <br/> [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
85
+ | 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] |
86
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![Wiki][📜wiki-img]][📜wiki] |
87
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
88
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
89
+ | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
90
+ | Maintainer 🎖️ | [![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 Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
91
+ | `...` 💖 | [![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] |
61
92
 
62
93
  ## ✨ Installation
63
94
 
@@ -71,33 +102,39 @@ If bundler is not being used to manage dependencies, install the gem by executin
71
102
 
72
103
  ### 🔒 Secure Installation
73
104
 
74
- `silent_stream` is cryptographically signed. Be sure the gem you install hasn’t been tampered with
105
+ <details>
106
+ <summary>For Medium or High Security Installations</summary>
107
+
108
+ This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
109
+ [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
75
110
  by following the instructions below.
76
111
 
77
112
  Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
78
113
 
79
- ```shell
80
- gem cert --add <(curl -Ls https://raw.github.com/pboling/silent_stream/master/certs/pboling.pem)
114
+ ```console
115
+ gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
81
116
  ```
82
117
 
83
118
  You only need to do that once. Then proceed to install with:
84
119
 
85
- ```shell
120
+ ```console
86
121
  gem install silent_stream -P MediumSecurity
87
122
  ```
88
123
 
89
124
  The `MediumSecurity` trust profile will verify signed gems, but allow the installation of unsigned dependencies.
90
125
 
91
- This is necessary because not all of `silent_stream`’s dependencies are signed, so we cannot use `HighSecurity`.
92
-
93
126
  If you want to up your security game full-time:
94
127
 
95
- ```shell
128
+ ```console
96
129
  bundle config set --global trust-policy MediumSecurity
97
130
  ```
98
131
 
132
+ `MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
133
+
99
134
  NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
100
135
 
136
+ </details>
137
+
101
138
  ## 🔧 Basic Usage
102
139
 
103
140
  Four standard methods you may be familiar with from ActiveSupport's previous implementation are provided:
@@ -122,6 +159,8 @@ end
122
159
 
123
160
  In addition there is a `silence_all` method that is a useful wrapper that can be easily instrumented (turned off and on) with an ENV variable switch.
124
161
 
162
+ - Environment toggle: Set `NO_SILENCE=true` to bypass silencing entirely (useful in CI or when debugging). Any truthy value other than the literal string `"true"` is ignored — use exactly `true`.
163
+
125
164
  Including the `SilentStream` namespace fully gives access to this enhanced method, as well as the extracted methods above, and also makes everything available at the class and instance levels.
126
165
 
127
166
  ```ruby
@@ -176,7 +215,24 @@ it "has output" do
176
215
  end
177
216
  ```
178
217
 
179
- See it in practice in the specs for the [oauth2 gem](https://github.com/oauth-xx/oauth2/blob/master/spec/oauth2/client_spec.rb#L193) and the [debug_logging gem](https://github.com/pboling/debug_logging/blob/master/spec/debug_logging/instance_logger_spec.rb#L10)
218
+ #### Better use in specs
219
+
220
+ ```ruby
221
+ config.include(SilentStream)
222
+
223
+ # Silence STDOUT for examples NOT tagged with :check_output
224
+ config.around(:example) do |example|
225
+ if example.metadata[:check_output]
226
+ example.run
227
+ else
228
+ silence_stream($stdout) do
229
+ example.run
230
+ end
231
+ end
232
+ end
233
+ ```
234
+
235
+ See it in practice in the specs for the [oauth2 gem](https://github.com/oauth-xx/oauth2/blob/main/spec/oauth2/client_spec.rb#L193) and the [debug_logging gem](https://github.com/pboling/debug_logging/blob/main/spec/debug_logging/instance_logger_spec.rb#L10)
180
236
 
181
237
  ### Migrate from ActiveSupport::Testing::Stream, or remove ActiveSupport completely, in your ruby library!
182
238
 
@@ -200,9 +256,16 @@ RSpec.configure do |config|
200
256
 
201
257
  Run spec suite to verify everything is good. This gem is as close as can be to a drop-in replacement for Rails' `ActiveSupport::Testing::Stream`.
202
258
 
203
- ### 🚀 Release Instructions
259
+ ## 🚚 Switch to `main` branch
204
260
 
205
- See [CONTRIBUTING.md][🤝contributing].
261
+ We migrated from `master` to `main` as the default branch. If this affected your local checkout:
262
+
263
+ ```console
264
+ git branch -m master main
265
+ git fetch origin
266
+ git branch -u origin/main main
267
+ git remote set-head origin -a
268
+ ```
206
269
 
207
270
  ## 🔐 Security
208
271
 
@@ -211,22 +274,39 @@ See [SECURITY.md][🔐security].
211
274
  ## 🤝 Contributing
212
275
 
213
276
  If you need some ideas of where to help, you could work on adding more code coverage,
214
- or if it is already 💯 (see [below](#code-coverage)) check TODOs (see [below](#todos)),
215
- or check [issues][🤝issues], or [PRs][🤝pulls],
277
+ or if it is already 💯 (see [below](#code-coverage)), check [reek](REEK),
278
+ check [GitHub][🤝gh-issues], [GitLab][🤝gl-issues], or [CodeBerg][🤝cb-issues], issues,
216
279
  or use the gem and think about how it could be better.
217
280
 
218
281
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
219
282
 
220
283
  See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
221
284
 
285
+ ### 🚀 Release Instructions
286
+
287
+ See [CONTRIBUTING.md][🤝contributing].
288
+
289
+ ### Types
290
+
291
+ This library ships RBS type definitions under `sig/` that cover the public API. Editors and tools like Steep and TypeProf can use these for type checking and navigation.
292
+
293
+ - Methods like `silence_stream`, `silence_stderr`, and `quietly` return the value returned by the given block.
294
+ - `capture(:stdout | :stderr) { ... }` returns a String of the captured output.
295
+
296
+ YARD is also provided for human-readable API docs. See the badges above for links to the generated documentation.
297
+
222
298
  ### Code Coverage
223
299
 
224
300
  [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
225
301
 
302
+ [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
303
+
304
+ [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov]
305
+
226
306
  ### 🪇 Code of Conduct
227
307
 
228
- Everyone interacting in this project's codebases, issue trackers,
229
- chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
308
+ Everyone interacting with this project's codebases, issue trackers,
309
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
230
310
 
231
311
  ## 🌈 Contributors
232
312
 
@@ -234,18 +314,21 @@ chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2
234
314
 
235
315
  Made with [contributors-img][🖐contrib-rocks].
236
316
 
237
- Also see GitLab Contributors: [https://gitlab.com/pboling/silent_stream/-/graphs/master][🚎contributors-gl]
317
+ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/silent_stream/-/graphs/main][🚎contributors-gl]
238
318
 
239
- ## ⭐️ Star History
319
+ <details>
320
+ <summary>⭐️ Star History</summary>
240
321
 
241
- <a href="https://star-history.com/#pboling/silent_stream&Date">
322
+ <a href="https://star-history.com/#galtzo-floss/timecop-rspec&Date">
242
323
  <picture>
243
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=pboling/silent_stream&type=Date&theme=dark" />
244
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=pboling/silent_stream&type=Date" />
245
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=pboling/silent_stream&type=Date" />
324
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/timecop-rspec&type=Date&theme=dark" />
325
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/timecop-rspec&type=Date" />
326
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=galtzo-floss/timecop-rspec&type=Date" />
246
327
  </picture>
247
328
  </a>
248
329
 
330
+ </details>
331
+
249
332
  ## 📌 Versioning
250
333
 
251
334
  This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
@@ -254,34 +337,35 @@ Specifically, if a minor or patch version is released that breaks backward compa
254
337
  a new version should be immediately released that restores compatibility.
255
338
  Breaking changes to the public API will only be introduced with new major versions.
256
339
 
257
- ### 📌 Is "Platform Support" part of the public API?
340
+ > dropping support for a platform is both obviously and objectively a breaking change <br/>
341
+ >—Jordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
342
+
343
+ I understand that policy doesn't work universally ("exceptions to every rule!"),
344
+ but it is the policy here.
345
+ As such, in many cases it is good to specify a dependency on this library using
346
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
347
+
348
+ For example:
349
+
350
+ ```ruby
351
+ spec.add_dependency("silent_stream", "~> 1.0")
352
+ ```
258
353
 
259
- Yes. But I'm obligated to include notes...
354
+ <details>
355
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
260
356
 
261
357
  SemVer should, but doesn't explicitly, say that dropping support for specific Platforms
262
358
  is a *breaking change* to an API.
263
359
  It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
264
360
 
265
- > dropping support for a platform is both obviously and objectively a breaking change
266
-
267
- - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
268
-
269
361
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
270
362
  read this article from the creator of SemVer:
271
363
 
272
364
  - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
273
365
 
274
- As a result of this policy, and the interpretive lens used by the maintainer,
275
- you can (and should) specify a dependency on these libraries using
276
- the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
277
-
278
- For example:
279
-
280
- ```ruby
281
- spec.add_dependency("silent_stream", "~> 1.0")
282
- ```
366
+ </details>
283
367
 
284
- See [CHANGELOG.md][📌changelog] for list of releases.
368
+ See [CHANGELOG.md][📌changelog] for a list of releases.
285
369
 
286
370
  ## 📄 License
287
371
 
@@ -291,39 +375,72 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
291
375
 
292
376
  ### © Copyright
293
377
 
294
- <p>
295
- Copyright (c) 2018 - 2020, 2024 - 2025 Peter H. Boling,
296
- <a href="https://railsbling.com">
297
- RailsBling.com
298
- <picture>
299
- <img alt="Rails Bling" height="20" src="https://railsbling.com/images/logos/RailsBling-TrainLogo.svg" />
300
- </picture>
301
- </a>
302
- </p>
378
+ <ul>
379
+ <li>
380
+ Copyright (c) 2018-2020, 2024-2025 Peter H. Boling, of
381
+ <a href="https://discord.gg/3qme4XHNKN">
382
+ Galtzo.com
383
+ <picture>
384
+ <img src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px-blank.svg" alt="Galtzo.com Logo (Wordless) by Aboling0, CC BY-SA 4.0" width="24">
385
+ </picture>
386
+ </a>, and silent-stream contributors
387
+ </li>
388
+ </ul>
389
+
390
+ ## 🤑 A request for help
391
+
392
+ Maintainers have teeth, and need to pay their dentists.
393
+ After getting laid off in an RIF in March, and filled with many dozens of rejections,
394
+ I'm now spending ~80 hours a week building open source tools.
395
+ I'm hoping to be able to pay for my kids' health insurance this month,
396
+ so if you value the work I am doing, I need your support.
397
+ Please consider sponsoring me.
398
+
399
+ [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
400
+
401
+ To say "thanks for maintaining such a great tool" 👇️ Join the Discord or ☝️ send money.
402
+
403
+ To join the community or get help 👇️ Join the Discord.
303
404
 
304
- ## 🤑 One more thing
405
+ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
305
406
 
306
- You made it to the bottom of the page,
307
- so perhaps you'll indulge me for another 20 seconds.
308
- I maintain many dozens of gems, including this one,
309
- because I want Ruby to be a great place for people to solve problems, big and small.
310
- Please consider supporting my efforts via the giant yellow link below,
311
- or one of the others at the head of this README.
407
+ Thanks for RTFM. ☺️
312
408
 
313
- [![Buy me a latte][🖇buyme-img]][🖇buyme]
409
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611
410
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
411
+ [⛳liberapay]: https://liberapay.com/pboling/donate
412
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
413
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
414
+ [🖇sponsor]: https://github.com/sponsors/pboling
415
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg
416
+ [🖇polar]: https://polar.sh/pboling
417
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg
418
+ [🖇kofi]: https://ko-fi.com/O5O86SNP4
419
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg
420
+ [🖇patreon]: https://patreon.com/galtzo
421
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat
422
+ [🖇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
423
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
424
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
425
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
426
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
427
+ [🖇floss-funding.dev]: https://floss-funding.dev
428
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
429
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
430
+ [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
314
431
 
315
432
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
316
- [⛳️gem-namespace]: https://github.com/pboling/silent_stream/blob/master/lib/masq.rb
317
- [⛳️namespace-img]: https://img.shields.io/badge/namespace-SilentStream-brightgreen.svg?style=flat&logo=ruby&logoColor=white
433
+ [⛳️gem-namespace]: https://github.com/galtzo-floss/silent_stream
434
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-SilentStream-3C2D2D.svg?style=square&logo=ruby&logoColor=white
318
435
  [⛳️gem-name]: https://rubygems.org/gems/silent_stream
319
- [⛳️name-img]: https://img.shields.io/badge/name-silent_stream-brightgreen.svg?style=flat&logo=rubygems&logoColor=red
320
- [🚂bdfl-blog]: http://www.railsbling.com/tags/silent_stream
321
- [🚂bdfl-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
322
- [🚂bdfl-contact]: http://www.railsbling.com/contact
323
- [🚂bdfl-contact-img]: https://img.shields.io/badge/Contact-BDFL-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
436
+ [⛳️name-img]: https://img.shields.io/badge/name-silent__stream-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
437
+ [🚂maint-blog]: http://www.railsbling.com/tags/silent_stream
438
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
439
+ [🚂maint-contact]: http://www.railsbling.com/contact
440
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
324
441
  [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
325
442
  [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
326
- [💖✌️wellfound]: https://angel.co/u/peter-boling
443
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling/u/peter-boling
327
444
  [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
328
445
  [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
329
446
  [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
@@ -351,70 +468,59 @@ or one of the others at the head of this README.
351
468
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
352
469
  [🚂railsbling]: http://www.railsbling.com
353
470
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
354
- [📜src-gl]: https://gitlab.com/pboling/silent_stream/
471
+ [📜src-gl]: https://gitlab.com/galtzo-floss/silent_stream/
355
472
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
356
- [📜src-cb]: https://codeberg.org/pboling/silent_stream
473
+ [📜src-cb]: https://codeberg.org/galtzo-floss/silent_stream
357
474
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
358
- [📜src-gh]: https://github.com/pboling/silent_stream
475
+ [📜src-gh]: https://github.com/galtzo-floss/silent_stream
359
476
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
360
- [📜docs-head-rd-img]: https://img.shields.io/badge/RubyDoc-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
361
- [📜wiki]: https://gitlab.com/pboling/silent_stream/-/wikis/home
477
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
478
+ [📜wiki]: https://gitlab.com/galtzo-floss/silent_stream/-/wikis/home
362
479
  [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
363
480
  [👽dl-rank]: https://rubygems.org/gems/silent_stream
364
481
  [👽dl-ranki]: https://img.shields.io/gem/rd/silent_stream.svg
365
- [👽oss-help]: https://www.codetriage.com/pboling/silent_stream
366
- [👽oss-helpi]: https://www.codetriage.com/pboling/silent_stream/badges/users.svg
482
+ [👽oss-help]: https://www.codetriage.com/galtzo-floss/silent_stream
483
+ [👽oss-helpi]: https://www.codetriage.com/galtzo-floss/silent_stream/badges/users.svg
367
484
  [👽version]: https://rubygems.org/gems/silent_stream
368
485
  [👽versioni]: https://img.shields.io/gem/v/silent_stream.svg
369
- [🔑cc-mnt]: https://qlty.sh/gh/pboling/projects/silent_stream
370
- [🔑cc-mnti♻️]: https://qlty.sh/badges/3884b648-a5a9-4458-9671-a2ce38a1d470/maintainability.svg
371
- [🔑cc-cov]: https://qlty.sh/gh/pboling/projects/silent_stream
372
- [🔑cc-covi♻️]: https://qlty.sh/badges/3884b648-a5a9-4458-9671-a2ce38a1d470/test_coverage.svg
373
- [🔑codecov]: https://codecov.io/gh/pboling/silent_stream
374
- [🔑codecovi♻️]: https://codecov.io/gh/pboling/silent_stream/branch/master/graph/badge.svg?token=Ad3ets1psE
375
- [🔑coveralls]: https://coveralls.io/github/pboling/silent_stream?branch=master
376
- [🔑coveralls-img]: https://coveralls.io/repos/github/pboling/silent_stream/badge.svg?branch=master
377
- [🔑depfu]: https://depfu.com/github/pboling/silent_stream?project_id=5828
378
- [🔑depfui♻️]: https://badges.depfu.com/badges/6633827ecc1ad3b5dd749b4ac822347b/count.svg
379
- [🖐codeQL]: https://github.com/pboling/silent_stream/security/code-scanning
380
- [🖐codeQL-img]: https://github.com/pboling/silent_stream/actions/workflows/codeql-analysis.yml/badge.svg
381
- [🚎1-an-wf]: https://github.com/pboling/silent_stream/actions/workflows/ancient.yml
382
- [🚎1-an-wfi]: https://github.com/pboling/silent_stream/actions/workflows/ancient.yml/badge.svg
383
- [🚎2-cov-wf]: https://github.com/pboling/silent_stream/actions/workflows/coverage.yml
384
- [🚎2-cov-wfi]: https://github.com/pboling/silent_stream/actions/workflows/coverage.yml/badge.svg
385
- [🚎3-hd-wf]: https://github.com/pboling/silent_stream/actions/workflows/heads.yml
386
- [🚎3-hd-wfi]: https://github.com/pboling/silent_stream/actions/workflows/heads.yml/badge.svg
387
- [🚎4-lg-wf]: https://github.com/pboling/silent_stream/actions/workflows/legacy.yml
388
- [🚎4-lg-wfi]: https://github.com/pboling/silent_stream/actions/workflows/legacy.yml/badge.svg
389
- [🚎5-st-wf]: https://github.com/pboling/silent_stream/actions/workflows/style.yml
390
- [🚎5-st-wfi]: https://github.com/pboling/silent_stream/actions/workflows/style.yml/badge.svg
391
- [🚎6-s-wf]: https://github.com/pboling/silent_stream/actions/workflows/supported.yml
392
- [🚎6-s-wfi]: https://github.com/pboling/silent_stream/actions/workflows/supported.yml/badge.svg
393
- [🚎7-us-wf]: https://github.com/pboling/silent_stream/actions/workflows/unsupported.yml
394
- [🚎7-us-wfi]: https://github.com/pboling/silent_stream/actions/workflows/unsupported.yml/badge.svg
395
- [🚎8-ho-wf]: https://github.com/pboling/silent_stream/actions/workflows/hoary.yml
396
- [🚎8-ho-wfi]: https://github.com/pboling/silent_stream/actions/workflows/hoary.yml/badge.svg
397
- [🚎9-t-wf]: https://github.com/pboling/silent_stream/actions/workflows/truffle.yml
398
- [🚎9-t-wfi]: https://github.com/pboling/silent_stream/actions/workflows/truffle.yml/badge.svg
399
- [🚎10-j-wf]: https://github.com/pboling/silent_stream/actions/workflows/jruby.yml
400
- [🚎10-j-wfi]: https://github.com/pboling/silent_stream/actions/workflows/jruby.yml/badge.svg
401
- [🚎11-c-wf]: https://github.com/pboling/silent_stream/actions/workflows/current.yml
402
- [🚎11-c-wfi]: https://github.com/pboling/silent_stream/actions/workflows/current.yml/badge.svg
403
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
404
- [⛳liberapay]: https://liberapay.com/pboling/donate
405
- [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
406
- [🖇sponsor]: https://github.com/sponsors/pboling
407
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
408
- [🖇polar]: https://polar.sh/pboling
409
- [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
410
- [🖇kofi]: https://ko-fi.com/O5O86SNP4
411
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
412
- [🖇patreon]: https://patreon.com/galtzo
413
- [🖇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
414
- [🖇buyme]: https://www.buymeacoffee.com/pboling
415
- [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
416
- [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
417
- [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
486
+ [🔑qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/silent_stream
487
+ [🔑qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/silent_stream/maintainability.svg
488
+ [🔑qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/silent_stream/metrics/code?sort=coverageRating
489
+ [🔑qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/silent_stream/coverage.svg
490
+ [🔑codecov]: https://codecov.io/gh/galtzo-floss/silent_stream
491
+ [🔑codecovi♻️]: https://codecov.io/gh/galtzo-floss/silent_stream/graph/badge.svg?token=Ad3ets1psE
492
+ [🔑coveralls]: https://coveralls.io/github/galtzo-floss/silent_stream?branch=main
493
+ [🔑coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/silent_stream/badge.svg?branch=main
494
+ [🖐codeQL]: https://github.com/galtzo-floss/silent_stream/security/code-scanning
495
+ [🖐codeQL-img]: https://github.com/galtzo-floss/silent_stream/actions/workflows/codeql-analysis.yml/badge.svg
496
+ [🚎1-an-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/ancient.yml
497
+ [🚎1-an-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/ancient.yml/badge.svg
498
+ [🚎2-cov-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/coverage.yml
499
+ [🚎2-cov-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/coverage.yml/badge.svg
500
+ [🚎3-hd-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/heads.yml
501
+ [🚎3-hd-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/heads.yml/badge.svg
502
+ [🚎4-lg-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/legacy.yml
503
+ [🚎4-lg-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/legacy.yml/badge.svg
504
+ [🚎5-st-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/style.yml
505
+ [🚎5-st-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/style.yml/badge.svg
506
+ [🚎6-s-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/supported.yml
507
+ [🚎6-s-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/supported.yml/badge.svg
508
+ [🚎7-us-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/unsupported.yml
509
+ [🚎7-us-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/unsupported.yml/badge.svg
510
+ [🚎8-ho-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/hoary.yml
511
+ [🚎8-ho-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/hoary.yml/badge.svg
512
+ [🚎9-t-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/truffle.yml
513
+ [🚎9-t-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/truffle.yml/badge.svg
514
+ [🚎10-j-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/jruby.yml
515
+ [🚎10-j-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/jruby.yml/badge.svg
516
+ [🚎11-c-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/current.yml
517
+ [🚎11-c-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/current.yml/badge.svg
518
+ [🚎13-🔒️-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/locked_deps.yml
519
+ [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/locked_deps.yml/badge.svg
520
+ [🚎14-🔓️-wf]: https://github.com/galtzo-floss/silent_stream/actions/workflows/unlocked_deps.yml
521
+ [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/silent_stream/actions/workflows/unlocked_deps.yml/badge.svg
522
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
523
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
418
524
  [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
419
525
  [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
420
526
  [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -424,46 +530,58 @@ or one of the others at the head of this README.
424
530
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
425
531
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
426
532
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
427
- [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
533
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
428
534
  [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
429
535
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
430
536
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
431
- [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
432
- [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
433
- [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
537
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=blue
538
+ [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=red
539
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=red
434
540
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
435
541
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
436
542
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
437
543
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
438
- [🤝issues]: https://github.com/pboling/silent_stream/issues
439
- [🤝pulls]: https://github.com/pboling/silent_stream/pulls
544
+ [🤝gh-issues]: https://github.com/galtzo-floss/silent_stream/issues
545
+ [🤝gh-pulls]: https://github.com/galtzo-floss/silent_stream/pulls
546
+ [🤝gl-issues]: https://gitlab.com/galtzo-floss/silent_stream/-/issues
547
+ [🤝gl-pulls]: https://gitlab.com/galtzo-floss/silent_stream/-/merge_requests
548
+ [🤝cb-issues]: https://codeberg.org/galtzo-floss/silent_stream/issues
549
+ [🤝cb-pulls]: https://codeberg.org/galtzo-floss/silent_stream/pulls
550
+ [🤝cb-donate]: https://donate.codeberg.org/
440
551
  [🤝contributing]: CONTRIBUTING.md
441
- [🔑codecov-g♻️]: https://codecov.io/gh/pboling/silent_stream/graphs/tree.svg?token=Ad3ets1psE
552
+ [🔑codecov-g♻️]: https://codecov.io/gh/galtzo-floss/silent_stream/graphs/tree.svg?token=Ad3ets1psE
442
553
  [🖐contrib-rocks]: https://contrib.rocks
443
- [🖐contributors]: https://github.com/pboling/silent_stream/graphs/contributors
444
- [🖐contributors-img]: https://contrib.rocks/image?repo=pboling/silent_stream
445
- [🚎contributors-gl]: https://gitlab.com/pboling/silent_stream/-/graphs/master
554
+ [🖐contributors]: https://github.com/galtzo-floss/silent_stream/graphs/contributors
555
+ [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/silent_stream
556
+ [🚎contributors-gl]: https://gitlab.com/galtzo-floss/silent_stream/-/graphs/main
446
557
  [🪇conduct]: CODE_OF_CONDUCT.md
447
- [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-4baaaa.svg
558
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
448
559
  [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
449
560
  [📌semver]: https://semver.org/spec/v2.0.0.html
450
- [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
561
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
451
562
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
452
563
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
453
564
  [📌changelog]: CHANGELOG.md
454
565
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
455
- [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
566
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
456
567
  [📌gitmoji]:https://gitmoji.dev
457
- [📌gitmoji-img]:https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg?style=flat-square
568
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
458
569
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
459
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.137-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
570
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.80-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
460
571
  [🔐security]: SECURITY.md
461
- [🔐security-img]: https://img.shields.io/badge/security-policy-brightgreen.svg?style=flat
572
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
462
573
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
463
574
  [📄license]: LICENSE.txt
464
575
  [📄license-ref]: https://opensource.org/licenses/MIT
465
- [📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
576
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
466
577
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
467
- [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-brightgreen.svg?style=flat
578
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
468
579
  [🚎yard-current]: http://rubydoc.info/gems/silent_stream
469
- [🚎yard-head]: https://rubydoc.info/github/pboling/silent_stream/master
580
+ [🚎yard-head]: https://silent-stream.galtzo.com
581
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
582
+ [💎SHA_checksums]: https://gitlab.com/galtzo-floss/silent_stream/-/tree/main/checksums
583
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
584
+ [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
585
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
586
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
587
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/