oauth2 2.0.10 → 2.0.11

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: 74ad05aadb0f9e990bd0aec8907e7d60236d03d8eb4dd9c4c5c338f361d44181
4
- data.tar.gz: 2996484493c6d56af8ea4ef873c823c91e6ad15f3f3a63c3816ab1f760179327
3
+ metadata.gz: 4fbe5e9ef7a438960d018f63b2fcf4e409a30fe1a57192a335d38adc6a3fdb84
4
+ data.tar.gz: 92761da258a1ac1335e048966e235b9278b6fd4096ee29b424d96b9796dff35b
5
5
  SHA512:
6
- metadata.gz: 6dd801a4085ccb1c9928ae975cac3563bc28c0c01461659cc90f3090c9a09794c686b5475c4425d1becd95df1abea5e129876a3fcb6abc78f348ff4b738169c0
7
- data.tar.gz: 323321a6e9d5dcd8b53691fbdda4df2acc24d7eb7b03e788c028712b64590d387eabf1f6c2d68abfaeef49901073e9db80d09f0d5abce9434f1290b7edc34db4
6
+ metadata.gz: 9cc454d65145c89f4c75c234c99432cce1090b41e1dc228f42285d854cda6063647b8d443022058d49eeac79e82dd6c04e610a3ba99a70a4ed339180b69ce11f
7
+ data.tar.gz: 59f3b0f528397a93a3b691bef5112fa3a0cf60df108613474f47c690c2eecf300ab4847403d359565d2ec176e771202400cfd85fbefa87c62628cc38e6ede6a2
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -12,7 +12,33 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
12
12
  ### Fixed
13
13
  ### Security
14
14
 
