version_gem 1.1.4 → 1.1.15

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,39 +1,25 @@
1
- # VersionGem
1
+ <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/ruby-oauth/avatar-128px.svg" width="14%" align="right"/></a>
2
2
 
3
- ## Alternatives
3
+ # 🍲 VersionGem
4
4
 
5
- This gem has a very niche purpose, which is:
6
-
7
- 1. providing introspection of a `Version` module based on a `Version::VERSION` constant string,
8
- 2. while not interfering with `gemspec` parsing where the `VERSION` string is traditionally used.
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
9
6
 
10
- If this isn't **precisely** your use case you may be better off looking at
11
- _[versionaire](https://www.alchemists.io/projects/versionaire)_, a wonderful, performant, well-maintained,
12
- gem from the Alchemists, or _[version_sorter](https://rubygems.org/gems/version_sorter)_ from GitHub.
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
13
8
 
14
- For more discussion about this [see issue #2](https://gitlab.com/oauth-xx/version_gem/-/issues/2)
9
+ ---
15
10
 
16
- -----
11
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
17
12
 
18
- <div id="badges">
13
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
19
14
 
20
- [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
21
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
22
- <span class="badge-buymeacoffee">
23
- <a href="https://ko-fi.com/O5O86SNP4" target='_blank' title="Donate to my FLOSS or refugee efforts at ko-fi.com"><img src="https://img.shields.io/badge/buy%20me%20coffee-donate-yellow.svg" alt="Buy me coffee donation button" /></a>
24
- </span>
25
- <span class="badge-patreon">
26
- <a href="https://patreon.com/galtzo" title="Donate to my FLOSS or refugee efforts using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a>
27
- </span>
15
+ <details markdown="1">
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
28
17
 
29
- </div>
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
30
19
 
31
- [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
32
- [⛳liberapay]: https://liberapay.com/pboling/donate
33
- [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
34
- [🖇sponsor]: https://github.com/sponsors/pboling
20
+ </details>
35
21
 
36
- ## Still here?
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
37
23
 
38
24
  Give your next library an introspectable `Version` module without breaking your Gemspec.
39
25
 
@@ -51,146 +37,121 @@ This library was extracted from the gem _[oauth2](https://gitlab.com/oauth-xx/oa
51
37
 
52
38
  This gem has no runtime dependencies.
53
39
 
54
- <!--
55
- Numbering rows and badges in each row as a visual "database" lookup,
56
- as the table is extremely dense, and it can be very difficult to find anything
57
- Putting one on each row here, to document the emoji that should be used, and for ease of copy/paste.
58
-
59
- row #s:
60
- 1️⃣
61
- 2️⃣
62
- 3️⃣
63
- 4️⃣
64
- 5️⃣
65
- 6️⃣
66
- 7️⃣
67
-
68
- badge #s:
69
- ⛳️
70
- 🖇
71
- 🏘
72
- 🚎
73
- 🖐
74
- 🧮
75
- 📗
76
-
77
- appended indicators:
78
- ♻️ - URL needs to be updated from SAAS integration. Find / Replace is insufficient.
79
- -->
80
-
81
- | | Project | bundle add version_gem |
82
- |:----|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
83
- | 1️⃣ | name, license, docs, standards | [![RubyGems.org][⛳️name-img]][⛳️gem] [![License: MIT][🖇src-license-img]][🖇src-license] [![RubyDoc.info][🚎yard-img]][🚎yard] [![SemVer 2.0.0][🧮semver-img]][🧮semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] |
84
- | 2️⃣ | version & activity | [![Gem Version][⛳️version-img]][⛳️gem] [![Total Downloads][🖇DL-total-img]][⛳️gem] [![Download Rank][🏘DL-rank-img]][⛳️gem] [![Source Code][🚎src-main-img]][🚎src-main] [![Open PRs][🖐prs-o-img]][🖐prs-o] [![Closed PRs][🧮prs-c-img]][🧮prs-c] |
85
- | 3️⃣ | maintenance & linting | [![Maintainability][⛳cclim-maint-img♻️]][⛳cclim-maint] [![Helpers][🖇triage-help-img]][🖇triage-help] [![Depfu][🏘depfu-img♻️]][🏘depfu♻️] [![Contributors][🚎contributors-img]][🚎contributors] [![Style][🖐style-wf-img]][🖐style-wf] [![Kloc Roll][🧮kloc-img]][🧮kloc] |
86
- | 4️⃣ | testing | [![Supported][🏘sup-wf-img]][🏘sup-wf] [![Heads][🚎heads-wf-img]][🚎heads-wf] [![Unofficial Support][🖐uns-wf-img]][🖐uns-wf] <!--[![MacOS][🧮mac-wf-img]][🧮mac-wf] [![Windows][📗win-wf-img]][📗win-wf]--> |
87
- | 5️⃣ | coverage & security | [![CodeClimate][⛳cclim-cov-img♻️]][⛳cclim-cov] [![CodeCov][🖇codecov-img♻️]][🖇codecov] [![Coveralls][🏘coveralls-img]][🏘coveralls] [![Security Policy][🚎sec-pol-img]][🚎sec-pol] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Code Coverage][🧮cov-wf-img]][🧮cov-wf] |
88
- | 6️⃣ | resources | [![Get help on Codementor][🖇codementor-img]][🖇codementor] [![Chat][🏘chat-img]][🏘chat] [![Blog][🚎blog-img]][🚎blog] [![Wiki][🖐wiki-img]][🖐wiki] |
89
- | 7️⃣ | spread 💖 | [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay] [![Sponsor Me][🖇sponsor-img]][🖇sponsor] [![Tweet @ Peter][🏘tweet-img]][🏘tweet] [🌏][aboutme] [👼][angelme] [💻][coderme] |
90
-
91
- <!--
92
- The link tokens in the following sections should be kept ordered by the row and badge numbering scheme
93
- -->
94
-
95
- <!-- 1️⃣ name, license, docs -->
96
- [⛳️gem]: https://rubygems.org/gems/version_gem
97
- [⛳️name-img]: https://img.shields.io/badge/name-version_gem-brightgreen.svg?style=flat
98
- [🖇src-license]: https://opensource.org/licenses/MIT
99
- [🖇src-license-img]: https://img.shields.io/badge/License-MIT-green.svg
100
- [🚎yard]: https://www.rubydoc.info/gems/version_gem
101
- [🚎yard-img]: https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat
102
- [🧮semver]: http://semver.org/
103
- [🧮semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
104
- [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
105
- [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
106
-
107
- <!-- 2️⃣ version & activity -->
108
- [⛳️version-img]: http://img.shields.io/gem/v/version_gem.svg
109
- [🖇DL-total-img]: https://img.shields.io/gem/dt/version_gem.svg
110
- [🏘DL-rank-img]: https://img.shields.io/gem/rt/version_gem.svg
111
- [🚎src-main]: https://gitlab.com/oauth-xx/version_gem
112
- [🚎src-main-img]: https://img.shields.io/badge/source-gitlab-brightgreen.svg?style=flat
113
- [🖐prs-o]: https://gitlab.com/oauth-xx/version_gem/-/merge_requests
114
- [🖐prs-o-img]: https://img.shields.io/github/issues-pr/pboling/version_gem
115
- [🧮prs-c]: https://github.com/pboling/version_gem/pulls?q=is%3Apr+is%3Aclosed
116
- [🧮prs-c-img]: https://img.shields.io/github/issues-pr-closed/pboling/version_gem
117
-
118
- <!-- 3️⃣ maintenance & linting -->
119
- [⛳cclim-maint]: https://codeclimate.com/github/pboling/version_gem/maintainability
120
- [⛳cclim-maint-img♻️]: https://api.codeclimate.com/v1/badges/b504d61c4ed1d46aec02/maintainability
121
- [🖇triage-help]: https://www.codetriage.com/pboling/version_gem
122
- [🖇triage-help-img]: https://www.codetriage.com/pboling/version_gem/badges/users.svg
123
- [🏘depfu♻️]: https://depfu.com/github/pboling/version_gem?project_id=35803
124
- [🏘depfu-img♻️]: https://badges.depfu.com/badges/5d8943de6cfdf1ee048ad6d907f3e35b/count.svg
125
- [🚎contributors]: https://gitlab.com/oauth-xx/version_gem/-/graphs/main
126
- [🚎contributors-img]: https://img.shields.io/github/contributors-anon/pboling/version_gem
127
- [🖐style-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/style.yml
128
- [🖐style-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/style.yml/badge.svg
129
- [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
130
- [🧮kloc-img]: https://img.shields.io/tokei/lines/github.com/pboling/version_gem
131
-
132
- <!-- 4️⃣ testing -->
133
- [🏘sup-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/supported.yml
134
- [🏘sup-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/supported.yml/badge.svg
135
- [🚎heads-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/heads.yml
136
- [🚎heads-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/heads.yml/badge.svg
137
- [🖐uns-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/unsupported.yml
138
- [🖐uns-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/unsupported.yml/badge.svg
139
- [🧮mac-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/macos.yml
140
- [🧮mac-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/macos.yml/badge.svg
141
- [📗win-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/windows.yml
142
- [📗win-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/windows.yml/badge.svg
143
-
144
- <!-- 5️⃣ coverage & security -->
145
- [⛳cclim-cov]: https://codeclimate.com/github/pboling/version_gem/test_coverage
146
- [⛳cclim-cov-img♻️]: https://api.codeclimate.com/v1/badges/b504d61c4ed1d46aec02/test_coverage
147
- [🖇codecov-img♻️]: https://codecov.io/gh/pboling/version_gem/branch/main/graph/badge.svg?token=79c3X4vtfO
148
- [🖇codecov]: https://codecov.io/gh/pboling/version_gem
149
- [🏘coveralls]: https://coveralls.io/github/pboling/version_gem?branch=main
150
- [🏘coveralls-img]: https://coveralls.io/repos/github/pboling/version_gem/badge.svg?branch=main
151
- [🚎sec-pol]: https://gitlab.com/oauth-xx/version_gem/-/blob/main/SECURITY.md
152
- [🚎sec-pol-img]: https://img.shields.io/badge/security-policy-brightgreen.svg?style=flat
153
- [🖐codeQL]: https://github.com/pboling/version_gem/security/code-scanning
154
- [🖐codeQL-img]: https://github.com/oauth-xx/version_gem/actions/workflows/codeql-analysis.yml/badge.svg
155
- [🧮cov-wf]: https://github.com/oauth-xx/version_gem/actions/workflows/coverage.yml
156
- [🧮cov-wf-img]: https://github.com/oauth-xx/version_gem/actions/workflows/coverage.yml/badge.svg
157
-
158
- <!-- 6️⃣ resources -->
159
- [🖇codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
160
- [🖇codementor-img]: https://cdn.codementor.io/badges/get_help_github.svg
161
- [🏘chat]: https://gitter.im/oauth-xx/version_gem
162
- [🏘chat-img]: https://img.shields.io/gitter/room/oauth-xx/version_gem.svg
163
- [🚎blog]: http://www.railsbling.com/tags/version_gem/
164
- [🚎blog-img]: https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat
165
- [🖐wiki]: https://gitlab.com/oauth-xx/version_gem/-/wikis/home
166
- [🖐wiki-img]: https://img.shields.io/badge/wiki-examples-brightgreen.svg?style=flat
167
-
168
- <!-- 7️⃣ spread 💖 -->
169
- [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
170
- [⛳liberapay]: https://liberapay.com/pboling/donate
171
- [🖇sponsor-img]: https://img.shields.io/badge/sponsor-pboling.svg?style=social&logo=github
172
- [🖇sponsor]: https://github.com/sponsors/pboling
173
- [🏘tweet-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
174
- [🏘tweet]: http://twitter.com/galtzo
40
+ ### 🧐 Alternatives
41
+
42
+ This gem has a very niche purpose, which is:
43
+
44
+ 1. providing introspection of a `Version` module based on a `VERSION` constant string within it,
45
+ 2. while not interfering with `gemspec` parsing where the `VERSION` string is traditionally used,
46
+ 3. allowing 100% test coverage of Ruby code, including the `Version` module.
47
+
48
+ As proof in the pudding, this gem achieves 100% test coverage for lines and branches,
49
+ all 118 and 4 of them, respectively; coverage enabled in part by patterns from this library.
50
+ You can make it happen for your library too!
51
+
52
+ If this isn't **precisely** your use case you may be better off looking at
53
+ _[versionaire](https://www.alchemists.io/projects/versionaire)_, a wonderful, performant, well-maintained,
54
+ gem from the Alchemists, or _[version_sorter](https://rubygems.org/gems/version_sorter)_ from GitHub.
55
+
56
+ For more discussion about this [see issue #2](https://gitlab.com/oauth-xx/version_gem/-/issues/2)
57
+
58
+ ## 💡 Info you can shake a stick at
59
+
60
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
61
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
62
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
63
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
64
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
65
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
66
+ | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
67
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
68
+ | 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] |
69
+ | 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] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
70
+ | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
71
+ | 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] |
72
+ | 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] |
73
+ | `...` 💖 | [![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] |
74
+
75
+ ### Compatibility
76
+
77
+ Compatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.
78
+ CI workflows and Appraisals are generated for MRI Ruby 2.4+.
79
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
80
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
81
+ not practical for the current toolchain.
82
+
83
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
84
+
85
+ The _amazing_ test matrix is powered by the kettle-dev stack.
86
+
87
+ <details markdown="1">
88
+ <summary>How kettle-dev manages complexity in tests</summary>
89
+
90
+ | Gem | Source | Role | Daily download rank |
91
+ |-----|--------|------|---------------------|
92
+ | [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Daily download rank for appraisal2](https://img.shields.io/gem/rd/appraisal2.svg?style=flat-square)](https://bestgems.org/gems/appraisal2) |
93
+ | [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Daily download rank for appraisal2-rubocop](https://img.shields.io/gem/rd/appraisal2-rubocop.svg?style=flat-square)](https://bestgems.org/gems/appraisal2-rubocop) |
94
+ | [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Daily download rank for kettle-dev](https://img.shields.io/gem/rd/kettle-dev.svg?style=flat-square)](https://bestgems.org/gems/kettle-dev) |
95
+ | [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Daily download rank for kettle-jem](https://img.shields.io/gem/rd/kettle-jem.svg?style=flat-square)](https://bestgems.org/gems/kettle-jem) |
96
+ | [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Daily download rank for kettle-soup-cover](https://img.shields.io/gem/rd/kettle-soup-cover.svg?style=flat-square)](https://bestgems.org/gems/kettle-soup-cover) |
97
+ | [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Daily download rank for kettle-test](https://img.shields.io/gem/rd/kettle-test.svg?style=flat-square)](https://bestgems.org/gems/kettle-test) |
98
+ | [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Daily download rank for rubocop-lts](https://img.shields.io/gem/rd/rubocop-lts.svg?style=flat-square)](https://bestgems.org/gems/rubocop-lts) |
99
+ | [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Daily download rank for turbo_tests2](https://img.shields.io/gem/rd/turbo_tests2.svg?style=flat-square)](https://bestgems.org/gems/turbo_tests2) |
100
+
101
+ </details>
102
+
103
+ ### Federated DVCS
104
+
105
+ <details markdown="1">
106
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
107
+
108
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
109
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
110
+ | 🧪 [ruby-oauth/version_gem on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
111
+ | 🧊 [ruby-oauth/version_gem on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
112
+ | 🐙 [ruby-oauth/version_gem on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
113
+
114
+ </details>
115
+
116
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/version_gem)](https://tidelift.com/subscription/pkg/rubygems-version_gem?utm_source=rubygems-version_gem&utm_medium=referral&utm_campaign=readme)
117
+
118
+ Available as part of the Tidelift Subscription.
119
+
120
+ <details markdown="1">
121
+ <summary>Need enterprise-level guarantees?</summary>
122
+
123
+ The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
175
124
 
176
- <!-- Maintainer Contact Links -->
177
- [railsbling]: http://www.railsbling.com
178
- [peterboling]: http://www.peterboling.com
179
- [aboutme]: https://about.me/peter.boling
180
- [angelme]: https://angel.co/peter-boling
181
- [coderme]:http://coderwall.com/pboling
125
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
182
126
 
183
- ## Installation
127
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
128
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
129
+ - 💡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
130
+
131
+ Alternatively:
132
+
133
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
134
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
135
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
136
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
137
+
138
+ </details>
139
+
140
+ ## ✨ Installation
184
141
 
185
142
  Install the gem and add to the application's Gemfile by executing:
186
143
 
187
- $ bundle add version_gem
144
+ ```console
145
+ bundle add version_gem
146
+ ```
188
147
 
189
148
  If bundler is not being used to manage dependencies, install the gem by executing:
190
149
 
191
- $ gem install version_gem
150
+ ```console
151
+ gem install version_gem
152
+ ```
192
153
 
193
- ## Usage
154
+ ## ⚙️ Configuration
194
155
 
195
156
  In the standard `bundle gem my_lib` code you get the following in `lib/my_lib/version.rb`:
196
157
 
@@ -225,7 +186,9 @@ MyLib::Version.class_eval do
225
186
  end
226
187
  ```
227
188
 
228
- And now you have some version introspection methods available:
189
+ ## 🔧 Basic Usage
190
+
191
+ Now you have some version introspection methods available:
229
192
 
230
193
  ```ruby
231
194
  MyLib::Version.to_s # => "0.1.0"
@@ -237,14 +200,115 @@ MyLib::Version.to_a # => [0, 1, 0]
237
200
  MyLib::Version.to_h # => { major: 0, minor: 1, patch: 0, pre: "" }
238
201
  ```
239
202
 
240
- ### Side benefit
203
+ ### Side benefit #1
204
+
205
+ You can reference the version from your gemspec, keeping the version string DRY,
206
+ *and* still get accurate code coverage!
207
+
208
+ ```ruby
209
+ # Get the GEMFILE_VERSION without *require* "my_gem/version", for code coverage accuracy
210
+ # See: https://github.com/simplecov-ruby/simplecov/issues/557#issuecomment-2630782358
211
+ # Kernel.load because load is overloaded in RubyGems during gemspec evaluation
212
+ Kernel.load("lib/my_gem/version.rb")
213
+ gem_version = MyGem::Version::VERSION
214
+ MyGem::Version.send(:remove_const, :VERSION)
215
+
216
+ Gem::Specification.new do |spec|
217
+ # ...
218
+ spec.version = gem_version
219
+ end
220
+ ```
221
+
222
+ ### Side benefit #2
241
223
 
242
224
  Your `version.rb` file now abides the Ruby convention of directory / path matching the namespace / class!
243
225
 
244
- ### Zietwerk
226
+ ### Epoch Usage (Epoch Semantic Versioning, as of version 1.1.7)
227
+
228
+ In the standard `bundle gem my_epoch_lib` code you get the following in `lib/my_epoch_lib/version.rb`:
229
+
230
+ ```ruby
231
+ module MyEpochLib
232
+ VERSION = "0.1.0"
233
+ end
234
+ ```
235
+
236
+ Change it to a nested `Version` namespace (the one implied by the path => namespace convention):
237
+
238
+ ```ruby
239
+ module MyEpochLib
240
+ module Version
241
+ VERSION = "0.1.0"
242
+ end
243
+ end
244
+ ```
245
+
246
+ The Epoch and Major versions are derived from the formula:
247
+
248
+ ```
249
+ {EPOCH * 1000 + MAJOR}.MINOR.PATCH
250
+ ```
251
+
252
+ This will start your library with the following version segments:
253
+
254
+ * `epoch = 0`
255
+ * `major = 0`
256
+ * `minor = 1`
257
+ * `patch = 0`
258
+ * `pre = nil`
259
+
260
+ And the segments are defined as:
261
+
262
+ ```
263
+ EPOCH: Increment when you make significant or groundbreaking changes.
264
+ MAJOR: Increment when you make minor incompatible API changes.
265
+ MINOR: Increment when you add functionality in a backwards-compatible manner.
266
+ PATCH: Increment when you make backwards-compatible bug fixes.
267
+ ```
268
+
269
+ Therefore, if you set your version number to:
270
+
271
+ ```ruby
272
+ VERSION = "27016.42.86-pre.7"
273
+ ```
274
+
275
+ You will get the following version segments:
276
+
277
+ ```
278
+ {
279
+ epoch: 27,
280
+ major: 16,
281
+ minor: 42,
282
+ patch: 86,
283
+ pre: "pre-7"
284
+ }
285
+ ```
286
+
287
+ Following the same setup as [Basic Usage](#-basic-usage) above (add `require "version_gem"` at the top of your main lib file), then add the following wherever you want in the same file (recommend the bottom):
288
+
289
+ ```ruby
290
+ MyLib::Version.class_eval do
291
+ extend VersionGem::Epoch
292
+ end
293
+ ```
294
+
295
+ And now you have some version introspection methods available:
296
+
297
+ ```ruby
298
+ MyLib::Version.to_s # => "1024.3.8"
299
+ MyLib::Version.epoch # => 1
300
+ MyLib::Version.major # => 24
301
+ MyLib::Version.minor # => 3
302
+ MyLib::Version.patch # => 8
303
+ MyLib::Version.pre # => ""
304
+ MyLib::Version.to_a # => [1, 24, 3, 8]
305
+ MyLib::Version.to_h # => { epoch: 1, major: 24, minor: 3, patch: 8, pre: "" }
306
+ ```
307
+
308
+ ### Usage with Zeitwerk
245
309
 
246
310
  The pattern of `version.rb` breaking the ruby convention of directory / path matching the namespace / class
247
- is so entrenched that the `zeitwerk` library has a special carve-out for it.
311
+ is so entrenched that the `zeitwerk` library has a special carve-out for it. 🥺
248
312
  RubyGems using this "bad is actually good" pattern are encouraged to use `Zeitwerk.for_gem`.
249
313
 
250
314
  **Do not do that ^** if you use this gem.
@@ -283,8 +347,9 @@ end
283
347
 
284
348
  #### Complex Zeitwerk Example
285
349
 
350
+ Maybe you would like to contribute one?
286
351
 
287
- #### Query Ruby Version (as of version 1.2.0)
352
+ #### Query Ruby Version (as of version 1.1.2)
288
353
 
289
354
  In Continuous Integration environments for libraries that run against many versions of Ruby,
290
355
  I often need to configure things discretely per Ruby version, and doing so forced me to repeat
@@ -330,7 +395,7 @@ RSpec.describe(MyLib::Version) do
330
395
  it_behaves_like "a Version module", described_class
331
396
  end
332
397
 
333
- # Or, if you want to write your own, here is the a la carte menu:
398
+ # Or, if you want to write your own, here is the á la carte menu:
334
399
  RSpec.describe(MyLib::Version) do
335
400
  it "is a Version module" do
336
401
  expect(described_class).is_a?(Module)
@@ -338,89 +403,418 @@ RSpec.describe(MyLib::Version) do
338
403
  expect(described_class).to(have_version_as_string)
339
404
  expect(described_class.to_s).to(be_a(String))
340
405
  expect(described_class).to(have_major_as_integer)
406
+ expect(described_class).to(have_epoch_as_integer)
341
407
  expect(described_class).to(have_minor_as_integer)
342
408
  expect(described_class).to(have_patch_as_integer)
343
409
  expect(described_class).to(have_pre_as_nil_or_string)
410
+ # This would be %i[epoch major minor patch pre] for epoch version schemes
344
411
  expect(described_class.to_h.keys).to(match_array(%i[major minor patch pre]))
345
412
  expect(described_class.to_a).to(be_a(Array))
346
413
  end
347
414
  end
348
415
  ```
349
416
 
350
- ## Development
417
+ ## 🦷 FLOSS Funding
351
418
 
352
- 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.
419
+ While ruby-oauth tools are free software and will always be, the project would benefit immensely from some funding.
420
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
353
421
 
354
- 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 the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
422
+ We welcome both individual and corporate sponsors! We also offer a
423
+ wide array of funding channels to account for your preferences.
424
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
355
425
 
356
- ## Contributing
426
+ **If you're working in a company that's making significant use of ruby-oauth tools we'd
427
+ appreciate it if you suggest to your company to become a ruby-oauth sponsor.**
357
428
 
358
- See [CONTRIBUTING.md][contributing]
429
+ You can support the development of ruby-oauth tools via
430
+ [GitHub Sponsors][🖇sponsor],
431
+ [Liberapay][⛳liberapay],
432
+ [PayPal][🖇paypal],
433
+ [Open Collective][🖇osc]
434
+ and [Tidelift][🏙️entsup-tidelift].
359
435
 
360
- ## Contributors
436
+ | 📍 NOTE |
437
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
438
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
361
439
 
362
- [![Contributors](https://contrib.rocks/image?repo=pboling/version_gem)]("https://gitlab.com/oauth-xx/version_gem/-/graphs/main")
440
+ ### Open Collective for Individuals
363
441
 
364
- Made with [contributors-img](https://contrib.rocks).
442
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/ruby-oauth#backer)]
365
443
 
366
- ## License
444
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
367
445
 
368
- The gem is available as open source under the terms of
369
- the [MIT License][license] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref].
370
- See [LICENSE][license] for the official [Copyright Notice][copyright-notice-explainer].
446
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
447
+ No backers yet. Be the first!
448
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
449
+
450
+ ### Open Collective for Organizations
451
+
452
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/ruby-oauth#sponsor)]
453
+
454
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
455
+
456
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
457
+ No sponsors yet. Be the first!
458
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
459
+
460
+ [kettle-readme-backers]: https://github.com/ruby-oauth/version_gem/blob/main/bin/kettle-readme-backers
461
+
462
+ ### Another way to support open-source
463
+
464
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
465
+
466
+ If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
467
+
468
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
469
+
470
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
471
+
472
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
473
+
474
+ ## 🔐 Security
475
+
476
+ See [SECURITY.md][🔐security].
477
+
478
+ ## 🤝 Contributing
479
+
480
+ If you need some ideas of where to help, you could work on adding more code coverage,
481
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
482
+ or use the gem and think about how it could be better.
483
+
484
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
485
+
486
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
487
+
488
+ ### 🚀 Release Instructions
489
+
490
+ See [CONTRIBUTING.md][🤝contributing].
371
491
 
372
- * Copyright (c) 2022 - 2023 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
492
+ ### Code Coverage
373
493
 
374
- ## Code of Conduct
494
+ <details markdown="1">
495
+ <summary>Coverage service badges</summary>
375
496
 
376
- Everyone interacting in the VersionGem project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://gitlab.com/oauth-xx/version_gem/-/blob/main/CODE_OF_CONDUCT.md).
497
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
377
498
 
378
- ## Versioning
499
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
379
500
 
380
- This library aims to adhere to [Semantic Versioning 2.0.0][🧮semver]. Violations of this scheme should be reported as
381
- bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be
382
- immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new
383
- major versions.
501
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
384
502
 
385
- As a result of this policy, you can (and should) specify a dependency on this gem using
386
- the [Pessimistic Version Constraint][pvc] with two digits of precision.
503
+ </details>
504
+
505
+ ### 🪇 Code of Conduct
506
+
507
+ Everyone interacting with this project's codebases, issue trackers,
508
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
509
+
510
+ ## 🌈 Contributors
511
+
512
+ [![Contributors][🖐contributors-img]][🖐contributors]
513
+
514
+ Made with [contributors-img][🖐contrib-rocks].
515
+
516
+ Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/version_gem/-/graphs/main][🚎contributors-gl]
517
+
518
+ <details markdown="1">
519
+ <summary>⭐️ Star History</summary>
520
+
521
+ <a href="https://star-history.com/ruby-oauth/version_gem&Date">
522
+ <picture>
523
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/version_gem&type=Date&theme=dark" />
524
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/version_gem&type=Date" />
525
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ruby-oauth/version_gem&type=Date" />
526
+ </picture>
527
+ </a>
528
+
529
+ </details>
530
+
531
+ ## 📌 Versioning
532
+
533
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
534
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
387
535
 
388
536
  For example:
389
537
 
390
538
  ```ruby
391
- spec.add_dependency("version_gem", "~> 1.1")
539
+ spec.add_dependency("version_gem", "~> 1.0")
392
540
  ```
393
541
 
394
- ## Security
395
-
396
- See [SECURITY.md](https://gitlab.com/oauth-xx/version_gem/-/blob/main/SECURITY.md).
397
-
398
- [aboutme]: https://about.me/peter.boling
399
- [actions]: https://github.com/oauth-xx/version_gem/actions
400
- [angelme]: https://angel.co/peter-boling
401
- [blogpage]: http://www.railsbling.com/tags/version_gem/
402
- [codecov_coverage]: https://codecov.io/gh/oauth-xx/version_gem
403
- [code_triage]: https://www.codetriage.com/oauth-xx/version_gem
404
- [chat]: https://gitter.im/oauth-xx/version_gem?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
405
- [climate_coverage]: https://codeclimate.com/github/oauth-xx/version_gem/test_coverage
406
- [climate_maintainability]: https://codeclimate.com/github/oauth-xx/version_gem/maintainability
407
- [copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
408
- [conduct]: https://gitlab.com/oauth-xx/version_gem/-/blob/main/CODE_OF_CONDUCT.md
409
- [contributing]: https://gitlab.com/oauth-xx/version_gem/-/blob/main/CONTRIBUTING.md
410
- [devto]: https://dev.to/galtzo
411
- [documentation]: https://rubydoc.info/github/oauth-xx/version_gem/main
412
- [followme]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
413
- [gh_sponsors]: https://github.com/sponsors/pboling
414
- [issues]: https://github.com/oauth-xx/version_gem/issues
415
- [liberapay_donate]: https://liberapay.com/pboling/donate
416
- [license]: LICENSE.txt
417
- [license-ref]: https://opensource.org/licenses/MIT
418
- [license-img]: https://img.shields.io/badge/License-MIT-green.svg
419
- [peterboling]: http://www.peterboling.com
420
- [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
421
- [railsbling]: http://www.railsbling.com
422
- [rubygems]: https://rubygems.org/gems/version_gem
423
- [security]: https://gitlab.com/oauth-xx/version_gem/-/blob/main/SECURITY.md
424
- [semver]: http://semver.org/
425
- [source]: https://gitlab.com/oauth-xx/version_gem
426
- [tweetme]: http://twitter.com/galtzo
542
+ <details markdown="1">
543
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
544
+
545
+ Dropping support for a platform can be a breaking change for affected users.
546
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
547
+
548
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
549
+ read this article from the creator of SemVer:
550
+
551
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
552
+
553
+ </details>
554
+
555
+ See [CHANGELOG.md][📌changelog] for a list of releases.
556
+
557
+ ## 📄 License
558
+
559
+ The gem is available as open source under the terms of
560
+ the [MIT](https://github.com/ruby-oauth/version_gem/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
561
+
562
+ ### © Copyright
563
+
564
+ See [LICENSE.md][📄license] for the official copyright notice.
565
+
566
+ <details markdown="1">
567
+ <summary>Copyright holders</summary>
568
+
569
+ - Copyright (c) 2022-2023, 2025-2026 Peter H. Boling
570
+ - Copyright (c) 2024-2025 Aboling0
571
+
572
+ </details>
573
+
574
+ ## 🤑 A request for help
575
+
576
+ Maintainers have teeth and need to pay their dentists.
577
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
578
+ I began spending most of my time building open source tools.
579
+ I'm hoping to be able to pay for my kids' health insurance this month,
580
+ so if you value the work I am doing, I need your support.
581
+ Please consider sponsoring me or the project.
582
+
583
+ To join the community or get help, use the RubyForum or Discord.
584
+
585
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
586
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
587
+
588
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
589
+
590
+ [![Sponsor ruby-oauth/version_gem on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
591
+
592
+ ### Please give the project a star ⭐ ♥.
593
+
594
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
595
+
596
+ Thanks for RTFM. ☺️
597
+
598
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
599
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
600
+ [⛳liberapay]: https://liberapay.com/pboling/donate
601
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
602
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
603
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
604
+ [🖇osc-backers]: https://opencollective.com/ruby-oauth#backer
605
+ [🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat
606
+ [🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor
607
+ [🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat
608
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
609
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
610
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
611
+ [🖇osc]: https://opencollective.com/ruby-oauth
612
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
613
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
614
+ [🖇sponsor]: https://github.com/sponsors/pboling
615
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
616
+ [🖇kofi]: https://ko-fi.com/pboling
617
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
618
+ [🖇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
619
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
620
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
621
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
622
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
623
+ [🖇floss-funding.dev]: https://floss-funding.dev
624
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
625
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
626
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
627
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
628
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
629
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
630
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
631
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/ruby-oauth
632
+
633
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
634
+ [⛳️gem-namespace]: https://github.com/ruby-oauth/version_gem
635
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-VersionGem-3C2D2D.svg?style=square&logo=ruby&logoColor=white
636
+ [⛳️gem-name]: https://bestgems.org/gems/version_gem
637
+ [⛳️name-img]: https://img.shields.io/badge/name-version__gem-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
638
+ [⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/version_gem.svg
639
+ [⛳️tag]: https://github.com/ruby-oauth/version_gem/releases
640
+ [🚂maint-blog]: http://www.railsbling.com/tags/version_gem
641
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
642
+ [🚂maint-contact]: http://www.railsbling.com/contact
643
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
644
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
645
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
646
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
647
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
648
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
649
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
650
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
651
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
652
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
653
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
654
+ [💖🌳linktree]: https://linktr.ee/galtzo
655
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
656
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
657
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
658
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
659
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
660
+ [💖🧊berg]: https://codeberg.org/pboling
661
+ [💖🐙hub]: https://github.org/pboling
662
+ [💖🛖hut]: https://sr.ht/~galtzo/
663
+ [💖🧪lab]: https://gitlab.com/pboling
664
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
665
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
666
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
667
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
668
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-version_gem?utm_source=rubygems-version_gem&utm_medium=referral&utm_campaign=readme
669
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
670
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
671
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
672
+ [🚂railsbling]: http://www.railsbling.com
673
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
674
+ [📜src-gl]: https://gitlab.com/ruby-oauth/version_gem
675
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
676
+ [📜src-cb]: https://codeberg.org/ruby-oauth/version_gem
677
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
678
+ [📜src-gh]: https://github.com/ruby-oauth/version_gem
679
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
680
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
681
+ [📜gl-wiki]: https://gitlab.com/ruby-oauth/version_gem/-/wikis/home
682
+ [📜gh-wiki]: https://github.com/ruby-oauth/version_gem/wiki
683
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
684
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
685
+ [👽dl-rank]: https://bestgems.org/gems/version_gem
686
+ [👽dl-ranki]: https://img.shields.io/gem/rd/version_gem.svg
687
+ [👽version]: https://bestgems.org/gems/version_gem
688
+ [👽versioni]: https://img.shields.io/gem/v/version_gem.svg
689
+ [🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/version_gem
690
+ [🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/version_gem/maintainability.svg
691
+ [🏀qlty-cov]: https://qlty.sh/gh/ruby-oauth/projects/version_gem/metrics/code?sort=coverageRating
692
+ [🏀qlty-covi]: https://qlty.sh/gh/ruby-oauth/projects/version_gem/coverage.svg
693
+ [🏀codecov]: https://codecov.io/gh/ruby-oauth/version_gem
694
+ [🏀codecovi]: https://codecov.io/gh/ruby-oauth/version_gem/graph/badge.svg
695
+ [🏀coveralls]: https://coveralls.io/github/ruby-oauth/version_gem?branch=main
696
+ [🏀coveralls-img]: https://coveralls.io/repos/github/ruby-oauth/version_gem/badge.svg?branch=main
697
+ [🚎ruby-2.4-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-2.4.yml
698
+ [🚎ruby-2.5-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-2.5.yml
699
+ [🚎ruby-2.6-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-2.6.yml
700
+ [🚎ruby-2.7-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-2.7.yml
701
+ [🚎ruby-3.0-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-3.0.yml
702
+ [🚎ruby-3.1-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-3.1.yml
703
+ [🚎ruby-3.2-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-3.2.yml
704
+ [🚎ruby-3.3-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-3.3.yml
705
+ [🚎ruby-3.4-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/ruby-3.4.yml
706
+ [🚎jruby-9.2-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby-9.2.yml
707
+ [🚎jruby-9.3-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby-9.3.yml
708
+ [🚎jruby-9.4-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby-9.4.yml
709
+ [🚎jruby-10.0-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby-10.0.yml
710
+ [🚎truby-22.3-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-22.3.yml
711
+ [🚎truby-23.0-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-23.0.yml
712
+ [🚎truby-23.1-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-23.1.yml
713
+ [🚎truby-24.2-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-24.2.yml
714
+ [🚎truby-25.0-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-25.0.yml
715
+ [🚎truby-33.0-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffleruby-33.0.yml
716
+ [🚎2-cov-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/coverage.yml
717
+ [🚎2-cov-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/coverage.yml/badge.svg
718
+ [🚎3-hd-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/heads.yml
719
+ [🚎3-hd-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/heads.yml/badge.svg
720
+ [🚎5-st-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/style.yml
721
+ [🚎5-st-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/style.yml/badge.svg
722
+ [🚎9-t-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffle.yml
723
+ [🚎9-t-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/truffle.yml/badge.svg
724
+ [🚎10-j-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby.yml
725
+ [🚎10-j-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/jruby.yml/badge.svg
726
+ [🚎11-c-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/current.yml
727
+ [🚎11-c-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/current.yml/badge.svg
728
+ [🚎12-crh-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/dep-heads.yml
729
+ [🚎12-crh-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/dep-heads.yml/badge.svg
730
+ [🚎13-🔒️-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/locked_deps.yml
731
+ [🚎13-🔒️-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/locked_deps.yml/badge.svg
732
+ [🚎14-🔓️-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/unlocked_deps.yml
733
+ [🚎14-🔓️-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/unlocked_deps.yml/badge.svg
734
+ [🚎15-🪪-wf]: https://github.com/ruby-oauth/version_gem/actions/workflows/license-eye.yml
735
+ [🚎15-🪪-wfi]: https://github.com/ruby-oauth/version_gem/actions/workflows/license-eye.yml/badge.svg
736
+ [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
737
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
738
+ [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
739
+ [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
740
+ [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
741
+ [💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
742
+ [💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
743
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
744
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
745
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
746
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
747
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
748
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
749
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
750
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
751
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
752
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
753
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
754
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
755
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
756
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
757
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
758
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
759
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
760
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
761
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
762
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
763
+ [🤝gh-issues]: https://github.com/ruby-oauth/version_gem/issues
764
+ [🤝gh-pulls]: https://github.com/ruby-oauth/version_gem/pulls
765
+ [🤝gl-issues]: https://gitlab.com/ruby-oauth/version_gem/-/issues
766
+ [🤝gl-pulls]: https://gitlab.com/ruby-oauth/version_gem/-/merge_requests
767
+ [🤝cb-issues]: https://codeberg.org/ruby-oauth/version_gem/issues
768
+ [🤝cb-pulls]: https://codeberg.org/ruby-oauth/version_gem/pulls
769
+ [🤝cb-donate]: https://donate.codeberg.org/
770
+ [🤝contributing]: https://github.com/ruby-oauth/version_gem/blob/main/CONTRIBUTING.md
771
+ [🏀codecov-g]: https://codecov.io/gh/ruby-oauth/version_gem/graph/badge.svg
772
+ [🖐contrib-rocks]: https://contrib.rocks
773
+ [🖐contributors]: https://github.com/ruby-oauth/version_gem/graphs/contributors
774
+ [🖐contributors-img]: https://contrib.rocks/image?repo=ruby-oauth/version_gem
775
+ [🚎contributors-gl]: https://gitlab.com/ruby-oauth/version_gem/-/graphs/main
776
+ [🪇conduct]: https://github.com/ruby-oauth/version_gem/blob/main/CODE_OF_CONDUCT.md
777
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
778
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
779
+ [📌semver]: https://semver.org/spec/v2.0.0.html
780
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
781
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
782
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
783
+ [📌changelog]: https://github.com/ruby-oauth/version_gem/blob/main/CHANGELOG.md
784
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
785
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
786
+ [📌gitmoji]: https://gitmoji.dev
787
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
788
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
789
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.119-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
790
+ [🔐security]: https://github.com/ruby-oauth/version_gem/blob/main/SECURITY.md
791
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
792
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
793
+ [📄license]: LICENSE.md
794
+ [📄license-ref]: https://github.com/ruby-oauth/version_gem/blob/main/MIT.md
795
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
796
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
797
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
798
+
799
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
800
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
801
+ [🚎yard-current]: http://rubydoc.info/gems/version_gem
802
+ [🚎yard-head]: https://version-gem.galtzo.com
803
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
804
+ [💎SHA_checksums]: https://gitlab.com/ruby-oauth/version_gem/-/tree/main/checksums
805
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
806
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
807
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
808
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
809
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
810
+
811
+ <!-- kettle-jem:metadata:start -->
812
+ | Field | Value |
813
+ |---|---|
814
+ | Package | version_gem |
815
+ | Description | 🍲 Versions are good. Versions are cool. Versions will win. |
816
+ | Homepage | https://github.com/ruby-oauth/version_gem |
817
+ | Source | https://github.com/ruby-oauth/version_gem |
818
+ | License | `MIT` |
819
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/version_gem, https://www.buymeacoffee.com/pboling |
820
+ <!-- kettle-jem:metadata:end -->