rspec-stubbed_env 1.0.1 → 1.0.3

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,57 +1,124 @@
1
- # RSpec::StubbedEnv
1
+ <p align="center">
2
+ <a href="https://discord.gg/3qme4XHNKN" target="_blank" rel="noopener">
3
+ <img width="120px" src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/galtzo-floss-logos-original.svg?raw=true" alt="Galtzo.com Logo by Aboling0, CC BY-SA 4.0">
4
+ </a>
5
+ <a href="https://www.ruby-lang.org/" target="_blank" rel="noopener">
6
+ <img width="120px" src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/ruby-logo-198px.svg?raw=true" alt="Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5">
7
+ </a>
8
+ </p>
2
9
 
3
- ENV stubbing via a shared context for more powerful tests. Now you don't need to add dotenv just for your spec suite.
10
+ # 🫥 RSpec::StubbedEnv
11
+
12
+ [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov] [![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
+ ---
15
+
16
+ [![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]
17
+
18
+ An `ENV` stubbing / hiding library for sophisticated RSpec test suites.
19
+
20
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
21
+ |--------------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
22
+ | 🧪 [pboling/rspec-stubbed_env on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
23
+ | 🧊 [pboling/rspec-stubbed_env on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | ➖ | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
24
+ | 🐙 [pboling/rspec-stubbed_env on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
25
+ | 🎮️ [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] |
26
+
27
+ [gh-discussions]: https://github.com/pboling/rspec-stubbed_env/discussions
28
+
29
+ * ENV stubbing and hiding via shared contexts for more powerful tests
30
+ * ENV hiding via `hide_env("FOO")` was added in v1.0.2
31
+ * No need to add `dotenv` just for the spec suite
4
32
 
5
33
  ```ruby
6
34
  describe "my stubbed test" do
7
35
  include_context "with stubbed env"
8
- before do
9
- stub_env("FOO" => "is bar")
36
+ include_context "with hidden env"
37
+ context "with FOO=is bar" do
38
+ before do
39
+ stub_env("FOO" => "is bar")
40
+ end
41
+ it "has a value" do
42
+ expect(ENV.fetch("FOO", nil)).to(eq("is bar"))
43
+ expect(ENV.fetch("FOO")).to(eq("is bar"))
44
+ expect(ENV["FOO"]).to(eq("is bar"))
45
+ end
10
46
  end
11
- it "has a value" do
12
- expect(ENV.fetch("FOO", nil)).to(eq("is bar"))
47
+ context "without BAR set" do
48
+ before do
49
+ hide_env("BAR")
50
+ end
51
+ it "is nil" do
52
+ expect(ENV.fetch("BAR", nil)).to(be_nil)
53
+ expect(ENV["BAR"]).to(be_nil)
54
+ end
55
+ it "raises error" do
56
+ expect { ENV.fetch("BAR") }.to(raise_error(KeyNotFound))
57
+ end
13
58
  end
14
59
  end
15
60
  ```
16
61
 
17
- | Project | RSpec::StubbedEnv |
18
- |------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
19
- | gem name | [rspec-stubbed_env](https://rubygems.org/gems/rspec-stubbed_env) |
20
- | license | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) |
21
- | download rank | [![Downloads Today](https://img.shields.io/gem/rd/rspec-stubbed_env.svg)](https://github.com/pboling/rspec-stubbed_env) |
22
- | version | [![Version](https://img.shields.io/gem/v/rspec-stubbed_env.svg)](https://rubygems.org/gems/rspec-stubbed_env) |
23
- | dependencies | [![Depfu][depfu-img]][depfu] |
24
- | continuous integration | [![Current][🚎cwfi]][🚎cwf] [![Heads][🖐hwfi]][🖐hwf] [![Style][🧮swfi]][🧮swf] |
25
- | test coverage | [![Test Coverage][cc-covi]][cc-cov] |
26
- | maintainability | [![Maintainability](https://api.codeclimate.com/v1/badges/07a1d53634c61154efae/maintainability)](https://codeclimate.com/github/pboling/rspec-stubbed_env/maintainability) |
27
- | code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/rspec-stubbed_env/badges/users.svg)](https://www.codetriage.com/pboling/rspec-stubbed_env) |
28
- | homepage | [on Github.com][homepage], [on Railsbling.com][blogpage] |
29
- | documentation | [on RDoc.info][documentation] |
30
- | Spread ~♡ⓛⓞⓥⓔ♡~ | [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay], [🧊][🧊berg], [🛖][🛖hut], [🧪][🧪lab], [🌏][aboutme], [👼][angellist], [⚗️][devto], [![Tweet @galtzo][followme]][twitter] |
31
-
32
- [🚎cwf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/current.yml
33
- [🚎cwfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/current.yml/badge.svg
34
- [🖐hwf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/heads.yml
35
- [🖐hwfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/heads.yml/badge.svg
36
- [🧮swf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/style.yml
37
- [🧮swfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/style.yml/badge.svg
38
-
39
- ## Installation
40
-
41
- Add this line to your application's Gemfile:
62
+ This gem has no runtime dependencies.
42
63
 
43
- ```ruby
44
- gem "rspec-stubbed_env", :group => :test
45
- ```
64
+ ## 💡 Info you can shake a stick at
65
+
66
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
67
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
68
+ | 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] |
69
+ | 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] |
70
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
71
+ | 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] |
72
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
73
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
74
+ | 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] |
75
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
76
+ | 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] |
77
+ | 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! |
78
+ | 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] |
79
+ | `...` 💖 | [![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] |
46
80
 
47
- And then execute:
81
+ ## Installation
48
82
 
49
- $ bundle
83
+ Install the gem and add to the application's Gemfile by executing:
50
84
 
51
- Or install it yourself as:
85
+ $ bundle add rspec-stubbed_env
86
+
87
+ If bundler is not being used to manage dependencies, install the gem by executing:
52
88
 
53
89
  $ gem install rspec-stubbed_env
54
90
 
91
+ ### 🔒 Secure Installation
92
+
93
+ `rspec-stubbed_env` is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
94
+ [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
95
+ by following the instructions below.
96
+
97
+ Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
98
+
99
+ ```shell
100
+ gem cert --add <(curl -Ls https://raw.github.com/oauth-xx/rspec-stubbed_env/main/certs/pboling.pem)
101
+ ```
102
+
103
+ You only need to do that once. Then proceed to install with:
104
+
105
+ ```shell
106
+ gem install rspec-stubbed_env -P HighSecurity
107
+ ```
108
+
109
+ The `HighSecurity` trust profile will verify signed gems, and not allow the installation of unsigned dependencies.
110
+
111
+ If you want to up your security game full-time:
112
+
113
+ ```shell
114
+ bundle config set --global trust-policy MediumSecurity
115
+ ```
116
+
117
+ `MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
118
+
119
+ NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
120
+
121
+ ## 🔧 Basic Usage
55
122
 
56
123
  You must configure RSpec to use the `:expect` syntax, or some compatible alternative.
57
124
 
@@ -64,13 +131,11 @@ end
64
131
  ```
65
132
 
66
133
  Require the library in your spec/test helper somewhere:
67
- ```
134
+ ```ruby
68
135
  require "rspec/stubbed_env"
69
136
  ```
70
137
 
71
- ## Usage
72
-
73
- ENV stubbing:
138
+ ### ENV stubbing
74
139
 
75
140
  - is opt-in, via a shared context, rather than global.
76
141
  - *does not* affect the real ENV at all. It is a true stub.
@@ -83,6 +148,7 @@ See the spec suite for detailed examples.
83
148
  describe "vanilla" do
84
149
  it "has no ENV stub" do
85
150
  expect(ENV.fetch("FOO", nil)).to(be_nil)
151
+ expect(ENV["FOO"]).to(be_nil)
86
152
  end
87
153
  end
88
154
 
@@ -94,13 +160,102 @@ describe "my stubbed test" do
94
160
  end
95
161
  it "has a value" do
96
162
  expect(ENV.fetch("FOO", nil)).to(eq("is bar"))
163
+ expect(ENV["FOO"]).to(eq("is bar"))
97
164
  end
98
165
  end
99
166
  ```
100
167
 
101
- ## Switcch to `main` branch
168
+ ENV can be stubbed trough the `stub_env` method, or key/value pairs to be stubbed can be
169
+ provided directly to the `include_context` call:
170
+
171
+ ```ruby
172
+ describe "my stubbed test" do
173
+ include_context "with stubbed env", "FOO" => "is bar"
174
+
175
+ it "has a value" do
176
+ expect(ENV.fetch("FOO", nil)).to(eq("is bar"))
177
+ expect(ENV["FOO"]).to(eq("is bar"))
178
+ end
179
+ end
180
+ ```
181
+
182
+ If you want to make `stub_env` method available globally (without the `include_context` call),
183
+ you can add in the `spec_helper`.
184
+
185
+ I do not recommend the _global_ approach, as it results in a loss of clarity
186
+ on which tests are testing ENV-based behaviors. Here's a foot-gun if you want it.
187
+
188
+ ```ruby
189
+ RSpec.configure do |config|
190
+ config.include(RSpec::StubbedEnv::StubHelpers)
191
+ # Or you could include the context globally
192
+ # config.include_context "with stubbed env"
193
+ end
194
+ ```
195
+
196
+ ### ENV hiding
197
+
198
+ - is opt-in, via a shared context, rather than global.
199
+ - *does not* affect the real ENV at all. It is a true stub.
200
+ - has the same scope as a `before`, `subject`, or `let` at the same level.
201
+
202
+ See the spec suite for detailed examples.
203
+
204
+ ```ruby
205
+ # This is normal, without hiding, ENV is set
206
+ ENV["MY_PATH"] = "/home/doodle"
207
+ describe "vanilla" do
208
+ it "has ENV with nothing hidden" do
209
+ expect(ENV.fetch("MY_PATH", nil)).to("/home/doodle")
210
+ expect(ENV["MY_PATH"]).to("/home/doodle")
211
+ end
212
+ end
213
+
214
+ # With a hidden ENV variable!
215
+ describe "my hidden test" do
216
+ include_context "with hidden env"
217
+ before do
218
+ hide_env("MY_PATH")
219
+ end
220
+ it "MY_PATH is not set" do
221
+ expect(ENV.fetch("MY_PATH", nil)).to(be_nil)
222
+ expect(ENV["MY_PATH"]).to(be_nil)
223
+ end
224
+ end
225
+ ```
226
+
227
+ ENV variables can be hidden trough the `hide_env` method, or variable names to be hidden can be
228
+ provided directly to the `include_context` call:
229
+
230
+ ```ruby
231
+ describe "my hidden test" do
232
+ include_context "with hidden env", "MY_PATH"
233
+
234
+ it "MY_PATH is not set" do
235
+ expect(ENV.fetch("MY_PATH", nil)).to(be_nil)
236
+ expect(ENV["MY_PATH"]).to(be_nil)
237
+ end
238
+ end
239
+ ```
240
+
241
+ If you want to make `hide_env` method available globally (without the `include_context` call),
242
+ you can add in the `spec_helper`:
243
+
244
+ I do not recommend the _global_ approach, as it results in a loss of clarity
245
+ on which tests are testing ENV-based behaviors. Here's a foot-gun if you want it.
246
+
247
+ ```ruby
248
+ RSpec.configure do |config|
249
+ config.include(RSpec::StubbedEnv::HideHelpers)
250
+ # Or you could include the context globally
251
+ # config.include_context "with hidden env"
252
+ end
253
+ ```
254
+
255
+ ## 🚚 Switch to `main` branch
256
+
257
+ We migrated from `master` to `main` as the default branch. If this affected your local checkout:
102
258
 
103
- We recently migrated from `master` to `main` as the default branch. If this affected your local checkout:
104
259
  ```shell
105
260
  git branch -m master main
106
261
  git fetch origin
@@ -108,74 +263,298 @@ git branch -u origin/main main
108
263
  git remote set-head origin -a
109
264
  ```
110
265
 
111
- ## Development
266
+ ### 🚀 Release Instructions
112
267
 
113
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
268
+ See [CONTRIBUTING.md][🤝contributing].
114
269
 
115
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
270
+ ## 🔐 Security
116
271
 
117
- ## Authors
272
+ See [SECURITY.md][🔐security].
118
273
 
119
- * [Liam Bennet](https://github.com/ljkbennett) of LittleOwlLabs was the original author.
120
- * [Peter H. Boling][peterboling] of [Rails Bling][railsbling] is has been maintaining since 2018.
274
+ ## 🤝 Contributing
121
275
 
122
- ## Contributing
276
+ If you need some ideas of where to help, you could work on adding more code coverage,
277
+ or if it is already 💯 (see [below](#code-coverage)) check TODOs (see [below](#todos)),
278
+ or check [issues][🤝issues], or [PRs][🤝pulls],
279
+ or use the gem and think about how it could be better.
123
280
 
124
- See [CONTRIBUTING.md][contributing].
125
- [contributing]: https://gitlab.com/pboling/rspec-stubbed_env/-/blob/main/CONTRIBUTING.md
281
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
126
282
 
127
- ## Code of Conduct
283
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
128
284
 
129
- Everyone interacting in the AnonymousActiveRecord project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct][conduct].
285
+ ### Code Coverage
130
286
 
131
- ## Versioning
287
+ [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
132
288
 
133
- This library aims to adhere to [Semantic Versioning 2.0.0][semver].
134
- Violations of this scheme should be reported as bugs. Specifically,
135
- if a minor or patch version is released that breaks backward
136
- compatibility, a new version should be immediately released that
137
- restores compatibility. Breaking changes to the public API will
138
- only be introduced with new major versions.
289
+ [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
139
290
 
140
- As a result of this policy, you can (and should) specify a
141
- dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision.
291
+ ### 🪇 Code of Conduct
142
292
 
143
- For example in a `Gemfile`:
293
+ Everyone interacting in this project's codebases, issue trackers,
294
+ chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
144
295
 
145
- gem 'rspec-stubbed_env', '~> 1.0', group: [:development, :test]
296
+ ## 🌈 Contributors
146
297
 
147
- or in a `gemspec`
298
+ [![Contributors][🖐contributors-img]][🖐contributors]
148
299
 
149
- spec.add_development_dependency 'rspec-stubbed_env', '~> 1.0'
300
+ Made with [contributors-img][🖐contrib-rocks].
150
301
 
151
- ## License
302
+ Also see GitLab Contributors: [https://gitlab.com/pboling/rspec-stubbed_env/-/graphs/main][🚎contributors-gl]
152
303
 
153
- * Copyright © 2014 LittlOwlLabs [Liam Bennet](https://github.com/ljkbennett)
154
- * Copyright © 2018-2020, 2023 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
304
+ ## ⭐️ Star History
155
305
 
156
- [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
306
+ <a href="https://star-history.com/#pboling/rspec-stubbed_env&Date">
307
+ <picture>
308
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=pboling/rspec-stubbed_env&type=Date&theme=dark" />
309
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=pboling/rspec-stubbed_env&type=Date" />
310
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=pboling/rspec-stubbed_env&type=Date" />
311
+ </picture>
312
+ </a>
313
+
314
+ ## 📌 Versioning
315
+
316
+ This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
317
+ Violations of this scheme should be reported as bugs.
318
+ Specifically, if a minor or patch version is released that breaks backward compatibility,
319
+ a new version should be immediately released that restores compatibility.
320
+ Breaking changes to the public API will only be introduced with new major versions.
321
+
322
+ ### 📌 Is "Platform Support" part of the public API?
323
+
324
+ Yes. But I'm obligated to include notes...
325
+
326
+ SemVer should, but doesn't explicitly, say that dropping support for specific Platforms
327
+ is a *breaking change* to an API.
328
+ It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
329
+
330
+ > dropping support for a platform is both obviously and objectively a breaking change
331
+
332
+ - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
333
+
334
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
335
+ read this article from the creator of SemVer:
336
+
337
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
338
+
339
+ As a result of this policy, and the interpretive lens used by the maintainer,
340
+ you can (and should) specify a dependency on these libraries using
341
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
342
+
343
+ For example:
344
+
345
+ ```ruby
346
+ spec.add_dependency("rspec-stubbed_env", "~> 1.0")
347
+ ```
348
+
349
+ See [CHANGELOG.md][📌changelog] for list of releases.
350
+
351
+ ## 📄 License
352
+
353
+ The gem is available as open source under the terms of
354
+ the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
355
+ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
356
+
357
+ ### © Copyright
358
+
359
+ <ul>
360
+ <li>
361
+ Copyright (c) 2018-2020, 2024-2025 Peter H. Boling, of
362
+ <a href="https://discord.gg/3qme4XHNKN">
363
+ Galtzo.com
364
+ <picture>
365
+ <img src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/galtzo-floss-logos-wordless.svg?raw=true" alt="Galtzo.com Logo by Aboling0, CC BY-SA 4.0" width="24">
366
+ </picture>
367
+ </a>, and rspec-stubbed_env contributors
368
+ </li>
369
+ </ul>
370
+
371
+ ## 🤑 One more thing
372
+
373
+ Having arrived at the bottom of the page, please endure a final supplication.
374
+ The primary maintainer of this gem, Peter Boling, wants
375
+ Ruby to be a great place for people to solve problems, big and small.
376
+ Please consider supporting his efforts via the giant yellow link below,
377
+ or one of smaller ones, depending on button size preference.
378
+
379
+ [![Buy me a latte][🖇buyme-img]][🖇buyme]
380
+
381
+ [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![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]
382
+
383
+ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
384
+
385
+ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
157
386
 
158
- [aboutme]: https://about.me/peter.boling
159
- [angellist]: https://angel.co/peter-boling
160
- [blogpage]: http://www.railsbling.com/tags/rspec-stubbed_env/
161
- [cc-cov]: https://codeclimate.com/github/pboling/rspec-stubbed_env/test_coverage
162
- [cc-covi]: https://api.codeclimate.com/v1/badges/07a1d53634c61154efae/test_coverage
163
- [conduct]: CODE_OF_CONDUCT.md
164
- [contributing]: CONTRIBUTING.md
165
- [depfu]: https://depfu.com/github/pboling/rspec-stubbed_env?project_id=5884
166
- [depfu-img]: https://badges.depfu.com/badges/a48948dd503f23a440f2c17910563f43/count.svg
167
- [devto]: https://dev.to/galtzo
168
- [documentation]: http://rdoc.info/github/pboling/rspec-stubbed_env/frames
169
- [followme]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
170
- [homepage]: https://github.com/pboling/rspec-stubbed_env/
171
- [license]: LICENSE.txt
172
- [peterboling]: http://www.peterboling.com
173
- [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
174
- [railsbling]: http://www.railsbling.com
175
- [semver]: http://semver.org/
176
- [twitter]: http://twitter.com/galtzo
177
- [🧊berg]: https://codeberg.org/pboling
178
- [🛖hut]: https://sr.ht/~galtzo/
179
- [🧪lab]: https://gitlab.com/pboling
180
- [⛳liberapay]: https://liberapay.com/pboling/donate
181
387
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
388
+ [⛳liberapay]: https://liberapay.com/pboling/donate
389
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
390
+ [🖇sponsor]: https://github.com/sponsors/pboling
391
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
392
+ [🖇polar]: https://polar.sh/pboling
393
+ [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
394
+ [🖇kofi]: https://ko-fi.com/O5O86SNP4
395
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
396
+ [🖇patreon]: https://patreon.com/galtzo
397
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
398
+ [🖇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
399
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
400
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
401
+ [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
402
+
403
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
404
+ [⛳️gem-namespace]: https://github.com/pboling/rspec-stubbed_env
405
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-RSpec%3A%3AStubbedEnv-brightgreen.svg?style=flat&logo=ruby&logoColor=white
406
+ [⛳️gem-name]: https://rubygems.org/gems/rspec-stubbed_env
407
+ [⛳️name-img]: https://img.shields.io/badge/name-rspec--stubbed__env-brightgreen.svg?style=flat&logo=rubygems&logoColor=red
408
+ [🚂bdfl-blog]: http://www.railsbling.com/tags/rspec-stubbed_env
409
+ [🚂bdfl-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
410
+ [🚂bdfl-contact]: http://www.railsbling.com/contact
411
+ [🚂bdfl-contact-img]: https://img.shields.io/badge/Contact-BDFL-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
412
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
413
+ [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
414
+ [💖✌️wellfound]: https://angel.co/u/peter-boling
415
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
416
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
417
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
418
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
419
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=flat&logo=mastodon&label=Ruby%20%40galtzo
420
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
421
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
422
+ [💖🌳linktree]: https://linktr.ee/galtzo
423
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
424
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
425
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
426
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
427
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
428
+ [💖🧊berg]: https://codeberg.org/pboling
429
+ [💖🐙hub]: https://github.org/pboling
430
+ [💖🛖hut]: https://sr.ht/~galtzo/
431
+ [💖🧪lab]: https://gitlab.com/pboling
432
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
433
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
434
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
435
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
436
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription
437
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
438
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
439
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
440
+ [🚂railsbling]: http://www.railsbling.com
441
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
442
+ [📜src-gl]: https://gitlab.com/pboling/rspec-stubbed_env/
443
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
444
+ [📜src-cb]: https://codeberg.org/pboling/rspec-stubbed_env
445
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
446
+ [📜src-gh]: https://github.com/pboling/rspec-stubbed_env
447
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
448
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
449
+ [📜wiki]: https://gitlab.com/pboling/rspec-stubbed_env/-/wikis/home
450
+ [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
451
+ [👽dl-rank]: https://rubygems.org/gems/rspec-stubbed_env
452
+ [👽dl-ranki]: https://img.shields.io/gem/rd/rspec-stubbed_env.svg
453
+ [👽oss-help]: https://www.codetriage.com/pboling/rspec-stubbed_env
454
+ [👽oss-helpi]: https://www.codetriage.com/pboling/rspec-stubbed_env/badges/users.svg
455
+ [👽version]: https://rubygems.org/gems/rspec-stubbed_env
456
+ [👽versioni]: https://img.shields.io/gem/v/rspec-stubbed_env.svg
457
+ [🔑qlty-mnt]: https://qlty.sh/gh/pboling/projects/rspec-stubbed_env
458
+ [🔑qlty-mnti]: https://qlty.sh/gh/pboling/projects/rspec-stubbed_env/maintainability.svg
459
+ [🔑qlty-cov]: https://qlty.sh/gh/pboling/projects/rspec-stubbed_env/metrics/code?sort=coverageRating
460
+ [🔑qlty-covi]: https://qlty.sh/gh/pboling/projects/rspec-stubbed_env/coverage.svg
461
+ [🔑codecov]: https://codecov.io/gh/pboling/rspec-stubbed_env
462
+ [🔑codecovi♻️]: https://codecov.io/gh/pboling/rspec-stubbed_env/branch/main/graph/badge.svg?token=Ad3ets1psE
463
+ [🔑coveralls]: https://coveralls.io/github/pboling/rspec-stubbed_env?branch=main
464
+ [🔑coveralls-img]: https://coveralls.io/repos/github/pboling/rspec-stubbed_env/badge.svg?branch=main
465
+ [🔑depfu]: https://depfu.com/github/pboling/rspec-stubbed_env?project_id=5884
466
+ [🔑depfui♻️]: https://badges.depfu.com/badges/a48948dd503f23a440f2c17910563f43/count.svg
467
+ [🖐codeQL]: https://github.com/pboling/rspec-stubbed_env/security/code-scanning
468
+ [🖐codeQL-img]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/codeql-analysis.yml/badge.svg
469
+ [🚎1-an-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/ancient.yml
470
+ [🚎1-an-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/ancient.yml/badge.svg
471
+ [🚎2-cov-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/coverage.yml
472
+ [🚎2-cov-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/coverage.yml/badge.svg
473
+ [🚎3-hd-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/heads.yml
474
+ [🚎3-hd-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/heads.yml/badge.svg
475
+ [🚎4-lg-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/legacy.yml
476
+ [🚎4-lg-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/legacy.yml/badge.svg
477
+ [🚎5-st-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/style.yml
478
+ [🚎5-st-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/style.yml/badge.svg
479
+ [🚎6-s-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/supported.yml
480
+ [🚎6-s-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/supported.yml/badge.svg
481
+ [🚎7-us-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/unsupported.yml
482
+ [🚎7-us-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/unsupported.yml/badge.svg
483
+ [🚎8-ho-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/hoary.yml
484
+ [🚎8-ho-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/hoary.yml/badge.svg
485
+ [🚎9-t-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/truffle.yml
486
+ [🚎9-t-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/truffle.yml/badge.svg
487
+ [🚎10-j-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/jruby.yml
488
+ [🚎10-j-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/jruby.yml/badge.svg
489
+ [🚎11-c-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/current.yml
490
+ [🚎11-c-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/current.yml/badge.svg
491
+ [🚎13-🔒️-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_locked.yml
492
+ [🚎13-🔒️-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_locked.yml/badge.svg
493
+ [🚎14-🔓️-wf]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_unlocked.yml
494
+ [🚎14-🔓️-wfi]: https://github.com/pboling/rspec-stubbed_env/actions/workflows/deps_unlocked.yml/badge.svg
495
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
496
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
497
+ [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
498
+ [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
499
+ [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
500
+ [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
501
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
502
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
503
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
504
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
505
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
506
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
507
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
508
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
509
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
510
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
511
+ [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
512
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
513
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
514
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
515
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
516
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
517
+ [🤝gh-issues]: https://github.com/pboling/rspec-stubbed_env/issues
518
+ [🤝gh-pulls]: https://github.com/pboling/rspec-stubbed_env/pulls
519
+ [🤝gh-issues]: https://github.com/pboling/rspec-stubbed_env/issues
520
+ [🤝gh-pulls]: https://github.com/pboling/rspec-stubbed_env/pulls
521
+ [🤝gl-issues]: https://gitlab.com/pboling/rspec-stubbed_env/-/issues
522
+ [🤝gl-pulls]: https://gitlab.com/pboling/rspec-stubbed_env/-/merge_requests
523
+ [🤝cb-issues]: https://codeberg.org/pboling/rspec-stubbed_env/issues
524
+ [🤝cb-pulls]: https://codeberg.org/pboling/rspec-stubbed_env/pulls
525
+ [🤝cb-donate]: https://donate.codeberg.org/
526
+ [🤝contributing]: CONTRIBUTING.md
527
+ [🔑codecov-g♻️]: https://codecov.io/gh/pboling/rspec-stubbed_env/graphs/tree.svg?token=Ad3ets1psE
528
+ [🖐contrib-rocks]: https://contrib.rocks
529
+ [🖐contributors]: https://github.com/pboling/rspec-stubbed_env/graphs/contributors
530
+ [🖐contributors-img]: https://contrib.rocks/image?repo=pboling/rspec-stubbed_env
531
+ [🚎contributors-gl]: https://gitlab.com/pboling/rspec-stubbed_env/-/graphs/main
532
+ [🪇conduct]: CODE_OF_CONDUCT.md
533
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
534
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
535
+ [📌semver]: https://semver.org/spec/v2.0.0.html
536
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
537
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
538
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
539
+ [📌changelog]: CHANGELOG.md
540
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
541
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
542
+ [📌gitmoji]:https://gitmoji.dev
543
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
544
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
545
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.073-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
546
+ [🔐security]: SECURITY.md
547
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
548
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
549
+ [📄license]: LICENSE.txt
550
+ [📄license-ref]: https://opensource.org/licenses/MIT
551
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
552
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
553
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
554
+ [🚎yard-current]: http://rubydoc.info/gems/rspec-stubbed-env
555
+ [🚎yard-head]: https://rspec-stubbed-env.galtzo.com
556
+ [💎stone_checksums]: https://github.com/pboling/stone_checksums
557
+ [💎SHA_checksums]: https://gitlab.com/pboling/rspec-stubbed_env/-/tree/main/checksums
558
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
559
+ [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
560
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/