diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0278121d1..002185fe2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,6 +16,7 @@ jobs: - 3.2 - 3.3 - 3.4 + - '4.0' gemfile: - gemfiles/rails_4_2.gemfile - gemfiles/rails_5_0.gemfile @@ -23,6 +24,8 @@ jobs: - gemfiles/rails_5_2.gemfile - gemfiles/rails_6_0.gemfile - gemfiles/rails_7_0.gemfile + - gemfiles/rails_8_0.gemfile + - gemfiles/rails_8_1.gemfile db: - sqlite - mysql @@ -122,6 +125,34 @@ jobs: gemfile: gemfiles/rails_5_2.gemfile - ruby: 3.4 gemfile: gemfiles/rails_6_0.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_4_2.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_5_0.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_5_1.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_5_2.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_6_0.gemfile + - ruby: '4.0' + gemfile: gemfiles/rails_7_0.gemfile + - ruby: 2.7 + gemfile: gemfiles/rails_8_0.gemfile + - ruby: 2.7 + gemfile: gemfiles/rails_8_1.gemfile + - ruby: '3.0' + gemfile: gemfiles/rails_8_0.gemfile + - ruby: '3.0' + gemfile: gemfiles/rails_8_1.gemfile + - ruby: 3.1 + gemfile: gemfiles/rails_8_0.gemfile + - ruby: 3.1 + gemfile: gemfiles/rails_8_1.gemfile + - ruby: 3.2 + gemfile: gemfiles/rails_8_0.gemfile + - ruby: 3.2 + gemfile: gemfiles/rails_8_1.gemfile services: mysql: diff --git a/Appraisals b/Appraisals index bd13707bf..3c969c433 100644 --- a/Appraisals +++ b/Appraisals @@ -44,3 +44,18 @@ end gem 'mongoid-locker', '~> 1.0' end end + +[ + { name: '8-0', version: '8.0' }, + { name: '8-1', version: '8.1' } +].each do |rails| + appraise "rails-#{rails[:name]}" do + gem 'rails', "~> #{rails[:version]}" + gem 'sqlite3', '~> 2.1' + gem 'mysql2' + gem 'pg' + group :development, :test do + gem 'minitest-rails', "~> #{rails[:version]}" + end + end +end diff --git a/Gemfile b/Gemfile index 752d2da23..227dd86f1 100644 --- a/Gemfile +++ b/Gemfile @@ -36,7 +36,7 @@ group :development, :test do gem 'fuzz_ball' gem 'minitest' gem 'minitest-focus' - gem 'minitest-rails', '~> 7' + gem 'minitest-rails' gem 'minitest-reporters' gem 'mocha', '>= 1.5' gem 'pry' diff --git a/devise_token_auth.gemspec b/devise_token_auth.gemspec index e89f4d796..22c35d401 100644 --- a/devise_token_auth.gemspec +++ b/devise_token_auth.gemspec @@ -27,9 +27,9 @@ Gem::Specification.new do |s| s.add_dependency 'bcrypt', '~> 3.0' s.add_development_dependency 'appraisal' - s.add_development_dependency 'sqlite3', '~> 1.4' + s.add_development_dependency 'sqlite3' s.add_development_dependency 'pg' s.add_development_dependency 'mysql2' - s.add_development_dependency 'mongoid', '>= 4', '< 8' + s.add_development_dependency 'mongoid', '>= 4' s.add_development_dependency 'mongoid-locker', '>= 1.0', '< 3.0' end diff --git a/gemfiles/rails_8_0.gemfile b/gemfiles/rails_8_0.gemfile new file mode 100644 index 000000000..3a616f262 --- /dev/null +++ b/gemfiles/rails_8_0.gemfile @@ -0,0 +1,42 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "omniauth", "~> 2.0" +gem "omniauth-rails_csrf_protection" +gem "rails", "~> 8.0" +gem "sqlite3", "~> 2.1" +gem "mysql2" +gem "pg" + +group :development, :test do + gem "attr_encrypted" + gem "figaro", "~> 1.2" + gem "omniauth-facebook" + gem "omniauth-github" + gem "omniauth-google-oauth2" + gem "omniauth-apple" + gem "rack-cors" + gem "thor", "~> 1.2" + gem "database_cleaner" + gem "factory_bot_rails" + gem "faker", "~> 3.2" + gem "fuzz_ball" + gem "minitest" + gem "minitest-focus" + gem "minitest-rails", "~> 8.0" + gem "minitest-reporters" + gem "mocha", ">= 1.5" + gem "rubocop", require: false +end + +group :test do + gem "rails-controller-testing" + gem "simplecov", require: false +end + +group :development do + gem "github_changelog_generator" +end + +gemspec path: "../" diff --git a/gemfiles/rails_8_1.gemfile b/gemfiles/rails_8_1.gemfile new file mode 100644 index 000000000..4dcccbe19 --- /dev/null +++ b/gemfiles/rails_8_1.gemfile @@ -0,0 +1,42 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "omniauth", "~> 2.0" +gem "omniauth-rails_csrf_protection" +gem "rails", "~> 8.1" +gem "sqlite3", "~> 2.1" +gem "mysql2" +gem "pg" + +group :development, :test do + gem "attr_encrypted" + gem "figaro", "~> 1.2" + gem "omniauth-facebook" + gem "omniauth-github" + gem "omniauth-google-oauth2" + gem "omniauth-apple" + gem "rack-cors" + gem "thor", "~> 1.2" + gem "database_cleaner" + gem "factory_bot_rails" + gem "faker", "~> 3.2" + gem "fuzz_ball" + gem "minitest" + gem "minitest-focus" + gem "minitest-rails", "~> 8.1" + gem "minitest-reporters" + gem "mocha", ">= 1.5" + gem "rubocop", require: false +end + +group :test do + gem "rails-controller-testing" + gem "simplecov", require: false +end + +group :development do + gem "github_changelog_generator" +end + +gemspec path: "../" diff --git a/lib/devise_token_auth/rails/routes.rb b/lib/devise_token_auth/rails/routes.rb index 8c716759b..905f098a0 100644 --- a/lib/devise_token_auth/rails/routes.rb +++ b/lib/devise_token_auth/rails/routes.rb @@ -76,7 +76,8 @@ def mount_devise_token_auth_for(resource, opts) match "#{full_path}/:provider", to: redirect(status: 307) { |params, request| # get the current querystring # TODO: deprecate in favor of using params - qs = CGI::parse(request.env['QUERY_STRING'].empty? ? request.body.read : request.env['QUERY_STRING'] ) + query_string = request.env['QUERY_STRING'].empty? ? request.body.read : request.env['QUERY_STRING'] + qs = URI.decode_www_form(query_string).group_by(&:first).transform_values { |pairs| pairs.map(&:last) } # append name of current resource qs['resource_class'] = [resource] diff --git a/test/test_helper.rb b/test/test_helper.rb index ef019e2fa..6917e746f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -38,7 +38,13 @@ def follow_all_redirects! class ActiveSupport::TestCase include FactoryBot::Syntax::Methods - ActiveRecord::Migration.check_pending! if DEVISE_TOKEN_AUTH_ORM == :active_record + if DEVISE_TOKEN_AUTH_ORM == :active_record + if ActiveRecord::Migration.respond_to?(:check_all_pending!) + ActiveRecord::Migration.check_all_pending! + else + ActiveRecord::Migration.check_pending! + end + end strategies = { active_record: :transaction, mongoid: :deletion }