diff --git a/.aiignore b/.aiignore new file mode 100644 index 00000000..df6bd8b7 --- /dev/null +++ b/.aiignore @@ -0,0 +1,19 @@ +# An .aiignore file follows the same syntax as a .gitignore file. +# .gitignore documentation: https://git-scm.com/docs/gitignore + +# you can ignore files +.DS_Store +*.log +*.tmp + +# or folders +.devcontainer/ +.qlty/ +.yardoc/ +dist/ +build/ +out/ +coverage/ +docs/ +pkg/ +results/ diff --git a/.env.local.example b/.env.local.example index f07a00ae..dd5423f9 100644 --- a/.env.local.example +++ b/.env.local.example @@ -11,4 +11,17 @@ export AUTOGEN_FIXTURE_CLEANUP=false # autogenerated gem fixture cleanup after e export GIT_HOOK_FOOTER_APPEND=false export GIT_HOOK_FOOTER_APPEND_DEBUG=false export GIT_HOOK_FOOTER_SENTINEL="⚡️ A message from a fellow meat-based-AI ⚡️" -export GITHUB_TOKEN= + +# Tokens used by ci:act and CI helpers for reading workflow/pipeline status via APIs +# GitHub (either GITHUB_TOKEN or GH_TOKEN will be used; fine-grained recommended) +# - Scope/permissions: For fine-grained tokens, grant repository access (Read) and Actions: Read +# - For classic tokens, public repos need no scopes; private repos typically require repo +export GITHUB_TOKEN= +# Alternatively: +# export GH_TOKEN= + +# GitLab (either GITLAB_TOKEN or GL_TOKEN will be used) +# - Scope: read_api is sufficient to read pipelines +export GITLAB_TOKEN= +# Alternatively: +# export GL_TOKEN= diff --git a/.git-hooks/commit-msg b/.git-hooks/commit-msg index cd918f6b..750c5bb1 100755 --- a/.git-hooks/commit-msg +++ b/.git-hooks/commit-msg @@ -1,21 +1,24 @@ #!/usr/bin/env ruby # vim: set syntax=ruby -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) - -require "rubygems" -require "bundler/setup" - -# External gems -require "gitmoji/regex" +# Do not rely on Bundler; allow running outside a Bundler context +begin + require "rubygems" +rescue LoadError + # continue +end -full_text = File.read(ARGV[0]) -# Is the first character a GitMoji? -gitmoji_index = full_text =~ Gitmoji::Regex::REGEX -if gitmoji_index == 0 - exit 0 -else - denied = < e + warn("gitmoji-regex gem not found: #{e.class}: #{e.message}.\n\tSkipping gitmoji check and allowing commit to proceed.\n\tRecommendation: add 'gitmoji-regex' to your development dependencies to enable this check.") + exit 0 end diff --git a/.git-hooks/prepare-commit-msg b/.git-hooks/prepare-commit-msg index 48c75470..c6a15570 100755 --- a/.git-hooks/prepare-commit-msg +++ b/.git-hooks/prepare-commit-msg @@ -11,8 +11,7 @@ PROJECT_ROOT="$(CDPATH= cd -- "$(dirname -- "$0")"/.. && pwd)" # One of the things .envrc needs to do is add $PROJECT_ROOT/bin/ to the path. # You should have this line at the top of .envrc # PATH_add bin -# NOTE: this project needs to also add exe as well, -# but other libraries won't generally need to do that. +# NOTE: If this project ships exe scripts it should also add that. if command -v direnv >/dev/null 2>&1; then exec direnv exec "$PROJECT_ROOT" "kettle-commit-msg" "$@" else diff --git a/.github/workflows/current.yml b/.github/workflows/current.yml index aca52ba3..72e44fe1 100644 --- a/.github/workflows/current.yml +++ b/.github/workflows/current.yml @@ -65,9 +65,11 @@ jobs: steps: - name: Checkout + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: actions/checkout@v5 - name: Setup Ruby & RubyGems + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} @@ -79,8 +81,11 @@ jobs: # We need to do this first to get appraisal installed. # NOTE: This does not use the primary Gemfile at all. - name: Install Root Appraisal + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }} + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle - name: Tests for ${{ matrix.ruby }}@${{ matrix.appraisal }} via ${{ matrix.exec_cmd }} + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} diff --git a/.github/workflows/current-runtime-heads.yml b/.github/workflows/dep-heads.yml similarity index 68% rename from .github/workflows/current-runtime-heads.yml rename to .github/workflows/dep-heads.yml index eb769656..f6915689 100644 --- a/.github/workflows/current-runtime-heads.yml +++ b/.github/workflows/dep-heads.yml @@ -29,18 +29,19 @@ concurrency: jobs: test: - name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }} if: "!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')" + name: Specs ${{ matrix.ruby }}@${{ matrix.appraisal }}${{ matrix.name_extra || '' }} runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} env: # $BUNDLE_GEMFILE must be set at job level, so it is set for all steps BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.gemfile }}.gemfile strategy: + fail-fast: true matrix: include: # Ruby 3.4 - ruby: "ruby" - appraisal: "current-runtime-heads" + appraisal: "dep-heads" exec_cmd: "rake test" gemfile: "Appraisal.root" rubygems: latest @@ -50,7 +51,7 @@ jobs: # (according to documentation: targets Ruby 3.3 compatibility) # (according to runtime: targets Ruby 3.2 compatibility) - ruby: "truffleruby" - appraisal: "current-runtime-heads" + appraisal: "dep-heads" exec_cmd: "rake test" gemfile: "Appraisal.root" rubygems: default @@ -58,7 +59,7 @@ jobs: # jruby-10.0 (targets Ruby 3.4 compatibility) - ruby: "jruby" - appraisal: "current-runtime-heads" + appraisal: "dep-heads" exec_cmd: "rake test" gemfile: "Appraisal.root" rubygems: default @@ -66,9 +67,11 @@ jobs: steps: - name: Checkout + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: actions/checkout@v5 - name: Setup Ruby & RubyGems + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} @@ -79,9 +82,24 @@ jobs: # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root) # We need to do this first to get appraisal installed. # NOTE: This does not use the primary Gemfile at all. - - name: Install Root Appraisal + - name: "Install Root Appraisal" + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle - - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }} + + - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} + id: bundleAttempt1 + run: bundle exec appraisal ${{ matrix.appraisal }} bundle + # Continue to the next step on failure + continue-on-error: true + + # Effectively an automatic retry of the previous step. + - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" + # If bundleAttempt1 failed, try again here; Otherwise skip. + if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} + id: bundleAttempt2 run: bundle exec appraisal ${{ matrix.appraisal }} bundle + - name: Tests for ${{ matrix.ruby }}@${{ matrix.appraisal }} via ${{ matrix.exec_cmd }} + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} diff --git a/.github/workflows/heads.yml b/.github/workflows/heads.yml index e2046e66..f8c92d16 100644 --- a/.github/workflows/heads.yml +++ b/.github/workflows/heads.yml @@ -64,9 +64,11 @@ jobs: steps: - name: Checkout + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: actions/checkout@v5 - name: Setup Ruby & RubyGems + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} @@ -78,9 +80,11 @@ jobs: # We need to do this first to get appraisal installed. # NOTE: This does not use the primary Gemfile at all. - name: "Install Root Appraisal" + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} id: bundleAttempt1 run: bundle exec appraisal ${{ matrix.appraisal }} bundle # Continue to the next step on failure @@ -88,10 +92,11 @@ jobs: # Effectively an automatic retry of the previous step. - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" - id: bundleAttempt2 # If bundleAttempt1 failed, try again here; Otherwise skip. - if: steps.bundleAttempt1.outcome == 'failure' + if: ${{ steps.bundleAttempt1.outcome == 'failure' && !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} + id: bundleAttempt2 run: bundle exec appraisal ${{ matrix.appraisal }} bundle - name: Tests for ${{ matrix.ruby }}@${{ matrix.appraisal }} via ${{ matrix.exec_cmd }} + if: ${{ !(env.ACT && startsWith(matrix.ruby, 'jruby')) }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} diff --git a/.github/workflows/jruby.yml b/.github/workflows/jruby.yml index 99ea13d9..26cc8f3e 100644 --- a/.github/workflows/jruby.yml +++ b/.github/workflows/jruby.yml @@ -46,9 +46,11 @@ jobs: steps: - name: Checkout + if: ${{ !env.ACT }} uses: actions/checkout@v5 - name: Setup Ruby & RubyGems + if: ${{ !env.ACT }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} @@ -60,8 +62,11 @@ jobs: # We need to do this first to get appraisal installed. # NOTE: This does not use the primary Gemfile at all. - name: Install Root Appraisal + if: ${{ !env.ACT }} run: bundle - name: Appraisal for ${{ matrix.appraisal }} + if: ${{ !env.ACT }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }} + if: ${{ !env.ACT }} run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }} diff --git a/.gitignore b/.gitignore index 83000f2c..5fb6e270 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ Appraisal.*.gemfile.lock /coverage/ /spec/reports/ /results/ +.output.txt # Documentation /.yardoc/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1d4f5398..3390138a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,31 @@ +# You can override the included template(s) by including variable overrides +# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings +# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings +# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings +# Container Scanning customization: https://docs.gitlab.com/ee/user/application_security/container_scanning/#customizing-the-container-scanning-settings +# Note that environment variables can be set in several places +# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence +#stages: +# - test +#sast: +# stage: test +#include: +# - template: Security/SAST.gitlab-ci.yml + default: - image: ruby:3.2 + image: ruby variables: BUNDLE_INSTALL_FLAGS: "--quiet --jobs=$(nproc) --retry=3" BUNDLE_FROZEN: "false" # No lockfile! + BUNDLE_GEMFILE: Appraisal.root.gemfile K_SOUP_COV_DEBUG: true K_SOUP_COV_DO: true K_SOUP_COV_HARD: true K_SOUP_COV_MIN_BRANCH: 100 K_SOUP_COV_MIN_LINE: 100 K_SOUP_COV_VERBOSE: true - K_SOUP_COV_FORMATTERS: "html,xml,rcov,lcov,json,tty" + K_SOUP_COV_FORMATTERS: "tty" K_SOUP_COV_MULTI_FORMATTERS: true K_SOUP_COV_COMMAND_NAME: "RSpec Coverage" @@ -18,7 +33,7 @@ workflow: rules: # For merge requests, create a pipeline. - if: '$CI_MERGE_REQUEST_IID' - # For default branch, create a pipeline (this includes on schedules, pushes, merges, etc.). + # For the ` main ` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # For tags, create a pipeline. - if: '$CI_COMMIT_TAG' @@ -27,10 +42,25 @@ workflow: image: ruby:${RUBY_VERSION} stage: test script: - - gem update --silent --system - - bundle config --local path vendor + # || true so we don't fail here, because it'll probably work even if the gem update fails + - gem update --silent --system > /dev/null 2>&1 || true + - mkdir -p vendor/bundle + - bundle config set path 'vendor/bundle' + - chmod +t -R vendor/bundle + - chmod o-w -R vendor/bundle + # Setup appraisal2 - bundle install - - bundle exec rake + # Bundle a specific appraisal + - bundle exec appraisal unlocked_deps bundle install + # Light smoke test + - bundle exec appraisal unlocked_deps bin/rake --tasks + # Run tests, skipping those that won't work in CI + - > + bundle exec appraisal unlocked_deps \ + bin/rspec spec \ + --tag \~ci_skip \ + --format progress \ + --format RspecJunitFormatter cache: key: ${CI_JOB_IMAGE} paths: @@ -40,13 +70,28 @@ workflow: image: ruby:${RUBY_VERSION} stage: test script: - # Because we support EOL Ruby still... - - gem install rubygems-update -v ${RUBYGEMS_VERSION} + # RUBYGEMS_VERSION because we support EOL Ruby still... + # || true so we don't fail here, because it'll probably work even if the gem update fails + - gem install rubygems-update -v ${RUBYGEMS_VERSION} || true # Actually updates both RubyGems and Bundler! - update_rubygems - - bundle config --local path vendor + - mkdir -p vendor/bundle + - bundle config set path 'vendor/bundle' + - chmod +t -R vendor/bundle + - chmod o-w -R vendor/bundle + # Setup appraisal2 - bundle install - - bundle exec rake test + # Bundle a specific appraisal + - bundle exec appraisal ${APPRAISAL} bundle install + # Light smoke test + - bundle exec appraisal ${APPRAISAL} bin/rake --tasks + # Run tests, skipping those that won't work in CI + - > + bundle exec appraisal unlocked_deps \ + bin/rspec spec \ + --tag \~ci_skip \ + --format progress \ + --format RspecJunitFormatter cache: key: ${CI_JOB_IMAGE} paths: @@ -54,7 +99,6 @@ workflow: ruby-current: variables: - BUNDLE_GEMFILE: gemfiles/omnibus.gemfile K_SOUP_COV_DO: true <<: *test_definition-current parallel: @@ -64,7 +108,7 @@ ruby-current: ruby-ruby3_1: variables: RUBYGEMS_VERSION: "3.6.9" - BUNDLE_GEMFILE: gemfiles/vanilla.gemfile + APPRAISAL: ruby_3_1 K_SOUP_COV_DO: false <<: *test_definition-legacy parallel: @@ -74,7 +118,7 @@ ruby-ruby3_1: ruby-ruby3_0: variables: RUBYGEMS_VERSION: "3.5.23" - BUNDLE_GEMFILE: gemfiles/vanilla.gemfile + APPRAISAL: ruby_3_0 K_SOUP_COV_DO: false <<: *test_definition-legacy parallel: @@ -84,7 +128,7 @@ ruby-ruby3_0: ruby-ruby2_7: variables: RUBYGEMS_VERSION: "3.4.22" - BUNDLE_GEMFILE: gemfiles/vanilla.gemfile + APPRAISAL: ruby_2_7 K_SOUP_COV_DO: false <<: *test_definition-legacy parallel: diff --git a/.idea/oauth2.iml b/.idea/oauth2.iml index 5c3d6b0d..046be677 100755 --- a/.idea/oauth2.iml +++ b/.idea/oauth2.iml @@ -23,10 +23,9 @@ - + - @@ -51,7 +50,7 @@ - + @@ -59,8 +58,8 @@ - + @@ -70,11 +69,10 @@ - - + @@ -83,13 +81,13 @@ - + - + @@ -102,7 +100,7 @@ - + @@ -131,7 +129,7 @@ - + diff --git a/.junie/guidelines.md b/.junie/guidelines.md index 949c89b7..ca783b2d 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -13,7 +13,7 @@ This document captures project-specific knowledge to streamline setup, testing, - See CONTRIBUTING.md for details on how to set up your local environment. - Ruby and Bundler - Runtime supports very old Rubies (>= 2.2), but development tooling targets >= 2.3 because of CI/setup-ruby and dev dependencies. - - Use a recent Ruby (>= 3.1 recommended) for fastest setup and to exercise modern coverage behavior. + - Use a recent Ruby (>= 3.4 recommended) for fastest setup and to exercise modern coverage behavior. - Install dependencies via Bundler in project root: - bundle install - Rake tasks (preferred entry points) @@ -82,7 +82,7 @@ This document captures project-specific knowledge to streamline setup, testing, - During a spec run, the presence of output about missing activation keys is often expected, since it is literally what this library is for. It only indicates a failure if the spec expected all activation keys to be present, and not all specs do. - Adding new tests (guidelines) - Organize specs by class/module. Do not create per-task umbrella spec files; add examples to the existing spec for the class/module under test, or create a new spec file for that class/module if one does not exist. Only create a standalone scenario spec when it intentionally spans multiple classes for an integration/benchmark scenario (e.g., bench_integration_spec), and name it accordingly. - - Spec file names must map to a real class or module under lib/ (mirror the path). Do not introduce specs for non-existent classes or ad-hoc names (e.g., avoid template_helpers_replacements_spec.rb when testing OAuth2::TemplateHelpers; add those examples to template_helpers_spec.rb). + - Spec file names must map to a real class or module under lib/ (mirror the path). Do not introduce specs for non-existent classes or ad-hoc names (e.g., avoid template_helpers_replacements_spec.rb when testing Oauth2::TemplateHelpers; add those examples to template_helpers_spec.rb). - REQUIRED: Provide unit tests for every class, module, constant, and public method. Place them in spec/ mirroring the path under lib/. When a file under lib/ is added or changed, ensure a corresponding spec file exists/updated for it. - Add tests for all public methods and add contexts for variations of their arguments, and arity. - This repository targets near-100% coverage of its public API; when you add new public methods, rake tasks to a rakelib, or config behavior, add or update specs accordingly. @@ -133,3 +133,7 @@ Notes - Coverage reports: NEVER review the HTML report. Use JSON (preferred), XML, LCOV, or RCOV. For this project, always run tests with K_SOUP_COV_FORMATTERS set to "json". - Do NOT modify .envrc in tasks; when running tests locally or in scripts, manually prefix each run, e.g.: K_SOUP_COV_FORMATTERS="json" bin/rspec - For all the kettle-soup-cover options, see .envrc and find the K_SOUP_COV_* env vars. + +Important documentation rules +- Do NOT edit files under docs/ manually; they are generated by `bundle exec rake yard` as part of the default rake task. +- Clarification: Executable scripts provided by this gem (exe/* and installed binstubs) work when the gem is installed as a system gem (gem install oauth2). However, the Rake tasks provided by this gem require oauth2 to be declared as a development dependency in the host project's Gemfile and loaded in the project's Rakefile. diff --git a/Appraisals b/Appraisals index 9c6dd968..51465fb7 100644 --- a/Appraisals +++ b/Appraisals @@ -24,28 +24,25 @@ appraise "unlocked_deps" do eval_gemfile "modular/documentation.gemfile" eval_gemfile "modular/style.gemfile" eval_gemfile "modular/optional.gemfile" + eval_gemfile "modular/x_std_libs.gemfile" end # Used for head (nightly) releases of ruby, truffleruby, and jruby. # Split into discrete appraisals if one of them needs a dependency locked discretely. appraise "head" do - gem "mutex_m", ">= 0.2" - gem "stringio", ">= 3.0" gem "benchmark", "~> 0.4", ">= 0.4.1" eval_gemfile "modular/runtime_heads.gemfile" end -# Test current Rubies against head versions of runtime dependencies -appraise "current-runtime-heads" do - gem "mutex_m", ">= 0.2" - gem "stringio", ">= 3.0" - eval_gemfile "modular/runtime_heads.gemfile" -end - # Used for current releases of ruby, truffleruby, and jruby. # Split into discrete appraisals if one of them needs a dependency locked discretely. appraise "current" do - eval_gemfile "modular/latest.gemfile" + eval_gemfile "modular/x_std_libs.gemfile" +end + +# Test current Rubies against head versions of runtime dependencies +appraise "dep-heads" do + eval_gemfile "modular/runtime_heads.gemfile" end appraise "ruby-2-3-hashie_v0" do @@ -55,6 +52,7 @@ appraise "ruby-2-3-hashie_v0" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-3-hashie_v1" do @@ -64,6 +62,7 @@ appraise "ruby-2-3-hashie_v1" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-3-hashie_v2" do @@ -73,6 +72,7 @@ appraise "ruby-2-3-hashie_v2" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-3-hashie_v3" do @@ -82,6 +82,7 @@ appraise "ruby-2-3-hashie_v3" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-3-hashie_v4" do @@ -91,6 +92,7 @@ appraise "ruby-2-3-hashie_v4" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-3-hashie_v5" do @@ -100,6 +102,7 @@ appraise "ruby-2-3-hashie_v5" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_2.gemfile" + eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile" end appraise "ruby-2-4" do @@ -109,6 +112,7 @@ appraise "ruby-2-4" do eval_gemfile "modular/logger_v1_2.gemfile" eval_gemfile "modular/multi_xml_v0_5.gemfile" eval_gemfile "modular/rack_v1_6.gemfile" + eval_gemfile "modular/x_std_libs/r2.4/libs.gemfile" end appraise "ruby-2-5" do @@ -118,78 +122,71 @@ appraise "ruby-2-5" do eval_gemfile "modular/logger_v1_5.gemfile" eval_gemfile "modular/multi_xml_v0_6.gemfile" eval_gemfile "modular/rack_v2.gemfile" + eval_gemfile "modular/x_std_libs/r2.6/libs.gemfile" end appraise "ruby-2-6" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v3.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_5.gemfile" eval_gemfile "modular/multi_xml_v0_6.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r2.6/libs.gemfile" end appraise "ruby-2-7" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v4.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_6.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile" end appraise "ruby-3-0" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_6.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile" end appraise "ruby-3-1" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_6.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile" end appraise "ruby-3-2" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_7.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3/libs.gemfile" end appraise "ruby-3-3" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" eval_gemfile "modular/jwt_v2.gemfile" eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_7.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3/libs.gemfile" end # Only run security audit on the latest version of Ruby appraise "audit" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/audit.gemfile" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" @@ -197,12 +194,11 @@ appraise "audit" do eval_gemfile "modular/logger_v1_7.gemfile" eval_gemfile "modular/multi_xml_v0_7.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3/libs.gemfile" end # Only run coverage on the latest version of Ruby appraise "coverage" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/coverage.gemfile" eval_gemfile "modular/faraday_v2.gemfile" eval_gemfile "modular/hashie_v5.gemfile" @@ -211,30 +207,11 @@ appraise "coverage" do eval_gemfile "modular/multi_xml_v0_7.gemfile" eval_gemfile "modular/optional.gemfile" eval_gemfile "modular/rack_v3.gemfile" + eval_gemfile "modular/x_std_libs/r3/libs.gemfile" end # Only run linter on the latest version of Ruby (but, in support of oldest supported Ruby version) appraise "style" do - gem "mutex_m", "~> 0.2" - gem "stringio", "~> 3.0" eval_gemfile "modular/style.gemfile" -end - -### Above: Used by GitHub CI Workflows ### -### Below: Used by GitLab CI Pipelines ### - -appraise "omnibus" do - eval_gemfile "modular/audit.gemfile" - eval_gemfile "modular/coverage.gemfile" - eval_gemfile "modular/documentation.gemfile" - eval_gemfile "modular/faraday_v2.gemfile" - eval_gemfile "modular/hashie_v5.gemfile" - eval_gemfile "modular/jwt_v2.gemfile" - eval_gemfile "modular/logger_v1_7.gemfile" - eval_gemfile "modular/multi_xml_v0_7.gemfile" - eval_gemfile "modular/rack_v3.gemfile" - eval_gemfile "modular/style.gemfile" -end - -appraise "vanilla" do + eval_gemfile "modular/x_std_libs/r3/libs.gemfile" end diff --git a/CHANGELOG.md b/CHANGELOG.md index fc9fcde4..252a3fba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,738 +18,30 @@ Please file a bug if you notice a violation of semantic versioning. ## [Unreleased] ### Added -- .env.local.example for contributor happiness -- note lack of builds for JRuby 9.2, 9.3 & Truffleruby 22.3, 23.0 - - [actions/runner - issues/2347][GHA-continue-on-error-ui] - - [community/discussions/15452][GHA-allow-failure] ### Changed ### Deprecated ### Removed ### Fixed -- point badge to the correct workflow for Ruby 2.3 (caboose.yml) ### Security -[GHA-continue-on-error-ui]: https://github.com/actions/runner/issues/2347 -[GHA-allow-failure]: https://github.com/orgs/community/discussions/15452 - -## [2.0.14] - 2025-08-31 -- TAG: [v2.0.14][2.0.14t] -- COVERAGE: 100.00% -- 519/519 lines in 14 files -- BRANCH COVERAGE: 100.00% -- 174/174 branches in 14 files -- 90.48% documented -### Added -- improved documentation by @pboling -- [gh665][gh665] - Document Mutual TLS (mTLS) usage with example in README (connection_opts.ssl client_cert/client_key and auth_scheme: :tls_client_auth) by @pboling -- [gh666][gh666] - Document usage of flat query params using Faraday::FlatParamsEncoder, with example URI, in README by @pboling - - Spec: verify flat params are preserved with Faraday::FlatParamsEncoder (skips on Faraday without FlatParamsEncoder) -- [gh662][gh662] - documentation notes in code comments and README highlighting OAuth 2.1 differences, with references, by @pboling - - PKCE required for auth code, - - exact redirect URI match, - - implicit/password grants omitted, - - avoid bearer tokens in query, - - refresh token guidance for public clients, - - simplified client definitions -- [gh663][gh663] - document how to implement an OIDC client with this gem in OIDC.md by @pboling - - also, list libraries built on top of the oauth2 gem that implement OIDC -- [gh664][gh664] - README: Add example for JHipster UAA (Spring Cloud) password grant, converted from Postman/Net::HTTP by @pboling - -[gh662]: https://github.com/ruby-oauth/oauth2/pull/662 -[gh663]: https://github.com/ruby-oauth/oauth2/pull/663 -[gh664]: https://github.com/ruby-oauth/oauth2/pull/664 -[gh665]: https://github.com/ruby-oauth/oauth2/pull/665 -[gh666]: https://github.com/ruby-oauth/oauth2/pull/666 - -## [2.0.13] - 2025-08-30 -- TAG: [v2.0.13][2.0.13t] -- COVERAGE: 100.00% -- 519/519 lines in 14 files -- BRANCH COVERAGE: 100.00% -- 174/174 branches in 14 files -- 90.48% documented -### Added -- [gh656][gh656] - Support revocation with URL-encoded parameters -- [gh660][gh660] - Inline yard documentation by @pboling -- [gh660][gh660] - Complete RBS types documentation by @pboling -- [gh660][gh660]- (more) Comprehensive documentation / examples by @pboling -- [gh657][gh657] - Updated documentation for org-rename by @pboling -- More funding links by @Aboling0 -- Documentation: Added docs/OIDC.md with OIDC 1.0 overview, example, and references -### Changed -- Upgrade Code of Conduct to Contributor Covenant 2.1 by @pboling -- [gh660][gh660] - Shrink post-install message by 4 lines by @pboling -### Fixed -- [gh660][gh660] - Links in README (including link to HEAD documentation) by @pboling -### Security - -[gh660]: https://github.com/ruby-oauth/oauth2/pull/660 -[gh657]: https://github.com/ruby-oauth/oauth2/pull/657 -[gh656]: https://github.com/ruby-oauth/oauth2/pull/656 - -## [2.0.12] - 2025-05-31 -- TAG: [v2.0.12][2.0.12t] -- Line Coverage: 100.0% (520 / 520) -- Branch Coverage: 100.0% (174 / 174) -- 80.00% documented -### Added -- [gh652][gh652] - Support IETF rfc7515 JSON Web Signature - JWS by @mridang - - Support JWT `kid` for key discovery and management -- More Documentation by @pboling - - Documented Serialization Extensions - - Added Gatzo.com FLOSS logo by @Aboling0, CC BY-SA 4.0 -- Documentation site @ https://oauth2.galtzo.com now complete -### Changed -- Updates to gemspec (email, funding url, post install message) -### Deprecated -### Removed -### Fixed -- Documentation Typos by @pboling -### Security - -[gh652]: https://github.com/oauth-xx/oauth2/pull/652 -[gh652]: https://github.com/ruby-oauth/oauth2/pull/652 - -## [2.0.11] - 2025-05-23 -- TAG: [v2.0.11][2.0.11t] -- COVERAGE: 100.00% -- 518/518 lines in 14 files -- BRANCH COVERAGE: 100.00% -- 172/172 branches in 14 files -- 80.00% documented -### Added -- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - `:snaky_hash_klass` option (@pboling) -- [gh651](https://github.com/ruby-oauth/oauth2/pull/651) - `:snaky_hash_klass` option (@pboling) -- More documentation -- Codeberg as ethical mirror (@pboling) - - https://codeberg.org/oauth-xx/oauth2 - - https://codeberg.org/ruby-oauth/oauth2 -- Don't check for cert if SKIP_GEM_SIGNING is set (@pboling) -- All runtime deps, including oauth-xx sibling gems, are now tested against HEAD (@pboling) -- All runtime deps, including ruby-oauth sibling gems, are now tested against HEAD (@pboling) -- YARD config, GFM compatible with relative file links (@pboling) -- Documentation site on GitHub Pages (@pboling) - - [oauth2.galtzo.com](https://oauth2.galtzo.com) -- [!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) -- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Mock OAuth2 server for testing (@pboling) -- [!649](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/649) - Test compatibility with all key minor versions of Hashie v0, v1, v2, v3, v4, v5, HEAD (@pboling) -- [gh651](https://github.com/ruby-oauth/oauth2/pull/651) - Mock OAuth2 server for testing (@pboling) - - https://github.com/navikt/mock-oauth2-server -### Changed -- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Upgraded to snaky_hash v2.0.3 (@pboling) -- [gh651](https://github.com/ruby-oauth/oauth2/pull/651) - Upgraded to snaky_hash v2.0.3 (@pboling) - - Provides solution for serialization issues -- Updated `spec.homepage_uri` in gemspec to GitHub Pages YARD documentation site (@pboling) -### Fixed -- [gh650](https://github.com/oauth-xx/oauth2/pull/650) - Regression in return type of `OAuth2::Response#parsed` (@pboling) -- [gh650](https://github.com/ruby-oauth/oauth2/pull/650) - Regression in return type of `OAuth2::Response#parsed` (@pboling) -- Incorrect documentation related to silencing warnings (@pboling) - -## [2.0.10] - 2025-05-17 -- TAG: [v2.0.10][2.0.10t] -- COVERAGE: 100.00% -- 518/518 lines in 14 files -- BRANCH COVERAGE: 100.00% -- 170/170 branches in 14 files -- 79.05% documented -### Added -- [gh!632](https://github.com/oauth-xx/oauth2/pull/632) - Added `funding.yml` (@Aboling0) -- [!635](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/635) - Added `.gitlab-ci.yml` (@jessieay) -- [#638](https://gitlab.com/oauth-xx/oauth2/-/issues/638) - Documentation of support for **ILO Fundamental Principles of Rights at Work** (@pboling) -- [!642](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/642) - 20-year certificate for signing gem releases, expires 2045-04-29 (@pboling) -- [gh!632](https://github.com/ruby-oauth/oauth2/pull/632) - Added `funding.yml` (@Aboling0) -- [!635](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/635) - Added `.gitlab-ci.yml` (@jessieay) -- [#638](https://gitlab.com/ruby-oauth/oauth2/-/issues/638) - Documentation of support for **ILO Fundamental Principles of Rights at Work** (@pboling) -- [!642](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/642) - 20-year certificate for signing gem releases, expires 2045-04-29 (@pboling) - - Gemspec metadata - - funding_uri - - news_uri - - mailing_list_uri - - SHA256 and SHA512 Checksums for release -- [!643](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/643) - Add `token_name` option (@pboling) -- [!643](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/643) - Add `token_name` option (@pboling) - - Specify the parameter name that identifies the access token -- [!645](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/645) - Add `OAuth2::OAUTH_DEBUG` constant, based on `ENV["OAUTH_DEBUG"] (@pboling) -- [!646](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/646) - Add `OAuth2.config.silence_extra_tokens_warning`, default: false (@pboling) -- [!647](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/647) - Add IETF RFC 7009 Token Revocation compliant (@pboling) -- [!645](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/645) - Add `OAuth2::OAUTH_DEBUG` constant, based on `ENV["OAUTH_DEBUG"] (@pboling) -- [!646](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/646) - Add `OAuth2.config.silence_extra_tokens_warning`, default: false (@pboling) -- [!647](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/647) - Add IETF RFC 7009 Token Revocation compliant (@pboling) - - `OAuth2::Client#revoke_token` - - `OAuth2::AccessToken#revoke` - - See: https://datatracker.ietf.org/doc/html/rfc7009 -- [gh!644](https://github.com/oauth-xx/oauth2/pull/644), [gh!645](https://github.com/oauth-xx/oauth2/pull/645) - Added CITATION.cff (@Aboling0) -- [!648](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/648) - Improved documentation (@pboling) -- [gh!644](https://github.com/ruby-oauth/oauth2/pull/644), [gh!645](https://github.com/ruby-oauth/oauth2/pull/645) - Added CITATION.cff (@Aboling0) -- [!648](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/648) - Improved documentation (@pboling) -### Changed -- Default value of `OAuth2.config.silence_extra_tokens_warning` was `false`, now `true` (@pboling) -- Gem releases are now cryptographically signed, with a 20-year cert (@pboling) - - Allow linux distros to build release without signing, as their package managers sign independently -- [!647](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/647) - `OAuth2::AccessToken#refresh` now supports block param pass through (@pboling) -- [!647](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/647) - `OAuth2.config` is no longer writable (@pboling) -- [!647](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/647) - Errors raised by `OAuth2::AccessToken` are now always `OAuth2::Error` and have better metadata (@pboling) -- [!647](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/647) - `OAuth2::AccessToken#refresh` now supports block param pass through (@pboling) -- [!647](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/647) - `OAuth2.config` is no longer writable (@pboling) -- [!647](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/647) - Errors raised by `OAuth2::AccessToken` are now always `OAuth2::Error` and have better metadata (@pboling) -### Fixed -- [#95](https://gitlab.com/oauth-xx/oauth2/-/issues/95) - restoring an access token via `AccessToken#from_hash` (@pboling) -- [#95](https://gitlab.com/ruby-oauth/oauth2/-/issues/95) - restoring an access token via `AccessToken#from_hash` (@pboling) - - This was a 13 year old bug report. 😘 -- [#619](https://gitlab.com/oauth-xx/oauth2/-/issues/619) - Internal options (like `snaky`, `raise_errors`, and `parse`) are no longer included in request (@pboling) -- [!633](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/633) - Spaces will now be encoded as `%20` instead of `+` (@nov.matake) -- [!634](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/634) - `CHANGELOG.md` documentation fix (@skuwa229) -- [!638](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/638) - fix `expired?` when `expires_in` is `0` (@disep) -- [!639](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/639) - Only instantiate `OAuth2::Error` if `raise_errors` option is `true` (@glytch2) -- [#639](https://gitlab.com/oauth-xx/oauth2/-/issues/639) - `AccessToken#to_hash` is now serializable, just a regular Hash (@pboling) -- [!640](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/640) - `README.md` documentation fix (@martinezcoder) -- [!641](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/641) - Do not include sensitive information in the `inspect` (@manuelvanrijn) -- [#641](https://gitlab.com/oauth-xx/oauth2/-/issues/641) - Made default JSON response parser more resilient (@pboling) -- [#645](https://gitlab.com/oauth-xx/oauth2/-/issues/645) - Response no longer becomes a snaky hash (@pboling) -- [gh!646](https://github.com/oauth-xx/oauth2/pull/646) - Change `require` to `require_relative` (improve performance) (@Aboling0) -- [#619](https://gitlab.com/ruby-oauth/oauth2/-/issues/619) - Internal options (like `snaky`, `raise_errors`, and `parse`) are no longer included in request (@pboling) -- [!633](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/633) - Spaces will now be encoded as `%20` instead of `+` (@nov.matake) -- [!634](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/634) - `CHANGELOG.md` documentation fix (@skuwa229) -- [!638](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/638) - fix `expired?` when `expires_in` is `0` (@disep) -- [!639](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/639) - Only instantiate `OAuth2::Error` if `raise_errors` option is `true` (@glytch2) -- [#639](https://gitlab.com/ruby-oauth/oauth2/-/issues/639) - `AccessToken#to_hash` is now serializable, just a regular Hash (@pboling) -- [!640](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/640) - `README.md` documentation fix (@martinezcoder) -- [!641](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/641) - Do not include sensitive information in the `inspect` (@manuelvanrijn) -- [#641](https://gitlab.com/ruby-oauth/oauth2/-/issues/641) - Made default JSON response parser more resilient (@pboling) -- [#645](https://gitlab.com/ruby-oauth/oauth2/-/issues/645) - Response no longer becomes a snaky hash (@pboling) -- [gh!646](https://github.com/ruby-oauth/oauth2/pull/646) - Change `require` to `require_relative` (improve performance) (@Aboling0) - -## [2.0.9] - 2022-09-16 -- TAG: [v2.0.9][2.0.9t] -### Added -- More specs (@pboling) -### Changed -- Complete migration to main branch as default (@pboling) -- Complete migration to Gitlab, updating all links, and references in VCS-managed files (@pboling) - -## [2.0.8] - 2022-09-01 -- TAG: [v2.0.8][2.0.8t] -### Changed -- [!630](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/630) - Extract snaky_hash to external dependency (@pboling) -- [!630](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/630) - Extract snaky_hash to external dependency (@pboling) -### Added -- [!631](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/631) - New global configuration option OAuth2.config.silence_extra_tokens_warning (default: false) fixes [#628](https://gitlab.com/oauth-xx/oauth2/-/issues/628) -- [!631](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/631) - New global configuration option OAuth2.config.silence_extra_tokens_warning (default: false) fixes [#628](https://gitlab.com/ruby-oauth/oauth2/-/issues/628) - -## [2.0.7] - 2022-08-22 -- TAG: [v2.0.7][2.0.7t] -### Added -- [!629](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/629) - Allow POST of JSON to get token (@pboling, @terracatta) -- [!629](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/629) - Allow POST of JSON to get token (@pboling, @terracatta) -### Fixed -- [!626](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/626) - Fixes a regression in 2.0.6. Will now prefer the key order from the lookup, not the hash keys (@rickselby) -- [!626](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/626) - Fixes a regression in 2.0.6. Will now prefer the key order from the lookup, not the hash keys (@rickselby) - - Note: This fixes compatibility with `omniauth-oauth2` and AWS -- [!625](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/625) - Fixes the printed version in the post install message (@hasghari) -- [!625](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/625) - Fixes the printed version in the post install message (@hasghari) - -## [2.0.6] - 2022-07-13 -- TAG: [v2.0.6][2.0.6t] +## [1.0.1] - 2025-08-24 +- TAG: [v1.0.1][1.0.1t] +- COVERAGE: 100.00% -- 130/130 lines in 7 files +- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files +- 100% documented ### Fixed -- [!624](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/624) - Fixes a [regression](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/623) in v2.0.5, where an error would be raised in refresh_token flows due to (legitimate) lack of access_token (@pboling) -- [!624](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/624) - Fixes a [regression](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/623) in v2.0.5, where an error would be raised in refresh_token flows due to (legitimate) lack of access_token (@pboling) - -## [2.0.5] - 2022-07-07 -- TAG: [v2.0.5][2.0.5t] -### Fixed -- [!620](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/620) - Documentation improvements, to help with upgrading (@swanson) -- [!621](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/621) - Fixed [#528](https://gitlab.com/oauth-xx/oauth2/-/issues/528) and [#619](https://gitlab.com/oauth-xx/oauth2/-/issues/619) (@pboling) -- [!620](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/620) - Documentation improvements, to help with upgrading (@swanson) -- [!621](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/621) - Fixed [#528](https://gitlab.com/ruby-oauth/oauth2/-/issues/528) and [#619](https://gitlab.com/ruby-oauth/oauth2/-/issues/619) (@pboling) - - All data in responses is now returned, with the access token removed and set as `token` - - `refresh_token` is no longer dropped - - **BREAKING**: Microsoft's `id_token` is no longer left as `access_token['id_token']`, but moved to the standard `access_token.token` that all other strategies use - - Remove `parse` and `snaky` from options so they don't get included in response - - There is now 100% test coverage, for lines _and_ branches, and it will stay that way. - -## [2.0.4] - 2022-07-01 -- TAG: [v2.0.4][2.0.4t] -### Fixed -- [!618](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/618) - In some scenarios the `snaky` option default value was not applied (@pboling) -- [!618](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/618) - In some scenarios the `snaky` option default value was not applied (@pboling) - -## [2.0.3] - 2022-06-28 -- TAG: [v2.0.3][2.0.3t] -### Added -- [!611](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/611) - Proper deprecation warnings for `extract_access_token` argument (@pboling) -- [!612](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/612) - Add `snaky: false` option to skip conversion to `OAuth2::SnakyHash` (default: true) (@pboling) -- [!611](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/611) - Proper deprecation warnings for `extract_access_token` argument (@pboling) -- [!612](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/612) - Add `snaky: false` option to skip conversion to `OAuth2::SnakyHash` (default: true) (@pboling) -### Fixed -- [!608](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/608) - Wrap `Faraday::TimeoutError` in `OAuth2::TimeoutError` (@nbibler) -- [!615](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/615) - Fix support for requests with blocks, see `Faraday::Connection#run_request` (@pboling) -- [!608](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/608) - Wrap `Faraday::TimeoutError` in `OAuth2::TimeoutError` (@nbibler) -- [!615](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/615) - Fix support for requests with blocks, see `Faraday::Connection#run_request` (@pboling) - -## [2.0.2] - 2022-06-24 -- TAG: [v2.0.2][2.0.2t] -### Fixed -- [!604](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/604) - Wrap `Faraday::TimeoutError` in `OAuth2::TimeoutError` (@stanhu) -- [!606](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/606) - Ruby 2.7 deprecation warning fix: Move `access_token_class` parameter into `Client` constructor (@stanhu) -- [!607](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/607) - CHANGELOG correction, reference to `OAuth2::ConnectionError` (@zavan) -- [!604](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/604) - Wrap `Faraday::TimeoutError` in `OAuth2::TimeoutError` (@stanhu) -- [!606](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/606) - Ruby 2.7 deprecation warning fix: Move `access_token_class` parameter into `Client` constructor (@stanhu) -- [!607](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/607) - CHANGELOG correction, reference to `OAuth2::ConnectionError` (@zavan) - -## [2.0.1] - 2022-06-22 -- TAG: [v2.0.1][2.0.1t] -### Added -- Documentation improvements (@pboling) -- Increased test coverage to 99% (@pboling) +- bugfix: oopsie -## [2.0.0] - 2022-06-21 -- TAG: [v2.0.0][2.0.0t] -### Added -- [!158](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/158), [!344](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/344) - Optionally pass raw response to parsers (@niels) -- [!190](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/190), [!332](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/332), [!334](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/334), [!335](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/335), [!360](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/360), [!426](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/426), [!427](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/427), [!461](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/461) - Documentation (@josephpage, @pboling, @meganemura, @joshRpowell, @elliotcm) -- [!220](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/220) - Support IETF rfc7523 JWT Bearer Tokens Draft 04+ (@jhmoore) -- [!298](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/298) - Set the response object on the access token on Client#get_token for debugging (@cpetschnig) -- [!305](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/305) - Option: `OAuth2::Client#get_token` - `:access_token_class` (`AccessToken`); user specified class to use for all calls to `get_token` (@styd) -- [!346](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/571) - Modern gem structure (@pboling) -- [!351](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/351) - Support Jruby 9k (@pboling) -- [!362](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/362) - Support SemVer release version scheme (@pboling) -- [!363](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/363) - New method `OAuth2::AccessToken#refresh!` same as old `refresh`, with backwards compatibility alias (@pboling) -- [!364](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/364) - Support `application/hal+json` format (@pboling) -- [!365](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/365) - Support `application/vnd.collection+json` format (@pboling) -- [!376](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/376) - _Documentation_: Example / Test for Google 2-legged JWT (@jhmoore) -- [!381](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/381) - Spec for extra header params on client credentials (@nikz) -- [!394](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/394) - Option: `OAuth2::AccessToken#initialize` - `:expires_latency` (`nil`); number of seconds by which AccessToken validity will be reduced to offset latency (@klippx) -- [!412](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/412) - Support `application/vdn.api+json` format (from jsonapi.org) (@david-christensen) -- [!413](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/413) - _Documentation_: License scan and report (@meganemura) -- [!442](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/442) - Option: `OAuth2::Client#initialize` - `:logger` (`::Logger.new($stdout)`) logger to use when OAUTH_DEBUG is enabled (for parity with `1-4-stable` branch) (@rthbound) -- [!494](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/494) - 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) (@SteveyblamWork) -- [!549](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/549) - Wrap `Faraday::ConnectionFailed` in `OAuth2::ConnectionError` (@nikkypx) -- [!550](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/550) - Raise error if location header not present when redirecting (@stanhu) -- [!552](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/552) - Add missing `version.rb` require (@ahorek) -- [!553](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/553) - Support `application/problem+json` format (@janz93) -- [!560](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/560) - Support IETF rfc6749, section 2.3.1 - don't set auth params when `nil` (@bouk) -- [!571](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/571) - Support Ruby 3.1 (@pboling) -- [!575](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/575) - Support IETF rfc7231, section 7.1.2 - relative location in redirect (@pboling) -- [!581](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/581) - _Documentation_: of breaking changes (@pboling) -- [!158](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/158), [!344](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/344) - Optionally pass raw response to parsers (@niels) -- [!190](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/190), [!332](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/332), [!334](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/334), [!335](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/335), [!360](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/360), [!426](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/426), [!427](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/427), [!461](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/461) - Documentation (@josephpage, @pboling, @meganemura, @joshRpowell, @elliotcm) -- [!220](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/220) - Support IETF rfc7523 JWT Bearer Tokens Draft 04+ (@jhmoore) -- [!298](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/298) - Set the response object on the access token on Client#get_token for debugging (@cpetschnig) -- [!305](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/305) - Option: `OAuth2::Client#get_token` - `:access_token_class` (`AccessToken`); user specified class to use for all calls to `get_token` (@styd) -- [!346](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/571) - Modern gem structure (@pboling) -- [!351](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/351) - Support Jruby 9k (@pboling) -- [!362](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/362) - Support SemVer release version scheme (@pboling) -- [!363](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/363) - New method `OAuth2::AccessToken#refresh!` same as old `refresh`, with backwards compatibility alias (@pboling) -- [!364](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/364) - Support `application/hal+json` format (@pboling) -- [!365](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/365) - Support `application/vnd.collection+json` format (@pboling) -- [!376](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/376) - _Documentation_: Example / Test for Google 2-legged JWT (@jhmoore) -- [!381](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/381) - Spec for extra header params on client credentials (@nikz) -- [!394](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/394) - Option: `OAuth2::AccessToken#initialize` - `:expires_latency` (`nil`); number of seconds by which AccessToken validity will be reduced to offset latency (@klippx) -- [!412](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/412) - Support `application/vdn.api+json` format (from jsonapi.org) (@david-christensen) -- [!413](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/413) - _Documentation_: License scan and report (@meganemura) -- [!442](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/442) - Option: `OAuth2::Client#initialize` - `:logger` (`::Logger.new($stdout)`) logger to use when OAUTH_DEBUG is enabled (for parity with `1-4-stable` branch) (@rthbound) -- [!494](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/494) - 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) (@SteveyblamWork) -- [!549](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/549) - Wrap `Faraday::ConnectionFailed` in `OAuth2::ConnectionError` (@nikkypx) -- [!550](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/550) - Raise error if location header not present when redirecting (@stanhu) -- [!552](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/552) - Add missing `version.rb` require (@ahorek) -- [!553](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/553) - Support `application/problem+json` format (@janz93) -- [!560](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/560) - Support IETF rfc6749, section 2.3.1 - don't set auth params when `nil` (@bouk) -- [!571](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/571) - Support Ruby 3.1 (@pboling) -- [!575](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/575) - Support IETF rfc7231, section 7.1.2 - relative location in redirect (@pboling) -- [!581](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/581) - _Documentation_: of breaking changes (@pboling) -### Changed -- [!191](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/191) - **BREAKING**: Token is expired if `expired_at` time is `now` (@davestevens) -- [!312](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/312) - **BREAKING**: Set `:basic_auth` as default for `:auth_scheme` instead of `:request_body`. This was default behavior before 1.3.0. (@tetsuya, @wy193777) -- [!317](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/317) - _Dependency_: Upgrade `jwt` to 2.x.x (@travisofthenorth) -- [!338](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/338) - _Dependency_: Switch from `Rack::Utils.escape` to `CGI.escape` (@josephpage) -- [!339](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/339), [!368](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/368), [!424](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/424), [!479](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/479), [!493](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/493), [!539](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/539), [!542](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/542), [!553](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/553) - CI Updates, code coverage, linting, spelling, type fixes, New VERSION constant (@pboling, @josephpage, @ahorek) -- [!410](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/410) - **BREAKING**: Removed the ability to call .error from an OAuth2::Response object (@jhmoore) -- [!414](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/414) - Use Base64.strict_encode64 instead of custom internal logic (@meganemura) -- [!469](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/469) - **BREAKING**: Default value for option `OAuth2::Client` - `:authorize_url` removed leading slash to work with relative paths by default (`'oauth/authorize'`) (@ghost) -- [!469](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/469) - **BREAKING**: Default value for option `OAuth2::Client` - `:token_url` removed leading slash to work with relative paths by default (`'oauth/token'`) (@ghost) -- [!507](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/507), [!575](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/575) - **BREAKING**: Transform keys to snake case, always, by default (ultimately via `rash_alt` gem) -- [!191](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/191) - **BREAKING**: Token is expired if `expired_at` time is `now` (@davestevens) -- [!312](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/312) - **BREAKING**: Set `:basic_auth` as default for `:auth_scheme` instead of `:request_body`. This was default behavior before 1.3.0. (@tetsuya, @wy193777) -- [!317](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/317) - _Dependency_: Upgrade `jwt` to 2.x.x (@travisofthenorth) -- [!338](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/338) - _Dependency_: Switch from `Rack::Utils.escape` to `CGI.escape` (@josephpage) -- [!339](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/339), [!368](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/368), [!424](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/424), [!479](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/479), [!493](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/493), [!539](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/539), [!542](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/542), [!553](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/553) - CI Updates, code coverage, linting, spelling, type fixes, New VERSION constant (@pboling, @josephpage, @ahorek) -- [!410](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/410) - **BREAKING**: Removed the ability to call .error from an OAuth2::Response object (@jhmoore) -- [!414](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/414) - Use Base64.strict_encode64 instead of custom internal logic (@meganemura) -- [!469](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/469) - **BREAKING**: Default value for option `OAuth2::Client` - `:authorize_url` removed leading slash to work with relative paths by default (`'oauth/authorize'`) (@ghost) -- [!469](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/469) - **BREAKING**: Default value for option `OAuth2::Client` - `:token_url` removed leading slash to work with relative paths by default (`'oauth/token'`) (@ghost) -- [!507](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/507), [!575](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/575) - **BREAKING**: Transform keys to snake case, always, by default (ultimately via `rash_alt` gem) - - Original keys will still work as previously, in most scenarios, thanks to `rash_alt` gem. - - However, this is a _breaking_ change if you rely on `response.parsed.to_h`, as the keys in the result will be snake case. - - As of version 2.0.4 you can turn key transformation off with the `snaky: false` option. -- [!576](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/576) - **BREAKING**: Stop rescuing parsing errors (@pboling) -- [!591](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/576) - _DEPRECATION_: `OAuth2::Client` - `:extract_access_token` option is deprecated -- [!576](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/576) - **BREAKING**: Stop rescuing parsing errors (@pboling) -- [!591](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/576) - _DEPRECATION_: `OAuth2::Client` - `:extract_access_token` option is deprecated -### Fixed -- [!158](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/158), [!344](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/344) - Handling of errors when using `omniauth-facebook` (@niels) -- [!294](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/294) - Fix: "Unexpected middleware set" issue with Faraday when `OAUTH_DEBUG=true` (@spectator, @gafrom) -- [!300](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/300) - _Documentation_: `Oauth2::Error` - Error codes are strings, not symbols (@NobodysNightmare) -- [!318](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/318), [!326](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/326), [!343](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/343), [!347](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/347), [!397](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/397), [!464](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/464), [!561](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/561), [!565](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/565) - _Dependency_: Support all versions of `faraday` (see [gemfiles/README.md][gemfiles/readme] for compatibility matrix with Ruby engines & versions) (@pboling, @raimondasv, @zacharywelch, @Fudoshiki, @ryogift, @sj26, @jdelStrother) -- [!322](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/322), [!331](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/331), [!337](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/337), [!361](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/361), [!371](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/371), [!377](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/377), [!383](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/383), [!392](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/392), [!395](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/395), [!400](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/400), [!401](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/401), [!403](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/403), [!415](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/415), [!567](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/567) - Updated Rubocop, Rubocop plugins and improved code style (@pboling, @bquorning, @lautis, @spectator) -- [!328](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/328) - _Documentation_: Homepage URL is SSL (@amatsuda) -- [!339](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/339), [!479](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/479) - Update testing infrastructure for all supported Rubies (@pboling and @josephpage) -- [!366](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/366) - **Security**: Fix logging to `$stdout` of request and response bodies via Faraday's logger and `ENV["OAUTH_DEBUG"] == 'true'` (@pboling) -- [!380](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/380) - Fix: Stop attempting to encode non-encodable objects in `Oauth2::Error` (@jhmoore) -- [!399](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/399) - Fix: Stop duplicating `redirect_uri` in `get_token` (@markus) -- [!410](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/410) - Fix: `SystemStackError` caused by circular reference between Error and Response classes (@jhmoore) -- [!460](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/460) - Fix: Stop throwing errors when `raise_errors` is set to `false`; analog of [!524](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/524) for `1-4-stable` branch (@joaolrpaulo) -- [!472](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/472) - **Security**: Add checks to enforce `client_secret` is *never* passed in authorize_url query params for `implicit` and `auth_code` grant types (@dfockler) -- [!482](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/482) - _Documentation_: Update last of `intridea` links to `oauth-xx` (@pboling) -- [!536](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/536) - **Security**: Compatibility with more (and recent) Ruby OpenSSL versions, Github Actions, Rubocop updated, analogous to [!535](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/535) on `1-4-stable` branch (@pboling) -- [!595](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/595) - Graceful handling of empty responses from `Client#get_token`, respecting `:raise_errors` config (@stanhu) -- [!596](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/596) - Consistency between `AccessToken#refresh` and `Client#get_token` named arguments (@stanhu) -- [!598](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/598) - Fix unparseable data not raised as error in `Client#get_token`, respecting `:raise_errors` config (@stanhu) -- [!158](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/158), [!344](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/344) - Handling of errors when using `omniauth-facebook` (@niels) -- [!294](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/294) - Fix: "Unexpected middleware set" issue with Faraday when `OAUTH_DEBUG=true` (@spectator, @gafrom) -- [!300](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/300) - _Documentation_: `Oauth2::Error` - Error codes are strings, not symbols (@NobodysNightmare) -- [!318](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/318), [!326](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/326), [!343](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/343), [!347](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/347), [!397](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/397), [!464](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/464), [!561](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/561), [!565](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/565) - _Dependency_: Support all versions of `faraday` (see [gemfiles/README.md][gemfiles/readme] for compatibility matrix with Ruby engines & versions) (@pboling, @raimondasv, @zacharywelch, @Fudoshiki, @ryogift, @sj26, @jdelStrother) -- [!322](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/322), [!331](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/331), [!337](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/337), [!361](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/361), [!371](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/371), [!377](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/377), [!383](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/383), [!392](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/392), [!395](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/395), [!400](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/400), [!401](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/401), [!403](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/403), [!415](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/415), [!567](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/567) - Updated Rubocop, Rubocop plugins and improved code style (@pboling, @bquorning, @lautis, @spectator) -- [!328](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/328) - _Documentation_: Homepage URL is SSL (@amatsuda) -- [!339](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/339), [!479](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/479) - Update testing infrastructure for all supported Rubies (@pboling and @josephpage) -- [!366](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/366) - **Security**: Fix logging to `$stdout` of request and response bodies via Faraday's logger and `ENV["OAUTH_DEBUG"] == 'true'` (@pboling) -- [!380](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/380) - Fix: Stop attempting to encode non-encodable objects in `Oauth2::Error` (@jhmoore) -- [!399](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/399) - Fix: Stop duplicating `redirect_uri` in `get_token` (@markus) -- [!410](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/410) - Fix: `SystemStackError` caused by circular reference between Error and Response classes (@jhmoore) -- [!460](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/460) - Fix: Stop throwing errors when `raise_errors` is set to `false`; analog of [!524](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/524) for `1-4-stable` branch (@joaolrpaulo) -- [!472](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/472) - **Security**: Add checks to enforce `client_secret` is *never* passed in authorize_url query params for `implicit` and `auth_code` grant types (@dfockler) -- [!482](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/482) - _Documentation_: Update last of `intridea` links to `ruby-oauth` (@pboling) -- [!536](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/536) - **Security**: Compatibility with more (and recent) Ruby OpenSSL versions, Github Actions, Rubocop updated, analogous to [!535](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/535) on `1-4-stable` branch (@pboling) -- [!595](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/595) - Graceful handling of empty responses from `Client#get_token`, respecting `:raise_errors` config (@stanhu) -- [!596](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/596) - Consistency between `AccessToken#refresh` and `Client#get_token` named arguments (@stanhu) -- [!598](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/598) - Fix unparseable data not raised as error in `Client#get_token`, respecting `:raise_errors` config (@stanhu) -### Removed -- [!341](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/341) - Remove Rdoc & Jeweler related files (@josephpage) -- [!342](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/342) - **BREAKING**: Dropped support for Ruby 1.8 (@josephpage) -- [!539](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/539) - Remove reliance on globally included OAuth2 in tests, analog of [!538](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/538) for 1-4-stable (@anderscarling) -- [!566](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/566) - _Dependency_: Removed `wwtd` (@bquorning) -- [!589](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/589), [!593](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/593) - Remove support for expired MAC token draft spec (@stanhu) -- [!590](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/590) - _Dependency_: Removed `multi_json` (@stanhu) -- [!341](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/341) - Remove Rdoc & Jeweler related files (@josephpage) -- [!342](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/342) - **BREAKING**: Dropped support for Ruby 1.8 (@josephpage) -- [!539](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/539) - Remove reliance on globally included OAuth2 in tests, analog of [!538](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/538) for 1-4-stable (@anderscarling) -- [!566](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/566) - _Dependency_: Removed `wwtd` (@bquorning) -- [!589](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/589), [!593](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/593) - Remove support for expired MAC token draft spec (@stanhu) -- [!590](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/590) - _Dependency_: Removed `multi_json` (@stanhu) - -## [1.4.11] - 2022-09-16 -- TAG: [v1.4.11][1.4.11t] -- Complete migration to main branch as default (@pboling) -- Complete migration to Gitlab, updating all links, and references in VCS-managed files (@pboling) - -## [1.4.10] - 2022-07-01 -- TAG: [v1.4.10][1.4.10t] -- FIPS Compatibility [!587](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/587) (@akostadinov) -- FIPS Compatibility [!587](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/587) (@akostadinov) - -## [1.4.9] - 2022-02-20 -- TAG: [v1.4.9][1.4.9t] -- Fixes compatibility with Faraday v2 [572](https://gitlab.com/oauth-xx/oauth2/-/issues/572) -- Fixes compatibility with Faraday v2 [572](https://gitlab.com/ruby-oauth/oauth2/-/issues/572) -- Includes supported versions of Faraday in test matrix: - - Faraday ~> 2.2.0 with Ruby >= 2.6 - - Faraday ~> 1.10 with Ruby >= 2.4 - - Faraday ~> 0.17.3 with Ruby >= 1.9 -- Add Windows and MacOS to test matrix - -## [1.4.8] - 2022-02-18 -- TAG: [v1.4.8][1.4.8t] -- MFA is now required to push new gem versions (@pboling) -- README overhaul w/ new Ruby Version and Engine compatibility policies (@pboling) -- [!569](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/569) Backport fixes ([!561](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/561) by @ryogift), and add more fixes, to allow faraday 1.x and 2.x (@jrochkind) -- [!569](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/569) Backport fixes ([!561](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/561) by @ryogift), and add more fixes, to allow faraday 1.x and 2.x (@jrochkind) -- Improve Code Coverage tracking (Coveralls, CodeCov, CodeClimate), and enable branch coverage (@pboling) -- Add CodeQL, Security Policy, Funding info (@pboling) -- Added Ruby 3.1, jruby, jruby-head, truffleruby, truffleruby-head to build matrix (@pboling) -- [!543](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/543) - Support for more modern Open SSL libraries (@pboling) -- [!543](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/543) - Support for more modern Open SSL libraries (@pboling) - -## [1.4.7] - 2021-03-19 -- TAG: [v1.4.7][1.4.7t] -- [!541](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/541) - Backport fix to expires_at handling [!533](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/533) to 1-4-stable branch. (@dobon) -- [!541](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/541) - Backport fix to expires_at handling [!533](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/533) to 1-4-stable branch. (@dobon) - -## [1.4.6] - 2021-03-19 -- TAG: [v1.4.6][1.4.6t] -- [!540](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/540) - Add VERSION constant (@pboling) -- [!537](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/537) - Fix crash in OAuth2::Client#get_token (@anderscarling) -- [!538](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/538) - Remove reliance on globally included OAuth2 in tests, analogous to [!539](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/539) on main branch (@anderscarling) -- [!540](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/540) - Add VERSION constant (@pboling) -- [!537](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/537) - Fix crash in OAuth2::Client#get_token (@anderscarling) -- [!538](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/538) - Remove reliance on globally included OAuth2 in tests, analogous to [!539](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/539) on main branch (@anderscarling) - -## [1.4.5] - 2021-03-18 -- TAG: [v1.4.5][1.4.5t] -- [!535](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/535) - Compatibility with range of supported Ruby OpenSSL versions, Rubocop updates, Github Actions, analogous to [!536](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/536) on main branch (@pboling) -- [!518](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/518) - Add extract_access_token option to OAuth2::Client (@jonspalmer) -- [!507](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/507) - Fix camel case content type, response keys (@anvox) -- [!500](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/500) - Fix YARD documentation formatting (@olleolleolle) -- [!535](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/535) - Compatibility with range of supported Ruby OpenSSL versions, Rubocop updates, Github Actions, analogous to [!536](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/536) on main branch (@pboling) -- [!518](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/518) - Add extract_access_token option to OAuth2::Client (@jonspalmer) -- [!507](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/507) - Fix camel case content type, response keys (@anvox) -- [!500](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/500) - Fix YARD documentation formatting (@olleolleolle) - -## [1.4.4] - 2020-02-12 -- TAG: [v1.4.4][1.4.4t] -- [!408](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/408) - Fixed expires_at for formatted time (@Lomey) -- [!408](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/408) - Fixed expires_at for formatted time (@Lomey) - -## [1.4.3] - 2020-01-29 -- TAG: [v1.4.3][1.4.3t] -- [!483](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/483) - add project metadata to gemspec (@orien) -- [!495](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/495) - support additional types of access token requests (@SteveyblamFreeagent, @thomcorley, @dgholz) -- [!483](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/483) - add project metadata to gemspec (@orien) -- [!495](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/495) - support additional types of access token requests (@SteveyblamFreeagent, @thomcorley, @dgholz) - - Adds support for private_key_jwt and tls_client_auth -- [!433](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/433) - allow field names with square brackets and numbers in params (@asm256) -- [!433](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/433) - allow field names with square brackets and numbers in params (@asm256) - -## [1.4.2] - 2019-10-01 -- TAG: [v1.4.2][1.4.2t] -- [!478](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/478) - support latest version of faraday & fix build (@pboling) -- [!478](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/478) - support latest version of faraday & fix build (@pboling) - - Officially support Ruby 2.6 and truffleruby - -## [1.4.1] - 2018-10-13 -- TAG: [v1.4.1][1.4.1t] -- [!417](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/417) - update jwt dependency (@thewoolleyman) -- [!419](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/419) - remove rubocop dependency (temporary, added back in [!423](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/423)) (@pboling) -- [!418](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/418) - update faraday dependency (@pboling) -- [!420](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/420) - update [oauth2.gemspec](https://gitlab.com/oauth-xx/oauth2/-/blob/1-4-stable/oauth2.gemspec) (@pboling) -- [!421](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/421) - fix [CHANGELOG.md](https://gitlab.com/oauth-xx/oauth2/-/blob/1-4-stable/CHANGELOG.md) for previous releases (@pboling) -- [!422](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/422) - update [LICENSE](https://gitlab.com/oauth-xx/oauth2/-/blob/1-4-stable/LICENSE) and [README.md](https://gitlab.com/oauth-xx/oauth2/-/blob/1-4-stable/README.md) (@pboling) -- [!423](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/423) - update [builds](https://travis-ci.org/oauth-xx/oauth2/builds), [Rakefile](https://gitlab.com/oauth-xx/oauth2/-/blob/1-4-stable/Rakefile) (@pboling) -- [!417](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/417) - update jwt dependency (@thewoolleyman) -- [!419](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/419) - remove rubocop dependency (temporary, added back in [!423](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/423)) (@pboling) -- [!418](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/418) - update faraday dependency (@pboling) -- [!420](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/420) - update [oauth2.gemspec](https://gitlab.com/ruby-oauth/oauth2/-/blob/1-4-stable/oauth2.gemspec) (@pboling) -- [!421](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/421) - fix [CHANGELOG.md](https://gitlab.com/ruby-oauth/oauth2/-/blob/1-4-stable/CHANGELOG.md) for previous releases (@pboling) -- [!422](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/422) - update [LICENSE](https://gitlab.com/ruby-oauth/oauth2/-/blob/1-4-stable/LICENSE) and [README.md](https://gitlab.com/ruby-oauth/oauth2/-/blob/1-4-stable/README.md) (@pboling) -- [!423](https://gitlab.com/ruby-oauth/oauth2/-/merge_requests/423) - update [builds](https://travis-ci.org/ruby-oauth/oauth2/builds), [Rakefile](https://gitlab.com/ruby-oauth/oauth2/-/blob/1-4-stable/Rakefile) (@pboling) - - officially document supported Rubies - * Ruby 1.9.3 - * Ruby 2.0.0 - * Ruby 2.1 - * Ruby 2.2 - * [JRuby 1.7][jruby-1.7] (targets MRI v1.9) - * [JRuby 9.0][jruby-9.0] (targets MRI v2.0) - * Ruby 2.3 - * Ruby 2.4 - * Ruby 2.5 - * [JRuby 9.1][jruby-9.1] (targets MRI v2.3) - * [JRuby 9.2][jruby-9.2] (targets MRI v2.5) - -[jruby-1.7]: https://www.jruby.org/2017/05/11/jruby-1-7-27.html -[jruby-9.0]: https://www.jruby.org/2016/01/26/jruby-9-0-5-0.html -[jruby-9.1]: https://www.jruby.org/2017/05/16/jruby-9-1-9-0.html -[jruby-9.2]: https://www.jruby.org/2018/05/24/jruby-9-2-0-0.html - -## [1.4.0] - 2017-06-09 -- TAG: [v1.4.0][1.4.0t] -- Drop Ruby 1.8.7 support (@sferik) -- Fix some RuboCop offenses (@sferik) -- _Dependency_: Remove Yardstick (@sferik) -- _Dependency_: Upgrade Faraday to 0.12 (@sferik) - -## [1.3.1] - 2017-03-03 -- TAG: [v1.3.1][1.3.1t] -- Add support for Ruby 2.4.0 (@pschambacher) -- _Dependency_: Upgrade Faraday to Faraday 0.11 (@mcfiredrill, @rhymes, @pschambacher) - -## [1.3.0] - 2016-12-28 -- TAG: [v1.3.0][1.3.0t] -- Add support for header-based authentication to the `Client` so it can be used across the library (@bjeanes) -- Default to header-based authentication when getting a token from an authorisation code (@maletor) -- **Breaking**: Allow an `auth_scheme` (`:basic_auth` or `:request_body`) to be set on the client, defaulting to `:request_body` to maintain backwards compatibility (@maletor, @bjeanes) -- Handle `redirect_uri` according to the OAuth 2 spec, so it is passed on redirect and at the point of token exchange (@bjeanes) -- Refactor handling of encoding of error responses (@urkle) -- Avoid instantiating an `Error` if there is no error to raise (@urkle) -- Add support for Faraday 0.10 (@rhymes) - -## [1.2.0] - 2016-07-01 -- TAG: [v1.2.0][1.2.0t] -- Properly handle encoding of error responses (so we don't blow up, for example, when Google's response includes a ∞) (@Motoshi-Nishihira) -- Make a copy of the options hash in `AccessToken#from_hash` to avoid accidental mutations (@Linuus) -- Use `raise` rather than `fail` to throw exceptions (@sferik) - -## [1.1.0] - 2016-01-30 -- TAG: [v1.1.0][1.1.0t] -- Various refactors (eliminating `Hash#merge!` usage in `AccessToken#refresh!`, use `yield` instead of `#call`, freezing mutable objects in constants, replacing constants with class variables) (@sferik) -- Add support for Rack 2, and bump various other dependencies (@sferik) - -## [1.0.0] - 2014-07-09 +## [1.0.0] - 2025-08-24 - TAG: [v1.0.0][1.0.0t] +- COVERAGE: 100.00% -- 130/130 lines in 7 files +- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files +- 100% documented ### Added -- Add an implementation of the MAC token spec. -### Fixed -- Fix Base64.strict_encode64 incompatibility with Ruby 1.8.7. - -## [0.5.0] - 2011-07-29 -- TAG: [v0.5.0][0.5.0t] -### Changed -- *breaking* `oauth_token` renamed to `oauth_bearer`. -- *breaking* `authorize_path` Client option renamed to `authorize_url`. -- *breaking* `access_token_path` Client option renamed to `token_url`. -- *breaking* `access_token_method` Client option renamed to `token_method`. -- *breaking* `web_server` renamed to `auth_code`. - -## [0.4.1] - 2011-04-20 -- TAG: [v0.4.1][0.4.1t] - -## [0.4.0] - 2011-04-20 -- TAG: [v0.4.0][0.4.0t] - -## [0.3.0] - 2011-04-08 -- TAG: [v0.3.0][0.3.0t] - -## [0.2.0] - 2011-04-01 -- TAG: [v0.2.0][0.2.0t] - -## [0.1.1] - 2011-01-12 -- TAG: [v0.1.1][0.1.1t] - -## [0.1.0] - 2010-10-13 -- TAG: [v0.1.0][0.1.0t] - -## [0.0.13] - 2010-08-17 -- TAG: [v0.0.13][0.0.13t] - -## [0.0.12] - 2010-08-17 -- TAG: [v0.0.12][0.0.12t] - -## [0.0.11] - 2010-08-17 -- TAG: [v0.0.11][0.0.11t] - -## [0.0.10] - 2010-06-19 -- TAG: [v0.0.10][0.0.10t] - -## [0.0.9] - 2010-06-18 -- TAG: [v0.0.9][0.0.9t] - -## [0.0.8] - 2010-04-27 -- TAG: [v0.0.8][0.0.8t] - -## [0.0.7] - 2010-04-27 -- TAG: [v0.0.7][0.0.7t] - -## [0.0.6] - 2010-04-25 -- TAG: [v0.0.6][0.0.6t] - -## [0.0.5] - 2010-04-23 -- TAG: [v0.0.5][0.0.5t] - -## [0.0.4] - 2010-04-22 -- TAG: [v0.0.4][0.0.4t] - -## [0.0.3] - 2010-04-22 -- TAG: [v0.0.3][0.0.3t] - -## [0.0.2] - 2010-04-22 -- TAG: [v0.0.2][0.0.2t] - -## [0.0.1] - 2010-04-22 -- TAG: [v0.0.1][0.0.1t] - -[gemfiles/readme]: gemfiles/README.md +- Initial release -[Unreleased]: https://github.com/ruby-oauth/oauth2/compare/v2.0.14...HEAD -[2.0.14]: https://github.com/ruby-oauth/oauth2/compare/v2.0.13...v2.0.14 -[2.0.14t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.14 -[2.0.13]: https://github.com/ruby-oauth/oauth2/compare/v2.0.12...v2.0.13 -[2.0.13t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.13 -[2.0.12]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.11...v2.0.12 -[2.0.12t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.12 -[2.0.11]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.10...v2.0.11 -[2.0.11t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.11 -[2.0.10]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.9...v2.0.10 -[2.0.10t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.10 -[2.0.9]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.8...v2.0.9 -[2.0.9t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.9 -[2.0.8]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.7...v2.0.8 -[2.0.8t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.8 -[2.0.7]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.6...v2.0.7 -[2.0.7t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.7 -[2.0.6]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.5...v2.0.6 -[2.0.6t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.6 -[2.0.5]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.4...v2.0.5 -[2.0.5t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.5 -[2.0.4]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.3...v2.0.4 -[2.0.4t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.4 -[2.0.3]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.2...v2.0.3 -[2.0.3t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.3 -[2.0.2]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.1...v2.0.2 -[2.0.2t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.2 -[2.0.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v2.0.0...v2.0.1 -[2.0.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.1 -[2.0.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.11...v2.0.0 -[2.0.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.0 -[1.4.11]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.10...v1.4.11 -[1.4.11t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.11 -[1.4.10]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.9...v1.4.10 -[1.4.10t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.10 -[1.4.9]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.8...v1.4.9 -[1.4.9t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.9 -[1.4.8]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.7...v1.4.8 -[1.4.8t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.8 -[1.4.7]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.6...v1.4.7 -[1.4.7t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.7 -[1.4.6]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.5...v1.4.6 -[1.4.6t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.6 -[1.4.5]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.4...v1.4.5 -[1.4.5t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.5 -[1.4.4]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.3...v1.4.4 -[1.4.4t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.4 -[1.4.3]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.2...v1.4.3 -[1.4.3t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.3 -[1.4.2]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.1...v1.4.2 -[1.4.2t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.2 -[1.4.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.4.0...v1.4.1 -[1.4.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.1 -[1.4.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.3.1...v1.4.0 -[1.4.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.4.0 -[1.3.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.3.0...v1.3.1 -[1.3.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.3.1 -[1.3.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.2.0...v1.3.0 -[1.3.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.3.0 -[1.2.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.1.0...v1.2.0 -[1.2.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.2.0 -[1.1.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.0.0...v1.1.0 -[1.1.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.1.0 -[1.0.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.9.4...v1.0.0 -[1.0.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v1.0.0 -[0.5.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.4.1...v0.5.0 -[0.5.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.5.0 -[0.4.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.4.0...v0.4.1 -[0.4.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.4.1 -[0.4.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.3.0...v0.4.0 -[0.4.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.4.0 -[0.3.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.2.0...v0.3.0 -[0.3.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.3.0 -[0.2.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.1.1...v0.2.0 -[0.2.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.2.0 -[0.1.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.1.0...v0.1.1 -[0.1.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.1.1 -[0.1.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.13...v0.1.0 -[0.1.0t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.1.0 -[0.0.13]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.12...v0.0.13 -[0.0.13t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.13 -[0.0.12]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.11...v0.0.12 -[0.0.12t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.12 -[0.0.11]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.10...v0.0.11 -[0.0.11t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.11 -[0.0.10]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.9...v0.0.10 -[0.0.10t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.10 -[0.0.9]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.8...v0.0.9 -[0.0.9t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.9 -[0.0.8]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.7...v0.0.8 -[0.0.8t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.8 -[0.0.7]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.6...v0.0.7 -[0.0.7t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.7 -[0.0.6]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.5...v0.0.6 -[0.0.6t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.6 -[0.0.5]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.4...v0.0.5 -[0.0.5t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.5 -[0.0.4]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.3...v0.0.4 -[0.0.4t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.4 -[0.0.3]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.2...v0.0.3 -[0.0.3t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.3 -[0.0.2]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v0.0.1...v0.0.2 -[0.0.2t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.2 -[0.0.1]: https://github.com/ruby-oauth/oauth2/compare/311d9f4...v0.0.1 -[0.0.1t]: https://github.com/ruby-oauth/oauth2/releases/tag/v0.0.1 +[Unreleased]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.0.0...HEAD +[1.0.0]: https://gitlab.com/ruby-oauth/oauth2/-/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0 +[1.0.0t]: https://gitlab.com/ruby-oauth/oauth2/-/tags/v1.0.0 +[1.0.1]: https://gitlab.com/ruby-oauth/oauth2/-/compare/v1.0.0...v1.0.1 +[1.0.1t]: https://gitlab.com/ruby-oauth/oauth2/-/tags/v1.0.1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 59ae2314..f70f8c81 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,6 @@ This project should be a safe, welcoming space for collaboration, so contributor the [code of conduct][🤝conduct]. To submit a patch, please fork the project, create a patch with tests, and send a pull request. -Post a message to the [google group][⛳mail-list] if you want to. Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] if you make changes. @@ -23,6 +22,35 @@ Follow these instructions: 6. Make sure to add tests for it. This is important, so it doesn't break in a future release. 7. Create new Pull Request. +## Executables vs Rake tasks + +Executables shipped by oauth2 can be used with or without generating the binstubs. +They will work when oauth2 is installed globally (i.e., `gem install oauth2`) and do not require that oauth2 be in your bundle. + +- kettle-changelog +- kettle-commit-msg +- oauth2-setup +- kettle-dvcs +- kettle-pre-release +- kettle-readme-backers +- kettle-release + +However, the rake tasks provided by oauth2 do require oauth2 to be added as a development dependency and loaded in your Rakefile. +See the full list of rake tasks in head of Rakefile + +**Gemfile** +```ruby +group :development do + gem "oauth2", require: false +end +``` + +**Rakefile** +```ruby +# Rakefile +require "oauth2" +``` + ## Environment Variables for Local Development Below are the primary environment variables recognized by stone_checksums (and its integrated tools). Unless otherwise noted, set boolean values to the string "true" to enable. @@ -90,9 +118,10 @@ bundle exec rake test ### Spec organization (required) -- For each class or module under `lib/`, keep all of its unit tests in a single spec file under `spec/` that mirrors the path and file name (e.g., specs for `lib/oauth2/release_cli.rb` live in `spec/oauth2/release_cli_spec.rb`). -- Do not create ad-hoc "_more" or split spec files for the same class/module. Consolidate all unit tests into the main spec file for that class/module. -- Only integration scenarios that intentionally span multiple classes belong in `spec/integration/`. +- One spec file per class/module. For each class or module under `lib/`, keep all of its unit tests in a single spec file under `spec/` that mirrors the path and file name exactly: `lib/oauth2/release_cli.rb` -> `spec/oauth2/release_cli_spec.rb`. +- Never add a second spec file for the same class/module. Examples of disallowed names: `*_more_spec.rb`, `*_extra_spec.rb`, `*_status_spec.rb`, or any other suffix that still targets the same class. If you find yourself wanting a second file, merge those examples into the canonical spec file for that class/module. +- Exception: Integration specs that intentionally span multiple classes. Place these under `spec/integration/` (or a clearly named integration folder), and do not directly mirror a single class. Name them after the scenario, not a class. +- Migration note: If a duplicate spec file exists, move all examples into the canonical file and delete the duplicate. Do not leave stubs or empty files behind. ## Lint It @@ -147,7 +176,9 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th #### Automated process -Run `bundle exec kettle-release`. +1. Update version.rb to contian the correct version-to-be-released. +2. Run `bundle exec kettle-changelog`. +3. Run `bundle exec kettle-release`. #### Manual process @@ -176,7 +207,6 @@ Run `bundle exec kettle-release`. 13. Run `bundle exec rake release` which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems] -[⛳mail-list]: http://groups.google.com/group/oauth-ruby [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2/ [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2 [📜src-gh]: https://github.com/ruby-oauth/oauth2 diff --git a/FUNDING.md b/FUNDING.md index bebc9ab1..b7a061d1 100644 --- a/FUNDING.md +++ b/FUNDING.md @@ -18,11 +18,11 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such [🖇sponsor]: https://github.com/sponsors/pboling [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat [🖇polar]: https://polar.sh/pboling -[🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg?style=flat +[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat [🖇kofi]: https://ko-fi.com/O5O86SNP4 [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat [🖇patreon]: https://patreon.com/galtzo -[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat +[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat [🖇buyme]: https://www.buymeacoffee.com/pboling [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal [🖇paypal]: https://www.paypal.com/paypalme/peterboling diff --git a/Gemfile b/Gemfile index af3abbf9..19875ab5 100644 --- a/Gemfile +++ b/Gemfile @@ -12,15 +12,8 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" } # Include dependencies from .gemspec gemspec -platform :mri do - # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite - # Use binding.break, binding.b, or debugger in code - gem "debug", ">= 1.0.0" # ruby >= 2.7 - gem "gem_bench", "~> 2.0", ">= 2.0.5" - - # Dev Console - Binding.pry - Irb replacement - gem "pry", "~> 0.14" # ruby >= 2.0 -end +# Debugging +eval_gemfile "gemfiles/modular/debug.gemfile" # Code Coverage eval_gemfile "gemfiles/modular/coverage.gemfile" @@ -33,3 +26,6 @@ eval_gemfile "gemfiles/modular/documentation.gemfile" # Optional eval_gemfile "gemfiles/modular/optional.gemfile" + +### Std Lib Extracted Gems +eval_gemfile "gemfiles/modular/x_std_libs.gemfile" diff --git a/Gemfile.lock b/Gemfile.lock index 8f4b5353..6bbe0251 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -36,11 +36,10 @@ GEM backports (3.25.1) base64 (0.3.0) benchmark (0.4.1) - bigdecimal (3.2.2) + bigdecimal (3.2.3) bundler-audit (0.9.2) bundler (>= 1.2.0, < 3) thor (~> 1.0) - coderay (1.1.3) concurrent-ruby (1.3.5) date (3.4.1) debug (1.11.0) @@ -100,17 +99,7 @@ GEM json (2.13.2) jwt (3.1.2) base64 - kettle-dev (1.0.24) - appraisal2 (~> 3.0) - bundler-audit (~> 0.9.2) - gitmoji-regex (~> 1.0, >= 1.0.3) - kettle-test (~> 1.0) - rake (~> 13.0) - require_bench (~> 1.0, >= 1.0.4) - rspec-pending_for - ruby-progressbar (~> 1.13) - stone_checksums (~> 1.0, >= 1.0.2) - version_gem (~> 1.1, >= 1.1.8) + kettle-dev (1.1.9) kettle-soup-cover (1.0.10) simplecov (~> 0.22) simplecov-cobertura (~> 3.0) @@ -136,9 +125,9 @@ GEM language_server-protocol (3.17.0.5) lint_roller (1.1.0) logger (1.7.0) - method_source (1.1.0) multi_xml (0.7.2) bigdecimal (~> 3.1) + mutex_m (0.3.0) net-http (0.6.0) uri nkf (0.2.0) @@ -153,15 +142,12 @@ GEM prettyprint prettyprint (0.2.0) prism (1.4.0) - pry (0.15.2) - coderay (~> 1.1) - method_source (~> 1.0) psych (5.2.6) date stringio public_suffix (6.0.2) racc (1.8.1) - rack (3.2.0) + rack (3.2.1) rainbow (3.1.1) rake (13.3.0) rbs (3.9.4) @@ -180,7 +166,7 @@ GEM io-console (~> 0.5) require_bench (1.0.4) version_gem (>= 1.1.3, < 4) - rexml (3.4.2) + rexml (3.4.3) rspec (3.13.1) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -194,10 +180,11 @@ GEM rspec-mocks (3.13.5) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-pending_for (0.1.18) + rspec-pending_for (0.1.19) rspec-core (~> 3.0) ruby_engine (~> 2.0) ruby_version (~> 1.0) + version_gem (~> 1.1, >= 1.1.8) rspec-stubbed_env (1.0.4) rspec-support (3.13.5) rspec_junit_formatter (0.6.0) @@ -243,7 +230,7 @@ GEM rubocop-rake (0.7.1) lint_roller (~> 1.1) rubocop (>= 1.72.1) - rubocop-rspec (3.6.0) + rubocop-rspec (3.7.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) rubocop-ruby2_2 (2.0.5) @@ -318,7 +305,7 @@ GEM unicode-emoji (~> 4.0, >= 4.0.4) unicode-emoji (4.0.4) uri (1.0.3) - version_gem (1.1.8) + version_gem (1.1.9) yard (0.9.37) yard-relative_markdown_links (0.5.0) nokogiri (>= 1.14.3, < 2) @@ -330,26 +317,38 @@ PLATFORMS DEPENDENCIES addressable (~> 2.8, >= 2.8.7) + appraisal2 (~> 3.0) backports (~> 3.25, >= 3.25.1) benchmark (~> 0.4, >= 0.4.1) - debug (>= 1.0.0) + bundler-audit (~> 0.9.2) + debug (>= 1.1) + erb (~> 5.0) gem_bench (~> 2.0, >= 2.0.5) - kettle-dev (~> 1.0, >= 1.0.24) + gitmoji-regex (~> 1.0, >= 1.0.3) + irb (~> 1.15, >= 1.15.2) + kettle-dev (~> 1.1, >= 1.1.9) kettle-soup-cover (~> 1.0, >= 1.0.10) + kettle-test (~> 1.0) kramdown (~> 2.5, >= 2.5.1) kramdown-parser-gfm (~> 1.1) + mutex_m (~> 0.2) nkf (~> 0.2) oauth2! - pry (~> 0.14) + rake (~> 13.0) rdoc (~> 6.11) reek (~> 6.5) + require_bench (~> 1.0, >= 1.0.4) rexml (~> 3.2, >= 3.2.5) + rspec-pending_for (~> 0.0, >= 0.0.17) rubocop-lts (~> 8.0) rubocop-on-rbs (~> 1.8) rubocop-packaging (~> 0.6, >= 0.6.0) rubocop-rspec (~> 3.6) rubocop-ruby2_2 + ruby-progressbar (~> 1.13) standard (>= 1.50) + stone_checksums (~> 1.0, >= 1.0.2) + stringio (>= 3.0) yard (~> 0.9, >= 0.9.37) yard-junk (~> 0.0, >= 0.0.10)! yard-relative_markdown_links (~> 0.5.0) diff --git a/README.md b/README.md index 7563d5c3..a04e1e2d 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![oauth2 Logo by Chris Messina, CC BY-SA 3.0][🖼️oauth2-i]][🖼️oauth2] -[🖼️oauth2-i]: https://logos.galtzo.com/assets/images/oauth/oauth2/avatar-192px.svg -[🖼️oauth2]: https://github.com/ruby-oauth/oauth2 -[🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg -[🖼️ruby-lang]: https://www.ruby-lang.org/ [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg [🖼️galtzo-discord]: https://discord.gg/3qme4XHNKN +[🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg +[🖼️ruby-lang]: https://www.ruby-lang.org/ +[🖼️oauth2-i]: https://logos.galtzo.com/assets/images/oauth/oauth2/avatar-192px.svg +[🖼️oauth2]: https://github.com/ruby-oauth/oauth2 # 🔐 OAuth 2.0 Authorization Framework ⭐️ including OAuth 2.1 draft spec & OpenID Connect (OIDC) -[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] [![QLTY Maintainability][🔑qlty-mnti]][🔑qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI 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] +[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![CodeCov Test Coverage][🔑codecovi]][🔑codecov] [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] [![QLTY Maintainability][🔑qlty-mnti]][🔑qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI 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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL] If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord]. @@ -131,9 +131,9 @@ What does that mean specifically for the runtime dependencies? We have 100% test coverage of lines and branches, and this test suite runs across a large matrix covering the latest patch for each of the following minor versions: -| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 | -|------------------------------------------------|--------------------------------------------------------------------------------------| -| 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2](https://github.com/appraisal-rb/appraisal2) ✨ | +| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 | +|------------------------------------------------|--------------------------------------------------------| +| 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ | #### You should upgrade this gem with confidence\*. @@ -1180,6 +1180,8 @@ See [CONTRIBUTING.md][🤝contributing]. ### Code Coverage +[![Coverage Graph][🔑codecov-g]][🔑codecov] + [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] @@ -1311,11 +1313,11 @@ Thanks for RTFM. ☺️ [🖇sponsor]: https://github.com/sponsors/pboling [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat [🖇polar]: https://polar.sh/pboling -[🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg?style=flat +[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat [🖇kofi]: https://ko-fi.com/O5O86SNP4 [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat [🖇patreon]: https://patreon.com/galtzo -[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat +[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff [🖇buyme]: https://www.buymeacoffee.com/pboling [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal @@ -1347,7 +1349,7 @@ Thanks for RTFM. ☺️ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase [💖🐘ruby-mast]: https://ruby.social/@galtzo -[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=flat&logo=mastodon&label=Ruby%20%40galtzo +[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo [💖🦋bluesky]: https://bsky.app/profile/galtzo.com [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white [💖🌳linktree]: https://linktr.ee/galtzo @@ -1417,8 +1419,8 @@ Thanks for RTFM. ☺️ [🚎10-j-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby.yml/badge.svg [🚎11-c-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/current.yml [🚎11-c-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/current.yml/badge.svg -[🚎12-crh-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-runtime-heads.yml -[🚎12-crh-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-runtime-heads.yml/badge.svg +[🚎12-crh-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/dep-heads.yml +[🚎12-crh-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/dep-heads.yml/badge.svg [🚎13-cbs-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/caboose.yml [🚎13-cbs-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/caboose.yml/badge.svg [🚎13-🔒️-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/locked_deps.yml @@ -1472,7 +1474,7 @@ Thanks for RTFM. ☺️ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat [📌gitmoji]:https://gitmoji.dev -[📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square +[📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.519-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue [🔐security]: SECURITY.md @@ -1488,7 +1490,7 @@ Thanks for RTFM. ☺️ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums [💎SHA_checksums]: https://gitlab.com/ruby-oauth/oauth2/-/tree/main/checksums [💎rlts]: https://github.com/rubocop-lts/rubocop-lts -[💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white +[💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white [💎appraisal2]: https://github.com/appraisal-rb/appraisal2 [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/ @@ -1498,8 +1500,8 @@ Thanks for RTFM. ☺️ rel="me" Social Proofs - - + + diff --git a/Rakefile b/Rakefile index 249ef930..4f67de12 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ # frozen_string_literal: true -# kettle-dev Rakefile v1.0.24 - 2025-08-31 +# kettle-dev Rakefile v1.1.9 - 2025-09-07 # Ruby 2.3 (Safe Navigation) or higher required # # MIT License (see License.txt) @@ -15,14 +15,10 @@ # rake bench # Run all benchmarks (alias for bench:run) # rake bench:list # List available benchmark scripts # rake bench:run # Run all benchmark scripts (skips on CI) -# rake build # Build kettle-dev-1.0.0.gem into the pkg d... -# rake build:checksum # Generate SHA512 checksum of kettle-dev-1.... # rake build:generate_checksums # Generate both SHA256 & SHA512 checksums i... # rake bundle:audit:check # Checks the Gemfile.lock for insecure depe... # rake bundle:audit:update # Updates the bundler-audit vulnerability d... # rake ci:act[opt] # Run 'act' with a selected workflow -# rake clean # Remove any temporary products -# rake clobber # Remove any generated files # rake coverage # Run specs w/ coverage and open results in... # rake default # Default tasks aggregator # rake install # Build and install kettle-dev-1.0.0.gem in... diff --git a/SECURITY.md b/SECURITY.md index 1fc2f483..a319529f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,15 +2,9 @@ ## Supported Versions -| Version | Supported | Post-EOL / Enterprise | -|----------|-----------|---------------------------------------| -| 2.latest | ✅ | [Tidelift Subscription][tidelift-ref] | -| 1.latest | ✅ | [Tidelift Subscription][tidelift-ref] | -| <= 1 | ⛔ | ⛔ | - -### EOL Policy - -Non-commercial support for the oldest version of Ruby (which itself is going EOL) will be dropped each year in April. +| Version | Supported | +|----------|-----------| +| 1.latest | ✅ | ## Security contact information @@ -25,11 +19,3 @@ please consider sponsoring the project / maintainer @ https://liberapay.com/pbol or find other sponsorship links in the [README]. [README]: README.md - -## Enterprise Support - -Available as part of the Tidelift Subscription. - -The maintainers of this library and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. [Learn more.][tidelift-ref] - -[tidelift-ref]: https://tidelift.com/subscription/pkg/rubygems-oauth2?utm_source=rubygems-oauth2&utm_medium=referral&utm_campaign=enterprise&utm_term=repo diff --git a/bin/kettle-dev-setup b/bin/kettle-dev-setup new file mode 100755 index 00000000..276319a7 --- /dev/null +++ b/bin/kettle-dev-setup @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-dev-setup' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("kettle-dev", "kettle-dev-setup") diff --git a/bin/kettle-dvcs b/bin/kettle-dvcs new file mode 100755 index 00000000..b572d48c --- /dev/null +++ b/bin/kettle-dvcs @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-dvcs' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("kettle-dev", "kettle-dvcs") diff --git a/bin/kettle-pre-release b/bin/kettle-pre-release new file mode 100755 index 00000000..1b98ad61 --- /dev/null +++ b/bin/kettle-pre-release @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'kettle-pre-release' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("kettle-dev", "kettle-pre-release") diff --git a/bin/pry b/bin/pry new file mode 100755 index 00000000..41bfde55 --- /dev/null +++ b/bin/pry @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'pry' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("pry", "pry") diff --git a/bin/rbs b/bin/rbs new file mode 100755 index 00000000..ffc95a0d --- /dev/null +++ b/bin/rbs @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rbs' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rbs", "rbs") diff --git a/gemfiles/audit.gemfile b/gemfiles/audit.gemfile index 5a3af548..82550001 100644 --- a/gemfiles/audit.gemfile +++ b/gemfiles/audit.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/audit.gemfile") @@ -20,3 +17,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_7.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3/libs.gemfile") diff --git a/gemfiles/coverage.gemfile b/gemfiles/coverage.gemfile index 92c25c25..0bb1d61f 100644 --- a/gemfiles/coverage.gemfile +++ b/gemfiles/coverage.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/coverage.gemfile") @@ -22,3 +19,5 @@ eval_gemfile("modular/multi_xml_v0_7.gemfile") eval_gemfile("modular/optional.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3/libs.gemfile") diff --git a/gemfiles/current.gemfile b/gemfiles/current.gemfile index 770c6643..d0b46ac0 100644 --- a/gemfiles/current.gemfile +++ b/gemfiles/current.gemfile @@ -4,4 +4,4 @@ source "https://rubygems.org" gemspec path: "../" -eval_gemfile("modular/latest.gemfile") +eval_gemfile("modular/x_std_libs.gemfile") diff --git a/gemfiles/dep_heads.gemfile b/gemfiles/dep_heads.gemfile new file mode 100644 index 00000000..3173f86f --- /dev/null +++ b/gemfiles/dep_heads.gemfile @@ -0,0 +1,7 @@ +# This file was generated by Appraisal2 + +source "https://rubygems.org" + +gemspec path: "../" + +eval_gemfile("modular/runtime_heads.gemfile") diff --git a/gemfiles/deps_unlocked.gemfile b/gemfiles/deps_unlocked.gemfile deleted file mode 100644 index 789a4f03..00000000 --- a/gemfiles/deps_unlocked.gemfile +++ /dev/null @@ -1,13 +0,0 @@ -# This file was generated by Appraisal2 - -source "https://rubygems.org" - -gemspec path: "../" - -eval_gemfile("modular/audit.gemfile") - -eval_gemfile("modular/coverage.gemfile") - -eval_gemfile("modular/documentation.gemfile") - -eval_gemfile("modular/style.gemfile") diff --git a/gemfiles/head.gemfile b/gemfiles/head.gemfile index f8e1bc42..e6b6d80d 100644 --- a/gemfiles/head.gemfile +++ b/gemfiles/head.gemfile @@ -2,8 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", ">= 0.2" -gem "stringio", ">= 3.0" gem "benchmark", "~> 0.4", ">= 0.4.1" gemspec path: "../" diff --git a/gemfiles/modular/debug.gemfile b/gemfiles/modular/debug.gemfile index 28cd3728..3e86091c 100644 --- a/gemfiles/modular/debug.gemfile +++ b/gemfiles/modular/debug.gemfile @@ -2,10 +2,12 @@ gem "irb", "~> 1.15", ">= 1.15.2" # removed from stdlib in 3.5 platform :mri do - # Debugging + # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite # Use binding.break, binding.b, or debugger in code gem "debug", ">= 1.1" # ruby >= 2.7 + + # Dev Console - Binding.pry - Irb replacement + # gem "pry", "~> 0.14" # ruby >= 2.0 end -gem "require_bench", "~> 1.0", ">= 1.0.4" gem "gem_bench", "~> 2.0", ">= 2.0.5" diff --git a/gemfiles/modular/erb/r2.3/default.gemfile b/gemfiles/modular/erb/r2.3/default.gemfile new file mode 100644 index 00000000..a38f952f --- /dev/null +++ b/gemfiles/modular/erb/r2.3/default.gemfile @@ -0,0 +1,6 @@ +# The cake is a lie. +# erb v2.2, the oldest release on RubyGems.org, was never compatible with Ruby 2.3. +# In addition, erb does not follow SemVer, and old rubies get dropped in a patch. +# This means we have no choice but to use the erb that shipped with Ruby 2.3 +# /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) +# gem "erb", ">= 2.2" # ruby >= 2.3.0 diff --git a/gemfiles/modular/erb/r2.4/v2.2.gemfile b/gemfiles/modular/erb/r2.4/v2.2.gemfile new file mode 100644 index 00000000..5777e7e3 --- /dev/null +++ b/gemfiles/modular/erb/r2.4/v2.2.gemfile @@ -0,0 +1,6 @@ +# Ruby >= 2.3.0 (claimed, but not true, minimum support is Ruby 2.4) +# Last version supporting Ruby <= 2.6 +gem "erb", "~> 2.2.2" + +# Pin CGI to a version compatible with Ruby 2.4. +gem "cgi", "~> 0.1.1" diff --git a/gemfiles/modular/erb/r2.6/v2.2.gemfile b/gemfiles/modular/erb/r2.6/v2.2.gemfile new file mode 100644 index 00000000..7cd85745 --- /dev/null +++ b/gemfiles/modular/erb/r2.6/v2.2.gemfile @@ -0,0 +1,3 @@ +# Ruby >= 2.3.0 (claimed, but not true, minimum support is Ruby 2.4) +# Last version supporting Ruby <= 2.6 +gem "erb", "~> 2.2.2" diff --git a/gemfiles/modular/erb/r2/v3.0.gemfile b/gemfiles/modular/erb/r2/v3.0.gemfile new file mode 100644 index 00000000..c03bd8d8 --- /dev/null +++ b/gemfiles/modular/erb/r2/v3.0.gemfile @@ -0,0 +1 @@ +gem "erb", "~> 3.0" # ruby >= 2.7.0 diff --git a/gemfiles/modular/erb/r3.1/v4.0.gemfile b/gemfiles/modular/erb/r3.1/v4.0.gemfile new file mode 100644 index 00000000..2e9046d8 --- /dev/null +++ b/gemfiles/modular/erb/r3.1/v4.0.gemfile @@ -0,0 +1,2 @@ +# last version compatible with Ruby 3.1 +gem "erb", "~> 4.0" # ruby >= 2.7.0 diff --git a/gemfiles/modular/erb/r3/v5.0.gemfile b/gemfiles/modular/erb/r3/v5.0.gemfile new file mode 100644 index 00000000..97033fa7 --- /dev/null +++ b/gemfiles/modular/erb/r3/v5.0.gemfile @@ -0,0 +1 @@ +gem "erb", "~> 5.0" # ruby >= 3.2.0 diff --git a/gemfiles/modular/erb/vHEAD.gemfile b/gemfiles/modular/erb/vHEAD.gemfile new file mode 100644 index 00000000..65f8433e --- /dev/null +++ b/gemfiles/modular/erb/vHEAD.gemfile @@ -0,0 +1,2 @@ +# Ruby >= 3.2 (dependency of kettle-dev) +gem "erb", github: "ruby/erb", branch: "master" diff --git a/gemfiles/modular/injected.gemfile b/gemfiles/modular/injected.gemfile new file mode 100644 index 00000000..0b5f8fa7 --- /dev/null +++ b/gemfiles/modular/injected.gemfile @@ -0,0 +1,60 @@ +# NOTE: It is preferable to list development dependencies in the gemspec due to increased +# visibility and discoverability on RubyGems.org. +# However, this gem sits underneath all my other gems, and also "depends on" many of them. +# So instead of depending on them directly it injects them into the other gem's gemspec on install. +# This gem its injected dev dependencies, will install on Ruby down to 2.3.x. +# This gem does not inject runtime dependencies. +# Thus, dev dependencies injected into gemspecs must have +# +# required_ruby_version ">= 2.3" (or lower) +# +# Development dependencies that require strictly newer Ruby versions should be in a "gemfile", +# and preferably a modular one (see gemfiles/modular/*.gemfile). + +# Security +gem "bundler-audit", "~> 0.9.2" # ruby >= 2.0.0 + +# Tasks +gem "rake", "~> 13.0" # ruby >= 2.2.0 + +# Debugging +gem "require_bench", "~> 1.0", ">= 1.0.4" # ruby >= 2.2.0 + +# Testing +gem "appraisal2", "~> 3.0" # ruby >= 1.8.7, for testing against multiple versions of dependencies +gem "kettle-test", "~> 1.0" # ruby >= 2.3 +gem "rspec-pending_for" # ruby >= 2.3, used to skip specs on incompatible Rubies + +# Releasing +gem "ruby-progressbar", "~> 1.13" # ruby >= 0 +gem "stone_checksums", "~> 1.0", ">= 1.0.2" # ruby >= 2.2.0 + +# Git integration (optional) +# The 'git' gem is optional; kettle-dev falls back to shelling out to `git` if it is not present. +# The current release of the git gem depends on activesupport, which makes it too heavy to depend on directly +# Compatibility with the git gem is tested via appraisals instead. +# gem("git", ">= 1.19.1") # ruby >= 2.3 + +# Development tasks +gem "gitmoji-regex", "~> 1.0", ">= 1.0.3" # ruby >= 2.3.0 + +# The cake is a lie. erb v2.2, the oldest release on RubyGems.org, was never compatible with Ruby 2.3. +# This means we have no choice but to use the erb that shipped with Ruby 2.3 +# /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) +# gem "erb", ">= 2.2" # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch. + +# HTTP recording for deterministic specs +# It seems that somehow just having a newer version of appraisal installed breaks +# Ruby 2.3 and 2.4 even if their bundle specifies an older version, +# and as a result it can only be a dependency in the appraisals. +# | An error occurred while loading spec_helper. +# | Failure/Error: require "vcr" +# | +# | NoMethodError: +# | undefined method `delete_prefix' for "CONTENT_LENGTH":String +# | # ./spec/config/vcr.rb:3:in `require' +# | # ./spec/config/vcr.rb:3:in `' +# | # ./spec/spec_helper.rb:8:in `require_relative' +# | # ./spec/spec_helper.rb:8:in `' +# gem "vcr", ">= 4" # 6.0 claims to support ruby >= 2.3, but fails on ruby 2.4 +# gem "webmock", ">= 3" # Last version to support ruby >= 2.3 diff --git a/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile b/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile new file mode 100644 index 00000000..cabf9806 --- /dev/null +++ b/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile @@ -0,0 +1,3 @@ +# Ruby >= 0 +# Last version supporting Ruby <= 2.4 +gem "mutex_m", "~> 0.1" diff --git a/gemfiles/modular/mutex_m/r2/v0.3.gemfile b/gemfiles/modular/mutex_m/r2/v0.3.gemfile new file mode 100644 index 00000000..42e9d9bd --- /dev/null +++ b/gemfiles/modular/mutex_m/r2/v0.3.gemfile @@ -0,0 +1,2 @@ +# Ruby >= 2.5 +gem "mutex_m", "~> 0.2" diff --git a/gemfiles/modular/mutex_m/r3/v0.3.gemfile b/gemfiles/modular/mutex_m/r3/v0.3.gemfile new file mode 100644 index 00000000..42e9d9bd --- /dev/null +++ b/gemfiles/modular/mutex_m/r3/v0.3.gemfile @@ -0,0 +1,2 @@ +# Ruby >= 2.5 +gem "mutex_m", "~> 0.2" diff --git a/gemfiles/modular/mutex_m/vHEAD.gemfile b/gemfiles/modular/mutex_m/vHEAD.gemfile new file mode 100644 index 00000000..8af3b6fc --- /dev/null +++ b/gemfiles/modular/mutex_m/vHEAD.gemfile @@ -0,0 +1,2 @@ +# Ruby >= 2.5 (dependency of omniauth) +gem "mutex_m", github: "ruby/mutex_m", branch: "master" diff --git a/gemfiles/modular/runtime_heads.gemfile b/gemfiles/modular/runtime_heads.gemfile index a3c5115c..7d74c143 100644 --- a/gemfiles/modular/runtime_heads.gemfile +++ b/gemfiles/modular/runtime_heads.gemfile @@ -25,3 +25,5 @@ gem "version_gem", github: "ruby-oauth/version_gem", branch: "main" # Ruby >= 2.2 gem "snaky_hash", github: "ruby-oauth/snaky_hash", branch: "main" + +eval_gemfile("x_std_libs/vHEAD.gemfile") diff --git a/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile b/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile new file mode 100644 index 00000000..94021cf3 --- /dev/null +++ b/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile @@ -0,0 +1,4 @@ +# !!WARNING!! +# NOT SEMVER +# Last version to support Ruby <= 2.5 +gem "stringio", ">= 0.0.2" diff --git a/gemfiles/modular/stringio/r2/v3.0.gemfile b/gemfiles/modular/stringio/r2/v3.0.gemfile new file mode 100644 index 00000000..e85bb18e --- /dev/null +++ b/gemfiles/modular/stringio/r2/v3.0.gemfile @@ -0,0 +1,5 @@ +# !!WARNING!! +# NOT SEMVER +# Version 3.0.7 dropped support for Ruby <= 2.7 +# Version 3.0.0 dropped support for Ruby <= 2.4 +gem "stringio", ">= 3.0" diff --git a/gemfiles/modular/stringio/r3/v3.0.gemfile b/gemfiles/modular/stringio/r3/v3.0.gemfile new file mode 100644 index 00000000..e85bb18e --- /dev/null +++ b/gemfiles/modular/stringio/r3/v3.0.gemfile @@ -0,0 +1,5 @@ +# !!WARNING!! +# NOT SEMVER +# Version 3.0.7 dropped support for Ruby <= 2.7 +# Version 3.0.0 dropped support for Ruby <= 2.4 +gem "stringio", ">= 3.0" diff --git a/gemfiles/modular/stringio/vHEAD.gemfile b/gemfiles/modular/stringio/vHEAD.gemfile new file mode 100644 index 00000000..5f2a7412 --- /dev/null +++ b/gemfiles/modular/stringio/vHEAD.gemfile @@ -0,0 +1,2 @@ +# Ruby >= 2.5 (dependency of omniauth) +gem "stringio", github: "ruby/stringio", branch: "master" diff --git a/gemfiles/modular/x_std_libs.gemfile b/gemfiles/modular/x_std_libs.gemfile new file mode 100644 index 00000000..cb677752 --- /dev/null +++ b/gemfiles/modular/x_std_libs.gemfile @@ -0,0 +1,2 @@ +### Std Lib Extracted Gems +eval_gemfile "x_std_libs/r3/libs.gemfile" diff --git a/gemfiles/modular/x_std_libs/r2.3/libs.gemfile b/gemfiles/modular/x_std_libs/r2.3/libs.gemfile new file mode 100644 index 00000000..2fee8b60 --- /dev/null +++ b/gemfiles/modular/x_std_libs/r2.3/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r2.3/default.gemfile" +eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile" +eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile" diff --git a/gemfiles/modular/x_std_libs/r2.4/libs.gemfile b/gemfiles/modular/x_std_libs/r2.4/libs.gemfile new file mode 100644 index 00000000..5a3c5b6c --- /dev/null +++ b/gemfiles/modular/x_std_libs/r2.4/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r2.4/v2.2.gemfile" +eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile" +eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile" diff --git a/gemfiles/modular/x_std_libs/r2.6/libs.gemfile b/gemfiles/modular/x_std_libs/r2.6/libs.gemfile new file mode 100644 index 00000000..beac38c9 --- /dev/null +++ b/gemfiles/modular/x_std_libs/r2.6/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r2.6/v2.2.gemfile" +eval_gemfile "../../mutex_m/r2/v0.3.gemfile" +eval_gemfile "../../stringio/r2/v3.0.gemfile" diff --git a/gemfiles/modular/x_std_libs/r2/libs.gemfile b/gemfiles/modular/x_std_libs/r2/libs.gemfile new file mode 100644 index 00000000..441c4f03 --- /dev/null +++ b/gemfiles/modular/x_std_libs/r2/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r2/v3.0.gemfile" +eval_gemfile "../../mutex_m/r2/v0.3.gemfile" +eval_gemfile "../../stringio/r2/v3.0.gemfile" diff --git a/gemfiles/modular/x_std_libs/r3.1/libs.gemfile b/gemfiles/modular/x_std_libs/r3.1/libs.gemfile new file mode 100644 index 00000000..bdab5bde --- /dev/null +++ b/gemfiles/modular/x_std_libs/r3.1/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r3.1/v4.0.gemfile" +eval_gemfile "../../mutex_m/r3/v0.3.gemfile" +eval_gemfile "../../stringio/r3/v3.0.gemfile" diff --git a/gemfiles/modular/x_std_libs/r3/libs.gemfile b/gemfiles/modular/x_std_libs/r3/libs.gemfile new file mode 100644 index 00000000..c293a3dd --- /dev/null +++ b/gemfiles/modular/x_std_libs/r3/libs.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../../erb/r3/v5.0.gemfile" +eval_gemfile "../../mutex_m/r3/v0.3.gemfile" +eval_gemfile "../../stringio/r3/v3.0.gemfile" diff --git a/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gemfiles/modular/x_std_libs/vHEAD.gemfile new file mode 100644 index 00000000..acc5ccbf --- /dev/null +++ b/gemfiles/modular/x_std_libs/vHEAD.gemfile @@ -0,0 +1,3 @@ +eval_gemfile "../erb/vHEAD.gemfile" +eval_gemfile "../mutex_m/vHEAD.gemfile" +eval_gemfile "../stringio/vHEAD.gemfile" diff --git a/gemfiles/ruby_2_3_hashie_v0.gemfile b/gemfiles/ruby_2_3_hashie_v0.gemfile index fe08e312..3d9948b0 100644 --- a/gemfiles/ruby_2_3_hashie_v0.gemfile +++ b/gemfiles/ruby_2_3_hashie_v0.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_3_hashie_v1.gemfile b/gemfiles/ruby_2_3_hashie_v1.gemfile index 0cbdaec1..5d97162b 100644 --- a/gemfiles/ruby_2_3_hashie_v1.gemfile +++ b/gemfiles/ruby_2_3_hashie_v1.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_3_hashie_v2.gemfile b/gemfiles/ruby_2_3_hashie_v2.gemfile index 3d0484d0..9a8d02f0 100644 --- a/gemfiles/ruby_2_3_hashie_v2.gemfile +++ b/gemfiles/ruby_2_3_hashie_v2.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_3_hashie_v3.gemfile b/gemfiles/ruby_2_3_hashie_v3.gemfile index 452620e9..ea7cd525 100644 --- a/gemfiles/ruby_2_3_hashie_v3.gemfile +++ b/gemfiles/ruby_2_3_hashie_v3.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_3_hashie_v4.gemfile b/gemfiles/ruby_2_3_hashie_v4.gemfile index aba8c483..37e16961 100644 --- a/gemfiles/ruby_2_3_hashie_v4.gemfile +++ b/gemfiles/ruby_2_3_hashie_v4.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_3_hashie_v5.gemfile b/gemfiles/ruby_2_3_hashie_v5.gemfile index 19515c83..e888ef7d 100644 --- a/gemfiles/ruby_2_3_hashie_v5.gemfile +++ b/gemfiles/ruby_2_3_hashie_v5.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.3/libs.gemfile") diff --git a/gemfiles/ruby_2_4.gemfile b/gemfiles/ruby_2_4.gemfile index ebbc746d..36a5018d 100644 --- a/gemfiles/ruby_2_4.gemfile +++ b/gemfiles/ruby_2_4.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_2.gemfile") eval_gemfile("modular/multi_xml_v0_5.gemfile") eval_gemfile("modular/rack_v1_6.gemfile") + +eval_gemfile("modular/x_std_libs/r2.4/libs.gemfile") diff --git a/gemfiles/ruby_2_5.gemfile b/gemfiles/ruby_2_5.gemfile index 9c78b4de..191c0014 100644 --- a/gemfiles/ruby_2_5.gemfile +++ b/gemfiles/ruby_2_5.gemfile @@ -15,3 +15,5 @@ eval_gemfile("modular/logger_v1_5.gemfile") eval_gemfile("modular/multi_xml_v0_6.gemfile") eval_gemfile("modular/rack_v2.gemfile") + +eval_gemfile("modular/x_std_libs/r2.6/libs.gemfile") diff --git a/gemfiles/ruby_2_6.gemfile b/gemfiles/ruby_2_6.gemfile index c90a047f..547d3f94 100644 --- a/gemfiles/ruby_2_6.gemfile +++ b/gemfiles/ruby_2_6.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_5.gemfile") eval_gemfile("modular/multi_xml_v0_6.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r2.6/libs.gemfile") diff --git a/gemfiles/ruby_2_7.gemfile b/gemfiles/ruby_2_7.gemfile index 2da4dda0..1a3262a4 100644 --- a/gemfiles/ruby_2_7.gemfile +++ b/gemfiles/ruby_2_7.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_6.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3.1/libs.gemfile") diff --git a/gemfiles/ruby_3_0.gemfile b/gemfiles/ruby_3_0.gemfile index 7fed3524..92db0fcb 100644 --- a/gemfiles/ruby_3_0.gemfile +++ b/gemfiles/ruby_3_0.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_6.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3.1/libs.gemfile") diff --git a/gemfiles/ruby_3_1.gemfile b/gemfiles/ruby_3_1.gemfile index 7fed3524..92db0fcb 100644 --- a/gemfiles/ruby_3_1.gemfile +++ b/gemfiles/ruby_3_1.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_6.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3.1/libs.gemfile") diff --git a/gemfiles/ruby_3_2.gemfile b/gemfiles/ruby_3_2.gemfile index 562e0116..7c4e1ec7 100644 --- a/gemfiles/ruby_3_2.gemfile +++ b/gemfiles/ruby_3_2.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_7.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3/libs.gemfile") diff --git a/gemfiles/ruby_3_3.gemfile b/gemfiles/ruby_3_3.gemfile index 562e0116..7c4e1ec7 100644 --- a/gemfiles/ruby_3_3.gemfile +++ b/gemfiles/ruby_3_3.gemfile @@ -2,9 +2,6 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/faraday_v2.gemfile") @@ -18,3 +15,5 @@ eval_gemfile("modular/logger_v1_7.gemfile") eval_gemfile("modular/multi_xml_v0_7.gemfile") eval_gemfile("modular/rack_v3.gemfile") + +eval_gemfile("modular/x_std_libs/r3/libs.gemfile") diff --git a/gemfiles/style.gemfile b/gemfiles/style.gemfile index bd9f436e..4fd57066 100644 --- a/gemfiles/style.gemfile +++ b/gemfiles/style.gemfile @@ -2,9 +2,8 @@ source "https://rubygems.org" -gem "mutex_m", "~> 0.2" -gem "stringio", "~> 3.0" - gemspec path: "../" eval_gemfile("modular/style.gemfile") + +eval_gemfile("modular/x_std_libs/r3/libs.gemfile") diff --git a/gemfiles/unlocked_deps.gemfile b/gemfiles/unlocked_deps.gemfile index dd719981..31c29e3e 100644 --- a/gemfiles/unlocked_deps.gemfile +++ b/gemfiles/unlocked_deps.gemfile @@ -11,3 +11,5 @@ eval_gemfile("modular/documentation.gemfile") eval_gemfile("modular/style.gemfile") eval_gemfile("modular/optional.gemfile") + +eval_gemfile("modular/x_std_libs.gemfile") diff --git a/oauth2.gemspec b/oauth2.gemspec index b75ce7e4..58fb10c1 100644 --- a/oauth2.gemspec +++ b/oauth2.gemspec @@ -148,10 +148,57 @@ Thanks, @pboling / @galtzo # Development dependencies that require strictly newer Ruby versions should be in a "gemfile", # and preferably a modular one (see gemfiles/modular/*.gemfile). - # Dev, Test, & Release Tasks spec.add_development_dependency("addressable", "~> 2.8", ">= 2.8.7") # ruby >= 2.2 spec.add_development_dependency("backports", "~> 3.25", ">= 3.25.1") # ruby >= 0 - spec.add_development_dependency("kettle-dev", "~> 1.0", ">= 1.0.24") # ruby >= 2.3 spec.add_development_dependency("nkf", "~> 0.2") # ruby >= 2.3 spec.add_development_dependency("rexml", "~> 3.2", ">= 3.2.5") # ruby >= 0 + + # Dev, Test, & Release Tasks + spec.add_development_dependency("kettle-dev", "~> 1.1", ">= 1.1.9") # ruby >= 2.3 + + # Security + spec.add_development_dependency("bundler-audit", "~> 0.9.2") # ruby >= 2.0.0 + + # Tasks + spec.add_development_dependency("rake", "~> 13.0") # ruby >= 2.2.0 + + # Debugging + spec.add_development_dependency("require_bench", "~> 1.0", ">= 1.0.4") # ruby >= 2.2.0 + + # Testing + spec.add_development_dependency("appraisal2", "~> 3.0") # ruby >= 1.8.7, for testing against multiple versions of dependencies + spec.add_development_dependency("kettle-test", "~> 1.0") # ruby >= 2.3 + spec.add_development_dependency("rspec-pending_for", "~> 0.0", ">= 0.0.17") # ruby >= 2.3, used to skip specs on incompatible Rubies + + # Releasing + spec.add_development_dependency("ruby-progressbar", "~> 1.13") # ruby >= 0 + spec.add_development_dependency("stone_checksums", "~> 1.0", ">= 1.0.2") # ruby >= 2.2.0 + + # Git integration (optional) + # The 'git' gem is optional; oauth2 falls back to shelling out to `git` if it is not present. + # The current release of the git gem depends on activesupport, which makes it too heavy to depend on directly + # spec.add_dependency("git", ">= 1.19.1") # ruby >= 2.3 + + # Development tasks + # The cake is a lie. erb v2.2, the oldest release on RubyGems.org, was never compatible with Ruby 2.3. + # This means we have no choice but to use the erb that shipped with Ruby 2.3 + # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError) + # spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch. + spec.add_development_dependency("gitmoji-regex", "~> 1.0", ">= 1.0.3") # ruby >= 2.3.0 + + # HTTP recording for deterministic specs + # It seems that somehow just having a newer version of appraisal installed breaks + # Ruby 2.3 and 2.4 even if their bundle specifies an older version, + # and as a result it can only be a dependency in the appraisals. + # | An error occurred while loading spec_helper. + # | Failure/Error: require "vcr" + # | + # | NoMethodError: + # | undefined method `delete_prefix' for "CONTENT_LENGTH":String + # | # ./spec/config/vcr.rb:3:in `require' + # | # ./spec/config/vcr.rb:3:in `' + # | # ./spec/spec_helper.rb:8:in `require_relative' + # | # ./spec/spec_helper.rb:8:in `' + # spec.add_development_dependency("vcr", ">= 4") # 6.0 claims to support ruby >= 2.3, but fails on ruby 2.4 + # spec.add_development_dependency("webmock", ">= 3") # Last version to support ruby >= 2.3 end diff --git a/spec/ext/backports.rb b/spec/ext/backports.rb index 21f76e1c..322d8f4d 100644 --- a/spec/ext/backports.rb +++ b/spec/ext/backports.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true require "backports/2.5.0/hash/transform_keys" +require "backports/2.5.0/string/delete_prefix"