auth-sanitizer 0.2.3 → 0.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa22dbbae63b95d086e29d8e819eda52240ab18d0c52f7681104ffc7c15a06a2
4
- data.tar.gz: 88650d127c9ff2fe0bb48401ce3b1e09c6c3300a1962e24baadd622f291ecc52
3
+ metadata.gz: 133e8f52ab2988ce4f62b80654a92286a9bc7c9edb1092790cace4b4dbd581e6
4
+ data.tar.gz: e0ceaea5693cf3c9ba036acdd8162b4added1e5c441ac5e726e325c0ce4a23e6
5
5
  SHA512:
6
- metadata.gz: 8377d86b3778a22a18ed1f7eb38bcc153987560ffebc1d3e9f4e4e0fb5e50ce47d8628ada8108e9d2c606fda0edbac97ac16ecfd35a5344773d664cee79759f4
7
- data.tar.gz: 5f556f53bbc7f5a483670d3d3705f7680384daaf22edfdfe7eefdaa27a46a22198bcb9292378f86ddbff49ddd8c515b4c48acb03bfc4d3d75f19f2a7c974f861
6
+ metadata.gz: 38242e0bed6885c8b2a4855e7c46ab177e1fc272aef04425d1cec5de9674bb1c9acc38ee6c7e6d637e9a7b0c8ed3ee93052f6fccd85c9267810c3a1e27e3402f
7
+ data.tar.gz: 756ddde554ae8d459b4b664ab1fda0f2436a296f6610ca6d076ad76e21a620d144ad248a85203f0f949624f484e10cd1373ae2dce95ecca2602f1701e6e6bf7e
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,109 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.2.4] - 2026-10-23
34
+
35
+ - TAG: [v0.2.4][0.2.4t]
36
+ - COVERAGE: 100.00% -- 172/172 lines in 7 files
37
+ - BRANCH COVERAGE: 100.00% -- 34/34 branches in 7 files
38
+ - 98.08% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-jem-template-20260720-005 - README Support & Community links now
43
+ include RubyForum.
44
+ - kettle-jem-template-20260726-001 - Projects now include YARD lint
45
+ configuration and documentation dependencies so documentation issues fail
46
+ before generated docs are refreshed.
47
+ - kettle-jem-template-20260727-001 - Spec harness documentation now lists the
48
+ RSpec helpers provided by `kettle-test`.
49
+
50
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
51
+ entry in `dependency_conflicts.resolve` when a direct development
52
+ dependency doesn't support one or more of this project's declared
53
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
54
+ `jruby`). Review each entry and pick a resolution per the project's own
55
+ engine support needs.
56
+
57
+ ### Changed
58
+
59
+ - kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
60
+ repository-only files by default to reduce downstream distro packaging churn.
61
+
62
+ - kettle-jem-template-20260720-002 - Development Gemfiles now use the released
63
+ `tree_sitter_language_pack` gem 1.13.3 or newer by default.
64
+ - kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
65
+ cover `version.rb` without redefining constants, or are removed when version
66
+ specs are not managed for the project.
67
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
68
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
69
+ installing the main Gemfile bundle.
70
+
71
+ - kettle-jem-template-20260801-001 - Generated README gem dashboard links now
72
+ use ClickGems instead of BestGems.
73
+
74
+ - [kc] kettle-jem/prepare: updated 17 project files:
75
+ - configuration (1)
76
+ - dependencies (16)
77
+
78
+ - [kc] kettle-jem/template: updated 52 project files:
79
+ - code and tests (4)
80
+ - configuration (1)
81
+ - dependencies (8)
82
+ - documentation (2)
83
+ - other (5)
84
+ - workflows (32)
85
+
86
+ ### Fixed
87
+
88
+ - kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
89
+ uses the installed `smorg-rb` driver command.
90
+ - kettle-jem-template-20260725-001 - Release pull request branches beginning
91
+ with `feature/release` now run JRuby and TruffleRuby workflows.
92
+ - kettle-jem-template-20260726-002 - Generated version files now document their
93
+ version namespace and constants, reducing warning-only YARD lint output.
94
+ - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
95
+ QLTY, and Codecov as optional, so provider outages do not fail CI when local
96
+ coverage thresholds still pass.
97
+ - kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
98
+ same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
99
+ installs are not reported as project lint debt.
100
+ - kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
101
+ TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
102
+ before the test suite starts.
103
+ - kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
104
+ setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
105
+ lockfile parser failures on Git and path dependencies.
106
+ - kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
107
+ missing canonical version spec when a project only has shim namespace version
108
+ specs.
109
+ - kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
110
+ legacy manual bundle install path, avoiding setup-time Bundler full-index
111
+ failures against `gem.coop`.
112
+ - kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
113
+ relative to the gemspec directory, so release package contents stay correct
114
+ even when the gemspec is loaded from another working directory.
115
+
116
+ - kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
117
+ managed configuration block bindings structurally, preventing mixed block
118
+ parameter names from producing invalid configuration after a merge.
119
+ - kettle-jem-template-20260801-003 - Generated project metadata and
120
+ documentation now normalize configured underscore hostnames to valid
121
+ hyphenated hostnames.
122
+ - kettle-jem-template-20260801-004 - Generated organization README logos now
123
+ use GitHub's stable organization avatar endpoint instead of assuming a
124
+ matching Galtzo-hosted asset exists.
125
+ - kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
126
+ preserving comments and trailing commas during template updates.
127
+
128
+ - Fix load-order `NameError: uninitialized constant Auth::Sanitizer::Version` by removing a duplicate `VersionGem::Basic` class_eval from `auth/sanitizer/core` (the version constant is loaded after `core` in `auth/sanitizer.rb`).
129
+
130
+ - Gemspec no longer defines a top-level `Auth` constant when evaluated on Ruby < 3.1 (e.g. by `bundler/setup`); the version file now loads into an anonymous module via `Module#module_eval` on all supported Rubies. This un-breaks the isolated-loading specs and the ruby-2.4 CI workflow.
131
+
132
+ ### Security
133
+
134
+ - SanitizedLogger now redacts configured keys in Ruby `Hash#inspect` output (both Ruby 3.4+ `{"key" => "value"}` / `{key: "value"}` and pre-3.4 hash-rocket formats), fixes a mangling bug where the form-pair pattern partially matched `:key=>"value"` pairs, and no longer raises on invalid-encoded message bytes. This closes the OAUTH_DEBUG cleartext-logging bypass reported for oauth2 as GHSA-cmh8-5q25-68v6, where Faraday renders Hash request bodies with `pretty_inspect`. Reported by iamibi.
135
+
33
136
  ## [0.2.3] - 2026-07-14
