floss_funding 1.0.0.pre.alpha.1

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 ADDED
@@ -0,0 +1,507 @@
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] [![floss_funding Logo by Aboling0, CC BY-SA 4.0][🖼️floss_funding-i]][🖼️floss_funding]
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://github.com/ruby-lang
7
+ [🖼️floss_funding-i]: https://logos.galtzo.com/assets/images/galtzo-floss/floss_funding/avatar-192px.svg
8
+ [🖼️floss_funding]: https://github.com/galtzo-floss/floss_funding
9
+
10
+ # 🪥 FlossFunding
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
+ ---
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
+ ## 🌻 Synopsis
19
+
20
+ This tool can help library maintainers earn money from their open source work in one line of code.
21
+
22
+ 👉️ No network calls.
23
+ 👉️ No tracking.
24
+ 👉️ No oversight.
25
+ 👉️ Minimal crypto hashing.
26
+
27
+ If you blink you may miss it...
28
+
29
+ ```ruby
30
+ module MyGemLibrary
31
+ include FlossFunding::Poke.new(__FILE__) # <====== THERE IT IS! ONE LINE OF CODE!
32
+ end
33
+ ```
34
+
35
+ The website that will generate activation keys for your gems is coming soon @ [floss-funding.dev](https://floss-funding.dev). FLOSS Funding relies on empathy, respect, honor, and annoyance of the most extreme mildness. It doesn't accept payments for activation keys, and trusts you to go and sponsor or donate to your favorite open source projects before getting their "activation key".
36
+
37
+ What does an _activation key_ do? It silences the nags, and "activates" your peace of mind. It rewards you with a gold star sticker (⭐️) for each project you fund when your process exits. That's it.
38
+
39
+ The project *does not affect* licensing of projects. It is purely a tool to help library maintainers earn money from their open source work.
40
+
41
+ This is permitted by nearly all, if not all, FLOSS licenses, including the popular MIT, BSD 2-clause, BSD 3-clause, Apache 2.0, etc.
42
+
43
+ There are two kinds of "free" in software:
44
+
45
+ 1. Free as in beer
46
+ 2. Free as in freedom (of speech)
47
+
48
+ No FLOSS licenses I am aware of guarantee "free as in beer". Since developers deserve to be paid for their work, I decided to make this tool.
49
+
50
+ It has been my experience that work on the dark underbelly of software, down in the test harnesses, and the dev tools, often gets overlooked, as people focus on the big frameworks.
51
+
52
+ This tool makes it far easier to get paid for your work down there at the bottom of the stack, in the dev dependencies that get overlooked by most OSS funding tools.
53
+
54
+ Activation keys use a cipher encryption algorithm against a 2400-word dictionary to make valid activation keys slightly difficult to discover manually. The activation keys are _opaque_, rather than _private_. They are not tied to you in any way. Other people may use the same one. And that's fine! They don't do anything except silence some STDOUT nagging.
55
+
56
+ ## TO DO List
57
+
58
+ Website coming soon.
59
+
60
+ - [ ] A website to generate activation keys for gems
61
+ - [ ] List all known gems that can be activated with floss_funding
62
+ - [ ] Account creation with email address, for those who want to keep a record of their generated activation keys
63
+ - [ ] (Optional) Enter Gem Name
64
+ - [ ] Affirm they have purchased an activation key
65
+ - [ ] (Optional) Receive activation key specific to namespace & month generated
66
+ - [x] Activation key will remain valid for that namespace forever (tested out to the June, 5425 C.E.)
67
+
68
+ I expect the current release of this gem to be compatible with Ruby 1.8.7+,
69
+ but it is only tested on CI against Ruby 2.3+,
70
+ due to the inherent limitations of GitHub Actions.
71
+
72
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 |
73
+ |------------------------------------------------|--------------------------------------------------------------------------------------|
74
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2](https://github.com/appraisal-rb/appraisal2) ✨ |
75
+
76
+ ## 💡 Info you can shake a stick at
77
+
78
+ ### Federated DVCS
79
+
80
+ <details>
81
+ <summary>Find this repo on other forges (Coming soon!)</summary>
82
+
83
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
84
+ |-------------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
85
+ | 🧪 [galtzo-floss/floss_funding on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
86
+ | 🧊 [galtzo-floss/floss_funding on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
87
+ | 🐙 [galtzo-floss/floss_funding on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
88
+ | 🎮️ [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] |
89
+
90
+ </details>
91
+
92
+ [gh-discussions]: https://github.com/galtzo-floss/floss_funding/discussions
93
+
94
+ ### Enterprise Support
95
+
96
+ <details>
97
+ <summary>Need enterprise-level guarantees?</summary>
98
+
99
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
100
+
101
+ - 💡Subscribe for support guarantees covering _all_ FLOSS dependencies
102
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
103
+ - 💡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
104
+
105
+ Alternatively:
106
+
107
+ - [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
108
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
109
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
110
+
111
+ </details>
112
+
113
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
114
+ |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
115
+ | 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] |
116
+ | 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] |
117
+ | 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] |
118
+ | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] [![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] |
119
+ | Works with MRI Ruby 1 | ![Ruby 1.9 Compat][💎ruby-1.9i] |
120
+ | 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] |
121
+ | 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] |
122
+ | 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] |
123
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
124
+ | 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] |
125
+ | 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] |
126
+ | `...` 💖 | [![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] |
127
+
128
+ ## ✨ Installation
129
+
130
+ Install the gem and add to the application's Gemfile by executing:
131
+
132
+ $ bundle add floss_funding
133
+
134
+ If bundler is not being used to manage dependencies, install the gem by executing:
135
+
136
+ $ gem install floss_funding
137
+
138
+ ### 🔒 Secure Installation
139
+
140
+ <details>
141
+ <summary>For Medium or High Security Installations</summary>
142
+
143
+ `floss_funding` is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
144
+ [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
145
+ by following the instructions below.
146
+
147
+ Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
148
+
149
+ ```console
150
+ gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
151
+ ```
152
+
153
+ You only need to do that once. Then proceed to install with:
154
+
155
+ ```console
156
+ gem install floss_funding -P HighSecurity
157
+ ```
158
+
159
+ The `HighSecurity` trust profile will verify signed gems, and not allow the installation of unsigned dependencies.
160
+
161
+ If you want to up your security game full-time:
162
+
163
+ ```console
164
+ bundle config set --global trust-policy MediumSecurity
165
+ ```
166
+
167
+ `MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
168
+
169
+ NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
170
+
171
+ </details>
172
+
173
+ ## 🔧 Basic Usage
174
+
175
+ Usage patterns:
176
+
177
+ 1. Traditional namespace (uses the including module's name):
178
+ ```ruby
179
+ module MyGemLibrary
180
+ include FlossFunding::Poke.new(__FILE__)
181
+ end
182
+ ```
183
+
184
+ 2. Arbitrary custom namespace (can add version, or anything else):
185
+ ```ruby
186
+ module MyGemLibrary
187
+ include FlossFunding::Poke.new(__FILE__, "Custom::Namespace::V4")
188
+ end
189
+ ```
190
+
191
+ ## Configuration
192
+
193
+ Gems that use the floss_funding gem can configure some features by creating a `.floss_funding.yml` file at their root directory. This works in the same manner as `.rubocop.yml` for gems that use RuboCop.
194
+
195
+ ### Configuration Options
196
+
197
+ The following options can be configured in the `.floss_funding.yml` file:
198
+
199
+ 1. `suggested_donation_amount` - The suggested donation amount to display in the begging message (default: 5)
200
+ 2. `floss_funding_url` - The URL to direct users to for donations or sponsorship
201
+ a. default: https://floss-funding.dev, which doesn't take donations on behalf of other projects, so it will have helpful tips on how to find a way to donate.
202
+
203
+ ### Example Configuration
204
+
205
+ In your `.floss_funding.yml` at the root of your project:
206
+
207
+ ```yaml
208
+ suggested_donation_amount: 10
209
+ floss_funding_url: https://example.com/fund
210
+ ```
211
+
212
+ ## 🔐 Security
213
+
214
+ See [SECURITY.md][🔐security].
215
+
216
+ ## 🤝 Contributing
217
+
218
+ If you need some ideas of where to help, you could work on adding more code coverage,
219
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
220
+ or use the gem and think about how it could be better.
221
+
222
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
223
+
224
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
225
+
226
+ ### 🚀 Release Instructions
227
+
228
+ See [CONTRIBUTING.md][🤝contributing].
229
+
230
+ ### Code Coverage
231
+
232
+ [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
233
+
234
+ [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
235
+
236
+ [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov]
237
+
238
+ ### 🪇 Code of Conduct
239
+
240
+ Everyone interacting with this project's codebases, issue trackers,
241
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
242
+
243
+ ## 🌈 Contributors
244
+
245
+ [![Contributors][🖐contributors-img]][🖐contributors]
246
+
247
+ Made with [contributors-img][🖐contrib-rocks].
248
+
249
+ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/floss_funding/-/graphs/main][🚎contributors-gl]
250
+
251
+ ## ⭐️ Star History
252
+
253
+ <a href="https://star-history.com/#galtzo-floss/floss_funding&Date">
254
+ <picture>
255
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/floss_funding&type=Date&theme=dark" />
256
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/floss_funding&type=Date" />
257
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=galtzo-floss/floss_funding&type=Date" />
258
+ </picture>
259
+ </a>
260
+
261
+ ## 📌 Versioning
262
+
263
+ This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
264
+ Violations of this scheme should be reported as bugs.
265
+ Specifically, if a minor or patch version is released that breaks backward compatibility,
266
+ a new version should be immediately released that restores compatibility.
267
+ Breaking changes to the public API will only be introduced with new major versions.
268
+
269
+ ### 📌 Is "Platform Support" part of the public API?
270
+
271
+ Yes. But I'm obligated to include notes...
272
+
273
+ SemVer should, but doesn't explicitly, say that dropping support for specific Platforms
274
+ is a *breaking change* to an API.
275
+ It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
276
+
277
+ > dropping support for a platform is both obviously and objectively a breaking change
278
+
279
+ - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
280
+
281
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
282
+ read this article from the creator of SemVer:
283
+
284
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
285
+
286
+ As a result of this policy, and the interpretive lens used by the maintainer,
287
+ you can (and should) specify a dependency on these libraries using
288
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
289
+
290
+ For example:
291
+
292
+ ```ruby
293
+ spec.add_dependency("floss_funding", "~> 1.0")
294
+ ```
295
+
296
+ See [CHANGELOG.md][📌changelog] for a list of releases.
297
+
298
+ ## 📄 License
299
+
300
+ The gem is available as open source under the terms of
301
+ the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
302
+ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
303
+
304
+ ### © Copyright
305
+
306
+ <ul>
307
+ <li>
308
+ Copyright (c) 2018-2020, 2024-2025 Peter H. Boling, of
309
+ <a href="https://discord.gg/3qme4XHNKN">
310
+ Galtzo.com
311
+ <picture>
312
+ <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">
313
+ </picture>
314
+ </a>, and floss_funding contributors
315
+ </li>
316
+ </ul>
317
+
318
+ ## 🤑 One more thing
319
+
320
+ Having arrived at the bottom of the page, please endure a final supplication.
321
+ The primary maintainer of this gem, Peter Boling, wants
322
+ Ruby to be a great place for people to solve problems, big and small.
323
+ Please consider supporting his efforts via the giant yellow link below,
324
+ or one of the smaller ones, depending on button size preference.
325
+
326
+ [![Buy me a latte][🖇buyme-img]][🖇buyme]
327
+
328
+ [![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]
329
+
330
+ P.S. If you need help️ or want to say thanks, 👇 Join the Discord.
331
+
332
+ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
333
+
334
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
335
+ [⛳liberapay]: https://liberapay.com/pboling/donate
336
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
337
+ [🖇sponsor]: https://github.com/sponsors/pboling
338
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
339
+ [🖇polar]: https://polar.sh/pboling
340
+ [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
341
+ [🖇kofi]: https://ko-fi.com/O5O86SNP4
342
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
343
+ [🖇patreon]: https://patreon.com/galtzo
344
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
345
+ [🖇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
346
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
347
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
348
+ [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
349
+
350
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
351
+ [⛳️gem-namespace]: https://github.com/galtzo-floss/floss_funding
352
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-FlossFunding-brightgreen.svg?style=flat&logo=ruby&logoColor=white
353
+ [⛳️gem-name]: https://rubygems.org/gems/floss_funding
354
+ [⛳️name-img]: https://img.shields.io/badge/name-floss__funding-brightgreen.svg?style=flat&logo=rubygems&logoColor=red
355
+ [🚂maint-blog]: http://www.railsbling.com/tags/floss_funding
356
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
357
+ [🚂maint-contact]: http://www.railsbling.com/contact
358
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
359
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
360
+ [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
361
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling/u/peter-boling
362
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
363
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
364
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
365
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
366
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=flat&logo=mastodon&label=Ruby%20%40galtzo
367
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
368
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
369
+ [💖🌳linktree]: https://linktr.ee/galtzo
370
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
371
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
372
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
373
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
374
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
375
+ [💖🧊berg]: https://codeberg.org/pboling
376
+ [💖🐙hub]: https://github.org/pboling
377
+ [💖🛖hut]: https://sr.ht/~galtzo/
378
+ [💖🧪lab]: https://gitlab.com/pboling
379
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
380
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
381
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
382
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
383
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription
384
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
385
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
386
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
387
+ [🚂railsbling]: http://www.railsbling.com
388
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
389
+ [📜src-gl]: https://gitlab.com/galtzo-floss/floss_funding/
390
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
391
+ [📜src-cb]: https://codeberg.org/galtzo-floss/floss_funding
392
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
393
+ [📜src-gh]: https://github.com/galtzo-floss/floss_funding
394
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
395
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
396
+ [📜wiki]: https://gitlab.com/galtzo-floss/floss_funding/-/wikis/home
397
+ [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
398
+ [👽dl-rank]: https://rubygems.org/gems/floss_funding
399
+ [👽dl-ranki]: https://img.shields.io/gem/rd/floss_funding.svg
400
+ [👽oss-help]: https://www.codetriage.com/galtzo-floss/floss_funding
401
+ [👽oss-helpi]: https://www.codetriage.com/galtzo-floss/floss_funding/badges/users.svg
402
+ [👽version]: https://rubygems.org/gems/floss_funding
403
+ [👽versioni]: https://img.shields.io/gem/v/floss_funding.svg
404
+ [🔑qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/floss_funding
405
+ [🔑qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/floss_funding/maintainability.svg
406
+ [🔑qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/floss_funding/metrics/code?sort=coverageRating
407
+ [🔑qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/floss_funding/coverage.svg
408
+ [🔑codecov]: https://codecov.io/gh/galtzo-floss/floss_funding
409
+ [🔑codecovi♻️]: https://codecov.io/gh/galtzo-floss/floss_funding/graph/badge.svg?token=hRnUCPqxMu
410
+ [🔑coveralls]: https://coveralls.io/github/galtzo-floss/floss_funding?branch=main
411
+ [🔑coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/floss_funding/badge.svg?branch=main
412
+ [🖐codeQL]: https://github.com/galtzo-floss/floss_funding/security/code-scanning
413
+ [🖐codeQL-img]: https://github.com/galtzo-floss/floss_funding/actions/workflows/codeql-analysis.yml/badge.svg
414
+ [🚎1-an-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/ancient.yml
415
+ [🚎1-an-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/ancient.yml/badge.svg
416
+ [🚎2-cov-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/coverage.yml
417
+ [🚎2-cov-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/coverage.yml/badge.svg
418
+ [🚎3-hd-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/heads.yml
419
+ [🚎3-hd-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/heads.yml/badge.svg
420
+ [🚎4-lg-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/legacy.yml
421
+ [🚎4-lg-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/legacy.yml/badge.svg
422
+ [🚎5-st-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/style.yml
423
+ [🚎5-st-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/style.yml/badge.svg
424
+ [🚎6-s-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/supported.yml
425
+ [🚎6-s-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/supported.yml/badge.svg
426
+ [🚎7-us-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/unsupported.yml
427
+ [🚎7-us-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/unsupported.yml/badge.svg
428
+ [🚎8-ho-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/hoary.yml
429
+ [🚎8-ho-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/hoary.yml/badge.svg
430
+ [🚎9-t-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/truffle.yml
431
+ [🚎9-t-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/truffle.yml/badge.svg
432
+ [🚎10-j-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/jruby.yml
433
+ [🚎10-j-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/jruby.yml/badge.svg
434
+ [🚎11-c-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/current.yml
435
+ [🚎11-c-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/current.yml/badge.svg
436
+ [🚎13-🔒️-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/deps_locked.yml
437
+ [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/deps_locked.yml/badge.svg
438
+ [🚎14-🔓️-wf]: https://github.com/galtzo-floss/floss_funding/actions/workflows/deps_unlocked.yml
439
+ [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/floss_funding/actions/workflows/deps_unlocked.yml/badge.svg
440
+ [💎ruby-1.9i]: https://img.shields.io/badge/Ruby-1.9-412BD3?style=for-the-badge&logo=ruby&logoColor=white
441
+ [💎ruby-2.0i]: https://img.shields.io/badge/Ruby-2.0-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
442
+ [💎ruby-2.1i]: https://img.shields.io/badge/Ruby-2.1-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
443
+ [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
444
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
445
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
446
+ [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
447
+ [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
448
+ [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
449
+ [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
450
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
451
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
452
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
453
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
454
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
455
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
456
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
457
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
458
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
459
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
460
+ [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
461
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
462
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
463
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
464
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
465
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
466
+ [🤝gh-issues]: https://github.com/galtzo-floss/floss_funding/issues
467
+ [🤝gh-pulls]: https://github.com/galtzo-floss/floss_funding/pulls
468
+ [🤝gl-issues]: https://gitlab.com/galtzo-floss/floss_funding/-/issues
469
+ [🤝gl-pulls]: https://gitlab.com/galtzo-floss/floss_funding/-/merge_requests
470
+ [🤝cb-issues]: https://codeberg.org/galtzo-floss/floss_funding/issues
471
+ [🤝cb-pulls]: https://codeberg.org/galtzo-floss/floss_funding/pulls
472
+ [🤝cb-donate]: https://donate.codeberg.org/
473
+ [🤝contributing]: CONTRIBUTING.md
474
+ [🔑codecov-g♻️]: https://codecov.io/gh/galtzo-floss/floss_funding/graphs/tree.svg?token=hRnUCPqxMu
475
+ [🖐contrib-rocks]: https://contrib.rocks
476
+ [🖐contributors]: https://github.com/galtzo-floss/floss_funding/graphs/contributors
477
+ [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/floss_funding
478
+ [🚎contributors-gl]: https://gitlab.com/galtzo-floss/floss_funding/-/graphs/main
479
+ [🪇conduct]: CODE_OF_CONDUCT.md
480
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
481
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
482
+ [📌semver]: https://semver.org/spec/v2.0.0.html
483
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
484
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
485
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
486
+ [📌changelog]: CHANGELOG.md
487
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
488
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
489
+ [📌gitmoji]:https://gitmoji.dev
490
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
491
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
492
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.262-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
493
+ [🔐security]: SECURITY.md
494
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
495
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
496
+ [📄license]: LICENSE.txt
497
+ [📄license-ref]: https://opensource.org/licenses/MIT
498
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
499
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
500
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
501
+ [🚎yard-current]: http://rubydoc.info/gems/floss_funding
502
+ [🚎yard-head]: https://rspec-stubbed-env.galtzo.com
503
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
504
+ [💎SHA_checksums]: https://gitlab.com/galtzo-floss/floss_funding/-/tree/main/checksums
505
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
506
+ [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
507
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
data/SECURITY.md ADDED
@@ -0,0 +1,21 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ | Version | Supported |
6
+ |----------|-----------|
7
+ | 1.latest | ✅ |
8
+
9
+ ## Security contact information
10
+
11
+ To report a security vulnerability, please use the
12
+ [Tidelift security contact](https://tidelift.com/security).
13
+ Tidelift will coordinate the fix and disclosure.
14
+
15
+ ## Additional Support
16
+
17
+ If you are interested in support for versions older than the latest release,
18
+ please consider sponsoring the project / maintainer @ https://liberapay.com/pboling/donate,
19
+ or find other sponsorship links in the [README].
20
+
21
+ [README]: README.md