From 3cce5b087329169d372f93b05edca3c6c916cec1 Mon Sep 17 00:00:00 2001 From: Alexa Grey Date: Thu, 7 Aug 2025 07:07:49 -0700 Subject: [PATCH] Allow rack 3 --- .github/workflows/main.yml | 20 +- .rubocop.yml | 5 +- Appraisals | 7 +- README.md | 9 +- gemfiles/rack_2.gemfile | 7 + ..._only.gemfile.lock => rack_2.gemfile.lock} | 189 ++++++++------ .../{rack_only.gemfile => rack_3.gemfile} | 2 + gemfiles/rack_3.gemfile.lock | 232 ++++++++++++++++++ gemfiles/rails_6_0.gemfile.lock | 176 +++++++------ gemfiles/rails_6_1.gemfile.lock | 178 +++++++------- keycloak_rack.gemspec | 9 +- lib/keycloak_rack/read_token.rb | 2 +- lib/keycloak_rack/version.rb | 2 +- spec/keycloak_rack/wrap_token_spec.rb | 15 ++ spec/spec_helper.rb | 4 +- 15 files changed, 589 insertions(+), 268 deletions(-) create mode 100644 gemfiles/rack_2.gemfile rename gemfiles/{rack_only.gemfile.lock => rack_2.gemfile.lock} (52%) rename gemfiles/{rack_only.gemfile => rack_3.gemfile} (77%) create mode 100644 gemfiles/rack_3.gemfile.lock create mode 100644 spec/keycloak_rack/wrap_token_spec.rb diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3aade1c..8129ea4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,22 +15,21 @@ jobs: lint: runs-on: ubuntu-latest env: - APPRAISAL_NAME: rack_only - BUNDLE_GEMFILE: ./gemfiles/rack_only.gemfile + APPRAISAL_NAME: rack_3 + BUNDLE_GEMFILE: ./gemfiles/rack_3.gemfile steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 - - uses: actions/cache@v2 + ruby-version: 3.0.0 + - uses: actions/cache@v4 with: path: vendor/bundle - key: bundle-use-ruby-ubuntu-latest-2.7-rack_only-${{ hashFiles(format('{0}.lock', env.BUNDLE_GEMFILE)) }} + key: bundle-use-ruby-ubuntu-latest-3.0.0-rack_3-${{ hashFiles(format('{0}.lock', env.BUNDLE_GEMFILE)) }} restore-keys: | - bundle-use-ruby-ubuntu-latest-2.7-rack_only + bundle-use-ruby-ubuntu-latest-3.0.0-rack_3 - name: bundle install run: | - gem update --system bundle config deployment true bundle config path vendor/bundle bundle install --jobs 4 @@ -42,8 +41,8 @@ jobs: strategy: fail-fast: false matrix: - appraisal_name: [rack_only, rails_6_0, rails_6_1] - ruby: [2.7.5, 3.0.0] + appraisal_name: [rack_2, rack_3, rails_6_0, rails_6_1] + ruby: [3.0.0] env: APPRAISAL_NAME: ${{ matrix.appraisal_name }} BUNDLE_GEMFILE: ${{ format('./gemfiles/{0}.gemfile', matrix.appraisal_name) }} @@ -52,7 +51,7 @@ jobs: - uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: vendor/bundle key: bundle-use-ruby-ubuntu-latest-${{ matrix.ruby }}-${{ env.APPRAISAL_NAME }}-${{ hashFiles(format('{0}.lock', env.BUNDLE_GEMFILE)) }} @@ -60,7 +59,6 @@ jobs: bundle-use-ruby-ubuntu-latest-${{ matrix.ruby }}-${{ env.APPRAISAL_NAME }} - name: bundle install run: | - gem update --system bundle config deployment true bundle config path vendor/bundle bundle install --jobs 4 diff --git a/.rubocop.yml b/.rubocop.yml index 3626305..c436e72 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -7,7 +7,7 @@ AllCops: - Appraisals - "bin/*" - "gemfiles/**/*" - TargetRubyVersion: 2.7 + TargetRubyVersion: 3.0 Bundler/OrderedGems: Enabled: false @@ -174,6 +174,9 @@ Style/IfWithBooleanLiteralBranches: Style/Lambda: Enabled: false +Style/LambdaCall: + Enabled: false + Style/MultilineBlockChain: Enabled: false diff --git a/Appraisals b/Appraisals index 4711f80..929fc78 100644 --- a/Appraisals +++ b/Appraisals @@ -1,6 +1,11 @@ # frozen_string_literal: true -appraise "rack_only" do +appraise "rack_2" do + gem "rack", ">= 2.2", "< 3" +end + +appraise "rack_3" do + gem "rack", ">= 3", "< 4" end appraise "rails_6_0" do diff --git a/README.md b/README.md index c5a6965..9b73a64 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,8 @@ gem "keycloak_rack", "1.0.0" ### Ruby & Rails Versions -- Ruby 2.7, 3.0 -- Rails 6.0, 6.1, or using only Rack 2.2 - -It has also been tested on Rails 5.2, but isn't officially supported because it doesn't support Ruby 3. - -At minimum, it requires Ruby 2.7, because it makes use of [pattern matching](https://docs.ruby-lang.org/en/3.0.0/doc/syntax/pattern_matching_rdoc.html). -If you find the warning at boot annoying (I sure do), you can set `RUBYOPT='-W:no-experimental'` in your environment to silence the nag. +- Ruby 3.0+ +- Rails 6.0, 6.1, 7.0, 7.1, or using only Rack 2.2+ or 3.x ## Basic Usage in Rails diff --git a/gemfiles/rack_2.gemfile b/gemfiles/rack_2.gemfile new file mode 100644 index 0000000..26ece81 --- /dev/null +++ b/gemfiles/rack_2.gemfile @@ -0,0 +1,7 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "rack", ">= 2.2", "< 3" + +gemspec path: "../" diff --git a/gemfiles/rack_only.gemfile.lock b/gemfiles/rack_2.gemfile.lock similarity index 52% rename from gemfiles/rack_only.gemfile.lock rename to gemfiles/rack_2.gemfile.lock index 7ad91a0..639ff95 100644 --- a/gemfiles/rack_only.gemfile.lock +++ b/gemfiles/rack_2.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - keycloak_rack (1.1.0) + keycloak_rack (1.2.0) activesupport (>= 4.2) anyway_config (>= 2.1.0, < 3) dry-auto_inject @@ -14,108 +14,136 @@ PATH dry-types (>= 1, < 2) dry-validation jwt (>= 2.2.0, < 3) - rack (>= 2.0.0, < 3) + rack (>= 2.0.0, < 4) zeitwerk (>= 2.0.0, < 3) GEM remote: https://rubygems.org/ specs: - activesupport (7.0.2) + activesupport (7.1.5.1) + base64 + benchmark (>= 0.3) + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) + mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - anyway_config (2.2.3) - ruby-next-core (>= 0.14.0) - appraisal (2.4.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + anyway_config (2.7.2) + ruby-next-core (~> 1.0) + appraisal (2.5.0) bundler rake thor (>= 0.14.0) - ast (2.4.2) - backports (3.23.0) + ast (2.4.3) + backports (3.25.1) + base64 (0.3.0) + benchmark (0.4.1) + bigdecimal (3.2.2) coderay (1.1.3) - concurrent-ruby (1.1.9) - crack (0.4.5) + concurrent-ruby (1.3.5) + connection_pool (2.5.3) + crack (1.0.0) + bigdecimal rexml - diff-lcs (1.5.0) - docile (1.4.0) - dry-auto_inject (0.9.0) - dry-container (>= 0.3.4) - dry-configurable (0.14.0) + diff-lcs (1.6.2) + docile (1.4.1) + drb (2.2.3) + dry-auto_inject (1.0.1) + dry-core (~> 1.0) + zeitwerk (~> 2.6) + dry-configurable (1.2.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-container (0.11.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.6) - dry-container (0.9.0) + dry-core (1.0.2) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (0.7.1) + logger + zeitwerk (~> 2.6) + dry-effects (0.4.1) concurrent-ruby (~> 1.0) - dry-effects (0.2.0) - concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.2) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) + dry-core (~> 1.0) + dry-inflector (~> 1.0) dry-initializer (~> 3.0) - dry-inflector (0.2.1) + zeitwerk (~> 2.6) + dry-inflector (1.1.0) dry-initializer (3.1.1) - dry-logic (1.2.0) + dry-logic (1.5.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.5, >= 0.5) - dry-matcher (0.9.0) - dry-core (~> 0.4, >= 0.4.8) - dry-monads (1.4.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-matcher (1.0.0) + dry-core (~> 1.0, < 2) + dry-monads (1.6.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.7) - dry-schema (1.8.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-schema (1.13.4) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (~> 0.5, >= 0.5) + dry-configurable (~> 1.0, >= 1.0.1) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-logic (~> 1.0) - dry-types (~> 1.5) - dry-struct (1.4.0) - dry-core (~> 0.5, >= 0.5) - dry-types (~> 1.5) + dry-logic (>= 1.4, < 2) + dry-types (>= 1.7, < 2) + zeitwerk (~> 2.6) + dry-struct (1.6.0) + dry-core (~> 1.0, < 2) + dry-types (>= 1.7, < 2) ice_nine (~> 0.11) - dry-types (1.5.1) + zeitwerk (~> 2.6) + dry-types (1.7.2) + bigdecimal (~> 3.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.3) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) - dry-logic (~> 1.0, >= 1.0.2) - dry-validation (1.7.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-logic (~> 1.4) + zeitwerk (~> 2.6) + dry-validation (1.10.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.1) - dry-core (~> 0.5, >= 0.5) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-schema (~> 1.8, >= 1.8.0) + dry-schema (>= 1.12, < 2) + zeitwerk (~> 2.6) factory_bot (6.1.0) activesupport (>= 5.0.0) faker (2.19.0) i18n (>= 1.6, < 2) - hashdiff (1.0.1) - i18n (1.9.1) + hashdiff (1.2.0) + i18n (1.14.7) concurrent-ruby (~> 1.0) ice_nine (0.11.2) - jwt (2.3.0) - method_source (1.0.0) - minitest (5.15.0) - parallel (1.21.0) - parser (3.1.0.0) + jwt (2.10.2) + base64 + logger (1.7.0) + method_source (1.1.0) + minitest (5.25.5) + mutex_m (0.3.0) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.9.0) ast (~> 2.4.1) + racc + prism (1.4.0) pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (4.0.6) + public_suffix (6.0.2) + racc (1.8.1) rack (2.2.3) - rack-test (1.1.0) - rack (>= 1.0, < 3) + rack-test (2.2.0) + rack (>= 1.3) rainbow (3.1.1) - rake (13.0.6) - redcarpet (3.5.1) - regexp_parser (2.2.0) - rexml (3.2.5) + rake (13.3.0) + redcarpet (3.6.1) + regexp_parser (2.11.0) + rexml (3.4.1) rspec (3.10.0) rspec-core (~> 3.10.0) rspec-expectations (~> 3.10.0) @@ -139,49 +167,53 @@ GEM rubocop-ast (>= 1.2.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.15.1) - parser (>= 3.0.1.1) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) rubocop-rake (0.5.1) rubocop rubocop-rspec (2.3.0) rubocop (~> 1.0) rubocop-ast (>= 1.1.0) - ruby-next-core (0.14.1) - ruby-progressbar (1.11.0) + ruby-next-core (1.1.2) + ruby-progressbar (1.13.0) + securerandom (0.3.2) + set (1.1.2) simplecov (0.21.2) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-html (0.12.3) - simplecov_json_formatter (0.1.3) - thor (1.2.1) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) + thor (1.4.0) timecop (0.9.4) - tzinfo (2.0.4) + tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (2.1.0) + unicode-display_width (2.6.0) webmock (3.12.2) addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) yard (0.9.26) - yard-junk (0.0.9) + yard-junk (0.0.10) backports (>= 3.18) + ostruct rainbow yard - zeitwerk (2.5.4) + zeitwerk (2.6.18) PLATFORMS - ruby x86_64-darwin-19 x86_64-linux DEPENDENCIES - appraisal (= 2.4.0) + appraisal (= 2.5.0) factory_bot (~> 6.1.0) faker (= 2.19.0) keycloak_rack! pry (= 0.14.1) - rack-test (= 1.1.0) + rack (>= 2.2, < 3) + rack-test (= 2.2.0) rake (>= 13, < 14) redcarpet rspec (= 3.10.0) @@ -189,6 +221,7 @@ DEPENDENCIES rubocop (= 1.13.0) rubocop-rake (= 0.5.1) rubocop-rspec (= 2.3.0) + set (= 1.1.2) simplecov (= 0.21.2) timecop (= 0.9.4) webmock (= 3.12.2) diff --git a/gemfiles/rack_only.gemfile b/gemfiles/rack_3.gemfile similarity index 77% rename from gemfiles/rack_only.gemfile rename to gemfiles/rack_3.gemfile index 095e660..898b0b1 100644 --- a/gemfiles/rack_only.gemfile +++ b/gemfiles/rack_3.gemfile @@ -2,4 +2,6 @@ source "https://rubygems.org" +gem "rack", ">= 3", "< 4" + gemspec path: "../" diff --git a/gemfiles/rack_3.gemfile.lock b/gemfiles/rack_3.gemfile.lock new file mode 100644 index 0000000..d589169 --- /dev/null +++ b/gemfiles/rack_3.gemfile.lock @@ -0,0 +1,232 @@ +PATH + remote: .. + specs: + keycloak_rack (1.2.0) + activesupport (>= 4.2) + anyway_config (>= 2.1.0, < 3) + dry-auto_inject + dry-container + dry-effects (>= 0.0.1) + dry-initializer + dry-matcher + dry-monads (>= 1.3.5, < 2) + dry-struct (>= 1, < 2) + dry-types (>= 1, < 2) + dry-validation + jwt (>= 2.2.0, < 3) + rack (>= 2.0.0, < 4) + zeitwerk (>= 2.0.0, < 3) + +GEM + remote: https://rubygems.org/ + specs: + activesupport (7.1.5.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + mutex_m + securerandom (>= 0.3) + tzinfo (~> 2.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + anyway_config (2.7.2) + ruby-next-core (~> 1.0) + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.3) + backports (3.25.1) + base64 (0.3.0) + benchmark (0.4.1) + bigdecimal (3.2.2) + coderay (1.1.3) + concurrent-ruby (1.3.5) + connection_pool (2.5.3) + crack (1.0.0) + bigdecimal + rexml + diff-lcs (1.6.2) + docile (1.4.1) + drb (2.2.3) + dry-auto_inject (1.0.1) + dry-core (~> 1.0) + zeitwerk (~> 2.6) + dry-configurable (1.2.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-container (0.11.0) + concurrent-ruby (~> 1.0) + dry-core (1.0.2) + concurrent-ruby (~> 1.0) + logger + zeitwerk (~> 2.6) + dry-effects (0.4.1) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-initializer (~> 3.0) + zeitwerk (~> 2.6) + dry-inflector (1.1.0) + dry-initializer (3.1.1) + dry-logic (1.5.0) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-matcher (1.0.0) + dry-core (~> 1.0, < 2) + dry-monads (1.6.0) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-schema (1.13.4) + concurrent-ruby (~> 1.0) + dry-configurable (~> 1.0, >= 1.0.1) + dry-core (~> 1.0, < 2) + dry-initializer (~> 3.0) + dry-logic (>= 1.4, < 2) + dry-types (>= 1.7, < 2) + zeitwerk (~> 2.6) + dry-struct (1.6.0) + dry-core (~> 1.0, < 2) + dry-types (>= 1.7, < 2) + ice_nine (~> 0.11) + zeitwerk (~> 2.6) + dry-types (1.7.2) + bigdecimal (~> 3.0) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-logic (~> 1.4) + zeitwerk (~> 2.6) + dry-validation (1.10.0) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0, < 2) + dry-initializer (~> 3.0) + dry-schema (>= 1.12, < 2) + zeitwerk (~> 2.6) + factory_bot (6.1.0) + activesupport (>= 5.0.0) + faker (2.19.0) + i18n (>= 1.6, < 2) + hashdiff (1.2.0) + i18n (1.14.7) + concurrent-ruby (~> 1.0) + ice_nine (0.11.2) + jwt (2.10.2) + base64 + logger (1.7.0) + method_source (1.1.0) + minitest (5.25.5) + mutex_m (0.3.0) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.9.0) + ast (~> 2.4.1) + racc + prism (1.4.0) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (6.0.2) + racc (1.8.1) + rack (3.2.0) + rack-test (2.2.0) + rack (>= 1.3) + rainbow (3.1.1) + rake (13.3.0) + redcarpet (3.6.1) + regexp_parser (2.11.0) + rexml (3.4.1) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.2) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-json_expectations (2.2.0) + rspec-mocks (3.10.3) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.3) + rubocop (1.13.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.2.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) + rubocop-rake (0.5.1) + rubocop + rubocop-rspec (2.3.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-next-core (1.1.2) + ruby-progressbar (1.13.0) + securerandom (0.3.2) + set (1.1.2) + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) + thor (1.4.0) + timecop (0.9.4) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unicode-display_width (2.6.0) + webmock (3.12.2) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + yard-junk (0.0.10) + backports (>= 3.18) + ostruct + rainbow + yard + zeitwerk (2.6.18) + +PLATFORMS + x86_64-darwin-19 + x86_64-linux + +DEPENDENCIES + appraisal (= 2.5.0) + factory_bot (~> 6.1.0) + faker (= 2.19.0) + keycloak_rack! + pry (= 0.14.1) + rack (>= 3, < 4) + rack-test (= 2.2.0) + rake (>= 13, < 14) + redcarpet + rspec (= 3.10.0) + rspec-json_expectations (= 2.2.0) + rubocop (= 1.13.0) + rubocop-rake (= 0.5.1) + rubocop-rspec (= 2.3.0) + set (= 1.1.2) + simplecov (= 0.21.2) + timecop (= 0.9.4) + webmock (= 3.12.2) + yard (= 0.9.26) + yard-junk + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/rails_6_0.gemfile.lock b/gemfiles/rails_6_0.gemfile.lock index f7fb755..2c9c921 100644 --- a/gemfiles/rails_6_0.gemfile.lock +++ b/gemfiles/rails_6_0.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - keycloak_rack (1.1.0) + keycloak_rack (1.2.0) activesupport (>= 4.2) anyway_config (>= 2.1.0, < 3) dry-auto_inject @@ -14,7 +14,7 @@ PATH dry-types (>= 1, < 2) dry-validation jwt (>= 2.2.0, < 3) - rack (>= 2.0.0, < 3) + rack (>= 2.0.0, < 4) zeitwerk (>= 2.0.0, < 3) GEM @@ -75,73 +75,83 @@ GEM minitest (~> 5.1) tzinfo (~> 1.1) zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - anyway_config (2.2.3) - ruby-next-core (>= 0.14.0) - appraisal (2.4.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + anyway_config (2.7.2) + ruby-next-core (~> 1.0) + appraisal (2.5.0) bundler rake thor (>= 0.14.0) - ast (2.4.2) - backports (3.23.0) + ast (2.4.3) + backports (3.25.1) + base64 (0.3.0) + bigdecimal (3.2.2) builder (3.2.4) coderay (1.1.3) - concurrent-ruby (1.1.9) - crack (0.4.5) + concurrent-ruby (1.3.5) + crack (1.0.0) + bigdecimal rexml crass (1.0.6) - diff-lcs (1.5.0) - docile (1.4.0) - dry-auto_inject (0.9.0) - dry-container (>= 0.3.4) - dry-configurable (0.14.0) + diff-lcs (1.6.2) + docile (1.4.1) + dry-auto_inject (1.0.1) + dry-core (~> 1.0) + zeitwerk (~> 2.6) + dry-configurable (1.2.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-container (0.11.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.6) - dry-container (0.9.0) + dry-core (1.0.2) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (0.7.1) + logger + zeitwerk (~> 2.6) + dry-effects (0.4.1) concurrent-ruby (~> 1.0) - dry-effects (0.2.0) - concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.2) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) + dry-core (~> 1.0) + dry-inflector (~> 1.0) dry-initializer (~> 3.0) - dry-inflector (0.2.1) + zeitwerk (~> 2.6) + dry-inflector (1.1.0) dry-initializer (3.1.1) - dry-logic (1.2.0) + dry-logic (1.5.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.5, >= 0.5) - dry-matcher (0.9.0) - dry-core (~> 0.4, >= 0.4.8) - dry-monads (1.4.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-matcher (1.0.0) + dry-core (~> 1.0, < 2) + dry-monads (1.6.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.7) - dry-schema (1.8.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-schema (1.13.4) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (~> 0.5, >= 0.5) + dry-configurable (~> 1.0, >= 1.0.1) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-logic (~> 1.0) - dry-types (~> 1.5) - dry-struct (1.4.0) - dry-core (~> 0.5, >= 0.5) - dry-types (~> 1.5) + dry-logic (>= 1.4, < 2) + dry-types (>= 1.7, < 2) + zeitwerk (~> 2.6) + dry-struct (1.6.0) + dry-core (~> 1.0, < 2) + dry-types (>= 1.7, < 2) ice_nine (~> 0.11) - dry-types (1.5.1) + zeitwerk (~> 2.6) + dry-types (1.7.2) + bigdecimal (~> 3.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.3) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) - dry-logic (~> 1.0, >= 1.0.2) - dry-validation (1.7.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-logic (~> 1.4) + zeitwerk (~> 2.6) + dry-validation (1.10.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.1) - dry-core (~> 0.5, >= 0.5) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-schema (~> 1.8, >= 1.8.0) + dry-schema (>= 1.12, < 2) + zeitwerk (~> 2.6) erubi (1.10.0) factory_bot (6.1.0) activesupport (>= 5.0.0) @@ -149,40 +159,41 @@ GEM i18n (>= 1.6, < 2) globalid (1.0.0) activesupport (>= 5.0) - hashdiff (1.0.1) - i18n (1.9.1) + hashdiff (1.2.0) + i18n (1.14.7) concurrent-ruby (~> 1.0) ice_nine (0.11.2) - jwt (2.3.0) + jwt (2.10.2) + base64 + logger (1.7.0) loofah (2.13.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (1.0.2) - method_source (1.0.0) + method_source (1.1.0) mini_mime (1.1.2) - mini_portile2 (2.7.1) - minitest (5.15.0) + minitest (5.25.5) nio4r (2.5.8) - nokogiri (1.13.1) - mini_portile2 (~> 2.7.0) - racc (~> 1.4) nokogiri (1.13.1-x86_64-darwin) racc (~> 1.4) nokogiri (1.13.1-x86_64-linux) racc (~> 1.4) - parallel (1.21.0) - parser (3.1.0.0) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.9.0) ast (~> 2.4.1) + racc + prism (1.4.0) pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (4.0.6) - racc (1.6.0) + public_suffix (6.0.2) + racc (1.8.1) rack (2.2.3) - rack-test (1.1.0) - rack (>= 1.0, < 3) + rack-test (2.2.0) + rack (>= 1.3) rails (6.0.4.4) actioncable (= 6.0.4.4) actionmailbox (= 6.0.4.4) @@ -210,10 +221,10 @@ GEM rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) rainbow (3.1.1) - rake (13.0.6) - redcarpet (3.5.1) - regexp_parser (2.2.0) - rexml (3.2.5) + rake (13.3.0) + redcarpet (3.6.1) + regexp_parser (2.11.0) + rexml (3.4.1) rspec (3.10.0) rspec-core (~> 3.10.0) rspec-expectations (~> 3.10.0) @@ -245,21 +256,23 @@ GEM rubocop-ast (>= 1.2.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.15.1) - parser (>= 3.0.1.1) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) rubocop-rake (0.5.1) rubocop rubocop-rspec (2.3.0) rubocop (~> 1.0) rubocop-ast (>= 1.1.0) - ruby-next-core (0.14.1) - ruby-progressbar (1.11.0) + ruby-next-core (1.1.2) + ruby-progressbar (1.13.0) + set (1.1.2) simplecov (0.21.2) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-html (0.12.3) - simplecov_json_formatter (0.1.3) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) sprockets (4.0.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) @@ -267,12 +280,12 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - thor (1.2.1) + thor (1.4.0) thread_safe (0.3.6) timecop (0.9.4) tzinfo (1.2.9) thread_safe (~> 0.1) - unicode-display_width (2.1.0) + unicode-display_width (2.6.0) webmock (3.12.2) addressable (>= 2.3.6) crack (>= 0.3.2) @@ -281,24 +294,24 @@ GEM websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) yard (0.9.26) - yard-junk (0.0.9) + yard-junk (0.0.10) backports (>= 3.18) + ostruct rainbow yard - zeitwerk (2.5.4) + zeitwerk (2.6.18) PLATFORMS - ruby x86_64-darwin-19 x86_64-linux DEPENDENCIES - appraisal (= 2.4.0) + appraisal (= 2.5.0) factory_bot (~> 6.1.0) faker (= 2.19.0) keycloak_rack! pry (= 0.14.1) - rack-test (= 1.1.0) + rack-test (= 2.2.0) rails (>= 6, < 6.1.0) rake (>= 13, < 14) redcarpet @@ -308,6 +321,7 @@ DEPENDENCIES rubocop (= 1.13.0) rubocop-rake (= 0.5.1) rubocop-rspec (= 2.3.0) + set (= 1.1.2) simplecov (= 0.21.2) timecop (= 0.9.4) webmock (= 3.12.2) diff --git a/gemfiles/rails_6_1.gemfile.lock b/gemfiles/rails_6_1.gemfile.lock index b0cd3c3..ff1b580 100644 --- a/gemfiles/rails_6_1.gemfile.lock +++ b/gemfiles/rails_6_1.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - keycloak_rack (1.1.0) + keycloak_rack (1.2.0) activesupport (>= 4.2) anyway_config (>= 2.1.0, < 3) dry-auto_inject @@ -14,7 +14,7 @@ PATH dry-types (>= 1, < 2) dry-validation jwt (>= 2.2.0, < 3) - rack (>= 2.0.0, < 3) + rack (>= 2.0.0, < 4) zeitwerk (>= 2.0.0, < 3) GEM @@ -79,73 +79,83 @@ GEM minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - anyway_config (2.2.3) - ruby-next-core (>= 0.14.0) - appraisal (2.4.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + anyway_config (2.7.2) + ruby-next-core (~> 1.0) + appraisal (2.5.0) bundler rake thor (>= 0.14.0) - ast (2.4.2) - backports (3.23.0) + ast (2.4.3) + backports (3.25.1) + base64 (0.3.0) + bigdecimal (3.2.2) builder (3.2.4) coderay (1.1.3) - concurrent-ruby (1.1.9) - crack (0.4.5) + concurrent-ruby (1.3.5) + crack (1.0.0) + bigdecimal rexml crass (1.0.6) - diff-lcs (1.5.0) - docile (1.4.0) - dry-auto_inject (0.9.0) - dry-container (>= 0.3.4) - dry-configurable (0.14.0) + diff-lcs (1.6.2) + docile (1.4.1) + dry-auto_inject (1.0.1) + dry-core (~> 1.0) + zeitwerk (~> 2.6) + dry-configurable (1.2.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-container (0.11.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.6) - dry-container (0.9.0) + dry-core (1.0.2) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (0.7.1) + logger + zeitwerk (~> 2.6) + dry-effects (0.4.1) concurrent-ruby (~> 1.0) - dry-effects (0.2.0) - concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.2) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) + dry-core (~> 1.0) + dry-inflector (~> 1.0) dry-initializer (~> 3.0) - dry-inflector (0.2.1) + zeitwerk (~> 2.6) + dry-inflector (1.1.0) dry-initializer (3.1.1) - dry-logic (1.2.0) + dry-logic (1.5.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.5, >= 0.5) - dry-matcher (0.9.0) - dry-core (~> 0.4, >= 0.4.8) - dry-monads (1.4.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-matcher (1.0.0) + dry-core (~> 1.0, < 2) + dry-monads (1.6.0) concurrent-ruby (~> 1.0) - dry-core (~> 0.7) - dry-schema (1.8.0) + dry-core (~> 1.0, < 2) + zeitwerk (~> 2.6) + dry-schema (1.13.4) concurrent-ruby (~> 1.0) - dry-configurable (~> 0.13, >= 0.13.0) - dry-core (~> 0.5, >= 0.5) + dry-configurable (~> 1.0, >= 1.0.1) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-logic (~> 1.0) - dry-types (~> 1.5) - dry-struct (1.4.0) - dry-core (~> 0.5, >= 0.5) - dry-types (~> 1.5) + dry-logic (>= 1.4, < 2) + dry-types (>= 1.7, < 2) + zeitwerk (~> 2.6) + dry-struct (1.6.0) + dry-core (~> 1.0, < 2) + dry-types (>= 1.7, < 2) ice_nine (~> 0.11) - dry-types (1.5.1) + zeitwerk (~> 2.6) + dry-types (1.7.2) + bigdecimal (~> 3.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.3) - dry-core (~> 0.5, >= 0.5) - dry-inflector (~> 0.1, >= 0.1.2) - dry-logic (~> 1.0, >= 1.0.2) - dry-validation (1.7.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-logic (~> 1.4) + zeitwerk (~> 2.6) + dry-validation (1.10.0) concurrent-ruby (~> 1.0) - dry-container (~> 0.7, >= 0.7.1) - dry-core (~> 0.5, >= 0.5) + dry-core (~> 1.0, < 2) dry-initializer (~> 3.0) - dry-schema (~> 1.8, >= 1.8.0) + dry-schema (>= 1.12, < 2) + zeitwerk (~> 2.6) erubi (1.10.0) factory_bot (6.1.0) activesupport (>= 5.0.0) @@ -153,40 +163,41 @@ GEM i18n (>= 1.6, < 2) globalid (1.0.0) activesupport (>= 5.0) - hashdiff (1.0.1) - i18n (1.9.1) + hashdiff (1.2.0) + i18n (1.14.7) concurrent-ruby (~> 1.0) ice_nine (0.11.2) - jwt (2.3.0) + jwt (2.10.2) + base64 + logger (1.7.0) loofah (2.13.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (1.0.2) - method_source (1.0.0) + method_source (1.1.0) mini_mime (1.1.2) - mini_portile2 (2.7.1) - minitest (5.15.0) + minitest (5.25.5) nio4r (2.5.8) - nokogiri (1.13.1) - mini_portile2 (~> 2.7.0) - racc (~> 1.4) nokogiri (1.13.1-x86_64-darwin) racc (~> 1.4) nokogiri (1.13.1-x86_64-linux) racc (~> 1.4) - parallel (1.21.0) - parser (3.1.0.0) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.9.0) ast (~> 2.4.1) + racc + prism (1.4.0) pry (0.14.1) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (4.0.6) - racc (1.6.0) + public_suffix (6.0.2) + racc (1.8.1) rack (2.2.3) - rack-test (1.1.0) - rack (>= 1.0, < 3) + rack-test (2.2.0) + rack (>= 1.3) rails (6.1.4.4) actioncable (= 6.1.4.4) actionmailbox (= 6.1.4.4) @@ -214,10 +225,10 @@ GEM rake (>= 0.13) thor (~> 1.0) rainbow (3.1.1) - rake (13.0.6) - redcarpet (3.5.1) - regexp_parser (2.2.0) - rexml (3.2.5) + rake (13.3.0) + redcarpet (3.6.1) + regexp_parser (2.11.0) + rexml (3.4.1) rspec (3.10.0) rspec-core (~> 3.10.0) rspec-expectations (~> 3.10.0) @@ -249,21 +260,23 @@ GEM rubocop-ast (>= 1.2.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.15.1) - parser (>= 3.0.1.1) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) rubocop-rake (0.5.1) rubocop rubocop-rspec (2.3.0) rubocop (~> 1.0) rubocop-ast (>= 1.1.0) - ruby-next-core (0.14.1) - ruby-progressbar (1.11.0) + ruby-next-core (1.1.2) + ruby-progressbar (1.13.0) + set (1.1.2) simplecov (0.21.2) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-html (0.12.3) - simplecov_json_formatter (0.1.3) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) sprockets (4.0.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) @@ -271,11 +284,11 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - thor (1.2.1) + thor (1.4.0) timecop (0.9.4) - tzinfo (2.0.4) + tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (2.1.0) + unicode-display_width (2.6.0) webmock (3.12.2) addressable (>= 2.3.6) crack (>= 0.3.2) @@ -284,24 +297,24 @@ GEM websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) yard (0.9.26) - yard-junk (0.0.9) + yard-junk (0.0.10) backports (>= 3.18) + ostruct rainbow yard - zeitwerk (2.5.4) + zeitwerk (2.6.18) PLATFORMS - ruby x86_64-darwin-19 x86_64-linux DEPENDENCIES - appraisal (= 2.4.0) + appraisal (= 2.5.0) factory_bot (~> 6.1.0) faker (= 2.19.0) keycloak_rack! pry (= 0.14.1) - rack-test (= 1.1.0) + rack-test (= 2.2.0) rails (>= 6.1.0, < 6.2.0) rake (>= 13, < 14) redcarpet @@ -311,6 +324,7 @@ DEPENDENCIES rubocop (= 1.13.0) rubocop-rake (= 0.5.1) rubocop-rspec (= 2.3.0) + set (= 1.1.2) simplecov (= 0.21.2) timecop (= 0.9.4) webmock (= 3.12.2) diff --git a/keycloak_rack.gemspec b/keycloak_rack.gemspec index f131c84..ac8e051 100644 --- a/keycloak_rack.gemspec +++ b/keycloak_rack.gemspec @@ -31,14 +31,14 @@ Gem::Specification.new do |spec| spec.add_dependency "dry-types", ">= 1", "< 2" spec.add_dependency "dry-validation" spec.add_dependency "jwt", ">= 2.2.0", "< 3" - spec.add_dependency "rack", ">= 2.0.0", "< 3" + spec.add_dependency "rack", ">= 2.0.0", "< 4" spec.add_dependency "zeitwerk", ">= 2.0.0", "< 3" - spec.add_development_dependency "appraisal", "2.4.0" + spec.add_development_dependency "appraisal", "2.5.0" spec.add_development_dependency "factory_bot", "~> 6.1.0" spec.add_development_dependency "faker", "2.19.0" spec.add_development_dependency "pry", "0.14.1" - spec.add_development_dependency "rack-test", "1.1.0" + spec.add_development_dependency "rack-test", "2.2.0" spec.add_development_dependency "rake", ">= 13", "< 14" spec.add_development_dependency "redcarpet" spec.add_development_dependency "rspec", "3.10.0" @@ -46,11 +46,12 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rubocop", "1.13.0" spec.add_development_dependency "rubocop-rake", "0.5.1" spec.add_development_dependency "rubocop-rspec", "2.3.0" + spec.add_development_dependency "set", "1.1.2" spec.add_development_dependency "simplecov", "0.21.2" spec.add_development_dependency "timecop", "0.9.4" spec.add_development_dependency "webmock", "3.12.2" spec.add_development_dependency "yard", "0.9.26" spec.add_development_dependency "yard-junk" - spec.required_ruby_version = ">= 2.7.0" + spec.required_ruby_version = ">= 3.0.0" end diff --git a/lib/keycloak_rack/read_token.rb b/lib/keycloak_rack/read_token.rb index 14ae9d1..a490cda 100644 --- a/lib/keycloak_rack/read_token.rb +++ b/lib/keycloak_rack/read_token.rb @@ -10,7 +10,7 @@ class ReadToken include Import[config: "keycloak-rack.config"] # The pattern to match bearer tokens with. - BEARER_TOKEN = /\ABearer (?.+)\z/i.freeze + BEARER_TOKEN = /\ABearer (?.+)\z/i # @param [Hash, #[]] env # @return [Dry::Monads::Success(String)] when a token is found diff --git a/lib/keycloak_rack/version.rb b/lib/keycloak_rack/version.rb index d9a94d5..2a5f0ec 100644 --- a/lib/keycloak_rack/version.rb +++ b/lib/keycloak_rack/version.rb @@ -2,5 +2,5 @@ module KeycloakRack # Gem version - VERSION = "1.1.1" + VERSION = "1.2.0" end diff --git a/spec/keycloak_rack/wrap_token_spec.rb b/spec/keycloak_rack/wrap_token_spec.rb new file mode 100644 index 0000000..04c1ca5 --- /dev/null +++ b/spec/keycloak_rack/wrap_token_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +RSpec.describe KeycloakRack::WrapToken do + let(:operation) { described_class.new } + + context "when providing invalid values" do + it "fails correctly with nil values" do + expect(operation.(nil, nil)).to be_failure + end + + it "fails correctly with empty hashes" do + expect(operation.({}, {})).to be_failure + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2ba09e6..0bee0c7 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,7 +12,9 @@ require "dry/container/stub" require "factory_bot" require "faker" +require "logger" require "pry" +require "rack/builder" require "rack/test" require "rspec/json_expectations" require "timecop" @@ -27,7 +29,7 @@ require "keycloak_rack" -Dir[File.join(__dir__, "support/**/*.rb")].sort.each { |f| require f } +Dir[File.join(__dir__, "support/**/*.rb")].each { |f| require f } RSpec.configure do |config| config.include Anyway::Testing::Helpers