34
137
 
35
138
  - TAG: [v0.2.3][0.2.3t]
@@ -192,7 +295,9 @@ Please file a bug if you notice a violation of semantic versioning.
192
295
 
193
296
  - Initial release
194
297
 
195
- [Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.3...HEAD
298
+ [Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.4...HEAD
299
+ [0.2.4]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.3...v0.2.4
300
+ [0.2.4t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.4
196
301
  [0.2.3]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.2...v0.2.3
197
302
  [0.2.3t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.3
198
303
  [0.2.2]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.1...v0.2.2
data/LICENSE.md CHANGED
@@ -3,7 +3,7 @@
3
3
  This project is made available under the following license.
4
4
  Choose the option that best fits your use case:
5
5
 
6
- - [MIT](MIT.md)
6
+ - [MIT](https://github.com/ruby-oauth/auth-sanitizer/blob/main/MIT.md)
7
7
 
8
8
  ## Copyright Notice
9
9
 
data/README.md CHANGED
@@ -1,10 +1,10 @@
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>
1
+ <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by GitHub" src="https://github.com/ruby-oauth.png?size=192" width="14%" align="right"/></a>
2
2
 
3
- # 💎 Auth::Sanitizer
3
+ # 🧼 Auth::Sanitizer
4
4
 
5
- [![Version][👽versioni]][👽version] [![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]
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] [![Total downloads][👽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]
6
6
 
7
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
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.
8
8
 
9
9
  ---
10
10
 
@@ -81,12 +81,12 @@ This gem is used by the following libraries to ensure clean output:
81
81
  | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
82
82
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
83
83
  | 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]|
84
- | 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]|
84
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-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]|
85
85
  | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
86
86
  | 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]|
87
87
  | 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]|
88
- | 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] |
89
- | 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] |
88
+ | 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] |
89
+ | 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] |
90
90
  | 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] |
