Skip to content

Commit 4529e29

Browse files
committed
♻️ Load auth-sanitizer through anonymous_loader
1 parent 4963db0 commit 4529e29

8 files changed

Lines changed: 56 additions & 75 deletions

File tree

.rubocop_gradual.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"spec/oauth2/auth_sanitizer_spec.rb:899913194": [
3+
[19, 14, 2, "Lint/Syntax: unexpected token tLSHFT\n(Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)", 5859461],
4+
[54, 35, 2, "Lint/Syntax: unexpected token tLSHFT\n(Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)", 5859461],
5+
[55, 38, 2, "Lint/Syntax: unexpected token tIDENTIFIER\n(Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)", 5861278],
6+
[55, 66, 4, "Lint/Syntax: unexpected token tIDENTIFIER\n(Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)", 2087898353],
7+
[57, 13, 1, "Lint/Syntax: unexpected token tCOLON\n(Using Ruby 2.2 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)", 177567]
8+
]
9+
}

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ Please file a bug if you notice a violation of semantic versioning.
2222

2323
### Changed
2424

25+
- Raised the `auth-sanitizer` runtime dependency floor to `>= 0.2.2` and
26+
switched isolated sanitizer loading to the released `anonymous_loader` gem,
27+
including local workspace wiring for the new runtime dependency.
28+
2529
### Deprecated
2630

2731
### Removed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ unless %w[false 0 no off].include?(ENV.fetch("RUBY_OAUTH_DEV", "false").downcase
3232
end
3333