15
- ## [2.0.10] - 2025-05-16
15
+ ## [2.0.11] - 2025-05-23
16
+ - TAG: [v2.0.11][2.0.11t]
17
+ - COVERAGE: 100.00% -- 518/518 lines in 14 files
18
+ - BRANCH COVERAGE: 100.00% -- 172/172 branches in 14 files
19
+ - 80.00% documented
20
+ ### Added
21
+ - [gh651](https://github.com/oauth-xx/oauth2/pull/651) - `:snaky_hash_klass` option (@pboling)
22
+ - More documentation
23
+ - Codeberg as ethical mirror (@pboling)
24
+ - https://codeberg.org/oauth-xx/oauth2
25
+ - Don't check for cert if SKIP_GEM_SIGNING is set (@pboling)
26
+ - All runtime deps, including oauth-xx sibling gems, are now tested against HEAD (@pboling)
27
+ - YARD config, GFM compatible with relative file links (@pboling)
28
+ - Documentation site on GitHub Pages (@pboling)
29
+ - [oauth2.galtzo.com](https://oauth2.galtzo.com)
30
+ - [!649](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/649) - Test compatibility with all key minor versions of Hashie v0, v1, v2, v3, v4, v5, HEAD (@pboling)
31
+ - [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Mock OAuth2 server for testing (@pboling)
32
+ - https://github.com/navikt/mock-oauth2-server
33
+ ### Changed
34
+ - [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Upgraded to snaky_hash v2.0.3 (@pboling)
35
+ - Provides solution for serialization issues
36
+ - Updated `spec.homepage_uri` in gemspec to GitHub Pages YARD documentation site (@pboling)
37
+ ### Fixed
38
+ - [gh650](https://github.com/oauth-xx/oauth2/pull/650) - Regression in return type of `OAuth2::Response#parsed` (@pboling)
39
+ - Incorrect documentation related to silencing warnings (@pboling)
40
+
41
+ ## [2.0.10] - 2025-05-17
16
42
  - TAG: [v2.0.10][2.0.10t]
17
43
  - COVERAGE: 100.00% -- 518/518 lines in 14 files
18
44
  - BRANCH COVERAGE: 100.00% -- 170/170 branches in 14 files
@@ -369,8 +395,10 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
369
395
 
370
396
  [gemfiles/readme]: gemfiles/README.md
371
397
 
372
- [Unreleased]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.10...HEAD
373
- [2.0.10]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.09....v2.0.10
398
+ [Unreleased]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.11...HEAD
399
+ [2.0.11]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.10...v2.0.11
400
+ [2.0.11t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.11
401
+ [2.0.10]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.9...v2.0.10
374
402
  [2.0.10t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.10
375
403
  [2.0.9]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.8...v2.0.9
376
404
  [2.0.9t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.9
data/CODE_OF_CONDUCT.md CHANGED
File without changes
data/README.md CHANGED
@@ -9,49 +9,28 @@
9
9
 
10
10
  ## 🔐 OAuth2
11
11
 
12
- [![Version][👽versioni]][👽version]
13
- [![License: MIT][📄license-img]][📄license-ref]
14
- [![Downloads Rank][👽dl-ranki]][👽dl-rank]
15
- [![Open Source Helpers][👽oss-helpi]][👽oss-help]
16
- [![Depfu][🔑depfui♻️]][🔑depfu]
17
- [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
18
- [![QLTY Test Coverage][🔑cc-covi♻️]][🔑cc-cov]
19
- [![Maintainability][🔑cc-mnti♻️]][🔑cc-mnt]
20
- [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf]
21
- [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf]
22
- [![CI Current][🚎11-c-wfi]][🚎11-c-wf]
23
- [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf]
24
- [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf]
25
- [![CI Supported][🚎6-s-wfi]][🚎6-s-wf]
26
- [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf]
27
- [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf]
28
- [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf]
29
- [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf]
30
- [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
12
+ [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![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] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf] [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf] [![CI Caboose is an absolute WAGON][🚎13-cbs-wfi]][🚎13-cbs-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL]
31
13
 
32
14
  ---
33
15
 
34
- [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
35
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
36
- [![Buy me a coffee][🖇buyme-small-img]][🖇buyme]
37
- [![Donate on Polar][🖇polar-img]][🖇polar]
38
- [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
39
- [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
16
+ [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
40
17
 
41
18
  OAuth 2.0 is the industry-standard protocol for authorization.
42
19
  OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications,
43
20
  desktop applications, mobile phones, and living room devices.
44
21
  This is a RubyGem for implementing OAuth 2.0 clients (not servers) in Ruby applications.
45
22
 
46
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
47
- |-----------------------------------------------|----------------|--------|-----|------|----------------|-------------|
48
- | 🧪 [oauth-xx/oauth2 on GitLab][📜src-gl] | The Truth | 💚 | 💚 | 💚 | 🏀 Tiny Matrix | ➖ |
49
- | 🐙 [oauth-xx/oauth2 on GitHub][📜src-gh] | A Dirty Mirror | 💚 | 💚 | ➖ | 💯 Full Matrix | ➖ |
50
- | 🤼 [OAuth Ruby Google Group][⛳gg-discussions] | "Active" | | ➖ | | ➖ | 💚 |
23
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
24
+ |-----------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
25
+ | 🧪 [oauth-xx/oauth2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
26
+ | 🧊 [oauth-xx/oauth2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
27
+ | 🐙 [oauth-xx/oauth2 on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | ➖ |
28
+ | 🤼 [OAuth Ruby Google Group][⛳gg-discussions] | "Active" | ➖ | ➖ | ➖ | ➖ | [💚][⛳gg-discussions] |
29
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
51
30
 
52
31
  ### Upgrading Runtime Gem Dependencies
53
32
 
54
- This project sits underneath a large portion of the authentication systems on the internet.
33
+ This project sits underneath a large portion of the authorization systems on the internet.
55
34
  According to GitHub's project tracking, which I believe only reports on public projects,
56
35
  [100,000+ projects](https://github.com/oauth-xx/oauth2/network/dependents), and
57
36
  [500+ packages](https://github.com/oauth-xx/oauth2/network/dependents?dependent_type=PACKAGE) depend on this project.
@@ -70,26 +49,29 @@ covering the latest patch for each of the following minor versions:
70
49
  * NOTE: This gem will still install on ruby v2.2, but vanilla GitHub Actions no longer supports testing against it, so YMMV.
71
50
  * JRuby @ v9.2, v9.3, v9.4, v10.0, HEAD
72
51
  * TruffleRuby @ v23.1, v23.2, HEAD
73
- * gem `faraday` @ v0, v1, v2, HEAD
74
- * gem `jwt` @ v1, v2, v3, HEAD
75
- * gem `logger` @ v1.2, v1.5, v1.7, HEAD
76
- * gem `multi_xml` @ v0.5, v0.6, v0.7, HEAD
77
- * gem `rack` @ v1.2, v1.6, v2, v3, HEAD
52
+ * gem `faraday` @ v0, v1, v2, HEAD ⏩️ [lostisland/faraday](https://github.com/lostisland/faraday)
53
+ * gem `jwt` @ v1, v2, v3, HEAD ⏩️ [lostisland/faraday](https://github.com/lostisland/faraday)
54
+ * gem `logger` @ v1.2, v1.5, v1.7, HEAD ⏩️ [jwt/ruby-jwt](https://github.com/jwt/ruby-jwt)
55
+ * gem `multi_xml` @ v0.5, v0.6, v0.7, HEAD ⏩️ [sferik/multi_xml](https://github.com/sferik/multi_xml)
56
+ * gem `rack` @ v1.2, v1.6, v2, v3, HEAD ⏩️ [rack/rack](https://github.com/rack/rack)
57
+ * gem `snaky_hash` @v2, HEAD ⏩️ [oauth-xx/snaky_hash](https://gitlab.com/oauth-xx/snaky_hash)
58
+ * gem `version_gem` - @v1, HEAD ⏩️ [oauth-xx/version_gem](https://gitlab.com/oauth-xx/version_gem)
59
+
60
+ The last two were extracted from this gem. They are part of the `oauth-xx` org,
61
+ and are developed in tight collaboration with this gem.
62
+
63
+ Also, where reasonable, tested against the runtime dependencies of those dependencies:
64
+
65
+ * gem `hashie` @ v0, v1, v2, v3, v4, v5, HEAD ⏩️ [hashie/hashie](https://github.com/hashie/hashie)
66
+
67
+ #### You should upgrade this gem with confidence\*.
78
68
 
79
69
  - This gem follows a _strict & correct_ (according to the maintainer of SemVer; [more info][sv-pub-api]) interpretation of SemVer.
80
70
  - Dropping support for **any** of the runtime dependency versions above will be a major version bump.
81
71
  - If you aren't on one of the minor versions above, make getting there a priority.
82
- - You should upgrade this gem with confidence\*.
83
72
  - You should upgrade the dependencies of this gem with confidence\*.
84
73
  - Please do upgrade, and then, when it goes smooth as butter [please sponsor me][🖇sponsor]. Thanks!
85
74
 
86
- If you are thinking, "that list is missing two runtime dependencies", you are correct!
87
- Both of them were extracted from this gem. They are part of the `oauth-xx` org,
88
- and are developed in tight collaboration with this gem, so not much more needs to be said about them.
89
-
90
- * gem `snaky_hash` - https://gitlab.com/oauth-xx/snaky_hash
91
- * gem `version_gem` - https://gitlab.com/oauth-xx/version_gem
92
-
93
75
  [sv-pub-api]: #-is-platform-support-part-of-the-public-api
94
76
 
95
77
  \* MIT license; I am unable to make guarantees.
@@ -158,19 +140,20 @@ One of these might be what you are looking for:
158
140
 
159
141
  ## 💡 Info you can shake a stick at
160
142
 
161
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
162
- |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
163
- | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
164
- | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
165
- | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
166
- | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
167
- | 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] |
168
- | Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
169
- | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Enforced Code Style][💎rlts-img]][💎rlts] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![FOSSA][🏘fossa-img]][🏘fossa] |
170
- | Expert 1:1 Support | [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] `or` [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
171
- | Enterprise Support | [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]<br/>💡Subscribe for support guarantees covering _all_ FLOSS dependencies!<br/>💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]!<br/>💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers! |
172
- | Comrade BDFL 🎖️ | [![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 BDFL][🚂bdfl-contact-img]][🚂bdfl-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
173
- | `...` 💖 | [![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] |
143
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
144
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
145
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
146
+ | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
147
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
148
+ | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎13-cbs-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
149
+ | 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] |
150
+ | Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
151
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
152
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
153
+ | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
154
+ | Enterprise Support | [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]<br/>💡Subscribe for support guarantees covering _all_ FLOSS dependencies!<br/>💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]!<br/>💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers! |
155
+ | Comrade BDFL 🎖️ | [![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 BDFL][🚂bdfl-contact-img]][🚂bdfl-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
156
+ | `...` 💖 | [![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] |
174
157
 
175
158
  ## 🚀 Release Documentation
176
159
 
@@ -181,7 +164,8 @@ One of these might be what you are looking for:
181
164
 
182
165
  | Version | Release Date | CHANGELOG | README |
183
166
  |---------|--------------|---------------------------------------|---------------------------------|
184
- | 2.0.10 | 2025-05-16 | [v2.0.10 CHANGELOG][2.0.10-changelog] | [v2.0.10 README][2.0.10-readme] |
167
+ | 2.0.11 | 2025-05-23 | [v2.0.11 CHANGELOG][2.0.11-changelog] | [v2.0.10 README][2.0.11-readme] |
168
+ | 2.0.10 | 2025-05-17 | [v2.0.10 CHANGELOG][2.0.10-changelog] | [v2.0.10 README][2.0.10-readme] |
185
169
  | 2.0.9 | 2022-09-16 | [v2.0.9 CHANGELOG][2.0.9-changelog] | [v2.0.9 README][2.0.9-readme] |
186
170
  | 2.0.8 | 2022-09-01 | [v2.0.8 CHANGELOG][2.0.8-changelog] | [v2.0.8 README][2.0.8-readme] |
187
171
  | 2.0.7 | 2022-08-22 | [v2.0.7 CHANGELOG][2.0.7-changelog] | [v2.0.7 README][2.0.7-readme] |
@@ -194,7 +178,8 @@ One of these might be what you are looking for:
194
178
  | 2.0.0 | 2022-06-21 | [v2.0.0 CHANGELOG][2.0.0-changelog] | [v2.0.0 README][2.0.0-readme] |
195
179
  </details>
196
180
 
197
- [2.0.10-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#2010---2025-05-16
181
+ [2.0.11-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#2011---2025-05-23
182
+ [2.0.10-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#2010---2025-05-17
198
183
  [2.0.9-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#209---2022-09-16
199
184
  [2.0.8-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#208---2022-09-01
200
185
  [2.0.7-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#207---2022-08-22
@@ -206,6 +191,7 @@ One of these might be what you are looking for:
206
191
  [2.0.1-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#201---2022-06-22
207
192
  [2.0.0-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#200---2022-06-21
208
193
 
194
+ [2.0.10-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/README.md
209
195
  [2.0.10-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.10/README.md
210
196
  [2.0.9-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.9/README.md
211
197
  [2.0.8-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.8/README.md
@@ -304,7 +290,7 @@ by following the instructions below.
304
290
  Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
305
291
 
306
292
  ```shell
307
- gem cert --add <(curl -Ls https://raw.github.com/kettle-rb/oauth2/main/certs/pboling.pem)
293
+ gem cert --add <(curl -Ls https://raw.github.com/oauth-xx/oauth2/main/certs/pboling.pem)
308
294
  ```
309
295
 
310
296
  You only need to do that once. Then proceed to install with:
@@ -342,27 +328,28 @@ For more see [SECURITY.md][🔐security].
342
328
 
343
329
  ## What is new for v2.0?
344
330
 
345
- - Officially support Ruby versions >= 2.7
346
- - Unofficially support Ruby versions >= 2.5
347
- - Incidentally support Ruby versions >= 2.2
331
+ - Works with Ruby versions >= 2.2
348
332
  - Drop support for the expired MAC Draft (all versions)
349
333
  - Support IETF rfc7523 JWT Bearer Tokens
350
334
  - Support IETF rfc7231 Relative Location in Redirect
351
335
  - Support IETF rfc6749 Don't set oauth params when nil
336
+ - Support IETF rfc7009 Token Revocation (since v2.0.10)
352
337
  - Support [OIDC 1.0 Private Key JWT](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication); based on the OAuth JWT assertion specification [(RFC 7523)](https://tools.ietf.org/html/rfc7523)
353
338
  - Support new formats, including from [jsonapi.org](http://jsonapi.org/format/): `application/vdn.api+json`, `application/vnd.collection+json`, `application/hal+json`, `application/problem+json`
354
- - Adds new option to `OAuth2::Client#get_token`:
339
+ - Adds option to `OAuth2::Client#get_token`:
355
340
  - `:access_token_class` (`AccessToken`); user specified class to use for all calls to `get_token`
356
- - Adds new option to `OAuth2::AccessToken#initialize`:
341
+ - Adds option to `OAuth2::AccessToken#initialize`:
357
342
  - `:expires_latency` (`nil`); number of seconds by which AccessToken validity will be reduced to offset latency
358
343
  - By default, keys are transformed to snake case.
359
- - Original keys will still work as previously, in most scenarios, thanks to `rash_alt` gem.
344
+ - Original keys will still work as previously, in most scenarios, thanks to [snaky_hash][snaky_hash] gem.
360
345
  - However, this is a _breaking_ change if you rely on `response.parsed.to_h` to retain the original case, and the original wasn't snake case, as the keys in the result will be snake case.
361
346
  - As of version 2.0.4 you can turn key transformation off with the `snaky: false` option.
362
347
  - By default, the `:auth_scheme` is now `:basic_auth` (instead of `:request_body`)
363
348
  - Third-party strategies and gems may need to be updated if a provider was requiring client id/secret in the request body
364
349
  - [... A lot more](https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md#200-2022-06-21-tag)
365
350
 
351
+ [snaky_hash]: https://gitlab.com/oauth-xx/snaky_hash
352
+
366
353
  ## Compatibility
367
354
 
368
355
  Targeted ruby compatibility is non-EOL versions of Ruby, currently 3.2, 3.3, and 3.4.
@@ -377,7 +364,7 @@ This gem is tested against MRI, JRuby, and Truffleruby.
377
364
  Each of those has varying versions that target a specific version of MRI Ruby.
378
365
  This gem should work in the just-listed Ruby engines according to the targeted MRI compatibility in the table below.
379
366
  If you would like to add support for additional engines,
380
- see `gemfiles/README.md`, then submit a PR to the correct maintenance branch as according to the table below.
367
+ see [gemfiles/README.md](gemfiles/README.md), then submit a PR to the correct maintenance branch as according to the table below.
381
368
  </details>
382
369
 
383
370
  <details>
@@ -404,25 +391,25 @@ of a major release, support for that Ruby version may be dropped.
404
391
  | 3️⃣ | older | N/A | Best of luck to you! | Please upgrade! | |
405
392
 
406
393
  NOTE: The 1.4 series will only receive critical security updates.
407
- See [SECURITY.md][🚎sec-pol]
394
+ See [SECURITY.md][🔐security].
408
395
 
409
- ## Usage Examples
396
+ ## 🔧 Basic Usage
410
397
 
411
398
  ### Global Configuration
412
399
 
413
- If you started seeing this warning, but everything is working fine, you can now silence it.
414
- ```log
415
- OAuth2::AccessToken.from_hash: `hash` contained more than one 'token' key
416
- ```
400
+ You can turn on additional warnings.
417
401
 
418
402
  ```ruby
419
403
  OAuth2.configure do |config|
420
- config.silence_extra_tokens_warning = true # default: false
421
- config.silence_no_tokens_warning = true # default: false, if you want to also silence warnings about no tokens
404
+ # Turn on a warning like:
405
+ # OAuth2::AccessToken.from_hash: `hash` contained more than one 'token' key
406
+ config.silence_extra_tokens_warning = false # default: true
407
+ # Set to true if you want to also show warnings about no tokens
408
+ config.silence_no_tokens_warning = false # default: true,
422
409
  end
423
410
  ```
424
411
 
425
- This comes from ambiguity in the spec about which token is the right token.
412
+ The "extra tokens" problem comes from ambiguity in the spec about which token is the right token.
426
413
  Some OAuth 2.0 standards legitimately have multiple tokens.
427
414
  You may need to subclass `OAuth2::AccessToken`, or write your own custom alternative to it, and pass it in.
428
415
  Specify your custom class with the `access_token_class` option.
@@ -491,9 +478,24 @@ response.parsed.access_token # => "aaaaaaaa"
491
478
  response.parsed[:access_token] # => "aaaaaaaa"
492
479
  response.parsed.additional_data # => "additional"
493
480
  response.parsed[:additional_data] # => "additional"
494
- response.parsed.class.name # => OAuth2::SnakyHash (subclass of Hashie::Mash::Rash, from `rash_alt` gem)
481
+ response.parsed.class.name # => SnakyHash::StringKeyed (from snaky_hash gem)
495
482
  ```
496
483
 
484
+ #### Serialization
485
+
486
+ As of v2.0.11, if you need to serialize the parsed result, you can!
487
+
488
+ There are two ways to do this, and the second option recommended.
489
+
490
+ 1. Globally configure `SnakyHash::StringKeyed` to use the serializer. Put this in your code somewhere reasonable (like an initializer for Rails):
491
+
492
+ ```ruby
493
+ SnakyHash::StringKeyed.class_eval do
494
+ extend SnakyHash::Serializer
495
+ end
496
+ ```
497
+
498
+
497
499
  #### What if I hate snakes and/or indifference?
498
500
 
499
501
  ```ruby
@@ -506,9 +508,9 @@ response.parsed.class.name # => Hash (just, regular old Hash)
506
508
  ```
507
509
 
508
510
  <details>
509
- <summary>Debugging</summary>
511
+ <summary>Debugging & Logging</summary>
510
512
 
511
- Set an environment variable, however you would [normally do that](https://github.com/bkeepers/dotenv).
513
+ Set an environment variable as per usual (e.g. with [dotenv](https://github.com/bkeepers/dotenv)).
512
514
 
513
515
  ```ruby
514
516
  # will log both request and response, including bodies
@@ -529,27 +531,27 @@ client = OAuth2::Client.new(
529
531
  ```
530
532
  </details>
531
533
 
532
- ## OAuth2::Response
534
+ ### OAuth2::Response
533
535
 
534
536
  The `AccessToken` methods `#get`, `#post`, `#put` and `#delete` and the generic `#request`
535
537
  will return an instance of the #OAuth2::Response class.
536
538
 
537
539
  This instance contains a `#parsed` method that will parse the response body and
538
- return a Hash-like [`OAuth2::SnakyHash`](https://gitlab.com/oauth-xx/oauth2/-/blob/main/lib/oauth2/snaky_hash.rb) if the `Content-Type` is `application/x-www-form-urlencoded` or if
540
+ return a Hash-like [`SnakyHash::StringKeyed`](https://gitlab.com/oauth-xx/snaky_hash/-/blob/main/lib/snaky_hash/string_keyed.rb) if the `Content-Type` is `application/x-www-form-urlencoded` or if
539
541
  the body is a JSON object. It will return an Array if the body is a JSON
540
542
  array. Otherwise, it will return the original body string.
541
543
 
542
544
  The original response body, headers, and status can be accessed via their
543
545
  respective methods.
544
546
 
545
- ## OAuth2::AccessToken
547
+ ### OAuth2::AccessToken
546
548
 
547
549
  If you have an existing Access Token for a user, you can initialize an instance
548
550
  using various class methods including the standard new, `from_hash` (if you have
549
551
  a hash of the values), or `from_kvform` (if you have an
550
552
  `application/x-www-form-urlencoded` encoded string of the values).
551
553
 
552
- ## OAuth2::Error
554
+ ### OAuth2::Error
553
555
 
554
556
  On 400+ status code responses, an `OAuth2::Error` will be raised. If it is a
555
557
  standard OAuth2 error response, the body will be parsed and `#code` and `#description` will contain the values provided from the error and
@@ -561,9 +563,9 @@ option on initialization of the client. In this case the `OAuth2::Response`
561
563
  instance will be returned as usual and on 400+ status code responses, the
562
564
  Response instance will contain the `OAuth2::Error` instance.
563
565
 
564
- ## Authorization Grants
566
+ ### Authorization Grants
565
567
 
566
- Currently the Authorization Code, Implicit, Resource Owner Password Credentials, Client Credentials, and Assertion
568
+ Currently, the Authorization Code, Implicit, Resource Owner Password Credentials, Client Credentials, and Assertion
567
569
  authentication grant types have helper strategy classes that simplify client
568
570
  use. They are available via the [`#auth_code`](https://gitlab.com/oauth-xx/oauth2/-/blob/main/lib/oauth2/strategy/auth_code.rb),
569
571
  [`#implicit`](https://gitlab.com/oauth-xx/oauth2/-/blob/main/lib/oauth2/strategy/implicit.rb),
@@ -621,8 +623,7 @@ See [SECURITY.md][🔐security].
621
623
  ## 🤝 Contributing
622
624
 
623
625
  If you need some ideas of where to help, you could work on adding more code coverage,
624
- or if it is already 💯 (see [below](#code-coverage)) check TODOs (see [below](#todos)),
625
- or check [issues][🤝issues], or [PRs][🤝pulls],
626
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
626
627
  or use the gem and think about how it could be better.
627
628
 
628
629
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
@@ -632,7 +633,7 @@ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
632
633
  ### Code Coverage
633
634
 
634
635
  [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
635
- [![QLTY Test Coverage][🔑cc-covi♻️]][🔑cc-cov]
636
+ [![QLTY Test Coverage][🔑qlty-covi♻️]][🔑qlty-cov]
636
637
 
637
638
  ### 🪇 Code of Conduct
638
639
 
@@ -700,11 +701,6 @@ The gem is available as open source under the terms of
700
701
  the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
701
702
  See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
702
703
 
703
- [![FOSSA Status][fossa2-img])][fossa2]
704
-
705
- [fossa2]: https://app.fossa.io/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2?ref=badge_large
706
- [fossa2-img]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2.svg?type=large
707
-
708
704
  ### © Copyright
709
705
 
710
706
  <ul>
@@ -734,7 +730,7 @@ or one of the others at the head of this README.
734
730
  [![Buy me a latte][🖇buyme-img]][🖇buyme]
735
731
 
736
732
  [⛳gg-discussions]: https://groups.google.com/g/oauth-ruby
737
- [⛳gg-discussions-img]: https://img.shields.io/badge/google-group-purple.svg?style=flat
733
+ [⛳gg-discussions-img]: https://img.shields.io/badge/google-group-0093D0.svg?style=for-the-badge&logo=google&logoColor=orange
738
734
 
739
735
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
740
736
  [⛳️gem-namespace]: https://github.com/oauth-xx/oauth2
@@ -781,7 +777,7 @@ or one of the others at the head of this README.
781
777
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
782
778
  [📜src-gh]: https://github.com/oauth-xx/oauth2
783
779
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
784
- [📜docs-head-rd-img]: https://img.shields.io/badge/RubyDoc-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
780
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
785
781
  [📜wiki]: https://gitlab.com/oauth-xx/oauth2/-/wikis/home
786
782
  [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
787
783
  [👽dl-rank]: https://rubygems.org/gems/oauth2
@@ -790,10 +786,10 @@ or one of the others at the head of this README.
790
786
  [👽oss-helpi]: https://www.codetriage.com/oauth-xx/oauth2/badges/users.svg
791
787
  [👽version]: https://rubygems.org/gems/oauth2
792
788
  [👽versioni]: https://img.shields.io/gem/v/oauth2.svg
793
- [🔑cc-mnt]: https://qlty.sh/gh/oauth-xx/projects/oauth2
794
- [🔑cc-mnti♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/maintainability.svg
795
- [🔑cc-cov]: https://qlty.sh/gh/oauth-xx/projects/oauth2
796
- [🔑cc-covi♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/test_coverage.svg
789
+ [🔑qlty-mnt]: https://qlty.sh/gh/oauth-xx/projects/oauth2
790
+ [🔑qlty-mnti♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/maintainability.svg
791
+ [🔑qlty-cov]: https://qlty.sh/gh/oauth-xx/projects/oauth2
792
+ [🔑qlty-covi♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/test_coverage.svg
797
793
  [🔑codecov]: https://codecov.io/gh/oauth-xx/oauth2
798
794
  [🔑codecovi♻️]: https://codecov.io/gh/oauth-xx/oauth2/graph/badge.svg?token=bNqSzNiuo2
799
795
  [🔑coveralls]: https://coveralls.io/github/oauth-xx/oauth2?branch=main
@@ -826,6 +822,8 @@ or one of the others at the head of this README.
826
822
  [🚎11-c-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/current.yml/badge.svg
827
823
  [🚎12-crh-wf]: https://github.com/oauth-xx/oauth2/actions/workflows/current-runtime-heads.yml
828
824
  [🚎12-crh-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/current-runtime-heads.yml/badge.svg
825
+ [🚎13-cbs-wf]: https://github.com/oauth-xx/oauth2/actions/workflows/caboose.yml
826
+ [🚎13-cbs-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/caboose.yml/badge.svg
829
827
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
830
828
  [⛳liberapay]: https://liberapay.com/pboling/donate
831
829
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
@@ -861,8 +859,13 @@ or one of the others at the head of this README.
861
859
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
862
860
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
863
861
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
864
- [🤝issues]: https://github.com/oauth-xx/oauth2/issues
865
- [🤝pulls]: https://github.com/oauth-xx/oauth2/pulls
862
+ [🤝gh-issues]: https://github.com/oauth-xx/oauth2/issues
863
+ [🤝gh-pulls]: https://github.com/oauth-xx/oauth2/pulls
864
+ [🤝gl-issues]: https://gitlab.com/oauth-xx/oauth2/-/issues
865
+ [🤝gl-pulls]: https://gitlab.com/oauth-xx/oauth2/-/merge_requests
866
+ [🤝cb-issues]: https://codeberg.org/oauth-xx/oauth2/issues
867
+ [🤝cb-pulls]: https://codeberg.org/oauth-xx/oauth2/pulls
868
+ [🤝cb-donate]: https://donate.codeberg.org/
866
869
  [🤝contributing]: CONTRIBUTING.md
867
870
  [🔑codecov-g♻️]: https://codecov.io/gh/oauth-xx/oauth2/graphs/tree.svg?token=bNqSzNiuo2
868
871
  [🖐contrib-rocks]: https://contrib.rocks
@@ -870,36 +873,36 @@ or one of the others at the head of this README.
870
873
  [🖐contributors-img]: https://contrib.rocks/image?repo=oauth-xx/oauth2
871
874
  [🚎contributors-gl]: https://gitlab.com/oauth-xx/oauth2/-/graphs/main
872
875
  [🪇conduct]: CODE_OF_CONDUCT.md
873
- [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-4baaaa.svg
876
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
874
877
  [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
875
878
  [📌semver]: https://semver.org/spec/v2.0.0.html
876
- [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
879
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
877
880
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
878
881
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
879
882
  [📌changelog]: CHANGELOG.md
880
883
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
881
- [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
884
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
882
885
  [📌gitmoji]:https://gitmoji.dev
883
- [📌gitmoji-img]:https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg?style=flat-square
886
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
884
887
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
885
888
  [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.518-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
886
889
  [🔐security]: SECURITY.md
887
- [🔐security-img]: https://img.shields.io/badge/security-policy-brightgreen.svg?style=flat
890
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
888
891
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
889
892
  [📄license]: LICENSE.txt
890
893
  [📄license-ref]: https://opensource.org/licenses/MIT
891
- [📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
894
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
892
895
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
893
- [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-brightgreen.svg?style=flat
896
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
894
897
  [🚎yard-current]: http://rubydoc.info/gems/oauth2
895
- [🚎yard-head]: https://rubydoc.info/github/oauth-xx/oauth2/main
898
+ [🚎yard-head]: https://oauth2.galtzo.com
896
899
  [💎stone_checksums]: https://github.com/pboling/stone_checksums
897
900
  [💎SHA_checksums]: https://gitlab.com/oauth-xx/oauth2/-/tree/main/checksums
898
901
  [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
899
- [💎rlts-img]: https://img.shields.io/badge/code_style-rubocop--lts-brightgreen.svg?plastic&logo=ruby&logoColor=white
900
- [🏘fossa]: https://app.fossa.io/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2?ref=badge_shield
901
- [🏘fossa-img]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2.svg?type=shield
902
+ [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
902
903
  [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
904
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
905
+ [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
903
906
 
904
907
  <details>
905
908
  <summary>
@@ -1,5 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :nocov:
4
+ begin
5
+ # The first version of hashie that has a version file was 1.1.0
6
+ # The first version of hashie that required the version file at runtime was 3.2.0
7
+ # If it has already been loaded then this is very low cost, as Kernel.require uses maintains a cache
8
+ # If this it hasn't this will work to get it loaded, and then we will be able to use
9
+ # defined?(Hashie::Version)
10
+ # as a test.
11
+ # TODO: get rid this mess when we drop Hashie < 3.2, as Hashie will self-load its version then
12
+ require "hashie/version"
13
+ rescue LoadError
14
+ nil
15
+ end
16
+ # :nocov:
17
+
3
18
  module OAuth2
4
19
  class AccessToken # rubocop:disable Metrics/ClassLength
5
20
  TOKEN_KEYS_STR = %w[access_token id_token token accessToken idToken].freeze
@@ -54,7 +69,16 @@ module OAuth2
54
69
  extra_tokens_warning(supported_keys, t_key)
55
70
  t_key
56
71
  end
57
- token = fresh.delete(key) || ""
72
+ # :nocov:
73
+ # TODO: Get rid of this branching logic when dropping Hashie < v3.2
74
+ token = if !defined?(Hashie::VERSION) # i.e. <= "1.1.0"; the first Hashie to ship with a VERSION constant
75
+ warn("snaky_hash and oauth2 will drop support for Hashie v0 in the next major version. Please upgrade to a modern Hashie.")
76
+ # There is a bug in Hashie v0, which is accounts for.
77
+ fresh.delete(key) || fresh[key] || ""
78
+ else
79
+ fresh.delete(key) || ""
80
+ end
81
+ # :nocov:
58
82
  new(client, token, fresh)
59
83
  end
60
84
 
data/lib/oauth2/client.rb CHANGED
@@ -19,7 +19,7 @@ module OAuth2
19
19
  # The OAuth2::Client class
20
20
  class Client # rubocop:disable Metrics/ClassLength
21
21
  RESERVED_REQ_KEYS = %w[body headers params redirect_count].freeze
22
- RESERVED_PARAM_KEYS = (RESERVED_REQ_KEYS + %w[parse snaky token_method]).freeze
22
+ RESERVED_PARAM_KEYS = (RESERVED_REQ_KEYS + %w[parse snaky snaky_hash_klass token_method]).freeze
23
23
 
24
24
  include FilteredAttributes
25
25
 
@@ -342,14 +342,26 @@ module OAuth2
342
342
 
343
343
  private
344
344
 
345
- # A generic token request options parser
345
+ # Processes request parameters and transforms them into request options
346
+ #
347
+ # @param [Hash] params the request parameters to process
348
+ # @option params [Symbol] :parse (:automatic) parsing strategy for the response
349
+ # @option params [Boolean] :snaky (true) whether to convert response keys to snake_case
350
+ # @option params [Class] :snaky_hash_klass (SnakyHash::StringKeyed) class to use for snake_case hash conversion
351
+ # @option params [Symbol] :token_method (:post) HTTP method to use for token request
352
+ # @option params [Hash] :headers Additional HTTP headers for the request
353
+ #
354
+ # @return [Hash] the processed request options
355
+ #
356
+ # @api private
346
357
  def params_to_req_opts(params)
347
- parse, snaky, token_method, params, headers = parse_snaky_params_headers(params)
358
+ parse, snaky, snaky_hash_klass, token_method, params, headers = parse_snaky_params_headers(params)
348
359
  req_opts = {
349
360
  raise_errors: options[:raise_errors],
350
361
  token_method: token_method || options[:token_method],
351
362
  parse: parse,
352
363
  snaky: snaky,
364
+ snaky_hash_klass: snaky_hash_klass,
353
365
  }
354
366
  if req_opts[:token_method] == :post
355
367
  # NOTE: If proliferation of request types continues, we should implement a parser solution for Request,
@@ -369,19 +381,22 @@ module OAuth2
369
381
  req_opts
370
382
  end
371
383
 
372
- # Processes and transforms the input parameters for OAuth requests
384
+ # Processes and transforms parameters for OAuth requests
373
385
  #
374
386
  # @param [Hash] params the input parameters to process
375
- # @option params [Symbol, nil] :parse (:automatic) parsing strategy for the response
387
+ # @option params [Symbol] :parse (:automatic) parsing strategy for the response
376
388
  # @option params [Boolean] :snaky (true) whether to convert response keys to snake_case
389
+ # @option params [Class] :snaky_hash_klass (SnakyHash::StringKeyed) class to use for snake_case hash conversion
390
+ # @option params [Symbol] :token_method overrides the default token method for this request
377
391
  # @option params [Hash] :headers HTTP headers for the request
378
392
  #
379
- # @return [Array<(Symbol, Boolean, Hash, Hash)>] Returns an array containing:
380
- # - [Symbol, nil] parse strategy
381
- # - [Boolean] snaky flag for response key transformation
382
- # - [Symbol, nil] token_method overrides options[:token_method] for a request
383
- # - [Hash] processed parameters
384
- # - [Hash] HTTP headers
393
+ # @return [Array<(Symbol, Boolean, Class, Symbol, Hash, Hash)>] Returns an array containing:
394
+ # - parse strategy (Symbol)
395
+ # - snaky flag for response key transformation (Boolean)
396
+ # - hash class for snake_case conversion (Class)
397
+ # - token method override (Symbol, nil)
398
+ # - processed parameters (Hash)
399
+ # - HTTP headers (Hash)
385
400
  #
386
401
  # @api private
387
402
  def parse_snaky_params_headers(params)
@@ -394,11 +409,12 @@ module OAuth2
394
409
  end.to_h
395
410
  parse = params.key?(:parse) ? params.delete(:parse) : Response::DEFAULT_OPTIONS[:parse]
396
411
  snaky = params.key?(:snaky) ? params.delete(:snaky) : Response::DEFAULT_OPTIONS[:snaky]
412
+ snaky_hash_klass = params.key?(:snaky_hash_klass) ? params.delete(:snaky_hash_klass) : Response::DEFAULT_OPTIONS[:snaky_hash_klass]
397
413
  token_method = params.delete(:token_method) if params.key?(:token_method)
398
414
  params = authenticator.apply(params)
399
415
  # authenticator may add :headers, and we separate them from params here
400
416
  headers = params.delete(:headers) || {}
401
- [parse, snaky, token_method, params, headers]
417
+ [parse, snaky, snaky_hash_klass, token_method, params, headers]
402
418
  end
403
419
 
404
420
  # Executes an HTTP request with error handling and response processing
@@ -5,23 +5,39 @@ require "multi_xml"
5
5
  require "rack"
6
6
 
7
7
  module OAuth2
8
- # OAuth2::Response class
8
+ # The Response class handles HTTP responses in the OAuth2 gem, providing methods
9
+ # to access and parse response data in various formats.
10
+ #
11
+ # @since 1.0.0
9
12
  class Response
13
+ # Default configuration options for Response instances
14
+ #
15
+ # @return [Hash] The default options hash
10
16
  DEFAULT_OPTIONS = {
11
17
  parse: :automatic,
12
18
  snaky: true,
19
+ snaky_hash_klass: SnakyHash::StringKeyed,
13
20
  }.freeze
21
+
22
+ # @return [Faraday::Response] The raw Faraday response object
14
23
  attr_reader :response
24
+
25
+ # @return [Hash] The options hash for this instance
15
26
  attr_accessor :options
16
27
 
17
- # Procs that, when called, will parse a response body according
18
- # to the specified format.
28
+ # @private
29
+ # Storage for response body parser procedures
30
+ #
31
+ # @return [Hash<Symbol, Proc>] Hash of parser procs keyed by format symbol
19
32
  @@parsers = {
20
33
  query: ->(body) { Rack::Utils.parse_query(body) },
21
34
  text: ->(body) { body },
22
35
  }
23
36
 
24
- # Content type assignments for various potential HTTP content types.
37
+ # @private
38
+ # Maps content types to parser symbols
39
+ #
40
+ # @return [Hash<String, Symbol>] Hash of content types mapped to parser symbols
25
41
  @@content_types = {
26
42
  "application/x-www-form-urlencoded" => :query,
27
43
  "text/plain" => :text,
@@ -29,9 +45,11 @@ module OAuth2
29
45
 
30
46
  # Adds a new content type parser.
31
47
  #
32
- # @param [Symbol] key A descriptive symbol key such as :json or :query.
33
- # @param [Array] mime_types One or more mime types to which this parser applies.
34
- # @yield [String] A block returning parsed content.
48
+ # @param [Symbol] key A descriptive symbol key such as :json or :query
49
+ # @param [Array<String>, String] mime_types One or more mime types to which this parser applies
50
+ # @yield [String] Block that will be called to parse the response body
51
+ # @yieldparam [String] body The response body to parse
52
+ # @return [void]
35
53
  def self.register_parser(key, mime_types, &block)
36
54
  key = key.to_sym
37
55
  @@parsers[key] = block
@@ -43,38 +61,48 @@ module OAuth2
43
61
  # Initializes a Response instance
44
62
  #
45
63
  # @param [Faraday::Response] response The Faraday response instance
46
- # @param [Symbol] parse (:automatic) how to parse the response body. one of :query (for x-www-form-urlencoded),
47
- # :json, or :automatic (determined by Content-Type response header)
48
- # @param [true, false] snaky (true) Convert @parsed to a snake-case,
49
- # indifferent-access SnakyHash::StringKeyed, which is a subclass of Hashie::Mash (from hashie gem)?
50
- # @param [Hash] options all other options for initializing the instance
51
- def initialize(response, parse: :automatic, snaky: true, **options)
64
+ # @param [Symbol] parse (:automatic) How to parse the response body
65
+ # @param [Boolean] snaky (true) Whether to convert parsed response to snake_case using SnakyHash
66
+ # @param [Class, nil] snaky_hash_klass (nil) Custom class for snake_case hash conversion
67
+ # @param [Hash] options Additional options for the response
68
+ # @option options [Symbol] :parse (:automatic) Parse strategy (:query, :json, or :automatic)
69
+ # @option options [Boolean] :snaky (true) Enable/disable snake_case conversion
70
+ # @option options [Class] :snaky_hash_klass (SnakyHash::StringKeyed) Class to use for hash conversion
71
+ # @return [OAuth2::Response] The new Response instance
72
+ def initialize(response, parse: :automatic, snaky: true, snaky_hash_klass: nil, **options)
52
73
  @response = response
53
74
  @options = {
54
75
  parse: parse,
55
76
  snaky: snaky,
77
+ snaky_hash_klass: snaky_hash_klass,
56
78
  }.merge(options)
57
79
  end
58
80
 
59
81
  # The HTTP response headers
82
+ #
83
+ # @return [Hash] The response headers
60
84
  def headers
61
85
  response.headers
62
86
  end
63
87
 
64
88
  # The HTTP response status code
89
+ #
90
+ # @return [Integer] The response status code
65
91
  def status
66
92
  response.status
67
93
  end
68
94
 
69
95
  # The HTTP response body
96
+ #
97
+ # @return [String] The response body or empty string if nil
70
98
  def body
71
99
  response.body || ""
72
100
  end
73
101
 
74
- # The {#response} {#body} as parsed by {#parser}.
102
+ # The parsed response body
75
103
  #
76
- # @return [Object] As returned by {#parser} if it is #call-able.
77
- # @return [nil] If the {#parser} is not #call-able.
104
+ # @return [Object, SnakyHash::StringKeyed] The parsed response body
105
+ # @return [nil] If no parser is available
78
106
  def parsed
79
107
  return @parsed if defined?(@parsed)
80
108
 
@@ -91,36 +119,36 @@ module OAuth2
91
119
  end
92
120
 
93
121
  if options[:snaky] && @parsed.is_a?(Hash)
94
- parsed = SnakyHash::StringKeyed.new(@parsed)
95
- @parsed = parsed.to_h
122
+ hash_klass = options[:snaky_hash_klass] || DEFAULT_OPTIONS[:snaky_hash_klass]
123
+ @parsed = hash_klass[@parsed]
96
124
  end
97
125
 
98
126
  @parsed
99
127
  end
100
128
 
101
- # Attempts to determine the content type of the response.
129
+ # Determines the content type of the response
130
+ #
131
+ # @return [String, nil] The content type or nil if headers are not present
102
132
  def content_type
103
133
  return unless response.headers
104
134
 
105
135
  ((response.headers.values_at("content-type", "Content-Type").compact.first || "").split(";").first || "").strip.downcase
106
136
  end
107
137
 
108
- # Determines the parser (a Proc or other Object which responds to #call)
109
- # that will be passed the {#body} (and optional {#response}) to supply
110
- # {#parsed}.
138
+ # Determines the parser to be used for the response body
111
139
  #
112
- # The parser can be supplied as the +:parse+ option in the form of a Proc
113
- # (or other Object responding to #call) or a Symbol. In the latter case,
114
- # the actual parser will be looked up in {@@parsers} by the supplied Symbol.
140
+ # @note The parser can be supplied as the +:parse+ option in the form of a Proc
141
+ # (or other Object responding to #call) or a Symbol. In the latter case,
142
+ # the actual parser will be looked up in {@@parsers} by the supplied Symbol.
115
143
  #
116
- # If no +:parse+ option is supplied, the lookup Symbol will be determined
117
- # by looking up {#content_type} in {@@content_types}.
144
+ # @note If no +:parse+ option is supplied, the lookup Symbol will be determined
145
+ # by looking up {#content_type} in {@@content_types}.
118
146
  #
119
- # If {#parser} is a Proc, it will be called with no arguments, just
120
- # {#body}, or {#body} and {#response}, depending on the Proc's arity.
147
+ # @note If {#parser} is a Proc, it will be called with no arguments, just
148
+ # {#body}, or {#body} and {#response}, depending on the Proc's arity.
121
149
  #
122
- # @return [Proc, #call] If a parser was found.
123
- # @return [nil] If no parser was found.
150
+ # @return [Proc, #call] The parser proc or callable object
151
+ # @return [nil] If no suitable parser is found
124
152
  def parser
125
153
  return @parser if defined?(@parser)
126
154
 
@@ -136,12 +164,16 @@ module OAuth2
136
164
  end
137
165
  end
138
166
 
167
+ # Register XML parser
168
+ # @api private
139
169
  OAuth2::Response.register_parser(:xml, ["text/xml", "application/rss+xml", "application/rdf+xml", "application/atom+xml", "application/xml"]) do |body|
140
170
  next body unless body.respond_to?(:to_str)
141
171
 
142
172
  MultiXml.parse(body)
143
173
  end
144
174
 
175
+ # Register JSON parser
176
+ # @api private
145
177
  OAuth2::Response.register_parser(:json, ["application/json", "text/javascript", "application/hal+json", "application/vnd.collection+json", "application/vnd.api+json", "application/problem+json"]) do |body|
146
178
  next body unless body.respond_to?(:to_str)
147
179
 
File without changes
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OAuth2
4
4
  module Version
5
- VERSION = "2.0.10"
5
+ VERSION = "2.0.11"
6
6
  end
7
7
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.10
4
+ version: 2.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -37,7 +37,7 @@ cert_chain:
37
37
  DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
38
38
  L9nRqA==
39
39
  -----END CERTIFICATE-----
40
- date: 2025-05-17 00:00:00.000000000 Z
40
+ date: 2025-05-23 00:00:00.000000000 Z
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: faraday
@@ -134,6 +134,9 @@ dependencies:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '2.0'
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 2.0.3
137
140
  type: :runtime
138
141
  prerelease: false
139
142
  version_requirements: !ruby/object:Gem::Requirement
@@ -141,6 +144,9 @@ dependencies:
141
144
  - - "~>"
142
145
  - !ruby/object:Gem::Version
143
146
  version: '2.0'
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 2.0.3
144
150
  - !ruby/object:Gem::Dependency
145
151
  name: version_gem
146
152
  requirement: !ruby/object:Gem::Requirement
@@ -395,27 +401,27 @@ homepage: https://github.com/oauth-xx/oauth2
395
401
  licenses:
396
402
  - MIT
397
403
  metadata:
398
- homepage_uri: https://gitlab.com/oauth-xx/oauth2
399
- source_code_uri: https://gitlab.com/oauth-xx/oauth2/-/tree/v2.0.10
400
- changelog_uri: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.10/CHANGELOG.md
404
+ homepage_uri: https://oauth2.galtzo.com/
405
+ source_code_uri: https://github.com/oauth-xx/oauth2/releases/tag//v2.0.11
406
+ changelog_uri: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/CHANGELOG.md
401
407
  bug_tracker_uri: https://gitlab.com/oauth-xx/oauth2/-/issues
402
- documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.10
408
+ documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.11
403
409
  wiki_uri: https://gitlab.com/oauth-xx/oauth2/-/wiki
404
410
  mailing_list_uri: https://groups.google.com/g/oauth-ruby
405
- news_uri: https://www.railsbling.com/tags/oauth2
406
411
  funding_uri: https://liberapay.com/pboling
412
+ news_uri: https://www.railsbling.com/tags/oauth2
407
413
  rubygems_mfa_required: 'true'
408
414
  post_install_message: |2
409
415
 
410
- You have installed oauth2 version 2.0.10, congratulations!
416
+ You have installed oauth2 version 2.0.11, congratulations!
411
417
 
412
418
  There are BREAKING changes if you are upgrading from < v2, but most will not encounter them, and updating your code should be easy!
413
419
  Please see:
414
420
  • https://gitlab.com/oauth-xx/oauth2/-/blob/main/SECURITY.md
415
- • https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.10/CHANGELOG.md#200-2022-06-21-tag
421
+ • https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/CHANGELOG.md#200-2022-06-21-tag
416
422
  • Summary of most important breaking changes: https://gitlab.com/oauth-xx/oauth2#what-is-new-for-v20
417
423
 
418
- There are BUGFIXES in v2.0.10, which depending on how you relied on them instead of reporting and fixing them, may be BREAKING for you.
424
+ There are BUGFIXES in v2.0.11, which depending on how you relied on them instead of reporting and fixing them, may be BREAKING for you.
419
425
  For more information please see:
420
426
  https://railsbling.com/tags/oauth2
421
427
 
@@ -444,7 +450,12 @@ rdoc_options:
444
450
  - "--title"
445
451
  - oauth2 - OAuth 2.0 Core Ruby implementation
446
452
  - "--main"
453
+ - CHANGELOG.md
454
+ - CODE_OF_CONDUCT.md
455
+ - CONTRIBUTING.md
456
+ - LICENSE.txt
447
457
  - README.md
458
+ - SECURITY.md
448
459
  - "--line-numbers"
449
460
  - "--inline-source"
450
461
  - "--quiet"
metadata.gz.sig CHANGED
Binary file