silent_stream 1.0.11 → 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] [![Enforced Code Style][💎rlts-img]][💎rlts] [![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,35 +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, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
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
75
109
  [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
76
110
  by following the instructions below.
77
111
 
78
-
79
112
  Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
80
113
 
81
- ```shell
82
- 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)
83
116
  ```
84
117
 
85
118
  You only need to do that once. Then proceed to install with:
86
119
 
87
- ```shell
120
+ ```console
88
121
  gem install silent_stream -P MediumSecurity
89
122
  ```
90
123
 
91
124
  The `MediumSecurity` trust profile will verify signed gems, but allow the installation of unsigned dependencies.
92
125
 
93
- This is necessary because not all of `silent_stream`’s dependencies are signed, so we cannot use `HighSecurity`.
94
-
95
126
  If you want to up your security game full-time:
96
127
 
97
- ```shell
128
+ ```console
98
129
  bundle config set --global trust-policy MediumSecurity
99
130
  ```
100
131
 
132
+ `MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
133
+
101
134
  NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
102
135
 
136
+ </details>
137
+
103
138
  ## 🔧 Basic Usage
104
139
 
105
140
  Four standard methods you may be familiar with from ActiveSupport's previous implementation are provided:
@@ -124,6 +159,8 @@ end
124
159
 
125
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.
126
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
+
127
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.
128
165
 
129
166
  ```ruby
@@ -178,7 +215,24 @@ it "has output" do
178
215
  end
179
216
  ```
180
217
 
181
- 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)
182
236
 
183
237
  ### Migrate from ActiveSupport::Testing::Stream, or remove ActiveSupport completely, in your ruby library!
184
238
 
@@ -202,9 +256,16 @@ RSpec.configure do |config|
202
256
 
203
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`.
204
258
 
205
- ### 🚀 Release Instructions
259
+ ## 🚚 Switch to `main` branch
206
260
 
207
- 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
+ ```
208
269
 
209
270
  ## 🔐 Security
210
271
 
@@ -213,22 +274,39 @@ See [SECURITY.md][🔐security].
213
274
  ## 🤝 Contributing
214
275
 
215
276
  If you need some ideas of where to help, you could work on adding more code coverage,
216
- or if it is already 💯 (see [below](#code-coverage)) check TODOs (see [below](#todos)),
217
- 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,
218
279
  or use the gem and think about how it could be better.
219
280
 
220
281
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
221
282
 
222
283
  See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
223
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
+
224
298
  ### Code Coverage
225
299
 
226
300
  [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
227
301
 
302
+ [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
303
+
304
+ [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov]
305
+
228
306
  ### 🪇 Code of Conduct
229
307
 
230
- Everyone interacting in this project's codebases, issue trackers,
231
- 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].
232
310
 
233
311
  ## 🌈 Contributors
234
312
 
@@ -236,18 +314,21 @@ chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2
236
314
 
237
315
  Made with [contributors-img][🖐contrib-rocks].
238
316
 
239
- 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]
240
318
 
241
- ## ⭐️ Star History
319
+ <details>
320
+ <summary>⭐️ Star History</summary>
242
321
 
243
- <a href="https://star-history.com/#pboling/silent_stream&Date">
322
+ <a href="https://star-history.com/#galtzo-floss/timecop-rspec&Date">
244
323
  <picture>
245
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=pboling/silent_stream&type=Date&theme=dark" />
246
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=pboling/silent_stream&type=Date" />
247
- <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" />
248
327
  </picture>
249
328
  </a>
250
329
 
330
+ </details>
331
+
251
332
  ## 📌 Versioning
252
333
 
253
334
  This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
@@ -256,34 +337,35 @@ Specifically, if a minor or patch version is released that breaks backward compa
256
337
  a new version should be immediately released that restores compatibility.
257
338
  Breaking changes to the public API will only be introduced with new major versions.
258
339
 
259
- ### 📌 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.
260
347
 
261
- Yes. But I'm obligated to include notes...
348
+ For example:
349
+
350
+ ```ruby
351
+ spec.add_dependency("silent_stream", "~> 1.0")
352
+ ```
353
+
354
+ <details>
355
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
262
356
 
263
357
  SemVer should, but doesn't explicitly, say that dropping support for specific Platforms
264
358
  is a *breaking change* to an API.
265
359
  It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
266
360
 
267
- > dropping support for a platform is both obviously and objectively a breaking change
268
-
269
- - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
270
-
271
361
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
272
362
  read this article from the creator of SemVer:
273
363
 
274
364
  - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
275
365
 
276
- As a result of this policy, and the interpretive lens used by the maintainer,
277
- you can (and should) specify a dependency on these libraries using
278
- the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
366
+ </details>
279
367
 
280
- For example:
281
-
282
- ```ruby
283
- spec.add_dependency("silent_stream", "~> 1.0")
284
- ```
285
-
286
- See [CHANGELOG.md][📌changelog] for list of releases.
368
+ See [CHANGELOG.md][📌changelog] for a list of releases.
287
369
 
288
370
  ## 📄 License
289
371
 
@@ -293,39 +375,72 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
293
375
 
294
376
  ### © Copyright
295
377
 
296
- <p>
297
- Copyright (c) 2018 - 2020, 2024 - 2025 Peter H. Boling,
298
- <a href="https://railsbling.com">
299
- RailsBling.com
300
- <picture>
301
- <img alt="Rails Bling" height="20" src="https://railsbling.com/images/logos/RailsBling-TrainLogo.svg" />
302
- </picture>
303
- </a>
304
- </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.
305
404
 
306
- ## 🤑 One more thing
405
+ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
307
406
 
308
- You made it to the bottom of the page,
309
- so perhaps you'll indulge me for another 20 seconds.
310
- I maintain many dozens of gems, including this one,
311
- because I want Ruby to be a great place for people to solve problems, big and small.
312
- Please consider supporting my efforts via the giant yellow link below,
313
- or one of the others at the head of this README.
407
+ Thanks for RTFM. ☺️
314
408
 
315
- [![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
316
431
 
317
432
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
318
- [⛳️gem-namespace]: https://github.com/pboling/silent_stream
319
- [⛳️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
320
435
  [⛳️gem-name]: https://rubygems.org/gems/silent_stream
321
- [⛳️name-img]: https://img.shields.io/badge/name-silent__stream-brightgreen.svg?style=flat&logo=rubygems&logoColor=red
322
- [🚂bdfl-blog]: http://www.railsbling.com/tags/silent_stream
323
- [🚂bdfl-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
324
- [🚂bdfl-contact]: http://www.railsbling.com/contact
325
- [🚂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
326
441
  [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
327
442
  [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
328
- [💖✌️wellfound]: https://angel.co/u/peter-boling
443
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling/u/peter-boling
329
444
  [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
330
445
  [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
331
446
  [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
@@ -353,70 +468,59 @@ or one of the others at the head of this README.
353
468
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
354
469
  [🚂railsbling]: http://www.railsbling.com
355
470
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
356
- [📜src-gl]: https://gitlab.com/pboling/silent_stream/
471
+ [📜src-gl]: https://gitlab.com/galtzo-floss/silent_stream/
357
472
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
358
- [📜src-cb]: https://codeberg.org/pboling/silent_stream
473
+ [📜src-cb]: https://codeberg.org/galtzo-floss/silent_stream
359
474
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
360
- [📜src-gh]: https://github.com/pboling/silent_stream
475
+ [📜src-gh]: https://github.com/galtzo-floss/silent_stream
361
476
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
362
- [📜docs-head-rd-img]: https://img.shields.io/badge/RubyDoc-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
363
- [📜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
364
479
  [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
365
480
  [👽dl-rank]: https://rubygems.org/gems/silent_stream
366
481
  [👽dl-ranki]: https://img.shields.io/gem/rd/silent_stream.svg
367
- [👽oss-help]: https://www.codetriage.com/pboling/silent_stream
368
- [👽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
369
484
  [👽version]: https://rubygems.org/gems/silent_stream
370
485
  [👽versioni]: https://img.shields.io/gem/v/silent_stream.svg
371
- [🔑cc-mnt]: https://qlty.sh/gh/pboling/projects/silent_stream
372
- [🔑cc-mnti♻️]: https://qlty.sh/badges/3884b648-a5a9-4458-9671-a2ce38a1d470/maintainability.svg
373
- [🔑cc-cov]: https://qlty.sh/gh/pboling/projects/silent_stream
374
- [🔑cc-covi♻️]: https://qlty.sh/badges/3884b648-a5a9-4458-9671-a2ce38a1d470/test_coverage.svg
375
- [🔑codecov]: https://codecov.io/gh/pboling/silent_stream
376
- [🔑codecovi♻️]: https://codecov.io/gh/pboling/silent_stream/branch/master/graph/badge.svg?token=Ad3ets1psE
377
- [🔑coveralls]: https://coveralls.io/github/pboling/silent_stream?branch=master
378
- [🔑coveralls-img]: https://coveralls.io/repos/github/pboling/silent_stream/badge.svg?branch=master
379
- [🔑depfu]: https://depfu.com/github/pboling/silent_stream?project_id=5828
380
- [🔑depfui♻️]: https://badges.depfu.com/badges/6633827ecc1ad3b5dd749b4ac822347b/count.svg
381
- [🖐codeQL]: https://github.com/pboling/silent_stream/security/code-scanning
382
- [🖐codeQL-img]: https://github.com/pboling/silent_stream/actions/workflows/codeql-analysis.yml/badge.svg
383
- [🚎1-an-wf]: https://github.com/pboling/silent_stream/actions/workflows/ancient.yml
384
- [🚎1-an-wfi]: https://github.com/pboling/silent_stream/actions/workflows/ancient.yml/badge.svg
385
- [🚎2-cov-wf]: https://github.com/pboling/silent_stream/actions/workflows/coverage.yml
386
- [🚎2-cov-wfi]: https://github.com/pboling/silent_stream/actions/workflows/coverage.yml/badge.svg
387
- [🚎3-hd-wf]: https://github.com/pboling/silent_stream/actions/workflows/heads.yml
388
- [🚎3-hd-wfi]: https://github.com/pboling/silent_stream/actions/workflows/heads.yml/badge.svg
389
- [🚎4-lg-wf]: https://github.com/pboling/silent_stream/actions/workflows/legacy.yml
390
- [🚎4-lg-wfi]: https://github.com/pboling/silent_stream/actions/workflows/legacy.yml/badge.svg
391
- [🚎5-st-wf]: https://github.com/pboling/silent_stream/actions/workflows/style.yml
392
- [🚎5-st-wfi]: https://github.com/pboling/silent_stream/actions/workflows/style.yml/badge.svg
393
- [🚎6-s-wf]: https://github.com/pboling/silent_stream/actions/workflows/supported.yml
394
- [🚎6-s-wfi]: https://github.com/pboling/silent_stream/actions/workflows/supported.yml/badge.svg
395
- [🚎7-us-wf]: https://github.com/pboling/silent_stream/actions/workflows/unsupported.yml
396
- [🚎7-us-wfi]: https://github.com/pboling/silent_stream/actions/workflows/unsupported.yml/badge.svg
397
- [🚎8-ho-wf]: https://github.com/pboling/silent_stream/actions/workflows/hoary.yml
398
- [🚎8-ho-wfi]: https://github.com/pboling/silent_stream/actions/workflows/hoary.yml/badge.svg
399
- [🚎9-t-wf]: https://github.com/pboling/silent_stream/actions/workflows/truffle.yml
400
- [🚎9-t-wfi]: https://github.com/pboling/silent_stream/actions/workflows/truffle.yml/badge.svg
401
- [🚎10-j-wf]: https://github.com/pboling/silent_stream/actions/workflows/jruby.yml
402
- [🚎10-j-wfi]: https://github.com/pboling/silent_stream/actions/workflows/jruby.yml/badge.svg
403
- [🚎11-c-wf]: https://github.com/pboling/silent_stream/actions/workflows/current.yml
404
- [🚎11-c-wfi]: https://github.com/pboling/silent_stream/actions/workflows/current.yml/badge.svg
405
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
406
- [⛳liberapay]: https://liberapay.com/pboling/donate
407
- [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
408
- [🖇sponsor]: https://github.com/sponsors/pboling
409
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
410
- [🖇polar]: https://polar.sh/pboling
411
- [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
412
- [🖇kofi]: https://ko-fi.com/O5O86SNP4
413
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
414
- [🖇patreon]: https://patreon.com/galtzo
415
- [🖇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
416
- [🖇buyme]: https://www.buymeacoffee.com/pboling
417
- [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
418
- [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
419
- [💎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
420
524
  [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
421
525
  [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
422
526
  [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -426,50 +530,58 @@ or one of the others at the head of this README.
426
530
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
427
531
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
428
532
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
429
- [💎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
430
534
  [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
431
535
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
432
536
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
433
- [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
434
- [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
435
- [💎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
436
540
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
437
541
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
438
542
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
439
543
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
440
- [🤝issues]: https://github.com/pboling/silent_stream/issues
441
- [🤝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/
442
551
  [🤝contributing]: CONTRIBUTING.md
443
- [🔑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
444
553
  [🖐contrib-rocks]: https://contrib.rocks
445
- [🖐contributors]: https://github.com/pboling/silent_stream/graphs/contributors
446
- [🖐contributors-img]: https://contrib.rocks/image?repo=pboling/silent_stream
447
- [🚎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
448
557
  [🪇conduct]: CODE_OF_CONDUCT.md
449
- [🪇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
450
559
  [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
451
560
  [📌semver]: https://semver.org/spec/v2.0.0.html
452
- [📌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
453
562
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
454
563
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
455
564
  [📌changelog]: CHANGELOG.md
456
565
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
457
- [📗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
458
567
  [📌gitmoji]:https://gitmoji.dev
459
- [📌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
460
569
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
461
- [🧮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
462
571
  [🔐security]: SECURITY.md
463
- [🔐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
464
573
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
465
574
  [📄license]: LICENSE.txt
466
575
  [📄license-ref]: https://opensource.org/licenses/MIT
467
- [📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
576
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
468
577
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
469
- [📄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
470
579
  [🚎yard-current]: http://rubydoc.info/gems/silent_stream
471
- [🚎yard-head]: https://rubydoc.info/github/pboling/silent_stream/master
472
- [💎stone_checksums]: https://github.com/pboling/stone_checksums
473
- [💎SHA_checksums]: https://gitlab.com/pboling/silent_stream/-/tree/main/checksums
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
474
583
  [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
475
- [💎rlts-img]: https://img.shields.io/badge/code_style-rubocop--lts-brightgreen.svg?plastic&logo=ruby&logoColor=white
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/