3434
eval_nomono_gems(
35-
gems: %w[auth-sanitizer],
35+
gems: %w[anonymous_loader auth-sanitizer],
3636
prefix: "RUBY_OAUTH",
3737
path_env: "RUBY_OAUTH_DEV",
3838
root: %w[code src ruby-oauth],

Gemfile.lock

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ PATH
22
remote: .
33
specs:
44
oauth2 (2.0.23)
5-
auth-sanitizer (~> 0.2, >= 0.2.1)
5+
anonymous_loader (~> 0.1, >= 0.1.0)
6+
auth-sanitizer (~> 0.2, >= 0.2.2)
67
faraday (>= 0.17.3, < 4.0)
78
jwt (>= 1.0, < 4.0)
89
logger (~> 1.2)
@@ -16,6 +17,8 @@ GEM
1617
specs:
1718
addressable (2.9.0)
1819
public_suffix (>= 2.0.2, < 8.0)
20+
anonymous_loader (0.1.0)
21+
version_gem (~> 1.1, >= 1.1.12)
1922
ansi (1.6.0)
2023
appraisal2 (3.1.2)
2124
bundler (>= 1.17.3)
@@ -26,7 +29,7 @@ GEM
2629
rubocop (>= 1.0)
2730
version_gem (~> 1.1, >= 1.1.10)
2831
ast (2.4.3)
29-
auth-sanitizer (0.2.1)
32+
auth-sanitizer (0.2.2)
3033
version_gem (~> 1.1, >= 1.1.10)
3134
backports (3.25.3)
3235
base64 (0.3.0)
@@ -374,7 +377,7 @@ GEM
374377
unicode-emoji (~> 4.1)
375378
unicode-emoji (4.2.0)
376379
uri (1.1.1)
377-
version_gem (1.1.11)
380+
version_gem (1.1.12)
378381
webrick (1.9.2)
379382
yaml-converter (0.2.0)
380383
hexapdf (>= 1.8, < 2)
@@ -462,11 +465,12 @@ DEPENDENCIES
462465

463466
CHECKSUMS
464467
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
468+
anonymous_loader (0.1.0) sha256=bcef54b92ff9266736fdabc511958f97e98ac84519339cc3e30c6dd490851e4a
465469
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
466470
appraisal2 (3.1.2) sha256=33a1f8c1e2808aa33a24b4c73d1f20c9571b5a34541d66d04d5e744b5906437a
467471
appraisal2-rubocop (0.2.0) sha256=c3353136ad1e32e9084c6ede76997510b3b77cf7d2fe19ab4c54a3f5e16cb9c9
468472
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
469-
auth-sanitizer (0.2.1) sha256=917dcf01f7589b06c26726afe90568cf2fb29d37a1f94facfc664f11967cc577
473+
auth-sanitizer (0.2.2) sha256=300112debb67fe5e7a4f67a697790cea09744970e816745afb1f4235d6f27bae
470474
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
471475
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
472476
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
@@ -600,7 +604,7 @@ CHECKSUMS
600604
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
601605
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
602606
uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
603-
version_gem (1.1.11) sha256=695df6464862b3dc976b4f6e0e089062517c8137ecd31078d8c378347f959c97
607+
version_gem (1.1.12) sha256=b78f691677807997e63901e8aba1b96d4ae172ce5570ad9ceb0208eb3a0edb3d
604608
webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
605609
yaml-converter (0.2.0) sha256=0602148de1664ab701c7938a036987576c55e87fb6d4b3cb0fff19c4f7a91386
606610
yard (0.9.44) sha256=eb087e9b631ccd887b049f303d489963945452d5e2a7eb49a5a74a7cf6887f28

docs/OAuth2.html

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -278,30 +278,12 @@ <h5 class="example_title"><div class='inline'><p>Customize filtered output marke
278278

279279
</dt>
280280
<dd><pre class="code"><span class='kw'>begin</span>
281-
<span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span> <span class='op'>=</span> <span class='const'>Gem</span><span class='op'>::</span><span class='const'>Requirement</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>~&gt; 0.2</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&gt;= 0.2.1</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
282-
<span class='id identifier rubyid_auth_sanitizer_spec'>auth_sanitizer_spec</span> <span class='op'>=</span> <span class='const'>Gem</span><span class='period'>.</span><span class='id identifier rubyid_loaded_specs'>loaded_specs</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>auth-sanitizer</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
283-
<span class='kw'>unless</span> <span class='id identifier rubyid_auth_sanitizer_spec'>auth_sanitizer_spec</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span><span class='period'>.</span><span class='id identifier rubyid_satisfied_by?'>satisfied_by?</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_sanitizer_spec'>auth_sanitizer_spec</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
284-
<span class='comment'># :nocov:
285-
</span> <span class='id identifier rubyid_auth_sanitizer_spec'>auth_sanitizer_spec</span> <span class='op'>=</span> <span class='const'>Gem</span><span class='op'>::</span><span class='const'>Specification</span><span class='period'>.</span><span class='id identifier rubyid_find_by_name'>find_by_name</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>auth-sanitizer</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span><span class='rparen'>)</span>
286-
<span class='comment'># :nocov:
287-
</span> <span class='kw'>end</span>
288-
289-
<span class='id identifier rubyid_auth_sanitizer_loader_path'>auth_sanitizer_loader_path</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span>
290-
<span class='id identifier rubyid_auth_sanitizer_spec'>auth_sanitizer_spec</span><span class='period'>.</span><span class='id identifier rubyid_full_gem_path'>full_gem_path</span><span class='comma'>,</span>
291-
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>lib/auth_sanitizer/loader.rb</span><span class='tstring_end'>&quot;</span></span>
292-
<span class='rparen'>)</span>
293-
<span class='kw'>unless</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_file?'>file?</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_sanitizer_loader_path'>auth_sanitizer_loader_path</span><span class='rparen'>)</span>
294-
<span class='comment'># :nocov:
295-
</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'>LoadError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>oauth2 requires auth-sanitizer </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span><span class='embexpr_end'>}</span><span class='tstring_content'>; </span><span class='tstring_end'>&quot;</span></span> \
296-
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>loader not found at </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_auth_sanitizer_loader_path'>auth_sanitizer_loader_path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
297-
<span class='comment'># :nocov:
298-
</span> <span class='kw'>end</span>
299-
300-
<span class='id identifier rubyid_auth_sanitizer_loader_namespace'>auth_sanitizer_loader_namespace</span> <span class='op'>=</span> <span class='const'>Module</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
301-
<span class='id identifier rubyid_auth_sanitizer_loader_namespace'>auth_sanitizer_loader_namespace</span><span class='period'>.</span><span class='id identifier rubyid_module_eval'>module_eval</span><span class='lparen'>(</span>
302-
<span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_auth_sanitizer_loader_path'>auth_sanitizer_loader_path</span><span class='rparen'>)</span><span class='comma'>,</span>
303-
<span class='id identifier rubyid_auth_sanitizer_loader_path'>auth_sanitizer_loader_path</span><span class='comma'>,</span>
304-
<span class='int'>1</span>
281+
<span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span> <span class='op'>=</span> <span class='const'>Gem</span><span class='op'>::</span><span class='const'>Requirement</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>~&gt; 0.2</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>&gt;= 0.2.2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
282+
<span class='id identifier rubyid_auth_sanitizer_loader_namespace'>auth_sanitizer_loader_namespace</span> <span class='op'>=</span> <span class='const'>AnonymousLoader</span><span class='period'>.</span><span class='id identifier rubyid_load_path'>load_path</span><span class='lparen'>(</span>
283+
<span class='label'>gem_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>auth-sanitizer</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
284+
<span class='label'>require_path:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>auth_sanitizer/loader.rb</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
285+
<span class='label'>version_requirement:</span> <span class='id identifier rubyid_auth_sanitizer_requirement'>auth_sanitizer_requirement</span><span class='comma'>,</span>
286+
<span class='label'>version_file:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>auth/sanitizer/version.rb</span><span class='tstring_end'>&quot;</span></span>
305287
<span class='rparen'>)</span>
306288

307289
<span class='id identifier rubyid_auth_sanitizer_loader_namespace'>auth_sanitizer_loader_namespace</span><span class='period'>.</span>
@@ -498,7 +480,7 @@ <h3 class="signature " id="configure-class_method">
498480
</div>
499481

500482
<div id="footer">
501-
Generated on Sat Jun 6 21:31:15 2026 by
483+
Generated on Thu Jun 18 08:22:24 2026 by
502484
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
503485
0.9.44 (ruby-4.0.5).
504486
</div>

docs/file.CHANGELOG.html

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,24 @@ <h3 id="added">Added</h3>
7676

7777
<h3 id="changed">Changed</h3>
7878

79+
<ul>
80+
<li>Raised the <code>auth-sanitizer</code> runtime dependency floor to <code>&gt;= 0.2.2</code> and<br>
81+
switched isolated sanitizer loading to the released <code>anonymous_loader</code> gem,<br>
82+
including local workspace wiring for the new runtime dependency.</li>
83+
</ul>
84+
7985
<h3 id="deprecated">Deprecated</h3>
8086

8187
<h3 id="removed">Removed</h3>
8288

8389
<h3 id="fixed">Fixed</h3>
8490

91+
<ul>
92+
<li>Fixed isolated <code>auth-sanitizer</code> loading when Bundler standalone setup makes<br>
93+
<code>auth_sanitizer/loader.rb</code> available on <code>$LOAD_PATH</code> without adding<br>
94+
<code>auth-sanitizer</code> to <code>Gem.loaded_specs</code> or <code>GEM_PATH</code>.</li>
95+
</ul>
96+
8597
<h3 id="security">Security</h3>
8698

8799
<h2 id="2023---2026-06-13">
@@ -167,7 +179,9 @@ <h3 id="changed-3">Changed</h3>
167179

168180
<ul>
169181
<li>Raised generated <code>version_gem</code> dependency floor to <code>version_gem</code> &gt;= 1.1.10 - by @pboling</li>
170-
<li>Raised the runtime dependency floor for <code>auth-sanitizer</code> to <code>&gt;= 0.2.1</code> - by @pboling</li>
182+
<li>Raised the runtime dependency floor for <code>auth-sanitizer</code> to <code>&gt;= 0.2.1</code> so<br>
183+
OAuth2 consumers get hash and nested-attribute inspect redaction fixes plus<br>
184+
downstream RBS duplicate-declaration fixes - by @pboling</li>
171185
<li>Refreshed generated package metadata, support documentation, CI workflows,<br>
172186
and development dependency floors from the current kettle-jem template - by @pboling</li>
173187
<li>Documented the current per-version Ruby, JRuby, and TruffleRuby CI matrix in<br>
@@ -1526,7 +1540,7 @@ <h2 id="001---2010-04-22">
15261540
</div></div>
15271541

15281542
<div id="footer">
1529-
Generated on Sat Jun 13 04:37:02 2026 by
1543+
Generated on Thu Jun 18 08:22:24 2026 by
15301544
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
15311545
0.9.44 (ruby-4.0.5).
15321546
</div>

lib/oauth2/auth_sanitizer.rb

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,15 @@
11
# frozen_string_literal: true
22

3+
require "anonymous_loader"
4+
35
module OAuth2
46
AUTH_SANITIZER = begin
5-
auth_sanitizer_requirement = Gem::Requirement.new("~> 0.2", ">= 0.2.1")
6-
auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"]
7-
unless auth_sanitizer_spec && auth_sanitizer_requirement.satisfied_by?(auth_sanitizer_spec.version)
8-
# :nocov:
9-
begin
10-
auth_sanitizer_spec = Gem::Specification.find_by_name("auth-sanitizer", auth_sanitizer_requirement)
11-
rescue Gem::MissingSpecError
12-
auth_sanitizer_spec = nil
13-
end
14-
# :nocov:
15-
end
16-
17-
auth_sanitizer_loader_path = if auth_sanitizer_spec
18-
File.join(auth_sanitizer_spec.full_gem_path, "lib/auth_sanitizer/loader.rb")
19-
end
20-
unless auth_sanitizer_loader_path && File.file?(auth_sanitizer_loader_path)
21-
auth_sanitizer_loader_path = Gem.find_files("auth_sanitizer/loader.rb").find do |path|
22-
version_path = File.expand_path("../auth/sanitizer/version.rb", File.dirname(path))
23-
next false unless File.file?(version_path)
24-
25-
version_source = File.read(version_path)
26-
# Gem.find_files resolves loaders from $LOAD_PATH without exposing gemspec
27-
# metadata, so validate the adjacent version file before evaluating the
28-
# loader. This is intentionally limited to auth-sanitizer's VERSION file.
29-
version_match = version_source.match(/VERSION\s*=\s*(["'])([^"']+)\1/)
30-
version_match && auth_sanitizer_requirement.satisfied_by?(Gem::Version.new(version_match[2]))
31-
end
32-
end
33-
34-
unless auth_sanitizer_loader_path && File.file?(auth_sanitizer_loader_path)
35-
# :nocov:
36-
raise LoadError, "oauth2 requires auth-sanitizer #{auth_sanitizer_requirement}; " \
37-
"loader not found in installed gems or on $LOAD_PATH"
38-
# :nocov:
39-
end
40-
41-
auth_sanitizer_loader_namespace = Module.new
42-
auth_sanitizer_loader_namespace.module_eval(
43-
File.read(auth_sanitizer_loader_path),
44-
auth_sanitizer_loader_path,
45-
1
7+
auth_sanitizer_requirement = Gem::Requirement.new("~> 0.2", ">= 0.2.2")
8+
auth_sanitizer_loader_namespace = AnonymousLoader.load_path(
9+
gem_name: "auth-sanitizer",
10+
require_path: "auth_sanitizer/loader.rb",
11+
version_requirement: auth_sanitizer_requirement,
12+
version_file: "auth/sanitizer/version.rb"
4613
)
4714

4815
auth_sanitizer_loader_namespace.

oauth2.gemspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ Gem::Specification.new do |spec|
106106
spec.require_paths = ["lib"]
107107

108108
# Utilities
109-
spec.add_dependency("auth-sanitizer", "~> 0.2", ">= 0.2.1") # ruby >= 2.2.0
109+
spec.add_dependency("anonymous_loader", "~> 0.1", ">= 0.1.0") # ruby >= 2.2.0
110+
spec.add_dependency("auth-sanitizer", "~> 0.2", ">= 0.2.2") # ruby >= 2.2.0
110111
spec.add_dependency("faraday", [">= 0.17.3", "< 4.0"]) # ruby >= 1.9
111112
spec.add_dependency("jwt", [">= 1.0", "< 4.0"]) # ruby >= 0
112113
spec.add_dependency("logger", "~> 1.2") # ruby >= 0

0 commit comments

Comments
 (0)