91
91
  | 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] |
92
92
  | 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] |
@@ -95,7 +95,7 @@ This gem is used by the following libraries to ensure clean output:
95
95
 
96
96
  ### Compatibility
97
97
 
98
- Compatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.
98
+ Compatible with MRI Ruby 2.2.0+, JRuby, and TruffleRuby.
99
99
  CI workflows and Appraisals are generated for MRI Ruby 2.4+.
100
100
  This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
101
101
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
@@ -108,36 +108,52 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
108
108
  <details markdown="1">
109
109
  <summary>How kettle-dev manages complexity in tests</summary>
110
110
 
111
- | Gem | Source | Role | Daily download rank |
111
+ | Gem | Source | Role | Total downloads |
112
112
  |-----|--------|------|---------------------|
113
- | [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) |
114
- | [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) |
115
- | [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) |
116
- | [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) |
117
- | [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) |
118
- | [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) |
119
- | [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) |
120
- | [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) |
113
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
114
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
115
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
116
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
117
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
118
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
119
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
120
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
121
121
 
122
122
  </details>
123
123
 
124
+ ### Runtime and Platform Support
125
+
126
+ Support tiers describe what this project's CI actually exercises, not what may
127
+ work in an untested environment:
128
+
129
+ - **Parallel support**: CI runs the test suite with multiple workers available.
130
+ - **Unsupported**: the engine/platform combination is not covered by CI and is
131
+ not a project compatibility claim.
132
+
133
+ | Ruby engine/version | Linux | macOS | Windows | Notes |
134
+ |---------------------|-------|-------|---------|-------|
135
+ | MRI 3.1-3.4 | Parallel support | Unsupported | Unsupported | Versioned Ruby workflows run on Linux. |
136
+ | MRI current | Parallel support | Parallel support | Unsupported | Current Ruby workflow covers the declared OS platforms. |
137
+ | MRI head | Parallel support | Unsupported | Unsupported | CI is allowed to fail while Ruby is in development. |
138
+ | JRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Engine workflows run on Linux; macOS and Windows are not exercised by CI. |
139
+ | TruffleRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Never shipped a Windows build (zero Windows assets across 66 releases scanned 2026-10-10); setup-ruby hard-fails ([source](https://github.com/ruby/setup-ruby/blob/master/README.md)) |
140
+
124
141
  ### Federated DVCS
125
142
 
126
143
  <details markdown="1">
127
144
  <summary>Find this repo on federated forges (Coming soon!)</summary>
128
145
 
129
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
130
- |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
131
- | 🧪 [ruby-oauth/auth-sanitizer on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
132
- | 🧊 [ruby-oauth/auth-sanitizer on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
133
- | 🐙 [ruby-oauth/auth-sanitizer on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
134
- | 🎮️ [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] |
146
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
147
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
148
+ | 🧪 [ruby-oauth/auth-sanitizer on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
149
+ | 🧊 [ruby-oauth/auth-sanitizer on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
150
+ | 🐙 [ruby-oauth/auth-sanitizer on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
135
151
 
136
152
  </details>
137
153
 
138
- [gh-discussions]: https://github.com/ruby-oauth/auth-sanitizer/discussions
154
+ ### Enterprise Support
139
155
 
140
- ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/auth-sanitizer)](https://tidelift.com/subscription/pkg/rubygems-auth-sanitizer?utm_source=rubygems-auth-sanitizer&utm_medium=referral&utm_campaign=readme)
156
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/auth-sanitizer)](https://tidelift.com/subscription/pkg/rubygems-auth-sanitizer?utm_source=rubygems-auth-sanitizer&utm_medium=referral&utm_campaign=readme)
141
157
 
142
158
  Available as part of the Tidelift Subscription.
143
159
 
@@ -154,6 +170,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
154
170
 
155
171
  Alternatively:
156
172
 
173
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
157
174
  - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
158
175
  - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
159
176
  - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
@@ -614,8 +631,7 @@ See [SECURITY.md][🔐security].
614
631
  ## 🤝 Contributing
615
632
 
616
633
  If you need some ideas of where to help, you could work on adding more code coverage,
617
- or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
618
- or use the gem and think about how it could be better.
634
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
619
635
 
620
636
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
621
637
 
@@ -651,19 +667,6 @@ Made with [contributors-img][🖐contrib-rocks].
651
667
 
652
668
  Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/auth-sanitizer/-/graphs/main][🚎contributors-gl]
653
669
 
654
- <details markdown="1">
655
- <summary>⭐️ Star History</summary>
656
-
657
- <a href="https://star-history.com/ruby-oauth/auth-sanitizer&Date">
658
- <picture>
659
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date&theme=dark" />
660
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date" />
661
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date" />
662
- </picture>
663
- </a>
664
-
665
- </details>
666
-
667
670
  ## 📌 Versioning
668
671
 
669
672
  This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
@@ -693,7 +696,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
693
696
  ## 📄 License
694
697
 
695
698
  The gem is available as open source under the terms of
696
- the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
699
+ the [MIT](https://github.com/ruby-oauth/auth-sanitizer/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
697
700
 
698
701
  ### © Copyright
699
702
 
@@ -715,11 +718,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
715
718
  so if you value the work I am doing, I need your support.
716
719
  Please consider sponsoring me or the project.
717
720
 
718
- To join the community or get help 👇️ Join the Discord.
721
+ To join the community or get help, use the RubyForum or Discord.
719
722
 
723
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
720
724
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
721
725
 
722
- To say "thanks!" ☝️ Join the Discord or 👇️ send money.
726
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
723
727
 
724
728
  [![Sponsor ruby-oauth/auth-sanitizer 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]
725
729
 
@@ -760,11 +764,14 @@ Thanks for RTFM. ☺️
760
764
  [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
761
765
  [✉️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
762
766
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
767
+ [✉️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
768
+ [✉️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
769
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/ruby-oauth
763
770
 
764
771
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
765
772
  [⛳️gem-namespace]: https://github.com/ruby-oauth/auth-sanitizer
766
773
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-Auth::Sanitizer-3C2D2D.svg?style=square&logo=ruby&logoColor=white
767
- [⛳️gem-name]: https://bestgems.org/gems/auth-sanitizer
774
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
768
775
  [⛳️name-img]: https://img.shields.io/badge/name-auth--sanitizer-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
769
776
  [⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/auth-sanitizer.svg
770
777
  [⛳️tag]: https://github.com/ruby-oauth/auth-sanitizer/releases
@@ -805,7 +812,7 @@ Thanks for RTFM. ☺️
805
812
  [📜src-gl]: https://gitlab.com/ruby-oauth/auth-sanitizer
806
813
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
807
814
  [📜src-cb]: https://codeberg.org/ruby-oauth/auth-sanitizer
808
- [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
815
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
809
816
  [📜src-gh]: https://github.com/ruby-oauth/auth-sanitizer
810
817
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
811
818
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
@@ -813,9 +820,9 @@ Thanks for RTFM. ☺️
813
820
  [📜gh-wiki]: https://github.com/ruby-oauth/auth-sanitizer/wiki
814
821
  [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
815
822
  [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
816
- [👽dl-rank]: https://bestgems.org/gems/auth-sanitizer
817
- [👽dl-ranki]: https://img.shields.io/gem/rd/auth-sanitizer.svg
818
- [👽version]: https://bestgems.org/gems/auth-sanitizer
823
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
824
+ [👽dl-ranki]: https://img.shields.io/gem/dt/auth-sanitizer.svg
825
+ [👽version]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
819
826
  [👽versioni]: https://img.shields.io/gem/v/auth-sanitizer.svg
820
827
  [🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/auth-sanitizer
821
828
  [🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/auth-sanitizer/maintainability.svg
@@ -839,7 +846,6 @@ Thanks for RTFM. ☺️
839
846
  [🚎jruby-9.4-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-9.4.yml
840
847
  [🚎jruby-10.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-10.0.yml
841
848
  [🚎truby-22.3-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-22.3.yml
842
- [🚎truby-23.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-23.0.yml
843
849
  [🚎truby-23.1-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-23.1.yml
844
850
  [🚎truby-24.2-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-24.2.yml
845
851
  [🚎truby-25.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-25.0.yml
@@ -878,13 +884,11 @@ Thanks for RTFM. ☺️
878
884
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
879
885
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
880
886
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
881
- [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
882
887
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
883
888
  [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
884
889
  [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
885
890
  [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
886
891
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
887
- [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
888
892
  [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
889
893
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
890
894
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
@@ -917,12 +921,12 @@ Thanks for RTFM. ☺️
917
921
  [📌gitmoji]: https://gitmoji.dev
918
922
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
919
923
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
920
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.169-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
924
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.172-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
921
925
  [🔐security]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/SECURITY.md
922
926
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
923
927
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
924
928
  [📄license]: LICENSE.md
925
- [📄license-ref]: MIT.md
929
+ [📄license-ref]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/MIT.md
926
930
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
927
931
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
928
932
  [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
@@ -943,7 +947,7 @@ Thanks for RTFM. ☺️
943
947
  | Field | Value |
944
948
  |---|---|
945
949
  | Package | auth-sanitizer |
946
- | Description | 💎 Configurable KV output redaction. Sanitize/filter your secrets. |
950
+ | Description | 🧼 Configurable KV output redaction. Sanitize/filter your secrets. |
947
951
  | Homepage | https://github.com/ruby-oauth/auth-sanitizer |
948
952
  | Source | https://github.com/ruby-oauth/auth-sanitizer |
949
953
  | License | `MIT` |
@@ -1,13 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "version_gem"
4
-
5
- Auth::Sanitizer::Version.class_eval do
6
- extend VersionGem::Basic
7
- end
8
-
3
+ # Top-level namespace for authentication-adjacent helpers.
9
4
  module Auth
5
+ # Credential redaction for inspect output and debug logging.
10
6
  module Sanitizer
7
+ # Error raised for auth-sanitizer failures.
11
8
  class Error < StandardError; end
12
9
 
13
10
  # Default keys filtered from debug log output.
@@ -42,16 +39,13 @@ module Auth
42
39
 
43
40
  # Install a custom provider for the filtered label.
44
41
  #
45
- # The provider is called each time a new {FilteredAttributes}- or
46
- # {SanitizedLogger}-bearing object is initialized, allowing the label to
47
- # track a host gem's live configuration while still being snapshotted per
48
- # object instance.
42
+ # The provider callable is invoked each time a new {FilteredAttributes}- or
43
+ # {SanitizedLogger}-bearing object is initialized, allowing the label to track a host gem's
44
+ # live configuration while still being snapshotted per object instance.
49
45
  #
46
+ # @return [void]
50
47
  # @example Delegate to a host gem's config
51
48
  # Auth::Sanitizer.filtered_label_provider = -> { MyGem.config[:filtered_label] }
52
- #
53
- # @param [#call] provider A callable that returns the label string
54
- # @return [void]
55
49
  define_singleton_method(:filtered_label_provider=) do |provider|
56
50
  filtered_label_provider_mutex.synchronize do
57
51
  filtered_label_provider = provider
@@ -4,13 +4,11 @@ module Auth
4
4
  module Sanitizer
5
5
  # Mixin that redacts sensitive instance variables in `#inspect` output.
6
6
  #
7
- # Classes include this module and declare which attribute names should be
8
- # filtered via {.filtered_attributes}. Matching and replacement behavior is
9
- # delegated to {ThingFilter}, which is initialized once per object.
7
+ # Classes include this module and declare attribute names to filter via {.filtered_attributes}.
8
+ # Matching and replacement behavior is delegated to {ThingFilter}, initialized once per object.
10
9
  #
11
- # This means existing objects keep the filter configuration that was present
12
- # when they were initialized, even if global config or class-level filter
13
- # declarations change later.
10
+ # This means existing objects keep the filter configuration that was present when they were
11
+ # initialized, even if global config or class-level filter declarations change later.
14
12
  #
15
13
  # The label used for redaction is resolved from {Auth::Sanitizer.filtered_label}
16
14
  # at object initialization time. Host gems may customize this by installing a
@@ -20,7 +18,7 @@ module Auth
20
18
  # Hook invoked when the module is included. Extends the including class with
21
19
  # class-level helpers and prepends the initializer hook.
22
20
  #
23
- # @param [Class] base The including class
21
+ # @param base [Class] The including class
24
22
  # @return [void]
25
23
  def included(base)
26
24
  base.extend(ClassMethods)
@@ -47,7 +45,8 @@ module Auth
47
45
  class << self
48
46
  # Declare attributes that should be redacted in inspect output.
49
47
  #
50
- # @param [Array<Symbol, String>] attributes One or more attribute names
48
+ # @param base [Class] The class the attributes are declared on
49
+ # @param attributes [Array<Symbol, String>] One or more attribute names
51
50
  # @return [void]
52
51
  def filtered_attributes(base, *attributes)
53
52
  base.instance_variable_set(:@filtered_attribute_names, attributes.map(&:to_sym))
@@ -55,7 +54,7 @@ module Auth
55
54
 
56
55
  # The configured attribute names to filter.
57
56
  #
58
- # @param [Class] base The class to get filtered attributes for
57
+ # @param base [Class] The class to get filtered attributes for
59
58
  # @return [Array<Symbol>]
60
59
  def filtered_attribute_names(base)
61
60
  return [] unless base.instance_variable_defined?(:@filtered_attribute_names)
@@ -66,7 +65,7 @@ module Auth
66
65
 
67
66
  # Declare attributes that should be redacted in inspect output.
68
67
  #
69
- # @param [Array<Symbol, String>] attributes One or more attribute names
68
+ # @param attributes [Array<Symbol, String>] One or more attribute names
70
69
  # @return [void]
71
70
  def filtered_attributes(*attributes)
72
71
  ClassMethods.filtered_attributes(self, *attributes)
@@ -101,7 +100,9 @@ module Auth
101
100
 
102
101
  private
103
102
 
103
+ # Matches a quoted string literal inside `#inspect` output.
104
104
  INSPECTED_STRING_VALUE = /"(?:(?:\\.)|[^"\\])*"/
105
+ # Matches redactable key/value pairs inside `#inspect` output.
105
106
  INSPECTED_REDACTABLE_VALUE = /
106
107
  (?:
107
108
  (@([A-Za-z_]\w*[!?=]?)=) |
@@ -113,6 +114,10 @@ module Auth
113
114
  /x
114
115
  private_constant :INSPECTED_STRING_VALUE, :INSPECTED_REDACTABLE_VALUE
115
116
 
117
+ # Redact filtered values from `#inspect` output text.
118
+ #
119
+ # @param inspected [String] The `#inspect` output to redact
120
+ # @return [String] The redacted inspect output
116
121
  def redact_inspected_values(inspected)
117
122
  inspected.gsub(INSPECTED_REDACTABLE_VALUE) do |match|
118
123
  captures = Regexp.last_match.captures