token-resolver 1.0.2 → 2.0.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +57 -1
- data/CITATION.cff +6 -6
- data/CONTRIBUTING.md +62 -33
- data/FUNDING.md +1 -1
- data/LICENSE.md +13 -0
- data/README.md +98 -246
- data/certs/pboling.pem +27 -0
- data/lib/token/resolver/resolve.rb +2 -0
- data/lib/token/resolver/version.rb +2 -4
- data/sig/token/resolver/version.rbs +8 -0
- data.tar.gz.sig +0 -0
- metadata +31 -24
- metadata.gz.sig +0 -0
- data/LICENSE.txt +0 -21
- data/REEK +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2614ef5d4abd4335b18fcfb4a75a7f5fff7e9285ad7690659e3028997b69e765
|
|
4
|
+
data.tar.gz: 477a74ae8456d26cd15648bb1e521786e047f906875050960f8b1376a99d2c12
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d7322c8f2d6ca25f538bc54f9450daf3edae06a07aee627909d1a01b431ba0d6a39f76234d1a9737807adf0c822055ce67ef36ff7166b615791b88b0a0fad7db
|
|
7
|
+
data.tar.gz: 393e05d3ab64f07d559bb0e2d4bbdfcd2bac219e05b04d7bdfc96d3cf72dd79403008cc062e69c68a6ccf6e5c5b8e2a053b7d9cc991d4bc2531a658848e2d487
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,60 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.0.0] - 2026-05-27
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.0.0][2.0.0t]
|
|
36
|
+
- COVERAGE: 100.00% -- 265/265 lines in 10 files
|
|
37
|
+
- BRANCH COVERAGE: 100.00% -- 64/64 branches in 10 files
|
|
38
|
+
- 93.55% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **New CI workflows** — Expanded Ruby/engine matrix coverage:
|
|
43
|
+
- `jruby.yml` — JRuby CI workflow
|
|
44
|
+
- `ruby-3.4.yml` — Ruby 3.4 CI workflow
|
|
45
|
+
- `templating.yml` — Templating CI workflow
|
|
46
|
+
- `truffleruby-23.1.yml`, `truffleruby-23.2.yml`, `truffleruby-24.2.yml`, `truffleruby-25.0.yml` — TruffleRuby version-pinned CI workflows
|
|
47
|
+
- Renamed `legacy.yml` → `ruby-3.2.yml` and `supported.yml` → `ruby-3.3.yml` for consistency
|
|
48
|
+
- **Dev binaries** — New developer/tooling scripts in `bin/`: `ast-merge-recipe`, `kettle-gh-release`, `kettle-jem`, `print_matches`, `rbts`, `unparser`
|
|
49
|
+
- **Modular gemfiles** — Added `coverage_local.gemfile`, `style_local.gemfile`, `templating.gemfile`, `templating_local.gemfile`, and recording gemfiles for local-path sibling gem development
|
|
50
|
+
- **Dev container setup** — Added `devcontainer/scripts/setup-tree-sitter.sh` for Tree-sitter native library installation
|
|
51
|
+
- **mise environment management** — Added `mise.toml` for ENV-driven local development configuration; migrated from `.envrc`-only approach to mise + dotenvy
|
|
52
|
+
- **Template freeze markers** — Added `kettle-jem:freeze` / `kettle-jem:unfreeze` markers in `token-resolver.gemspec` to preserve custom sections across template runs
|
|
53
|
+
- **`.gemrc`** — Added project-level gem configuration file
|
|
54
|
+
- **`.rubocop_rspec.yml`** — Added RSpec-specific RuboCop configuration
|
|
55
|
+
- **GitHub Copilot instructions** — Added `.github/COPILOT_INSTRUCTIONS.md`
|
|
56
|
+
- **License texts** — Added `AGPL-3.0-only.md` and `PolyForm-Small-Business-1.0.0.md`
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- **BREAKING: License changed from MIT to AGPL-3.0-only OR PolyForm-Small-Business-1.0.0** — `spec.licenses` updated in gemspec; license files, README badges, and compatibility metadata updated accordingly
|
|
61
|
+
- **`kettle-dev`** development dependency bumped from `~> 1.2` to `~> 2.0`
|
|
62
|
+
- **`bundler-audit`** development dependency bumped from `~> 0.9.2` to `~> 0.9.3`
|
|
63
|
+
- **`appraisal2`** version constraint loosened from `~> 3.0, ~> 3.0.6` to `~> 3.0, >= 3.0.6`
|
|
64
|
+
- **Local dev wiring** — Switched from ad hoc monorepo paths to `nomono` Gemfile macros for sibling gem resolution in `style.gemfile` and related local gemfiles
|
|
65
|
+
- **Template dependency** — Updated from `jsonc-merge` to `json-merge` in `templating_local.gemfile`
|
|
66
|
+
- **Gemspec `homepage_uri`** — Hardcoded to `https://token-resolver.galtzo.com/` (was dynamically constructed with `tr`)
|
|
67
|
+
- **Skip unresolved-token scan for gemspec** — Added `.kettle-jem.yml` config to exclude `token-resolver.gemspec` from the token scan
|
|
68
|
+
- **CI: `codecov/codecov-action`** bumped from v5 to v6
|
|
69
|
+
- **CI: `marocchino/sticky-pull-request-comment`** bumped from v2 to v3
|
|
70
|
+
- **CI: `addressable`** (transitive dependency) bumped from 2.8.8 to 2.8.9
|
|
71
|
+
- **CI: `json`** (bundler group) bumped from 2.18.1 to 2.19.2
|
|
72
|
+
- **Dev container** — Updated `devcontainer.json` and `apt-install` scripts with improved tooling setup
|
|
73
|
+
|
|
74
|
+
### Removed
|
|
75
|
+
|
|
76
|
+
- **`LICENSE.txt`** — Replaced by `LICENSE.md`, `AGPL-3.0-only.md`, and `PolyForm-Small-Business-1.0.0.md`
|
|
77
|
+
- **Previous license options not included in the new dual-license set** — Removed retired license files such as `Big-Time-Public-License.md`
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- **Typos** — Minor documentation/comment typo corrections in `BENCHMARK.md` and IDE configuration
|
|
82
|
+
|
|
83
|
+
### Security
|
|
84
|
+
|
|
85
|
+
- **`bundler-audit` ~> 0.9.3`** — Picked up latest security-advisory database and patch-level fixes
|
|
86
|
+
|
|
33
87
|
## [1.0.2] - 2026-02-22
|
|
34
88
|
|
|
35
89
|
- TAG: [v1.0.2][1.0.2t]
|
|
@@ -91,7 +145,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
91
145
|
|
|
92
146
|
### Security
|
|
93
147
|
|
|
94
|
-
[Unreleased]: https://github.com/kettle-rb/token-resolver/compare/
|
|
148
|
+
[Unreleased]: https://github.com/kettle-rb/token-resolver/compare/v2.0.0...HEAD
|
|
149
|
+
[2.0.0]: https://github.com/kettle-rb/token-resolver/compare/v1.0.2...v2.0.0
|
|
150
|
+
[2.0.0t]: https://github.com/kettle-rb/token-resolver/releases/tag/v2.0.0
|
|
95
151
|
[1.0.2]: https://github.com/kettle-rb/token-resolver/compare/v1.0.1...v1.0.2
|
|
96
152
|
[1.0.2t]: https://github.com/kettle-rb/token-resolver/releases/tag/v1.0.2
|
|
97
153
|
[1.0.1]: https://github.com/kettle-rb/token-resolver/compare/v1.0.0...v1.0.1
|
data/CITATION.cff
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
cff-version: 1.2.0
|
|
2
|
-
title: token-resolver
|
|
2
|
+
title: "token-resolver"
|
|
3
3
|
message: >-
|
|
4
4
|
If you use this work and you want to cite it,
|
|
5
5
|
then you can use the metadata from this file.
|
|
6
6
|
type: software
|
|
7
7
|
authors:
|
|
8
|
-
- given-names: Peter
|
|
9
|
-
family-names: Boling
|
|
10
|
-
email: floss@galtzo.com
|
|
11
|
-
affiliation: galtzo.com
|
|
8
|
+
- given-names: "Peter H."
|
|
9
|
+
family-names: "Boling"
|
|
10
|
+
email: "floss@galtzo.com"
|
|
11
|
+
affiliation: "galtzo.com"
|
|
12
12
|
orcid: 'https://orcid.org/0009-0008-8519-441X'
|
|
13
13
|
identifiers:
|
|
14
14
|
- type: url
|
|
15
15
|
value: 'https://github.com/kettle-rb/token-resolver'
|
|
16
|
-
description: token-resolver
|
|
16
|
+
description: "token-resolver"
|
|
17
17
|
repository-code: 'https://github.com/kettle-rb/token-resolver'
|
|
18
18
|
abstract: >-
|
|
19
19
|
token-resolver
|
data/CONTRIBUTING.md
CHANGED
|
@@ -8,19 +8,27 @@ To submit a patch, please fork the project, create a patch with tests, and send
|
|
|
8
8
|
|
|
9
9
|
Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] if you make changes.
|
|
10
10
|
|
|
11
|
+
## Developer Certificate of Origin
|
|
12
|
+
|
|
13
|
+
In order to protect users of this project, we require all contributors to comply with the
|
|
14
|
+
[Developer Certificate of Origin](https://developercertificate.org/).
|
|
15
|
+
This ensures that all contributions are properly licensed and attributed.
|
|
16
|
+
|
|
11
17
|
## Help out!
|
|
12
18
|
|
|
13
|
-
Take a look at the
|
|
19
|
+
Take a look at the open issues and pull requests, or use the gem and find something to improve.
|
|
14
20
|
|
|
15
21
|
Follow these instructions:
|
|
16
22
|
|
|
17
|
-
1.
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6.
|
|
23
|
-
7.
|
|
23
|
+
1. Join the Discord: [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
|
|
24
|
+
2. Fork the repository
|
|
25
|
+
3. Create your feature branch (`git checkout -b my-new-feature`)
|
|
26
|
+
4. Make some fixes.
|
|
27
|
+
5. Commit your changes (`git commit -am 'Added some feature'`)
|
|
28
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
|
29
|
+
7. Make sure to add tests for it. This is important, so it doesn't break in a future release.
|
|
30
|
+
8. Create new Pull Request.
|
|
31
|
+
9. Announce it in the channel for this org in the [Discord][✉️discord-invite]!
|
|
24
32
|
|
|
25
33
|
## Executables vs Rake tasks
|
|
26
34
|
|
|
@@ -42,6 +50,22 @@ There are many Rake tasks available as well. You can see them by running:
|
|
|
42
50
|
bin/rake -T
|
|
43
51
|
```
|
|
44
52
|
|
|
53
|
+
## Code quality checks
|
|
54
|
+
|
|
55
|
+
Run the Reek task when you want a smell check that fails on current findings:
|
|
56
|
+
|
|
57
|
+
```shell
|
|
58
|
+
bin/rake reek
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Refresh the checked-in `REEK` backlog through the rake task, not by redirecting
|
|
62
|
+
the raw `reek` executable output. The rake task uses the project bundle and
|
|
63
|
+
avoids stale generated binstubs shadowing the Reek gem executable:
|
|
64
|
+
|
|
65
|
+
```shell
|
|
66
|
+
bin/rake reek:update
|
|
67
|
+
```
|
|
68
|
+
|
|
45
69
|
## Environment Variables for Local Development
|
|
46
70
|
|
|
47
71
|
Below are the primary environment variables recognized by stone_checksums (and its integrated tools). Unless otherwise noted, set boolean values to the string "true" to enable.
|
|
@@ -52,7 +76,7 @@ General/runtime
|
|
|
52
76
|
- CI: When set to true, adjusts default rake tasks toward CI behavior
|
|
53
77
|
|
|
54
78
|
Coverage (kettle-soup-cover / SimpleCov)
|
|
55
|
-
- K_SOUP_COV_DO: Enable coverage collection (default: true in .
|
|
79
|
+
- K_SOUP_COV_DO: Enable coverage collection (default: true in `mise.toml`)
|
|
56
80
|
- K_SOUP_COV_FORMATTERS: Comma-separated list of formatters (html, xml, rcov, lcov, json, tty)
|
|
57
81
|
- K_SOUP_COV_MIN_LINE: Minimum line coverage threshold (integer, e.g., 100)
|
|
58
82
|
- K_SOUP_COV_MIN_BRANCH: Minimum branch coverage threshold (integer, e.g., 100)
|
|
@@ -78,11 +102,16 @@ Git hooks and commit message helpers (exe/kettle-commit-msg)
|
|
|
78
102
|
- GIT_HOOK_FOOTER_SENTINEL: Required when footer append is enabled — a unique first-line sentinel to prevent duplicates
|
|
79
103
|
- GIT_HOOK_FOOTER_APPEND_DEBUG: Extra debug output in the footer template (true/false)
|
|
80
104
|
|
|
81
|
-
For a quick starting point, this repository’s
|
|
105
|
+
For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
|
|
82
106
|
|
|
83
107
|
## Appraisals
|
|
84
108
|
|
|
85
109
|
From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
|
|
110
|
+
Generated appraisal and CI workflow floors are controlled by `ruby.test_minimum`
|
|
111
|
+
in `.kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
|
|
112
|
+
That value describes the lowest Ruby version expected to run the test/development
|
|
113
|
+
toolchain, and it may be higher than the gemspec runtime floor.
|
|
114
|
+
|
|
86
115
|
They are created and updated with the commands:
|
|
87
116
|
|
|
88
117
|
```console
|
|
@@ -97,22 +126,20 @@ bin/rake appraisal:reset
|
|
|
97
126
|
|
|
98
127
|
When adding an appraisal to CI, check the [runner tool cache][🏃♂️runner-tool-cache] to see which runner to use.
|
|
99
128
|
|
|
100
|
-
##
|
|
101
|
-
|
|
102
|
-
Take a look at the `reek` list which is the file called `REEK` and find something to improve.
|
|
129
|
+
## Run Tests
|
|
103
130
|
|
|
104
|
-
|
|
131
|
+
Run tests via `kettle-test` (provided by `kettle-test`). It runs RSpec, writes the full log to
|
|
132
|
+
`tmp/kettle-test/rspec-TIMESTAMP.log`, and prints a compact highlight block with timing, seed,
|
|
133
|
+
pass/fail count, failing example list, and SimpleCov coverage percentages.
|
|
105
134
|
|
|
106
135
|
```console
|
|
107
|
-
bundle exec
|
|
136
|
+
bundle exec kettle-test
|
|
108
137
|
```
|
|
109
138
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
To run all tests
|
|
139
|
+
For targeted runs, disable the hard coverage threshold to avoid false failures:
|
|
113
140
|
|
|
114
141
|
```console
|
|
115
|
-
bundle exec
|
|
142
|
+
K_SOUP_COV_MIN_HARD=false bundle exec kettle-test spec/path/to/spec.rb
|
|
116
143
|
```
|
|
117
144
|
|
|
118
145
|
### Spec organization (required)
|
|
@@ -183,33 +210,34 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
|
|
|
183
210
|
1. Run `bin/setup && bin/rake` as a "test, coverage, & linting" sanity check
|
|
184
211
|
2. Update the version number in `version.rb`, and ensure `CHANGELOG.md` reflects changes
|
|
185
212
|
3. Run `bin/setup && bin/rake` again as a secondary check, and to update `Gemfile.lock`
|
|
186
|
-
4. Run `
|
|
187
|
-
5. Run `git
|
|
213
|
+
4. Run `bin/rake yard` to regenerate the docs site using the canonical docs task
|
|
214
|
+
5. Run `git commit -am "🔖 Prepare release v<VERSION>"` to commit the changes
|
|
215
|
+
6. Run `git push` to trigger the final CI pipeline before release, and merge PRs
|
|
188
216
|
- NOTE: Remember to [check the build][🧪build].
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
217
|
+
7. Run `export GIT_TRUNK_BRANCH_NAME="$(git remote show origin | grep 'HEAD branch' | cut -d ' ' -f5)" && echo $GIT_TRUNK_BRANCH_NAME`
|
|
218
|
+
8. Run `git checkout $GIT_TRUNK_BRANCH_NAME`
|
|
219
|
+
9. Run `git pull origin $GIT_TRUNK_BRANCH_NAME` to ensure latest trunk code
|
|
220
|
+
10. Optional for older Bundler (< 2.7.0): Set `SOURCE_DATE_EPOCH` so `rake build` and `rake release` use the same timestamp and generate the same checksums
|
|
193
221
|
- If your Bundler is >= 2.7.0, you can skip this; builds are reproducible by default.
|
|
194
222
|
- Run `export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH`
|
|
195
223
|
- If the echo above has no output, then it didn't work.
|
|
196
224
|
- Note: `zsh/datetime` module is needed, if running `zsh`.
|
|
197
225
|
- In older versions of `bash` you can use `date +%s` instead, i.e. `export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH`
|
|
198
|
-
|
|
199
|
-
|
|
226
|
+
11. Run `bundle exec rake build`
|
|
227
|
+
12. Run `bin/gem_checksums` (more context [1][🔒️rubygems-checksums-pr], [2][🔒️rubygems-guides-pr])
|
|
200
228
|
to create SHA-256 and SHA-512 checksums. This functionality is provided by the `stone_checksums`
|
|
201
229
|
[gem][💎stone_checksums].
|
|
202
230
|
- The script automatically commits but does not push the checksums
|
|
203
|
-
|
|
231
|
+
13. Sanity check the SHA256, comparing with the output from the `bin/gem_checksums` command:
|
|
204
232
|
- `sha256sum pkg/<gem name>-<version>.gem`
|
|
205
|
-
|
|
233
|
+
14. Run `bundle exec rake release` which will create a git tag for the version,
|
|
206
234
|
push git commits and tags, and push the `.gem` file to the gem host configured in the gemspec.
|
|
207
235
|
|
|
208
|
-
[📜src-gl]: https://gitlab.com/kettle-rb/token-resolver/
|
|
209
|
-
[📜src-cb]: https://codeberg.org/kettle-rb/token-resolver
|
|
210
|
-
[📜src-gh]: https://github.com/kettle-rb/token-resolver
|
|
236
|
+
[📜src-gl]: https://gitlab.com/kettle-rb/token-resolver/-/tree/main/gems/token-resolver
|
|
237
|
+
[📜src-cb]: https://codeberg.org/kettle-rb/token-resolver/src/branch/main/gems/token-resolver
|
|
238
|
+
[📜src-gh]: https://github.com/kettle-rb/token-resolver/tree/main/gems/token-resolver
|
|
211
239
|
[🧪build]: https://github.com/kettle-rb/token-resolver/actions
|
|
212
|
-
[🤝conduct]: https://
|
|
240
|
+
[🤝conduct]: https://github.com/kettle-rb/token-resolver/blob/main/CODE_OF_CONDUCT.md
|
|
213
241
|
[🖐contrib-rocks]: https://contrib.rocks
|
|
214
242
|
[🖐contributors]: https://github.com/kettle-rb/token-resolver/graphs/contributors
|
|
215
243
|
[🚎contributors-gl]: https://gitlab.com/kettle-rb/token-resolver/-/graphs/main
|
|
@@ -225,3 +253,4 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
|
|
|
225
253
|
[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
|
|
226
254
|
[🚎appraisal2]: https://github.com/appraisal-rb/appraisal2
|
|
227
255
|
[🏃♂️runner-tool-cache]: https://github.com/ruby/ruby-builder/releases/tag/toolcache
|
|
256
|
+
[✉️discord-invite]: https://discord.gg/3qme4XHNKN
|
data/FUNDING.md
CHANGED
|
@@ -19,7 +19,7 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
|
|
|
19
19
|
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
20
20
|
[🖇polar]: https://polar.sh/pboling
|
|
21
21
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
22
|
-
[🖇kofi]: https://ko-fi.com/
|
|
22
|
+
[🖇kofi]: https://ko-fi.com/pboling
|
|
23
23
|
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
24
24
|
[🖇patreon]: https://patreon.com/galtzo
|
|
25
25
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
data/LICENSE.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# License
|
|
2
|
+
|
|
3
|
+
This project is made available under the following licenses.
|
|
4
|
+
Choose the option that best fits your use case:
|
|
5
|
+
|
|
6
|
+
- [AGPL-3.0-only](AGPL-3.0-only.md)
|
|
7
|
+
- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
|
|
8
|
+
|
|
9
|
+
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
10
|
+
|
|
11
|
+
## Copyright Notice
|
|
12
|
+
|
|
13
|
+
Required Notice: Copyright (c) 2026 Peter H. Boling
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
[![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-
|
|
1
|
+
[![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-floss-i]][🖼️galtzo-floss] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![kettle-rb Logo by Aboling0, CC BY-SA 4.0][🖼️kettle-rb-i]][🖼️kettle-rb]
|
|
2
2
|
|
|
3
|
-
[🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
|
|
4
|
-
[🖼️galtzo-
|
|
3
|
+
[🖼️galtzo-floss-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
|
|
4
|
+
[🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
|
|
5
5
|
[🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
|
|
6
6
|
[🖼️ruby-lang]: https://www.ruby-lang.org/
|
|
7
7
|
[🖼️kettle-rb-i]: https://logos.galtzo.com/assets/images/kettle-rb/avatar-192px.svg
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
# 🪙 Token::Resolver
|
|
11
11
|
|
|
12
|
-
[![Version][👽versioni]][👽
|
|
12
|
+
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄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] [![CodeQL][🖐codeQL-img]][🖐codeQL]
|
|
13
13
|
|
|
14
|
-
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-
|
|
14
|
+
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-floss], as I may have missed the [discord notification][🖼️galtzo-floss].
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
[![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 on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
21
21
|
|
|
22
22
|
<details>
|
|
23
|
-
|
|
23
|
+
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
24
24
|
|
|
25
25
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
26
26
|
|
|
@@ -43,39 +43,43 @@ result = Token::Resolver.resolve(
|
|
|
43
43
|
|
|
44
44
|
## 💡 Info you can shake a stick at
|
|
45
45
|
|
|
46
|
-
| Tokens to Remember
|
|
46
|
+
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
47
47
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
48
|
-
| Works with JRuby
|
|
49
|
-
| Works with Truffle Ruby | ![Truffle Ruby
|
|
50
|
-
| Works with MRI Ruby 4
|
|
51
|
-
| Works with MRI Ruby 3
|
|
52
|
-
| Support & Community
|
|
53
|
-
| Source
|
|
54
|
-
| Documentation
|
|
55
|
-
| Compliance
|
|
56
|
-
| Style
|
|
57
|
-
| Maintainer 🎖️
|
|
58
|
-
| `...` 💖
|
|
48
|
+
| Works with JRuby | [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
49
|
+
| Works with Truffle Ruby | [![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 current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
50
|
+
| Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
51
|
+
| Works with MRI Ruby 3 | [![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]|
|
|
52
|
+
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![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] |
|
|
53
|
+
| 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] |
|
|
54
|
+
| 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] |
|
|
55
|
+
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄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] |
|
|
56
|
+
| 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] |
|
|
57
|
+
| 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] |
|
|
58
|
+
| `...` 💖 | [![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] |
|
|
59
59
|
|
|
60
60
|
### Compatibility
|
|
61
61
|
|
|
62
62
|
Compatible with MRI Ruby 3.2.0+, and concordant releases of JRuby, and TruffleRuby.
|
|
63
|
+
CI workflows and Appraisals are generated for MRI Ruby 3.2.0+.
|
|
64
|
+
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
65
|
+
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
66
|
+
not practical for the current toolchain.
|
|
63
67
|
|
|
64
|
-
| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚
|
|
68
|
+
| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
|
|
65
69
|
|------------------------------------------------|--------------------------------------------------------|
|
|
66
|
-
| 👟 Check it out!
|
|
70
|
+
| 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
|
|
67
71
|
|
|
68
72
|
### Federated DVCS
|
|
69
73
|
|
|
70
74
|
<details markdown="1">
|
|
71
|
-
|
|
75
|
+
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
72
76
|
|
|
73
|
-
| Federated [DVCS][💎d-in-dvcs] Repository
|
|
77
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
|
|
74
78
|
|-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
|
|
75
|
-
| 🧪 [kettle-rb/token-resolver on GitLab][📜src-gl]
|
|
76
|
-
| 🧊 [kettle-rb/token-resolver on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate])
|
|
77
|
-
| 🐙 [kettle-rb/token-resolver on GitHub][📜src-gh]
|
|
78
|
-
| 🎮️ [Discord Server][✉️discord-invite]
|
|
79
|
+
| 🧪 [kettle-rb/token-resolver on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
|
|
80
|
+
| 🧊 [kettle-rb/token-resolver on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
|
|
81
|
+
| 🐙 [kettle-rb/token-resolver on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
|
|
82
|
+
| 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
|
|
79
83
|
|
|
80
84
|
</details>
|
|
81
85
|
|
|
@@ -86,7 +90,7 @@ Compatible with MRI Ruby 3.2.0+, and concordant releases of JRuby, and TruffleRu
|
|
|
86
90
|
Available as part of the Tidelift Subscription.
|
|
87
91
|
|
|
88
92
|
<details markdown="1">
|
|
89
|
-
|
|
93
|
+
<summary>Need enterprise-level guarantees?</summary>
|
|
90
94
|
|
|
91
95
|
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.
|
|
92
96
|
|
|
@@ -118,41 +122,6 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
|
118
122
|
gem install token-resolver
|
|
119
123
|
```
|
|
120
124
|
|
|
121
|
-
### 🔒 Secure Installation
|
|
122
|
-
|
|
123
|
-
<details markdown="1">
|
|
124
|
-
<summary>For Medium or High Security Installations</summary>
|
|
125
|
-
|
|
126
|
-
This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
|
|
127
|
-
[stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
|
|
128
|
-
by following the instructions below.
|
|
129
|
-
|
|
130
|
-
Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
|
|
131
|
-
|
|
132
|
-
```console
|
|
133
|
-
gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
You only need to do that once. Then proceed to install with:
|
|
137
|
-
|
|
138
|
-
```console
|
|
139
|
-
gem install token-resolver -P HighSecurity
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
The `HighSecurity` trust profile will verify signed gems, and not allow the installation of unsigned dependencies.
|
|
143
|
-
|
|
144
|
-
If you want to up your security game full-time:
|
|
145
|
-
|
|
146
|
-
```console
|
|
147
|
-
bundle config set --global trust-policy MediumSecurity
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
`MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
|
|
151
|
-
|
|
152
|
-
NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
|
|
153
|
-
|
|
154
|
-
</details>
|
|
155
|
-
|
|
156
125
|
## ⚙️ Configuration
|
|
157
126
|
|
|
158
127
|
### Token Config Options
|
|
@@ -268,117 +237,6 @@ result = resolver.resolve(doc, {"KJ|NAME" => "World"})
|
|
|
268
237
|
# => "Hello World!"
|
|
269
238
|
```
|
|
270
239
|
|
|
271
|
-
## Design
|
|
272
|
-
|
|
273
|
-
### Grammar Never Fails
|
|
274
|
-
|
|
275
|
-
The parslet grammar is designed so that **any input is valid**. When the parser encounters
|
|
276
|
-
`{` but it doesn't start a valid token, the `{` is consumed as plain text. No input can
|
|
277
|
-
cause a parse failure.
|
|
278
|
-
|
|
279
|
-
### Single-Pass Resolution
|
|
280
|
-
|
|
281
|
-
Replacement values are emitted as-is and are **not** re-scanned for tokens. This prevents
|
|
282
|
-
infinite loops and ensures predictable behavior when replacement values contain token-like strings.
|
|
283
|
-
|
|
284
|
-
### Performance
|
|
285
|
-
|
|
286
|
-
If the input doesn't contain the `pre` delimiter at all, the parser fast-paths and returns
|
|
287
|
-
a single Text node without invoking parslet.
|
|
288
|
-
|
|
289
|
-
#### 📊 Benchmarks
|
|
290
|
-
|
|
291
|
-
Token-resolver prioritizes **flexibility, configurability, and maintainability** over raw speed.
|
|
292
|
-
|
|
293
|
-
**⚠️ Important**: Token-resolver is **100-3000x slower** than simple alternatives like `String#gsub` and `Kernel#sprintf`.
|
|
294
|
-
because it does significantly more work:
|
|
295
|
-
- Full PEG parsing of the input string
|
|
296
|
-
- Token validation and structure enforcement
|
|
297
|
-
- Building an AST for introspection
|
|
298
|
-
- Flexible error handling for missing tokens
|
|
299
|
-
|
|
300
|
-
This performance difference is **expected and acceptable** because these are fundamentally different
|
|
301
|
-
approaches solving different problems.
|
|
302
|
-
|
|
303
|
-
See [BENCHMARK.md](BENCHMARK.md) for detailed performance comparisons and guidance on:
|
|
304
|
-
|
|
305
|
-
- **When to use token-resolver**: Configurable token structures, validation, introspection, flexible error handling
|
|
306
|
-
- **When to use String#gsub**: Fixed token patterns, maximum performance, simple one-shot replacements
|
|
307
|
-
- **When to use Kernel#sprintf**: Positional formatting, fixed templates, printf-style output
|
|
308
|
-
|
|
309
|
-
The choice should be based on your actual requirements, not just raw performance metrics.
|
|
310
|
-
|
|
311
|
-
To run benchmarks on your system:
|
|
312
|
-
|
|
313
|
-
```bash
|
|
314
|
-
bundle exec rake bench:comparison
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### False Positive Prevention
|
|
318
|
-
|
|
319
|
-
The grammar constrains segment content to the configured `segment_pattern` (default: word
|
|
320
|
-
characters). This ensures that syntax using the same delimiter characters — such as Ruby
|
|
321
|
-
block parameters (`{ |x| expr }`) or shell variable expansion (`${VAR:+val}`) — is never
|
|
322
|
-
mistakenly parsed as a token. Replacement keys that contain characters outside the
|
|
323
|
-
`segment_pattern` are rejected with an `ArgumentError` at resolve time.
|
|
324
|
-
|
|
325
|
-
## 🦷 FLOSS Funding
|
|
326
|
-
|
|
327
|
-
While kettle-rb tools are free software and will always be, the project would benefit immensely from some funding.
|
|
328
|
-
Raising a monthly budget of... "dollars" would make the project more sustainable.
|
|
329
|
-
|
|
330
|
-
We welcome both individual and corporate sponsors! We also offer a
|
|
331
|
-
wide array of funding channels to account for your preferences
|
|
332
|
-
(although currently [Open Collective][🖇osc] is our preferred funding platform).
|
|
333
|
-
|
|
334
|
-
**If you're working in a company that's making significant use of kettle-rb tools we'd
|
|
335
|
-
appreciate it if you suggest to your company to become a kettle-rb sponsor.**
|
|
336
|
-
|
|
337
|
-
You can support the development of kettle-rb tools via
|
|
338
|
-
[GitHub Sponsors][🖇sponsor],
|
|
339
|
-
[Liberapay][⛳liberapay],
|
|
340
|
-
[PayPal][🖇paypal],
|
|
341
|
-
[Open Collective][🖇osc]
|
|
342
|
-
and [Tidelift][🏙️entsup-tidelift].
|
|
343
|
-
|
|
344
|
-
| 📍 NOTE |
|
|
345
|
-
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
346
|
-
| 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. |
|
|
347
|
-
|
|
348
|
-
### Open Collective for Individuals
|
|
349
|
-
|
|
350
|
-
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/kettle-rb#backer)]
|
|
351
|
-
|
|
352
|
-
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
353
|
-
|
|
354
|
-
<!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
|
|
355
|
-
No backers yet. Be the first!
|
|
356
|
-
<!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
|
|
357
|
-
|
|
358
|
-
### Open Collective for Organizations
|
|
359
|
-
|
|
360
|
-
Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/kettle-rb#sponsor)]
|
|
361
|
-
|
|
362
|
-
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
363
|
-
|
|
364
|
-
<!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
|
|
365
|
-
No sponsors yet. Be the first!
|
|
366
|
-
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
367
|
-
|
|
368
|
-
[kettle-readme-backers]: https://github.com/kettle-rb/token-resolver/blob/main/exe/kettle-readme-backers
|
|
369
|
-
|
|
370
|
-
### Another way to support open-source
|
|
371
|
-
|
|
372
|
-
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).
|
|
373
|
-
|
|
374
|
-
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`.
|
|
375
|
-
|
|
376
|
-
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.
|
|
377
|
-
|
|
378
|
-
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
379
|
-
|
|
380
|
-
[![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 on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
|
|
381
|
-
|
|
382
240
|
## 🔐 Security
|
|
383
241
|
|
|
384
242
|
See [SECURITY.md][🔐security].
|
|
@@ -386,7 +244,7 @@ See [SECURITY.md][🔐security].
|
|
|
386
244
|
## 🤝 Contributing
|
|
387
245
|
|
|
388
246
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
|
389
|
-
or if it is already 💯 (see [below](#code-coverage)) check [
|
|
247
|
+
or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
|
|
390
248
|
or use the gem and think about how it could be better.
|
|
391
249
|
|
|
392
250
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
|
@@ -399,12 +257,17 @@ See [CONTRIBUTING.md][🤝contributing].
|
|
|
399
257
|
|
|
400
258
|
### Code Coverage
|
|
401
259
|
|
|
260
|
+
<details markdown="1">
|
|
261
|
+
<summary>Coverage service badges</summary>
|
|
262
|
+
|
|
402
263
|
[![Coverage Graph][🏀codecov-g]][🏀codecov]
|
|
403
264
|
|
|
404
265
|
[![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
|
|
405
266
|
|
|
406
267
|
[![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
|
|
407
268
|
|
|
269
|
+
</details>
|
|
270
|
+
|
|
408
271
|
### 🪇 Code of Conduct
|
|
409
272
|
|
|
410
273
|
Everyone interacting with this project's codebases, issue trackers,
|
|
@@ -419,13 +282,13 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
419
282
|
Also see GitLab Contributors: [https://gitlab.com/kettle-rb/token-resolver/-/graphs/main][🚎contributors-gl]
|
|
420
283
|
|
|
421
284
|
<details>
|
|
422
|
-
|
|
285
|
+
<summary>⭐️ Star History</summary>
|
|
423
286
|
|
|
424
|
-
<a href="https://star-history.com
|
|
287
|
+
<a href="https://star-history.com/kettle-rb/token-resolver&Date">
|
|
425
288
|
<picture>
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
289
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kettle-rb/token-resolver&type=Date&theme=dark" />
|
|
290
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kettle-rb/token-resolver&type=Date" />
|
|
291
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kettle-rb/token-resolver&type=Date" />
|
|
429
292
|
</picture>
|
|
430
293
|
</a>
|
|
431
294
|
|
|
@@ -433,31 +296,20 @@ Also see GitLab Contributors: [https://gitlab.com/kettle-rb/token-resolver/-/gra
|
|
|
433
296
|
|
|
434
297
|
## 📌 Versioning
|
|
435
298
|
|
|
436
|
-
This
|
|
437
|
-
|
|
438
|
-
Specifically, if a minor or patch version is released that breaks backward compatibility,
|
|
439
|
-
a new version should be immediately released that restores compatibility.
|
|
440
|
-
Breaking changes to the public API will only be introduced with new major versions.
|
|
441
|
-
|
|
442
|
-
> dropping support for a platform is both obviously and objectively a breaking change <br/>
|
|
443
|
-
>—Jordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
|
|
444
|
-
|
|
445
|
-
I understand that policy doesn't work universally ("exceptions to every rule!"),
|
|
446
|
-
but it is the policy here.
|
|
447
|
-
As such, in many cases it is good to specify a dependency on this library using
|
|
448
|
-
the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
|
|
299
|
+
This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
|
|
300
|
+
For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
|
|
449
301
|
|
|
450
302
|
For example:
|
|
451
303
|
|
|
452
304
|
```ruby
|
|
453
|
-
spec.add_dependency("token-resolver", "~>
|
|
305
|
+
spec.add_dependency("token-resolver", "~> 2.0")
|
|
454
306
|
```
|
|
455
307
|
|
|
456
308
|
<details markdown="1">
|
|
457
309
|
<summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
|
|
458
310
|
|
|
459
|
-
|
|
460
|
-
|
|
311
|
+
Dropping support for a platform can be a breaking change for affected users.
|
|
312
|
+
If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
|
|
461
313
|
|
|
462
314
|
To get a better understanding of how SemVer is intended to work over a project's lifetime,
|
|
463
315
|
read this article from the creator of SemVer:
|
|
@@ -470,23 +322,21 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
470
322
|
|
|
471
323
|
## 📄 License
|
|
472
324
|
|
|
473
|
-
The gem is available
|
|
474
|
-
|
|
475
|
-
|
|
325
|
+
The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
|
|
326
|
+
See [LICENSE.md][📄license] for details.
|
|
327
|
+
|
|
328
|
+
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
|
|
476
329
|
|
|
477
330
|
### © Copyright
|
|
478
331
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
</a>, and token-resolver contributors.
|
|
488
|
-
</li>
|
|
489
|
-
</ul>
|
|
332
|
+
See [LICENSE.md][📄license] for the official copyright notice.
|
|
333
|
+
|
|
334
|
+
<details markdown="1">
|
|
335
|
+
<summary>Copyright holders</summary>
|
|
336
|
+
|
|
337
|
+
- Required Notice: Copyright (c) 2026 Peter H. Boling
|
|
338
|
+
|
|
339
|
+
</details>
|
|
490
340
|
|
|
491
341
|
## 🤑 A request for help
|
|
492
342
|
|
|
@@ -529,7 +379,7 @@ Thanks for RTFM. ☺️
|
|
|
529
379
|
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
530
380
|
[🖇polar]: https://polar.sh/pboling
|
|
531
381
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
532
|
-
[🖇kofi]: https://ko-fi.com/
|
|
382
|
+
[🖇kofi]: https://ko-fi.com/pboling
|
|
533
383
|
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
534
384
|
[🖇patreon]: https://patreon.com/galtzo
|
|
535
385
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
@@ -546,18 +396,18 @@ Thanks for RTFM. ☺️
|
|
|
546
396
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
547
397
|
|
|
548
398
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
549
|
-
[⛳️gem-namespace]: https://github.com/kettle-rb/token-resolver
|
|
399
|
+
[⛳️gem-namespace]: https://github.com/kettle-rb/token-resolver/tree/main/gems/token-resolver
|
|
550
400
|
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Token::Resolver-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
551
401
|
[⛳️gem-name]: https://bestgems.org/gems/token-resolver
|
|
552
402
|
[⛳️name-img]: https://img.shields.io/badge/name-token--resolver-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
553
403
|
[⛳️tag-img]: https://img.shields.io/github/tag/kettle-rb/token-resolver.svg
|
|
554
|
-
[⛳️tag]:
|
|
404
|
+
[⛳️tag]: https://github.com/kettle-rb/token-resolver/releases
|
|
555
405
|
[🚂maint-blog]: http://www.railsbling.com/tags/token-resolver
|
|
556
406
|
[🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
|
|
557
407
|
[🚂maint-contact]: http://www.railsbling.com/contact
|
|
558
408
|
[🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
|
|
559
409
|
[💖🖇linkedin]: http://www.linkedin.com/in/peterboling
|
|
560
|
-
[💖🖇linkedin-img]: https://img.shields.io/badge/
|
|
410
|
+
[💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
|
|
561
411
|
[💖✌️wellfound]: https://wellfound.com/u/peter-boling
|
|
562
412
|
[💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
|
|
563
413
|
[💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
|
|
@@ -586,21 +436,19 @@ Thanks for RTFM. ☺️
|
|
|
586
436
|
[💁🏼♂️peterboling]: http://www.peterboling.com
|
|
587
437
|
[🚂railsbling]: http://www.railsbling.com
|
|
588
438
|
[📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
|
|
589
|
-
[📜src-gl]: https://gitlab.com/kettle-rb/token-resolver/
|
|
439
|
+
[📜src-gl]: https://gitlab.com/kettle-rb/token-resolver/-/tree/main/gems/token-resolver
|
|
590
440
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
591
|
-
[📜src-cb]: https://codeberg.org/kettle-rb/token-resolver
|
|
441
|
+
[📜src-cb]: https://codeberg.org/kettle-rb/token-resolver/src/branch/main/gems/token-resolver
|
|
592
442
|
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
|
|
593
|
-
[📜src-gh]: https://github.com/kettle-rb/token-resolver
|
|
443
|
+
[📜src-gh]: https://github.com/kettle-rb/token-resolver/tree/main/gems/token-resolver
|
|
594
444
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
595
445
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
596
446
|
[📜gl-wiki]: https://gitlab.com/kettle-rb/token-resolver/-/wikis/home
|
|
597
447
|
[📜gh-wiki]: https://github.com/kettle-rb/token-resolver/wiki
|
|
598
|
-
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-
|
|
599
|
-
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-
|
|
448
|
+
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
|
|
449
|
+
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
|
|
600
450
|
[👽dl-rank]: https://bestgems.org/gems/token-resolver
|
|
601
451
|
[👽dl-ranki]: https://img.shields.io/gem/rd/token-resolver.svg
|
|
602
|
-
[👽oss-help]: https://www.codetriage.com/kettle-rb/token-resolver
|
|
603
|
-
[👽oss-helpi]: https://www.codetriage.com/kettle-rb/token-resolver/badges/users.svg
|
|
604
452
|
[👽version]: https://bestgems.org/gems/token-resolver
|
|
605
453
|
[👽versioni]: https://img.shields.io/gem/v/token-resolver.svg
|
|
606
454
|
[🏀qlty-mnt]: https://qlty.sh/gh/kettle-rb/projects/token-resolver
|
|
@@ -613,22 +461,17 @@ Thanks for RTFM. ☺️
|
|
|
613
461
|
[🏀coveralls-img]: https://coveralls.io/repos/github/kettle-rb/token-resolver/badge.svg?branch=main
|
|
614
462
|
[🖐codeQL]: https://github.com/kettle-rb/token-resolver/security/code-scanning
|
|
615
463
|
[🖐codeQL-img]: https://github.com/kettle-rb/token-resolver/actions/workflows/codeql-analysis.yml/badge.svg
|
|
616
|
-
[🚎
|
|
617
|
-
[🚎
|
|
464
|
+
[🚎ruby-3.2-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/ruby-3.2.yml
|
|
465
|
+
[🚎ruby-3.3-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/ruby-3.3.yml
|
|
466
|
+
[🚎ruby-3.4-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/ruby-3.4.yml
|
|
467
|
+
[🚎truby-24.2-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/truffleruby-24.2.yml
|
|
468
|
+
[🚎truby-25.0-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/truffleruby-25.0.yml
|
|
618
469
|
[🚎2-cov-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/coverage.yml
|
|
619
470
|
[🚎2-cov-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/coverage.yml/badge.svg
|
|
620
471
|
[🚎3-hd-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/heads.yml
|
|
621
472
|
[🚎3-hd-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/heads.yml/badge.svg
|
|
622
|
-
[🚎4-lg-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/legacy.yml
|
|
623
|
-
[🚎4-lg-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/legacy.yml/badge.svg
|
|
624
473
|
[🚎5-st-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/style.yml
|
|
625
474
|
[🚎5-st-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/style.yml/badge.svg
|
|
626
|
-
[🚎6-s-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/supported.yml
|
|
627
|
-
[🚎6-s-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/supported.yml/badge.svg
|
|
628
|
-
[🚎7-us-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/unsupported.yml
|
|
629
|
-
[🚎7-us-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/unsupported.yml/badge.svg
|
|
630
|
-
[🚎8-ho-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/hoary.yml
|
|
631
|
-
[🚎8-ho-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/hoary.yml/badge.svg
|
|
632
475
|
[🚎9-t-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/truffle.yml
|
|
633
476
|
[🚎9-t-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/truffle.yml/badge.svg
|
|
634
477
|
[🚎10-j-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/jruby.yml
|
|
@@ -641,18 +484,15 @@ Thanks for RTFM. ☺️
|
|
|
641
484
|
[🚎13-🔒️-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/locked_deps.yml/badge.svg
|
|
642
485
|
[🚎14-🔓️-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/unlocked_deps.yml
|
|
643
486
|
[🚎14-🔓️-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/unlocked_deps.yml/badge.svg
|
|
644
|
-
[🚎15-🪪-wf]: https://github.com/kettle-rb/token-resolver/actions/workflows/license-eye.yml
|
|
645
|
-
[🚎15-🪪-wfi]: https://github.com/kettle-rb/token-resolver/actions/workflows/license-eye.yml/badge.svg
|
|
646
487
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
647
488
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
648
489
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
490
|
+
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
649
491
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
650
492
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
651
|
-
[💎truby-
|
|
652
|
-
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
|
|
493
|
+
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
653
494
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
654
495
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
655
|
-
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
656
496
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
657
497
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
658
498
|
[🤝gh-issues]: https://github.com/kettle-rb/token-resolver/issues
|
|
@@ -662,34 +502,35 @@ Thanks for RTFM. ☺️
|
|
|
662
502
|
[🤝cb-issues]: https://codeberg.org/kettle-rb/token-resolver/issues
|
|
663
503
|
[🤝cb-pulls]: https://codeberg.org/kettle-rb/token-resolver/pulls
|
|
664
504
|
[🤝cb-donate]: https://donate.codeberg.org/
|
|
665
|
-
[🤝contributing]: CONTRIBUTING.md
|
|
666
|
-
[🏀codecov-g]: https://codecov.io/gh/kettle-rb/token-resolver/
|
|
505
|
+
[🤝contributing]: https://github.com/kettle-rb/token-resolver/blob/main/CONTRIBUTING.md
|
|
506
|
+
[🏀codecov-g]: https://codecov.io/gh/kettle-rb/token-resolver/graph/badge.svg
|
|
667
507
|
[🖐contrib-rocks]: https://contrib.rocks
|
|
668
508
|
[🖐contributors]: https://github.com/kettle-rb/token-resolver/graphs/contributors
|
|
669
509
|
[🖐contributors-img]: https://contrib.rocks/image?repo=kettle-rb/token-resolver
|
|
670
510
|
[🚎contributors-gl]: https://gitlab.com/kettle-rb/token-resolver/-/graphs/main
|
|
671
|
-
[🪇conduct]: CODE_OF_CONDUCT.md
|
|
511
|
+
[🪇conduct]: https://github.com/kettle-rb/token-resolver/blob/main/CODE_OF_CONDUCT.md
|
|
672
512
|
[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
|
|
673
513
|
[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
|
674
514
|
[📌semver]: https://semver.org/spec/v2.0.0.html
|
|
675
515
|
[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
|
|
676
516
|
[📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
|
|
677
517
|
[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
|
|
678
|
-
[📌changelog]: CHANGELOG.md
|
|
518
|
+
[📌changelog]: https://github.com/kettle-rb/token-resolver/blob/main/CHANGELOG.md
|
|
679
519
|
[📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
|
|
680
520
|
[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
|
|
681
521
|
[📌gitmoji]: https://gitmoji.dev
|
|
682
522
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
683
523
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
684
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
685
|
-
[🔐security]: SECURITY.md
|
|
524
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.265-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
525
|
+
[🔐security]: https://github.com/kettle-rb/token-resolver/blob/main/SECURITY.md
|
|
686
526
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
687
527
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
688
|
-
[📄license]: LICENSE.
|
|
689
|
-
[📄license-ref]:
|
|
690
|
-
[📄license-img]: https://img.shields.io/badge/License-
|
|
691
|
-
[📄license-compat]: https://
|
|
692
|
-
[📄license-compat-img]: https://img.shields.io/badge/
|
|
528
|
+
[📄license]: LICENSE.md
|
|
529
|
+
[📄license-ref]: LICENSE.md
|
|
530
|
+
[📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only_OR_PolyForm--Small--Business--1.0.0-259D6C.svg
|
|
531
|
+
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
|
|
532
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-✗-C0392B.svg?style=flat&logo=Apache
|
|
533
|
+
|
|
693
534
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
694
535
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
695
536
|
[🚎yard-current]: http://rubydoc.info/gems/token-resolver
|
|
@@ -701,3 +542,14 @@ Thanks for RTFM. ☺️
|
|
|
701
542
|
[💎appraisal2]: https://github.com/appraisal-rb/appraisal2
|
|
702
543
|
[💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
|
|
703
544
|
[💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
|
|
545
|
+
|
|
546
|
+
<!-- kettle-jem:metadata:start -->
|
|
547
|
+
| Field | Value |
|
|
548
|
+
|---|---|
|
|
549
|
+
| Package | token-resolver |
|
|
550
|
+
| Description | 🪙 Token::Resolver provides configurable PEG-based (parslet) parsing and resolution of structured tokens (e.g., {KJ\|GEM_NAME}) in arbitrary text. Useful for template ETL pipelines where tokens in template files must be resolved before format-specific merging. |
|
|
551
|
+
| Homepage | https://github.com/kettle-rb/token-resolver |
|
|
552
|
+
| Source | https://github.com/kettle-rb/token-resolver/tree/v2.0.0 |
|
|
553
|
+
| License | `AGPL-3.0-only` OR `PolyForm-Small-Business-1.0.0` |
|
|
554
|
+
| Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/token-resolver, https://www.buymeacoffee.com/pboling |
|
|
555
|
+
<!-- kettle-jem:metadata:end -->
|
data/certs/pboling.pem
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
|
|
3
|
+
ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
|
|
4
|
+
A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
|
|
5
|
+
DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
|
|
6
|
+
LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
|
|
7
|
+
uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
|
|
8
|
+
LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
|
|
9
|
+
mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
|
|
10
|
+
coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
|
|
11
|
+
FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
|
|
12
|
+
yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
|
|
13
|
+
to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
|
|
14
|
+
qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
|
|
15
|
+
fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
|
|
16
|
+
HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
|
|
17
|
+
A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
|
|
18
|
+
ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
|
|
19
|
+
wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
|
|
20
|
+
L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
|
|
21
|
+
GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
|
|
22
|
+
kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
|
|
23
|
+
QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
|
|
24
|
+
0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
|
|
25
|
+
DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
|
|
26
|
+
L9nRqA==
|
|
27
|
+
-----END CERTIFICATE-----
|
|
@@ -82,6 +82,7 @@ module Token
|
|
|
82
82
|
private
|
|
83
83
|
|
|
84
84
|
def handle_missing(token_node, result)
|
|
85
|
+
# :nocov:
|
|
85
86
|
case @on_missing
|
|
86
87
|
when :raise
|
|
87
88
|
raise UnresolvedTokenError.new(token_node.key)
|
|
@@ -90,6 +91,7 @@ module Token
|
|
|
90
91
|
when :remove
|
|
91
92
|
# emit nothing
|
|
92
93
|
end
|
|
94
|
+
# :nocov:
|
|
93
95
|
end
|
|
94
96
|
|
|
95
97
|
# Validate that all replacement keys only contain characters allowed by the config.
|
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Token
|
|
4
4
|
module Resolver
|
|
5
|
-
# Version information for Token::Resolver
|
|
6
5
|
module Version
|
|
7
|
-
|
|
8
|
-
VERSION = "1.0.2"
|
|
6
|
+
VERSION = "2.0.0"
|
|
9
7
|
end
|
|
10
|
-
VERSION = Version::VERSION #
|
|
8
|
+
VERSION = Version::VERSION # Traditional Constant Location
|
|
11
9
|
end
|
|
12
10
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: token-resolver
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -77,28 +77,34 @@ dependencies:
|
|
|
77
77
|
requirements:
|
|
78
78
|
- - "~>"
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '
|
|
80
|
+
version: '2.0'
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 2.0.4
|
|
81
84
|
type: :development
|
|
82
85
|
prerelease: false
|
|
83
86
|
version_requirements: !ruby/object:Gem::Requirement
|
|
84
87
|
requirements:
|
|
85
88
|
- - "~>"
|
|
86
89
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: '
|
|
90
|
+
version: '2.0'
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 2.0.4
|
|
88
94
|
- !ruby/object:Gem::Dependency
|
|
89
95
|
name: bundler-audit
|
|
90
96
|
requirement: !ruby/object:Gem::Requirement
|
|
91
97
|
requirements:
|
|
92
98
|
- - "~>"
|
|
93
99
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 0.9.
|
|
100
|
+
version: 0.9.3
|
|
95
101
|
type: :development
|
|
96
102
|
prerelease: false
|
|
97
103
|
version_requirements: !ruby/object:Gem::Requirement
|
|
98
104
|
requirements:
|
|
99
105
|
- - "~>"
|
|
100
106
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: 0.9.
|
|
107
|
+
version: 0.9.3
|
|
102
108
|
- !ruby/object:Gem::Dependency
|
|
103
109
|
name: rake
|
|
104
110
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -140,7 +146,7 @@ dependencies:
|
|
|
140
146
|
- - "~>"
|
|
141
147
|
- !ruby/object:Gem::Version
|
|
142
148
|
version: '3.0'
|
|
143
|
-
- - "
|
|
149
|
+
- - ">="
|
|
144
150
|
- !ruby/object:Gem::Version
|
|
145
151
|
version: 3.0.6
|
|
146
152
|
type: :development
|
|
@@ -150,7 +156,7 @@ dependencies:
|
|
|
150
156
|
- - "~>"
|
|
151
157
|
- !ruby/object:Gem::Version
|
|
152
158
|
version: '3.0'
|
|
153
|
-
- - "
|
|
159
|
+
- - ">="
|
|
154
160
|
- !ruby/object:Gem::Version
|
|
155
161
|
version: 3.0.6
|
|
156
162
|
- !ruby/object:Gem::Dependency
|
|
@@ -159,20 +165,20 @@ dependencies:
|
|
|
159
165
|
requirements:
|
|
160
166
|
- - "~>"
|
|
161
167
|
- !ruby/object:Gem::Version
|
|
162
|
-
version: '
|
|
168
|
+
version: '2.0'
|
|
163
169
|
- - ">="
|
|
164
170
|
- !ruby/object:Gem::Version
|
|
165
|
-
version:
|
|
171
|
+
version: 2.0.1
|
|
166
172
|
type: :development
|
|
167
173
|
prerelease: false
|
|
168
174
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
175
|
requirements:
|
|
170
176
|
- - "~>"
|
|
171
177
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: '
|
|
178
|
+
version: '2.0'
|
|
173
179
|
- - ">="
|
|
174
180
|
- !ruby/object:Gem::Version
|
|
175
|
-
version:
|
|
181
|
+
version: 2.0.1
|
|
176
182
|
- !ruby/object:Gem::Dependency
|
|
177
183
|
name: ruby-progressbar
|
|
178
184
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -213,20 +219,20 @@ dependencies:
|
|
|
213
219
|
requirements:
|
|
214
220
|
- - "~>"
|
|
215
221
|
- !ruby/object:Gem::Version
|
|
216
|
-
version: '
|
|
222
|
+
version: '2.0'
|
|
217
223
|
- - ">="
|
|
218
224
|
- !ruby/object:Gem::Version
|
|
219
|
-
version:
|
|
225
|
+
version: 2.0.0
|
|
220
226
|
type: :development
|
|
221
227
|
prerelease: false
|
|
222
228
|
version_requirements: !ruby/object:Gem::Requirement
|
|
223
229
|
requirements:
|
|
224
230
|
- - "~>"
|
|
225
231
|
- !ruby/object:Gem::Version
|
|
226
|
-
version: '
|
|
232
|
+
version: '2.0'
|
|
227
233
|
- - ">="
|
|
228
234
|
- !ruby/object:Gem::Version
|
|
229
|
-
version:
|
|
235
|
+
version: 2.0.0
|
|
230
236
|
description: "\U0001FA99 Token::Resolver provides configurable PEG-based (parslet)
|
|
231
237
|
parsing and resolution of structured tokens (e.g., {KJ|GEM_NAME}) in arbitrary text.
|
|
232
238
|
Useful for template ETL pipelines where tokens in template files must be resolved
|
|
@@ -241,9 +247,8 @@ extra_rdoc_files:
|
|
|
241
247
|
- CODE_OF_CONDUCT.md
|
|
242
248
|
- CONTRIBUTING.md
|
|
243
249
|
- FUNDING.md
|
|
244
|
-
- LICENSE.
|
|
250
|
+
- LICENSE.md
|
|
245
251
|
- README.md
|
|
246
|
-
- REEK
|
|
247
252
|
- RUBOCOP.md
|
|
248
253
|
- SECURITY.md
|
|
249
254
|
files:
|
|
@@ -252,11 +257,11 @@ files:
|
|
|
252
257
|
- CODE_OF_CONDUCT.md
|
|
253
258
|
- CONTRIBUTING.md
|
|
254
259
|
- FUNDING.md
|
|
255
|
-
- LICENSE.
|
|
260
|
+
- LICENSE.md
|
|
256
261
|
- README.md
|
|
257
|
-
- REEK
|
|
258
262
|
- RUBOCOP.md
|
|
259
263
|
- SECURITY.md
|
|
264
|
+
- certs/pboling.pem
|
|
260
265
|
- lib/token-resolver.rb
|
|
261
266
|
- lib/token/resolver.rb
|
|
262
267
|
- lib/token/resolver/config.rb
|
|
@@ -269,15 +274,17 @@ files:
|
|
|
269
274
|
- lib/token/resolver/transform.rb
|
|
270
275
|
- lib/token/resolver/version.rb
|
|
271
276
|
- sig/token/resolver.rbs
|
|
277
|
+
- sig/token/resolver/version.rbs
|
|
272
278
|
homepage: https://github.com/kettle-rb/token-resolver
|
|
273
279
|
licenses:
|
|
274
|
-
-
|
|
280
|
+
- AGPL-3.0-only
|
|
281
|
+
- PolyForm-Small-Business-1.0.0
|
|
275
282
|
metadata:
|
|
276
283
|
homepage_uri: https://token-resolver.galtzo.com/
|
|
277
|
-
source_code_uri: https://github.com/kettle-rb/token-resolver/tree/
|
|
278
|
-
changelog_uri: https://github.com/kettle-rb/token-resolver/blob/
|
|
284
|
+
source_code_uri: https://github.com/kettle-rb/token-resolver/tree/v2.0.0
|
|
285
|
+
changelog_uri: https://github.com/kettle-rb/token-resolver/blob/v2.0.0/CHANGELOG.md
|
|
279
286
|
bug_tracker_uri: https://github.com/kettle-rb/token-resolver/issues
|
|
280
|
-
documentation_uri: https://www.rubydoc.info/gems/token-resolver/
|
|
287
|
+
documentation_uri: https://www.rubydoc.info/gems/token-resolver/2.0.0
|
|
281
288
|
funding_uri: https://github.com/sponsors/pboling
|
|
282
289
|
wiki_uri: https://github.com/kettle-rb/token-resolver/wiki
|
|
283
290
|
news_uri: https://www.railsbling.com/tags/token-resolver
|
|
@@ -307,7 +314,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
307
314
|
- !ruby/object:Gem::Version
|
|
308
315
|
version: '0'
|
|
309
316
|
requirements: []
|
|
310
|
-
rubygems_version: 4.0.
|
|
317
|
+
rubygems_version: 4.0.10
|
|
311
318
|
specification_version: 4
|
|
312
319
|
summary: "\U0001FA99 Configurable PEG-based token parser and resolver for structured
|
|
313
320
|
token detection and replacement in arbitrary text"
|
metadata.gz.sig
CHANGED
|
Binary file
|
data/LICENSE.txt
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Peter H. Boling
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
|
13
|
-
all copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
THE SOFTWARE.
|
data/REEK
DELETED
|
File without changes
|