From c6814e61ee6e9100f19bfb965b67b7d0329233db Mon Sep 17 00:00:00 2001
From: Roberto Vasquez Angel <roberto.vasquez-angel@flip4new.de>
Date: Fri, 23 Mar 2018 16:02:05 +0100
Subject: [PATCH 01/62] Remove force flag from migration

This prevents potential destruction of already existent data.
---
 lib/generators/delayed_job/templates/migration.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/generators/delayed_job/templates/migration.rb b/lib/generators/delayed_job/templates/migration.rb
index bb90f0b0..6269ff0a 100644
--- a/lib/generators/delayed_job/templates/migration.rb
+++ b/lib/generators/delayed_job/templates/migration.rb
@@ -1,6 +1,6 @@
 class CreateDelayedJobs < ActiveRecord::Migration<%= migration_version %>
   def self.up
-    create_table :delayed_jobs, force: true do |table|
+    create_table :delayed_jobs do |table|
       table.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue
       table.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually.
       table.text :handler,                 null: false # YAML-encoded string of the object that will do work

From 9e35c2e63062fab947c3081dac276a2db950bac3 Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@pcfry.com>
Date: Wed, 6 Feb 2019 14:48:37 -0800
Subject: [PATCH 02/62] Optimize default sql performance

Instead of reading the entire job record for our detect loop, just pluck the ID, and only read the job record after we've successfully locked the job.
---
 lib/delayed/backend/active_record.rb | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index b69fd050..83e72105 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -109,11 +109,15 @@ def self.reserve_with_scope_using_optimized_sql(ready_scope, worker, now)
         end
 
         def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
-          # This is our old fashion, tried and true, but slower lookup
-          ready_scope.limit(worker.read_ahead).detect do |job|
-            count = ready_scope.where(id: job.id).update_all(locked_at: now, locked_by: worker.name)
-            count == 1 && job.reload
+          # This is our old fashion, tried and true, but possibly slower lookup
+          # Instead of reading the entire job record for our detect loop, just pluck the ID,
+          # and only read the job record after we've successfully locked the job.
+          locked_job_id = ready_scope.limit(worker.read_ahead).pluck(:id).detect do |job_id|
+            count = ready_scope.where(id: job_id).update_all(locked_at: now, locked_by: worker.name)
+            count == 1
           end
+
+          where(id: locked_job_id).first if locked_job_id
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From d3036fa3c9354daca0a6130f0aaa0e7418bdc915 Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@pcfry.com>
Date: Thu, 7 Feb 2019 13:31:52 -0800
Subject: [PATCH 03/62] Update notes

---
 lib/delayed/backend/active_record.rb | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index 83e72105..efa58128 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -112,6 +112,9 @@ def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
           # This is our old fashion, tried and true, but possibly slower lookup
           # Instead of reading the entire job record for our detect loop, just pluck the ID,
           # and only read the job record after we've successfully locked the job.
+          # This can be particularly helpful when operating a large job cluster that uses
+          # a large read_ahead value to increase the odds of successfully locking a job with
+          # one method call to reserve_with_scope.
           locked_job_id = ready_scope.limit(worker.read_ahead).pluck(:id).detect do |job_id|
             count = ready_scope.where(id: job_id).update_all(locked_at: now, locked_by: worker.name)
             count == 1

From 49c33f212641a64de999c216b0863f6e8e4b48df Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@fry.sh>
Date: Tue, 12 Feb 2019 11:40:16 -0800
Subject: [PATCH 04/62] Use `find_by` instead of `where` to avoid implicit
 ordering

---
 lib/delayed/backend/active_record.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index efa58128..7304e2e4 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -120,7 +120,7 @@ def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
             count == 1
           end
 
-          where(id: locked_job_id).first if locked_job_id
+          find_by(id: locked_job_id) if locked_job_id
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From 17de0daab8bcbb42029048610250750fce94dccd Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 14:05:59 -0500
Subject: [PATCH 05/62] Active record does not yet work with sqlite 1.4

---
 gemfiles/sqlite3/3-0.gemfile | 2 +-
 gemfiles/sqlite3/3-1.gemfile | 2 +-
 gemfiles/sqlite3/3-2.gemfile | 2 +-
 gemfiles/sqlite3/4-0.gemfile | 2 +-
 gemfiles/sqlite3/4-1.gemfile | 2 +-
 gemfiles/sqlite3/4-2.gemfile | 2 +-
 gemfiles/sqlite3/5-0.gemfile | 2 +-
 gemfiles/sqlite3/5-1.gemfile | 2 +-
 gemfiles/sqlite3/5-2.gemfile | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/gemfiles/sqlite3/3-0.gemfile b/gemfiles/sqlite3/3-0.gemfile
index 71b10b4e..72f85ee8 100644
--- a/gemfiles/sqlite3/3-0.gemfile
+++ b/gemfiles/sqlite3/3-0.gemfile
@@ -3,7 +3,7 @@ source "https://rubygems.org"
 gem "rake"
 
 group :test do
-  gem "sqlite3"
+  gem "sqlite3", "< 1.4"
 
   gem "coveralls", require: false
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/3-1.gemfile b/gemfiles/sqlite3/3-1.gemfile
index 0099efad..ce158ca9 100644
--- a/gemfiles/sqlite3/3-1.gemfile
+++ b/gemfiles/sqlite3/3-1.gemfile
@@ -3,7 +3,7 @@ source "https://rubygems.org"
 gem "rake"
 
 group :test do
-  gem "sqlite3"
+  gem "sqlite3", "< 1.4"
 
   gem "coveralls", require: false
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/3-2.gemfile b/gemfiles/sqlite3/3-2.gemfile
index bb3394ea..a7fb4656 100644
--- a/gemfiles/sqlite3/3-2.gemfile
+++ b/gemfiles/sqlite3/3-2.gemfile
@@ -3,7 +3,7 @@ source "https://rubygems.org"
 gem "rake"
 
 group :test do
-  gem "sqlite3"
+  gem "sqlite3", "< 1.4"
 
   gem "coveralls", require: false
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/4-0.gemfile b/gemfiles/sqlite3/4-0.gemfile
index ba3e3327..634c13ec 100644
--- a/gemfiles/sqlite3/4-0.gemfile
+++ b/gemfiles/sqlite3/4-0.gemfile
@@ -3,7 +3,7 @@ source "https://rubygems.org"
 gem "rake"
 
 group :test do
-  gem "sqlite3"
+  gem "sqlite3", "< 1.4"
 
   gem "coveralls", require: false
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/4-1.gemfile b/gemfiles/sqlite3/4-1.gemfile
index 94a01013..03aafa9b 100644
--- a/gemfiles/sqlite3/4-1.gemfile
+++ b/gemfiles/sqlite3/4-1.gemfile
@@ -3,7 +3,7 @@ source "https://rubygems.org"
 gem "rake"
 
 group :test do
-  gem "sqlite3"
+  gem "sqlite3", "< 1.4"
 
   gem "coveralls", require: false
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index a2ae2f44..9c46aabf 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -8,7 +8,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3"
+    gem "sqlite3", "< 1.4"
   end
 
   gem "coveralls", require: false
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index bc6e076c..83d1ae25 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -8,7 +8,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3"
+    gem "sqlite3", "< 1.4"
   end
 
   gem "coveralls", require: false
diff --git a/gemfiles/sqlite3/5-1.gemfile b/gemfiles/sqlite3/5-1.gemfile
index 4c803830..aff40f70 100644
--- a/gemfiles/sqlite3/5-1.gemfile
+++ b/gemfiles/sqlite3/5-1.gemfile
@@ -8,7 +8,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3"
+    gem "sqlite3", "< 1.4"
   end
 
   gem "coveralls", require: false
diff --git a/gemfiles/sqlite3/5-2.gemfile b/gemfiles/sqlite3/5-2.gemfile
index 6dc5a0a0..1781b4f1 100644
--- a/gemfiles/sqlite3/5-2.gemfile
+++ b/gemfiles/sqlite3/5-2.gemfile
@@ -8,7 +8,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3"
+    gem "sqlite3", "< 1.4"
   end
 
   gem "coveralls", require: false

From 00eb050fa732f36c3b1b09af8b082fb5567e2f49 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 14:14:49 -0500
Subject: [PATCH 06/62] Update ruby versions

---
 .travis.yml | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 88be7086..67e4b467 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,9 +22,10 @@ gemfile: # Supported
   - gemfiles/sqlite3/5-1.gemfile
   - gemfiles/sqlite3/5-2.gemfile
 rvm: # Supported
-  - 2.2.10
-  - 2.3.7
-  - 2.4.4
+  - 2.3.8
+  - 2.4.5
+  - 2.5.3
+  - 2.6.1
   - jruby-9.1.8.0
 
 jdk: oraclejdk8
@@ -62,25 +63,18 @@ matrix:
     #
     # The future
     #
-    # MRI 2.5.1
-    - rvm: 2.5.1
-      gemfile: gemfiles/mysql2/5-1.gemfile
-    - rvm: 2.5.1
-      gemfile: gemfiles/postgresql/5-1.gemfile
-    - rvm: 2.5.1
-      gemfile: gemfiles/sqlite3/5-1.gemfile
-    - rvm: 2.5.1
-      gemfile: gemfiles/mysql2/5-2.gemfile
-    - rvm: 2.5.1
-      gemfile: gemfiles/postgresql/5-2.gemfile
-    - rvm: 2.5.1
-      gemfile: gemfiles/sqlite3/5-2.gemfile
     # Active Record head
-    - rvm: 2.5.1
+    - rvm: 2.5.3
       gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.5.1
+    - rvm: 2.5.3
       gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.5.1
+    - rvm: 2.5.3
+      gemfile: gemfiles/sqlite3/master.gemfile
+    - rvm: 2.6.1
+      gemfile: gemfiles/mysql2/master.gemfile
+    - rvm: 2.6.1
+      gemfile: gemfiles/postgresql/master.gemfile
+    - rvm: 2.6.1
       gemfile: gemfiles/sqlite3/master.gemfile
     # MRI Ruby head
     - rvm: ruby-head

From c4c130df578ae6b7eb89f5a4b50ca25c0c0d796c Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 14:27:15 -0500
Subject: [PATCH 07/62] Rubocop updates for latest rubocop

---
 .rubocop.yml                         | 3 +++
 gemfiles/.rubocop.yml                | 5 +++++
 lib/delayed/backend/active_record.rb | 3 +++
 3 files changed, 11 insertions(+)
 create mode 100644 gemfiles/.rubocop.yml

diff --git a/.rubocop.yml b/.rubocop.yml
index 48e569cc..69ae01e9 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -77,6 +77,9 @@ Style/FormatString:
 Style/Lambda:
   Enabled: false
 
+Style/MultipleComparison:
+  Enabled: false
+
 Style/NegatedIf:
   Enabled: false
 
diff --git a/gemfiles/.rubocop.yml b/gemfiles/.rubocop.yml
new file mode 100644
index 00000000..d10863b5
--- /dev/null
+++ b/gemfiles/.rubocop.yml
@@ -0,0 +1,5 @@
+inherit_from:
+  - ../.rubocop.yml
+
+Naming/FileName:
+  Enabled: false
diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index b69fd050..bdb363c1 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -13,6 +13,7 @@ def reserve_sql_strategy=(val)
           if !(val == :optimized_sql || val == :default_sql)
             raise ArgumentError, "allowed values are :optimized_sql or :default_sql"
           end
+
           @reserve_sql_strategy = val
         end
       end
@@ -141,6 +142,7 @@ def self.reserve_with_scope_using_optimized_mysql(ready_scope, worker, now)
           # UPDATE...LIMIT. It uses separate queries to lock and return the job
           count = ready_scope.limit(1).update_all(locked_at: now, locked_by: worker.name)
           return nil if count == 0
+
           where(locked_at: now, locked_by: worker.name, failed_at: nil).first
         end
 
@@ -154,6 +156,7 @@ def self.reserve_with_scope_using_optimized_mssql(ready_scope, worker, now)
           sql = "UPDATE #{quoted_table_name} SET locked_at = ?, locked_by = ? WHERE id IN (#{subquery_sql})"
           count = connection.execute(sanitize_sql([sql, now, worker.name]))
           return nil if count == 0
+
           # MSSQL JDBC doesn't support OUTPUT INSERTED.* for returning a result set, so query locked row
           where(locked_at: now, locked_by: worker.name, failed_at: nil).first
         end

From 2dab4b99cfd674397c62b35472ed2e22f7eff5b5 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 16 Aug 2019 14:50:12 -0400
Subject: [PATCH 08/62] Bump travis ruby and jdk versions

---
 .travis.yml | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 67e4b467..cd4bd6e8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,12 +23,12 @@ gemfile: # Supported
   - gemfiles/sqlite3/5-2.gemfile
 rvm: # Supported
   - 2.3.8
-  - 2.4.5
-  - 2.5.3
-  - 2.6.1
-  - jruby-9.1.8.0
+  - 2.4.6
+  - 2.5.5
+  - 2.6.3
+  - jruby-9.2.7.0
 
-jdk: oraclejdk8
+jdk: oraclejdk11
 
 matrix:
   allow_failures:
@@ -41,22 +41,22 @@ matrix:
     # The two combinations below are currently broken. We should stop allowing
     # failure as the issue is resolved. See:
     # https://github.com/jruby/activerecord-jdbc-adapter/issues/700
-    - rvm: jruby-9.1.8.0
+    - rvm: jruby-9.2.7.0
       gemfile: gemfiles/mysql2/5-1.gemfile
-    - rvm: jruby-9.1.8.0
+    - rvm: jruby-9.2.7.0
       gemfile: gemfiles/postgresql/5-1.gemfile
-    - rvm: jruby-9.1.8.0
+    - rvm: jruby-9.2.7.0
       gemfile: gemfiles/mysql2/5-2.gemfile
-    - rvm: jruby-9.1.8.0
+    - rvm: jruby-9.2.7.0
       gemfile: gemfiles/postgresql/5-2.gemfile
-    - rvm: jruby-9.1.8.0
+    - rvm: jruby-9.2.7.0
       gemfile: gemfiles/sqlite3/5-2.gemfile
 
   include:
     #
     # Rubocop
     #
-    - rvm: 2.5.1
+    - rvm: 2.5.5
       gemfile: Gemfile
       env:
         - COMMAND=rubocop
@@ -64,17 +64,17 @@ matrix:
     # The future
     #
     # Active Record head
-    - rvm: 2.5.3
+    - rvm: 2.5.5
       gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.5.3
+    - rvm: 2.5.5
       gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.5.3
+    - rvm: 2.5.5
       gemfile: gemfiles/sqlite3/master.gemfile
-    - rvm: 2.6.1
+    - rvm: 2.6.3
       gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.6.1
+    - rvm: 2.6.3
       gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.6.1
+    - rvm: 2.6.3
       gemfile: gemfiles/sqlite3/master.gemfile
     # MRI Ruby head
     - rvm: ruby-head
@@ -129,11 +129,11 @@ matrix:
     - rvm: 2.1.9
       gemfile: gemfiles/sqlite3/4-1.gemfile
     # Rails 5.0 was EOL with the release of 5.2
-    - rvm: 2.4.4
+    - rvm: 2.4.6
       gemfile: gemfiles/mysql2/5-0.gemfile
-    - rvm: 2.4.4
+    - rvm: 2.4.6
       gemfile: gemfiles/postgresql/5-0.gemfile
-    - rvm: 2.4.4
+    - rvm: 2.4.6
       gemfile: gemfiles/sqlite3/5-0.gemfile
     #
     # The parallel dimension

From 6615cf6162667262c5f406c2f652051985b6116a Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 16 Aug 2019 14:54:36 -0400
Subject: [PATCH 09/62] Add required database services

---
 .travis.yml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index cd4bd6e8..6ede0cae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,6 +2,9 @@ language: ruby
 branches:
   only:
     - master
+services:
+  - mysql
+  - postgresql
 before_script:
   - mysql -e 'create database delayed_job_test;'
   - mysql --version

From af6251485070660f5f97a8b828257f00fce43e9c Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 16 Aug 2019 15:09:28 -0400
Subject: [PATCH 10/62] Add frozen_string_literal magic comment

---
 Gemfile                                               | 2 ++
 Rakefile                                              | 2 ++
 delayed_job_active_record.gemspec                     | 2 ++
 gemfiles/mysql2/3-0.gemfile                           | 2 ++
 gemfiles/mysql2/3-1.gemfile                           | 2 ++
 gemfiles/mysql2/3-2.gemfile                           | 2 ++
 gemfiles/mysql2/4-0.gemfile                           | 2 ++
 gemfiles/mysql2/4-1.gemfile                           | 2 ++
 gemfiles/mysql2/4-2.gemfile                           | 2 ++
 gemfiles/mysql2/5-0.gemfile                           | 2 ++
 gemfiles/mysql2/5-1.gemfile                           | 2 ++
 gemfiles/mysql2/5-2.gemfile                           | 2 ++
 gemfiles/mysql2/master.gemfile                        | 2 ++
 gemfiles/postgresql/3-0.gemfile                       | 2 ++
 gemfiles/postgresql/3-1.gemfile                       | 2 ++
 gemfiles/postgresql/3-2.gemfile                       | 2 ++
 gemfiles/postgresql/4-0.gemfile                       | 2 ++
 gemfiles/postgresql/4-1.gemfile                       | 2 ++
 gemfiles/postgresql/4-2.gemfile                       | 2 ++
 gemfiles/postgresql/5-0.gemfile                       | 2 ++
 gemfiles/postgresql/5-1.gemfile                       | 2 ++
 gemfiles/postgresql/5-2.gemfile                       | 2 ++
 gemfiles/postgresql/master.gemfile                    | 2 ++
 gemfiles/sqlite3/3-0.gemfile                          | 2 ++
 gemfiles/sqlite3/3-1.gemfile                          | 2 ++
 gemfiles/sqlite3/3-2.gemfile                          | 2 ++
 gemfiles/sqlite3/4-0.gemfile                          | 2 ++
 gemfiles/sqlite3/4-1.gemfile                          | 2 ++
 gemfiles/sqlite3/4-2.gemfile                          | 2 ++
 gemfiles/sqlite3/5-0.gemfile                          | 2 ++
 gemfiles/sqlite3/5-1.gemfile                          | 2 ++
 gemfiles/sqlite3/5-2.gemfile                          | 2 ++
 gemfiles/sqlite3/master.gemfile                       | 2 ++
 lib/delayed/backend/active_record.rb                  | 2 ++
 lib/delayed_job_active_record.rb                      | 2 ++
 lib/generators/delayed_job/active_record_generator.rb | 2 ++
 lib/generators/delayed_job/next_migration_version.rb  | 2 ++
 lib/generators/delayed_job/upgrade_generator.rb       | 2 ++
 spec/delayed/backend/active_record_spec.rb            | 2 ++
 spec/delayed/serialization/active_record_spec.rb      | 2 ++
 spec/helper.rb                                        | 2 ++
 41 files changed, 82 insertions(+)

diff --git a/Gemfile b/Gemfile
index 6a063649..9f750668 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/Rakefile b/Rakefile
index b8d3c778..3ce82364 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "bundler/gem_helper"
 Bundler::GemHelper.install_tasks
 
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index f0c5f348..4972524d 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 Gem::Specification.new do |spec|
   spec.add_dependency "activerecord", [">= 3.0", "< 5.3"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
diff --git a/gemfiles/mysql2/3-0.gemfile b/gemfiles/mysql2/3-0.gemfile
index 836d9985..e19ab399 100644
--- a/gemfiles/mysql2/3-0.gemfile
+++ b/gemfiles/mysql2/3-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/3-1.gemfile b/gemfiles/mysql2/3-1.gemfile
index 5eb7ed81..e7529864 100644
--- a/gemfiles/mysql2/3-1.gemfile
+++ b/gemfiles/mysql2/3-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/3-2.gemfile b/gemfiles/mysql2/3-2.gemfile
index 2fd7011f..e6c599c2 100644
--- a/gemfiles/mysql2/3-2.gemfile
+++ b/gemfiles/mysql2/3-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/4-0.gemfile b/gemfiles/mysql2/4-0.gemfile
index a7720eb1..416eced7 100644
--- a/gemfiles/mysql2/4-0.gemfile
+++ b/gemfiles/mysql2/4-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/4-1.gemfile b/gemfiles/mysql2/4-1.gemfile
index 6f204a0e..9d0d5602 100644
--- a/gemfiles/mysql2/4-1.gemfile
+++ b/gemfiles/mysql2/4-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/4-2.gemfile b/gemfiles/mysql2/4-2.gemfile
index 7e633d79..8a8610fc 100644
--- a/gemfiles/mysql2/4-2.gemfile
+++ b/gemfiles/mysql2/4-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/5-0.gemfile b/gemfiles/mysql2/5-0.gemfile
index 4c7d7d7d..dcf5d4ec 100644
--- a/gemfiles/mysql2/5-0.gemfile
+++ b/gemfiles/mysql2/5-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/5-1.gemfile b/gemfiles/mysql2/5-1.gemfile
index 249d3d2e..2a66992a 100644
--- a/gemfiles/mysql2/5-1.gemfile
+++ b/gemfiles/mysql2/5-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/5-2.gemfile b/gemfiles/mysql2/5-2.gemfile
index ff77e119..58c89300 100644
--- a/gemfiles/mysql2/5-2.gemfile
+++ b/gemfiles/mysql2/5-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index 65659451..57ac46a5 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/3-0.gemfile b/gemfiles/postgresql/3-0.gemfile
index b46ce039..5df71c60 100644
--- a/gemfiles/postgresql/3-0.gemfile
+++ b/gemfiles/postgresql/3-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/3-1.gemfile b/gemfiles/postgresql/3-1.gemfile
index 4fb54b95..96685679 100644
--- a/gemfiles/postgresql/3-1.gemfile
+++ b/gemfiles/postgresql/3-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/3-2.gemfile b/gemfiles/postgresql/3-2.gemfile
index e6ce602e..71cae40f 100644
--- a/gemfiles/postgresql/3-2.gemfile
+++ b/gemfiles/postgresql/3-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/4-0.gemfile b/gemfiles/postgresql/4-0.gemfile
index 31fba425..411d8bc6 100644
--- a/gemfiles/postgresql/4-0.gemfile
+++ b/gemfiles/postgresql/4-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/4-1.gemfile b/gemfiles/postgresql/4-1.gemfile
index 278501c1..ed86751f 100644
--- a/gemfiles/postgresql/4-1.gemfile
+++ b/gemfiles/postgresql/4-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/4-2.gemfile b/gemfiles/postgresql/4-2.gemfile
index 047833e4..ee591074 100644
--- a/gemfiles/postgresql/4-2.gemfile
+++ b/gemfiles/postgresql/4-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/5-0.gemfile b/gemfiles/postgresql/5-0.gemfile
index 3c71ef69..a0797428 100644
--- a/gemfiles/postgresql/5-0.gemfile
+++ b/gemfiles/postgresql/5-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/5-1.gemfile b/gemfiles/postgresql/5-1.gemfile
index 34e0c203..620753fc 100644
--- a/gemfiles/postgresql/5-1.gemfile
+++ b/gemfiles/postgresql/5-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/5-2.gemfile b/gemfiles/postgresql/5-2.gemfile
index e95902c7..141d9c42 100644
--- a/gemfiles/postgresql/5-2.gemfile
+++ b/gemfiles/postgresql/5-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index 7ac422ba..55b60817 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/3-0.gemfile b/gemfiles/sqlite3/3-0.gemfile
index 72f85ee8..51e1554a 100644
--- a/gemfiles/sqlite3/3-0.gemfile
+++ b/gemfiles/sqlite3/3-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/3-1.gemfile b/gemfiles/sqlite3/3-1.gemfile
index ce158ca9..f19ef48e 100644
--- a/gemfiles/sqlite3/3-1.gemfile
+++ b/gemfiles/sqlite3/3-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/3-2.gemfile b/gemfiles/sqlite3/3-2.gemfile
index a7fb4656..6717b18c 100644
--- a/gemfiles/sqlite3/3-2.gemfile
+++ b/gemfiles/sqlite3/3-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/4-0.gemfile b/gemfiles/sqlite3/4-0.gemfile
index 634c13ec..4f2a0231 100644
--- a/gemfiles/sqlite3/4-0.gemfile
+++ b/gemfiles/sqlite3/4-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/4-1.gemfile b/gemfiles/sqlite3/4-1.gemfile
index 03aafa9b..db43063d 100644
--- a/gemfiles/sqlite3/4-1.gemfile
+++ b/gemfiles/sqlite3/4-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index 9c46aabf..43c159c9 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index 83d1ae25..e1dcc3ca 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/5-1.gemfile b/gemfiles/sqlite3/5-1.gemfile
index aff40f70..b194e9c0 100644
--- a/gemfiles/sqlite3/5-1.gemfile
+++ b/gemfiles/sqlite3/5-1.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/5-2.gemfile b/gemfiles/sqlite3/5-2.gemfile
index 1781b4f1..4e133eb0 100644
--- a/gemfiles/sqlite3/5-2.gemfile
+++ b/gemfiles/sqlite3/5-2.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index afd2bf9a..f3bd9885 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 gem "rake"
diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index bdb363c1..691a7f9a 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "active_record/version"
 module Delayed
   module Backend
diff --git a/lib/delayed_job_active_record.rb b/lib/delayed_job_active_record.rb
index e6efd295..a09638e6 100644
--- a/lib/delayed_job_active_record.rb
+++ b/lib/delayed_job_active_record.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "active_record"
 require "delayed_job"
 require "delayed/backend/active_record"
diff --git a/lib/generators/delayed_job/active_record_generator.rb b/lib/generators/delayed_job/active_record_generator.rb
index 3370f06b..b196a553 100644
--- a/lib/generators/delayed_job/active_record_generator.rb
+++ b/lib/generators/delayed_job/active_record_generator.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "generators/delayed_job/delayed_job_generator"
 require "generators/delayed_job/next_migration_version"
 require "rails/generators/migration"
diff --git a/lib/generators/delayed_job/next_migration_version.rb b/lib/generators/delayed_job/next_migration_version.rb
index 64983128..0eb0b8de 100644
--- a/lib/generators/delayed_job/next_migration_version.rb
+++ b/lib/generators/delayed_job/next_migration_version.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module DelayedJob
   module NextMigrationVersion
     # while methods have moved around this has been the implementation
diff --git a/lib/generators/delayed_job/upgrade_generator.rb b/lib/generators/delayed_job/upgrade_generator.rb
index 2383f5ac..90a19773 100644
--- a/lib/generators/delayed_job/upgrade_generator.rb
+++ b/lib/generators/delayed_job/upgrade_generator.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "generators/delayed_job/delayed_job_generator"
 require "generators/delayed_job/next_migration_version"
 require "rails/generators/migration"
diff --git a/spec/delayed/backend/active_record_spec.rb b/spec/delayed/backend/active_record_spec.rb
index dd7bad96..16820420 100644
--- a/spec/delayed/backend/active_record_spec.rb
+++ b/spec/delayed/backend/active_record_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "helper"
 require "delayed/backend/active_record"
 
diff --git a/spec/delayed/serialization/active_record_spec.rb b/spec/delayed/serialization/active_record_spec.rb
index dbc4afae..4aa27f11 100644
--- a/spec/delayed/serialization/active_record_spec.rb
+++ b/spec/delayed/serialization/active_record_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "helper"
 
 describe ActiveRecord do
diff --git a/spec/helper.rb b/spec/helper.rb
index 80f3c280..06acfa35 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require "simplecov"
 require "coveralls"
 

From 0b3a9eedfc0f7462ac427ecb91ee790caa3eac15 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 16 Aug 2019 15:09:49 -0400
Subject: [PATCH 11/62] Correct rubocop configuration

---
 .rubocop.yml | 5 +++--
 Gemfile      | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/.rubocop.yml b/.rubocop.yml
index 69ae01e9..7a3adf27 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,5 +1,6 @@
-# Load the rubocop-rspec gem
-require: rubocop-rspec
+require:
+  - rubocop-rails
+  - rubocop-rspec
 
 Rails:
   Enabled: true
diff --git a/Gemfile b/Gemfile
index 9f750668..7580756e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -20,6 +20,7 @@ group :test do
   gem "coveralls", require: false
   gem "rspec", ">= 3"
   gem "rubocop"
+  gem "rubocop-rails"
   gem "rubocop-rspec"
   gem "simplecov", require: false
 end

From 5429c1a38e48bcbc3d9a8daf2c398a84b205adf5 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 16 Aug 2019 15:56:41 -0400
Subject: [PATCH 12/62] Drop old mysql activerecord builds

ActiveRecord <= 4.0 are not compatible with mysql 5.7. Choosing to drop these out of our test runs.
---
 .travis.yml | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6ede0cae..bca7c8ab 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -98,18 +98,12 @@ matrix:
     #
     # EOL Active Record
     # Rails 3.2 was maintained longer and is ruby 2.2 compatible
-    - rvm: 2.2.10
-      gemfile: gemfiles/mysql2/3-2.gemfile
     - rvm: 2.2.10
       gemfile: gemfiles/postgresql/3-2.gemfile
     - rvm: 2.2.10
       gemfile: gemfiles/sqlite3/3-2.gemfile
     # Rails <= 4.0 was only compatible with ruby 2.0
     # The test were running, but there are known incompatibilites
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/mysql2/3-0.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/mysql2/3-1.gemfile
     - rvm: 2.0.0-p648
       gemfile: gemfiles/postgresql/3-0.gemfile
     - rvm: 2.0.0-p648
@@ -118,8 +112,6 @@ matrix:
       gemfile: gemfiles/sqlite3/3-0.gemfile
     - rvm: 2.0.0-p648
       gemfile: gemfiles/sqlite3/3-1.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/mysql2/4-0.gemfile
     - rvm: 2.0.0-p648
       gemfile: gemfiles/postgresql/4-0.gemfile
     - rvm: 2.0.0-p648

From 745410dc2f89cfb9b85cce2e805d22752703b43e Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 14:55:42 -0500
Subject: [PATCH 13/62] Allow active record 6.0

---
 delayed_job_active_record.gemspec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 4972524d..c1775b75 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 Gem::Specification.new do |spec|
-  spec.add_dependency "activerecord", [">= 3.0", "< 5.3"]
+  spec.add_dependency "activerecord", [">= 3.0", "< 6.1"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
   spec.authors        = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
   spec.description    = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"

From ece98a3454a882fb5dddd7f21cdaa748e19a4fcb Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 14:57:20 -0500
Subject: [PATCH 14/62] Temporarily point at our compatibility branch

---
 gemfiles/mysql2/master.gemfile     | 2 ++
 gemfiles/postgresql/master.gemfile | 2 ++
 gemfiles/sqlite3/master.gemfile    | 2 ++
 3 files changed, 6 insertions(+)

diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index 57ac46a5..e410d041 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -20,4 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
+gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+
 gemspec path: "../../"
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index 55b60817..bb0cdbd8 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -20,4 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
+gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+
 gemspec path: "../../"
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index f3bd9885..8481670c 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -20,4 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
+gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+
 gemspec path: "../../"

From 1307e3dbc420a75e53a9564c2ec5803ab17512f6 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 18 Feb 2019 15:17:30 -0500
Subject: [PATCH 15/62] Bump postgres

---
 .travis.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index bca7c8ab..40cc3b5e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,6 +5,8 @@ branches:
 services:
   - mysql
   - postgresql
+addons:
+  postgresql: '9.6'
 before_script:
   - mysql -e 'create database delayed_job_test;'
   - mysql --version

From 340add1d3443bd41f8ec06e50d7b104f1a03dc2b Mon Sep 17 00:00:00 2001
From: Petrik <petrik@deheus.net>
Date: Tue, 9 Jul 2019 20:30:51 +0200
Subject: [PATCH 16/62] Fix primary key issue for Rails 3.x and 4.0 and mysql
 5.7

MySQL 5.7 no longer supports null default values for the primary key.
Override the Native default for primary keys in MySql.
https://stackoverflow.com/a/34555109
---
 spec/helper.rb | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/spec/helper.rb b/spec/helper.rb
index 06acfa35..337771de 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -38,6 +38,17 @@
 ActiveRecord::Base.logger = Delayed::Worker.logger
 ActiveRecord::Migration.verbose = false
 
+# MySQL 5.7 no longer supports null default values for the primary key
+# Override the default primary key type in Rails <= 4.0
+# https://stackoverflow.com/a/34555109
+if db_adapter == "mysql2" &&
+   (::ActiveRecord::VERSION::MAJOR == 3 ||
+   (::ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0))
+  class ActiveRecord::ConnectionAdapters::Mysql2Adapter
+    NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
+  end
+end
+
 migration_template = File.open("lib/generators/delayed_job/templates/migration.rb")
 
 # need to eval the template with the migration_version intact

From 80b373625bf1b1f4f41ce780e9fad250bd61665d Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Tue, 20 Aug 2019 11:12:52 -0400
Subject: [PATCH 17/62] Tweak patch for mysql2 primary key

For most versions the constant actually lives under `AbstractMysqlAdapter`
---
 spec/helper.rb | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/spec/helper.rb b/spec/helper.rb
index 337771de..0da3ba29 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -41,12 +41,15 @@
 # MySQL 5.7 no longer supports null default values for the primary key
 # Override the default primary key type in Rails <= 4.0
 # https://stackoverflow.com/a/34555109
-if db_adapter == "mysql2" &&
-   (::ActiveRecord::VERSION::MAJOR == 3 ||
-   (::ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0))
-  class ActiveRecord::ConnectionAdapters::Mysql2Adapter
-    NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
+if db_adapter == "mysql2"
+  types = if defined?(ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter)
+    # ActiveRecord 3.2+
+    ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::NATIVE_DATABASE_TYPES
+  else
+    # ActiveRecord < 3.2
+    ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES
   end
+  types[:primary_key] = types[:primary_key].sub(" DEFAULT NULL", "")
 end
 
 migration_template = File.open("lib/generators/delayed_job/templates/migration.rb")

From fd96df664b1c4bbe1023968fd48d4af53644fe79 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Tue, 20 Aug 2019 11:21:23 -0400
Subject: [PATCH 18/62] Update travis matrix for activerecord 6

---
 .travis.yml                        | 30 +++++++++++++++++-------------
 gemfiles/mysql2/6-0.gemfile        | 23 +++++++++++++++++++++++
 gemfiles/mysql2/master.gemfile     |  2 +-
 gemfiles/postgresql/6-0.gemfile    | 23 +++++++++++++++++++++++
 gemfiles/postgresql/master.gemfile |  2 +-
 gemfiles/sqlite3/6-0.gemfile       | 23 +++++++++++++++++++++++
 gemfiles/sqlite3/master.gemfile    |  2 +-
 7 files changed, 89 insertions(+), 16 deletions(-)
 create mode 100644 gemfiles/mysql2/6-0.gemfile
 create mode 100644 gemfiles/postgresql/6-0.gemfile
 create mode 100644 gemfiles/sqlite3/6-0.gemfile

diff --git a/.travis.yml b/.travis.yml
index 40cc3b5e..6d6de025 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,12 +20,15 @@ gemfile: # Supported
   - gemfiles/mysql2/4-2.gemfile
   - gemfiles/mysql2/5-1.gemfile
   - gemfiles/mysql2/5-2.gemfile
+  - gemfiles/mysql2/6-0.gemfile
   - gemfiles/postgresql/4-2.gemfile
   - gemfiles/postgresql/5-1.gemfile
   - gemfiles/postgresql/5-2.gemfile
+  - gemfiles/postgresql/6-0.gemfile
   - gemfiles/sqlite3/4-2.gemfile
   - gemfiles/sqlite3/5-1.gemfile
   - gemfiles/sqlite3/5-2.gemfile
+  - gemfiles/sqlite3/6-0.gemfile
 rvm: # Supported
   - 2.3.8
   - 2.4.6
@@ -43,19 +46,20 @@ matrix:
     - gemfile: gemfiles/mysql2/master.gemfile # Future
     - gemfile: gemfiles/postgresql/master.gemfile # Future
     - gemfile: gemfiles/sqlite3/master.gemfile # Future
-    # The two combinations below are currently broken. We should stop allowing
-    # failure as the issue is resolved. See:
-    # https://github.com/jruby/activerecord-jdbc-adapter/issues/700
-    - rvm: jruby-9.2.7.0
-      gemfile: gemfiles/mysql2/5-1.gemfile
-    - rvm: jruby-9.2.7.0
-      gemfile: gemfiles/postgresql/5-1.gemfile
-    - rvm: jruby-9.2.7.0
-      gemfile: gemfiles/mysql2/5-2.gemfile
-    - rvm: jruby-9.2.7.0
-      gemfile: gemfiles/postgresql/5-2.gemfile
-    - rvm: jruby-9.2.7.0
-      gemfile: gemfiles/sqlite3/5-2.gemfile
+
+  exclude:
+    - gemfile: gemfiles/mysql2/6-0.gemfile
+      rvm: 2.3.8
+    - gemfile: gemfiles/mysql2/6-0.gemfile
+      rvm: 2.4.6
+    - gemfile: gemfiles/postgresql/6-0.gemfile
+      rvm: 2.3.8
+    - gemfile: gemfiles/postgresql/6-0.gemfile
+      rvm: 2.4.6
+    - gemfile: gemfiles/sqlite3/6-0.gemfile
+      rvm: 2.3.8
+    - gemfile: gemfiles/sqlite3/6-0.gemfile
+      rvm: 2.4.6
 
   include:
     #
diff --git a/gemfiles/mysql2/6-0.gemfile b/gemfiles/mysql2/6-0.gemfile
new file mode 100644
index 00000000..74d1da37
--- /dev/null
+++ b/gemfiles/mysql2/6-0.gemfile
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    gem "activerecord-jdbcmysql-adapter", ">= 60.0.rc1"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "mysql2"
+  end
+
+  gem "coveralls", require: false
+  gem "rspec", ">= 2.11"
+  gem "simplecov", require: false
+
+  gem "activerecord", "~> 6.0.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index e410d041..df677e1a 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -20,6 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
-gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+gem "delayed_job", github: "collectiveidea/delayed_job"
 
 gemspec path: "../../"
diff --git a/gemfiles/postgresql/6-0.gemfile b/gemfiles/postgresql/6-0.gemfile
new file mode 100644
index 00000000..80090d8a
--- /dev/null
+++ b/gemfiles/postgresql/6-0.gemfile
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    gem "activerecord-jdbcpostgresql-adapter", ">= 60.0.rc1"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "pg", "~> 0.18"
+  end
+
+  gem "coveralls", require: false
+  gem "rspec", ">= 2.11"
+  gem "simplecov", require: false
+
+  gem "activerecord", "~> 6.0.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index bb0cdbd8..d4113a57 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -20,6 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
-gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+gem "delayed_job", github: "collectiveidea/delayed_job"
 
 gemspec path: "../../"
diff --git a/gemfiles/sqlite3/6-0.gemfile b/gemfiles/sqlite3/6-0.gemfile
new file mode 100644
index 00000000..24c43c16
--- /dev/null
+++ b/gemfiles/sqlite3/6-0.gemfile
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    gem "activerecord-jdbcsqlite3-adapter", ">= 60.0.rc1"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "sqlite3", "~> 1.4"
+  end
+
+  gem "coveralls", require: false
+  gem "rspec", ">= 2.11"
+  gem "simplecov", require: false
+
+  gem "activerecord", "~> 6.0.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index 8481670c..fd130839 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -20,6 +20,6 @@ group :test do
   gem "activerecord", github: "rails"
 end
 
-gem "delayed_job", github: "collectiveidea/delayed_job", branch: "rails-6-compatibility"
+gem "delayed_job", github: "collectiveidea/delayed_job"
 
 gemspec path: "../../"

From 423830fcd8bfe02e05a87fa8009e4e3efc5816d0 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Tue, 20 Aug 2019 13:26:11 -0400
Subject: [PATCH 19/62] Remove defunct badges

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 7e87f786..b937f6db 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,6 @@ you're reading the documentation for the master branch.
 
 [![Gem Version](https://img.shields.io/gem/v/delayed_job_active_record.svg)](https://rubygems.org/gems/delayed_job_active_record)
 [![Build Status](https://img.shields.io/travis/collectiveidea/delayed_job_active_record.svg)](https://travis-ci.org/collectiveidea/delayed_job_active_record)
-[![Dependency Status](https://img.shields.io/gemnasium/collectiveidea/delayed_job_active_record.svg)](https://gemnasium.com/collectiveidea/delayed_job_active_record)
-[![Code Climate](https://img.shields.io/codeclimate/github/collectiveidea/delayed_job_active_record.svg)](https://codeclimate.com/github/collectiveidea/delayed_job_active_record)
 [![Coverage Status](https://img.shields.io/coveralls/collectiveidea/delayed_job_active_record.svg)](https://coveralls.io/r/collectiveidea/delayed_job_active_record)
 
 ## Installation

From 337c09c53f3e07b607ff8fe2495a2ae66499bc36 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Tue, 20 Aug 2019 13:45:33 -0400
Subject: [PATCH 20/62] Prepare 4.1.4 release

---
 README.md                         | 2 +-
 delayed_job_active_record.gemspec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b937f6db..ca4db81b 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 **If you're viewing this at https://github.com/collectiveidea/delayed_job_active_record,
 you're reading the documentation for the master branch.
 [View documentation for the latest release
-(4.1.3).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.3)**
+(4.1.4).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.4)**
 
 # DelayedJob ActiveRecord Backend
 
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index c1775b75..8b2ebb96 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -12,5 +12,5 @@ Gem::Specification.new do |spec|
   spec.name           = "delayed_job_active_record"
   spec.require_paths  = ["lib"]
   spec.summary        = "ActiveRecord backend for DelayedJob"
-  spec.version        = "4.1.3"
+  spec.version        = "4.1.4"
 end

From de6b3162510bb9303f1106bf8615606ffa5d88b7 Mon Sep 17 00:00:00 2001
From: Yuki Nishijima <mail@yukinishijima.net>
Date: Tue, 28 Apr 2015 18:56:38 -0700
Subject: [PATCH 21/62] Add Railtie to delayed_job_active_record

Explicitly requiring ActiveRecord models in
`lib/delayed_job_active_record.rb` may result in losing custom
configurations that are set in config/initializers on Rails.

Let' use Railtie and ActiveSupport.on_load to set it up so that
Delayed::Backend::ActiveRecord::Job model will respect arbitrary
configs.
---
 lib/delayed/backend/active_record/railtie.rb | 14 ++++++++++++++
 lib/delayed_job_active_record.rb             | 11 ++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)
 create mode 100644 lib/delayed/backend/active_record/railtie.rb

diff --git a/lib/delayed/backend/active_record/railtie.rb b/lib/delayed/backend/active_record/railtie.rb
new file mode 100644
index 00000000..d126bc9e
--- /dev/null
+++ b/lib/delayed/backend/active_record/railtie.rb
@@ -0,0 +1,14 @@
+module Delayed
+  module Backend
+    module ActiveRecord
+      class Railtie < ::Rails::Railtie
+        initializer 'delayed_job_active_record' do |_app|
+          ActiveSupport.on_load(:active_record) do
+            require "delayed/backend/active_record"
+            Delayed::Worker.backend = :active_record
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/lib/delayed_job_active_record.rb b/lib/delayed_job_active_record.rb
index a09638e6..896cdb3a 100644
--- a/lib/delayed_job_active_record.rb
+++ b/lib/delayed_job_active_record.rb
@@ -1,7 +1,12 @@
 # frozen_string_literal: true
 
-require "active_record"
 require "delayed_job"
-require "delayed/backend/active_record"
 
-Delayed::Worker.backend = :active_record
+if defined?(Rails)
+  require "delayed/backend/active_record/railtie"
+else
+  require "active_record"
+  require "delayed/backend/active_record"
+
+  Delayed::Worker.backend = :active_record
+end

From 573dd7246ebd1e7e9331281c962e1801b0cad542 Mon Sep 17 00:00:00 2001
From: Petrik <petrik@deheus.net>
Date: Tue, 9 Jul 2019 11:41:27 +0200
Subject: [PATCH 22/62] Fix Rails autoloading

Delay initializing of backend until all initializers have run.
---
 lib/delayed/backend/active_record/railtie.rb | 10 +++++-----
 lib/delayed_job_active_record.rb             |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/delayed/backend/active_record/railtie.rb b/lib/delayed/backend/active_record/railtie.rb
index d126bc9e..e353ae77 100644
--- a/lib/delayed/backend/active_record/railtie.rb
+++ b/lib/delayed/backend/active_record/railtie.rb
@@ -1,12 +1,12 @@
+# frozen_string_literal: true
+
 module Delayed
   module Backend
     module ActiveRecord
       class Railtie < ::Rails::Railtie
-        initializer 'delayed_job_active_record' do |_app|
-          ActiveSupport.on_load(:active_record) do
-            require "delayed/backend/active_record"
-            Delayed::Worker.backend = :active_record
-          end
+        config.after_initialize do
+          require "delayed/backend/active_record"
+          Delayed::Worker.backend = :active_record
         end
       end
     end
diff --git a/lib/delayed_job_active_record.rb b/lib/delayed_job_active_record.rb
index 896cdb3a..b6d4ca33 100644
--- a/lib/delayed_job_active_record.rb
+++ b/lib/delayed_job_active_record.rb
@@ -2,7 +2,7 @@
 
 require "delayed_job"
 
-if defined?(Rails)
+if defined?(Rails::Railtie)
   require "delayed/backend/active_record/railtie"
 else
   require "active_record"

From b7a609b64d40a97a654aa1898b2a739e4682ab7e Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@fry.sh>
Date: Fri, 8 Nov 2019 08:20:30 -0800
Subject: [PATCH 23/62] Backward compatibility with Rails 3.0

Removing calls to `find_by` and `pluck` for Rails 3.0 compatibility.
---
 lib/delayed/backend/active_record.rb | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index 7304e2e4..9c21b943 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -115,12 +115,12 @@ def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
           # This can be particularly helpful when operating a large job cluster that uses
           # a large read_ahead value to increase the odds of successfully locking a job with
           # one method call to reserve_with_scope.
-          locked_job_id = ready_scope.limit(worker.read_ahead).pluck(:id).detect do |job_id|
-            count = ready_scope.where(id: job_id).update_all(locked_at: now, locked_by: worker.name)
+          locked_job_id = ready_scope.limit(worker.read_ahead).select(:id).detect do |job|
+            count = ready_scope.where(id: job.id).update_all(locked_at: now, locked_by: worker.name)
             count == 1
           end
 
-          find_by(id: locked_job_id) if locked_job_id
+          find(locked_job_id) if locked_job_id
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From 750fada02d12761bf02e7012f7f4b667d3498d1b Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@fry.sh>
Date: Fri, 8 Nov 2019 08:36:10 -0800
Subject: [PATCH 24/62] Pass ID to find

---
 lib/delayed/backend/active_record.rb | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index 9c21b943..bc93f65b 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -115,12 +115,12 @@ def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
           # This can be particularly helpful when operating a large job cluster that uses
           # a large read_ahead value to increase the odds of successfully locking a job with
           # one method call to reserve_with_scope.
-          locked_job_id = ready_scope.limit(worker.read_ahead).select(:id).detect do |job|
+          locked_job = ready_scope.limit(worker.read_ahead).select(:id).detect do |job|
             count = ready_scope.where(id: job.id).update_all(locked_at: now, locked_by: worker.name)
             count == 1
           end
 
-          find(locked_job_id) if locked_job_id
+          find(locked_job.id) if locked_job
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From 4f0a7f55abe3c3d2f557468b54688d6bc35f6c06 Mon Sep 17 00:00:00 2001
From: Peter Fry <peter@fry.sh>
Date: Fri, 8 Nov 2019 10:51:33 -0800
Subject: [PATCH 25/62] Use reload

---
 lib/delayed/backend/active_record.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index bc93f65b..7602cedf 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -120,7 +120,7 @@ def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
             count == 1
           end
 
-          find(locked_job.id) if locked_job
+          locked_job.reload if locked_job
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From 286c83476f17663f57d8b060437f9c8cf9e8ea95 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 8 Nov 2019 14:52:23 -0500
Subject: [PATCH 26/62] Cleanup test database

Removing force from the migration means local runs need to delete the table first
---
 spec/helper.rb | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/spec/helper.rb b/spec/helper.rb
index 0da3ba29..2b50e34d 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -72,6 +72,8 @@ def migration_version
 eval(migration_ruby) # rubocop:disable Security/Eval
 
 ActiveRecord::Schema.define do
+  drop_table :delayed_jobs, if_exists: true
+
   CreateDelayedJobs.up
 
   create_table :stories, primary_key: :story_id, force: true do |table|

From 88917890e3638fd825a179bb456bdeaf3d1c0451 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 8 Nov 2019 15:01:50 -0500
Subject: [PATCH 27/62] Fix for rubocop update

Adding department name to all cops and disable safe navigator cop
---
 .rubocop.yml   | 19 ++++++++++++-------
 spec/helper.rb |  4 ++--
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/.rubocop.yml b/.rubocop.yml
index 7a3adf27..eabe3676 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -30,25 +30,25 @@ Style/EmptyMethod:
   EnforcedStyle: expanded
 
 # Align ends correctly.
-EndAlignment:
+Layout/EndAlignment:
   EnforcedStyleAlignWith: variable
 
-LineLength:
+Metrics/LineLength:
   Max: 120
 
-SignalException:
+Style/SignalException:
   EnforcedStyle: only_raise
 
-SpaceInsideBlockBraces:
+Layout/SpaceInsideBlockBraces:
   SpaceBeforeBlockParameters: true
 
-SpaceInsideHashLiteralBraces:
+Layout/SpaceInsideHashLiteralBraces:
   EnforcedStyle: space
 
-BracesAroundHashParameters:
+Style/BracesAroundHashParameters:
   EnforcedStyle: context_dependent
 
-StringLiterals:
+Style/StringLiterals:
   EnforcedStyle: double_quotes
 
 #################
@@ -153,3 +153,8 @@ Style/FormatStringToken:
 
 Style/NumericPredicate:
   Enabled: false
+
+# We still allow really old versions of Ruby and Rails
+# While I like the safe navigator, we don't want to use it here just yet
+Style/SafeNavigation:
+  Enabled: false
diff --git a/spec/helper.rb b/spec/helper.rb
index 2b50e34d..b1477dd0 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -20,7 +20,7 @@
 
 begin
   require "protected_attributes"
-rescue LoadError # rubocop:disable HandleExceptions
+rescue LoadError # rubocop:disable Lint/HandleExceptions
 end
 require "delayed_job_active_record"
 require "delayed/backend/shared_spec"
@@ -30,7 +30,7 @@
 
 db_adapter = ENV["ADAPTER"]
 gemfile = ENV["BUNDLE_GEMFILE"]
-db_adapter ||= gemfile && gemfile[%r{gemfiles/(.*?)/}] && $1 # rubocop:disable PerlBackrefs
+db_adapter ||= gemfile && gemfile[%r{gemfiles/(.*?)/}] && $1 # rubocop:disable Style/PerlBackrefs
 db_adapter ||= "sqlite3"
 
 config = YAML.load(File.read("spec/database.yml"))

From ceb5b070a59ed99b4f6227e649e8874690873f86 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 8 Nov 2019 15:08:50 -0500
Subject: [PATCH 28/62] A touch of cleanup to the default sql method

---
 lib/delayed/backend/active_record.rb | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index cd4be656..d53c8fa6 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -113,17 +113,13 @@ def self.reserve_with_scope_using_optimized_sql(ready_scope, worker, now)
 
         def self.reserve_with_scope_using_default_sql(ready_scope, worker, now)
           # This is our old fashion, tried and true, but possibly slower lookup
-          # Instead of reading the entire job record for our detect loop, just pluck the ID,
-          # and only read the job record after we've successfully locked the job.
-          # This can be particularly helpful when operating a large job cluster that uses
-          # a large read_ahead value to increase the odds of successfully locking a job with
-          # one method call to reserve_with_scope.
-          locked_job = ready_scope.limit(worker.read_ahead).select(:id).detect do |job|
+          # Instead of reading the entire job record for our detect loop, we select only the id,
+          # and only read the full job record after we've successfully locked the job.
+          # This can have a noticable impact on large read_ahead configurations and large payload jobs.
+          ready_scope.limit(worker.read_ahead).select(:id).detect do |job|
             count = ready_scope.where(id: job.id).update_all(locked_at: now, locked_by: worker.name)
-            count == 1
+            count == 1 && job.reload
           end
-
-          locked_job.reload if locked_job
         end
 
         def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)

From 0d1ed9a8d24015de87e6b7cc6967a4f8b626c8cc Mon Sep 17 00:00:00 2001
From: Ryan Lv <ryan.lv@sap.com>
Date: Tue, 27 Dec 2016 13:58:06 +0800
Subject: [PATCH 29/62] Refactor sql statement

Before

`(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by =
?) AND failed_at IS NULL`

This sql statement is really confusing for sql newbie.

After

`((run_at <= ? AND (locked_at IS NULL OR locked_at < ?)) OR locked_by =
?) AND failed_at IS NULL`

`And` has precedence over `Or`. they are equal.

So this change will not break currently behavior. Just make it more plain for sql newbie.

Reviewed by David Genord and Guihere Cavalcanti
---
 lib/delayed/backend/active_record.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index d53c8fa6..62b186a1 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -54,7 +54,7 @@ def self.set_delayed_job_table_name
 
         def self.ready_to_run(worker_name, max_run_time)
           where(
-            "(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by = ?) AND failed_at IS NULL",
+            "((run_at <= ? AND (locked_at IS NULL OR locked_at < ?)) OR locked_by = ?) AND failed_at IS NULL",
             db_time_now,
             db_time_now - max_run_time,
             worker_name

From d602a5dfdc14973af81f0387ee42c12fcdac73fd Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 8 Nov 2019 15:35:31 -0500
Subject: [PATCH 30/62] Fix spec setup for older activerecord

---
 spec/helper.rb | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/spec/helper.rb b/spec/helper.rb
index b1477dd0..f1528db9 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -72,7 +72,10 @@ def migration_version
 eval(migration_ruby) # rubocop:disable Security/Eval
 
 ActiveRecord::Schema.define do
-  drop_table :delayed_jobs, if_exists: true
+  if table_exists?(:delayed_jobs)
+    # `if_exists: true` was only added in Rails 5
+    drop_table :delayed_jobs
+  end
 
   CreateDelayedJobs.up
 

From 6a899ebc11ed477910c7d4c43ce5356d0e795546 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 15:41:38 -0500
Subject: [PATCH 31/62] Updates to support rubocop 1.5.2

---
 .rubocop.yml   | 20 +++++++++++++++-----
 spec/helper.rb |  2 +-
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/.rubocop.yml b/.rubocop.yml
index eabe3676..5a15ad1f 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -8,6 +8,8 @@ AllCops:
   Exclude:
     - lib/**/templates/*
     - vendor/**/*
+  NewCops: enable
+  SuggestExtensions: false
 
 #################
 # [i] Overrides #
@@ -33,7 +35,7 @@ Style/EmptyMethod:
 Layout/EndAlignment:
   EnforcedStyleAlignWith: variable
 
-Metrics/LineLength:
+Layout/LineLength:
   Max: 120
 
 Style/SignalException:
@@ -45,15 +47,17 @@ Layout/SpaceInsideBlockBraces:
 Layout/SpaceInsideHashLiteralBraces:
   EnforcedStyle: space
 
-Style/BracesAroundHashParameters:
-  EnforcedStyle: context_dependent
-
 Style/StringLiterals:
   EnforcedStyle: double_quotes
 
 #################
 # Disabled cops #
 #################
+# We actually still work with ruby 2.0 but this setting only supports 2.4+
+# We aren't going to drop old versions just to make rubocop happy.
+Gemspec/RequiredRubyVersion:
+  Enabled: false
+
 Metrics/ClassLength:
   Enabled: false
 
@@ -105,6 +109,9 @@ Style/WordArray:
 Rails/HasAndBelongsToMany:
   Enabled: false
 
+Rails/RakeEnvironment:
+  Enabled: false
+
 # enforces using the class name in a describe block (e.g. `describe TestedClass do`)
 RSpec/DescribeClass:
   Enabled: false
@@ -127,12 +134,15 @@ RSpec/MessageExpectation:
 RSpec/MultipleExpectations:
   Enabled: false
 
+RSpec/MultipleMemoizedHelpers:
+  Enabled: false
+
 # enforces rules about how many nested `describe` blocks are allowed
 RSpec/NestedGroups:
   Enabled: false
 
 # enforces rules about using `it` or `describe` block methods instead of `feature` or `scenario`
-Capybara/FeatureMethods:
+RSpec/Capybara/FeatureMethods:
   Enabled: false
 
 ###################
diff --git a/spec/helper.rb b/spec/helper.rb
index f1528db9..83d10948 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -20,7 +20,7 @@
 
 begin
   require "protected_attributes"
-rescue LoadError # rubocop:disable Lint/HandleExceptions
+rescue LoadError # rubocop:disable Lint/SuppressedException
 end
 require "delayed_job_active_record"
 require "delayed/backend/shared_spec"

From 36c7813fd3db19699678183ce84dc5e5a6453f22 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 16:13:56 -0500
Subject: [PATCH 32/62] Cleanup from EOL ruby and rails versions

---
 .travis.yml | 97 ++++++++++++++++++++++++++---------------------------
 1 file changed, 47 insertions(+), 50 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6d6de025..f770d4f7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,24 +17,14 @@ env:
     - JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug"
     - COMMAND=rspec
 gemfile: # Supported
-  - gemfiles/mysql2/4-2.gemfile
-  - gemfiles/mysql2/5-1.gemfile
-  - gemfiles/mysql2/5-2.gemfile
   - gemfiles/mysql2/6-0.gemfile
-  - gemfiles/postgresql/4-2.gemfile
-  - gemfiles/postgresql/5-1.gemfile
-  - gemfiles/postgresql/5-2.gemfile
   - gemfiles/postgresql/6-0.gemfile
-  - gemfiles/sqlite3/4-2.gemfile
-  - gemfiles/sqlite3/5-1.gemfile
-  - gemfiles/sqlite3/5-2.gemfile
   - gemfiles/sqlite3/6-0.gemfile
 rvm: # Supported
-  - 2.3.8
-  - 2.4.6
-  - 2.5.5
-  - 2.6.3
-  - jruby-9.2.7.0
+  - 2.5.8
+  - 2.6.6
+  - 2.7.2
+  - jruby-9.2.13.0
 
 jdk: oraclejdk11
 
@@ -47,25 +37,11 @@ matrix:
     - gemfile: gemfiles/postgresql/master.gemfile # Future
     - gemfile: gemfiles/sqlite3/master.gemfile # Future
 
-  exclude:
-    - gemfile: gemfiles/mysql2/6-0.gemfile
-      rvm: 2.3.8
-    - gemfile: gemfiles/mysql2/6-0.gemfile
-      rvm: 2.4.6
-    - gemfile: gemfiles/postgresql/6-0.gemfile
-      rvm: 2.3.8
-    - gemfile: gemfiles/postgresql/6-0.gemfile
-      rvm: 2.4.6
-    - gemfile: gemfiles/sqlite3/6-0.gemfile
-      rvm: 2.3.8
-    - gemfile: gemfiles/sqlite3/6-0.gemfile
-      rvm: 2.4.6
-
   include:
     #
     # Rubocop
     #
-    - rvm: 2.5.5
+    - rvm: 2.6.6
       gemfile: Gemfile
       env:
         - COMMAND=rubocop
@@ -73,32 +49,32 @@ matrix:
     # The future
     #
     # Active Record head
-    - rvm: 2.5.5
-      gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.5.5
-      gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.5.5
-      gemfile: gemfiles/sqlite3/master.gemfile
     - rvm: 2.6.3
       gemfile: gemfiles/mysql2/master.gemfile
     - rvm: 2.6.3
       gemfile: gemfiles/postgresql/master.gemfile
     - rvm: 2.6.3
       gemfile: gemfiles/sqlite3/master.gemfile
+    - rvm: 2.7.2
+      gemfile: gemfiles/mysql2/master.gemfile
+    - rvm: 2.7.2
+      gemfile: gemfiles/postgresql/master.gemfile
+    - rvm: 2.7.2
+      gemfile: gemfiles/sqlite3/master.gemfile
     # MRI Ruby head
     - rvm: ruby-head
-      gemfile: gemfiles/mysql2/5-2.gemfile
+      gemfile: gemfiles/mysql2/6-0.gemfile
     - rvm: ruby-head
-      gemfile: gemfiles/postgresql/5-2.gemfile
+      gemfile: gemfiles/postgresql/6-0.gemfile
     - rvm: ruby-head
-      gemfile: gemfiles/sqlite3/5-2.gemfile
+      gemfile: gemfiles/sqlite3/6-0.gemfile
     # JRuby head
     - rvm: jruby-head
-      gemfile: gemfiles/mysql2/5-2.gemfile
+      gemfile: gemfiles/mysql2/6-0.gemfile
     - rvm: jruby-head
-      gemfile: gemfiles/postgresql/5-2.gemfile
+      gemfile: gemfiles/postgresql/6-0.gemfile
     - rvm: jruby-head
-      gemfile: gemfiles/sqlite3/5-2.gemfile
+      gemfile: gemfiles/sqlite3/6-0.gemfile
     #
     # The past
     #
@@ -112,10 +88,10 @@ matrix:
     # The test were running, but there are known incompatibilites
     - rvm: 2.0.0-p648
       gemfile: gemfiles/postgresql/3-0.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/postgresql/3-1.gemfile
     - rvm: 2.0.0-p648
       gemfile: gemfiles/sqlite3/3-0.gemfile
+    - rvm: 2.0.0-p648
+      gemfile: gemfiles/postgresql/3-1.gemfile
     - rvm: 2.0.0-p648
       gemfile: gemfiles/sqlite3/3-1.gemfile
     - rvm: 2.0.0-p648
@@ -129,22 +105,43 @@ matrix:
       gemfile: gemfiles/postgresql/4-1.gemfile
     - rvm: 2.1.9
       gemfile: gemfiles/sqlite3/4-1.gemfile
-    # Rails 5.0 was EOL with the release of 5.2
-    - rvm: 2.4.6
+    # Rails 4.2 was EOL with the release of 6.0 and compatible with ruby 2.4
+    - rvm: 2.4.9
+      gemfile: gemfiles/mysql2/4-2.gemfile
+    - rvm: 2.4.9
+      gemfile: gemfiles/postgresql/4-2.gemfile
+    - rvm: 2.4.9
+      gemfile: gemfiles/sqlite3/4-2.gemfile
+    # Rails 5.0 was EOL with the release of 5.2 and compatible with ruby 2.4
+    - rvm: 2.4.9
       gemfile: gemfiles/mysql2/5-0.gemfile
-    - rvm: 2.4.6
+    - rvm: 2.4.9
       gemfile: gemfiles/postgresql/5-0.gemfile
-    - rvm: 2.4.6
+    - rvm: 2.4.9
       gemfile: gemfiles/sqlite3/5-0.gemfile
+    # Rails 5.1 was EOL with the release of 6.0 and compatible with ruby 2.5
+    - rvm: 2.5.8
+      gemfile: gemfiles/mysql2/5-1.gemfile
+    - rvm: 2.5.8
+      gemfile: gemfiles/postgresql/5-1.gemfile
+    - rvm: 2.5.8
+      gemfile: gemfiles/sqlite3/5-1.gemfile
+    # While not yet EOL, 5.2 is only tested against up to ruby 2.5 https://github.com/rails/rails/blob/5-2-stable/.travis.yml
+    - rvm: 2.5.8
+      gemfile: gemfiles/mysql2/5-2.gemfile
+    - rvm: 2.5.8
+      gemfile: gemfiles/postgresql/5-2.gemfile
+    - rvm: 2.5.8
+      gemfile: gemfiles/sqlite3/5-2.gemfile
     #
     # The parallel dimension
     #
     # Rubinius
     - rvm: rbx-2
-      gemfile: gemfiles/mysql2/5-1.gemfile
+      gemfile: gemfiles/mysql2/6-0.gemfile
     - rvm: rbx-2
-      gemfile: gemfiles/postgresql/5-1.gemfile
+      gemfile: gemfiles/postgresql/6-0.gemfile
     - rvm: rbx-2
-      gemfile: gemfiles/sqlite3/5-1.gemfile
+      gemfile: gemfiles/sqlite3/6-0.gemfile
 
 sudo: false

From 44eabb0d3a5403fd1da6d8a6bde1020423b70242 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 17:25:36 -0500
Subject: [PATCH 33/62] Attempt to use github actions

---
 .github/workflows/ci.yml | 156 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+)
 create mode 100644 .github/workflows/ci.yml

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..a67850ee
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,156 @@
+name: CI
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        ruby: [2.5, 2.6, 2.7, jruby]
+        gemfile:
+          - gemfiles/mysql2/6-0.gemfile
+          - gemfiles/postgresql/6-0.gemfile
+          - gemfiles/sqlite3/6-0.gemfile
+        include:
+          #
+          # The future
+          #
+          # Active Record head
+          - ruby: 2.6
+            gemfile: gemfiles/mysql2/master.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/postgresql/master.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/sqlite3/master.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/mysql2/master.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/postgresql/master.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/sqlite3/master.gemfile
+          # MRI Ruby head
+          - ruby: head
+            gemfile: gemfiles/mysql2/6-0.gemfile
+          - ruby: head
+            gemfile: gemfiles/postgresql/6-0.gemfile
+          - ruby: head
+            gemfile: gemfiles/sqlite3/6-0.gemfile
+          # JRuby head
+          - ruby: jruby-head
+            gemfile: gemfiles/mysql2/6-0.gemfile
+          - ruby: jruby-head
+            gemfile: gemfiles/postgresql/6-0.gemfile
+          - ruby: jruby-head
+            gemfile: gemfiles/sqlite3/6-0.gemfile
+          #
+          # The past
+          #
+          # EOL Active Record
+          # Rails 3.2 was maintained longer and is ruby 2.2 compatible
+          - ruby: 2.2
+            gemfile: gemfiles/postgresql/3-2.gemfile
+          - ruby: 2.2
+            gemfile: gemfiles/sqlite3/3-2.gemfile
+          # Rails <= 4.0 was only compatible with ruby 2.0
+          # The test were running, but there are known incompatibilites
+          # (Isn't supported on Github Actions)
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/postgresql/3-0.gemfile
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/sqlite3/3-0.gemfile
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/postgresql/3-1.gemfile
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/sqlite3/3-1.gemfile
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/postgresql/4-0.gemfile
+          # - rvm: 2.0.0-p648
+          #   gemfile: gemfiles/sqlite3/4-0.gemfile
+          # Rails 4.1 was only compatible with ruby 2.1
+          - ruby: 2.1
+            gemfile: gemfiles/mysql2/4-1.gemfile
+          - ruby: 2.1
+            gemfile: gemfiles/postgresql/4-1.gemfile
+          - ruby: 2.1
+            gemfile: gemfiles/sqlite3/4-1.gemfile
+          # Rails 4.2 was EOL with the release of 6.0 and compatible with ruby 2.4
+          - ruby: 2.4
+            gemfile: gemfiles/mysql2/4-2.gemfile
+          - ruby: 2.4
+            gemfile: gemfiles/postgresql/4-2.gemfile
+          - ruby: 2.4
+            gemfile: gemfiles/sqlite3/4-2.gemfile
+          # Rails 5.0 was EOL with the release of 5.2 and compatible with ruby 2.4
+          - ruby: 2.4
+            gemfile: gemfiles/mysql2/5-0.gemfile
+          - ruby: 2.4
+            gemfile: gemfiles/postgresql/5-0.gemfile
+          - ruby: 2.4
+            gemfile: gemfiles/sqlite3/5-0.gemfile
+          # Rails 5.1 was EOL with the release of 6.0 and compatible with ruby 2.5
+          - ruby: 2.5
+            gemfile: gemfiles/mysql2/5-1.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/postgresql/5-1.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/sqlite3/5-1.gemfile
+          # While not yet EOL, 5.2 is only tested against up to ruby 2.5 https://github.com/rails/rails/blob/5-2-stable/.travis.yml
+          - ruby: 2.5
+            gemfile: gemfiles/mysql2/5-2.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/postgresql/5-2.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/sqlite3/5-2.gemfile
+          #
+          # The parallel dimension
+          #
+          # Rubinius (Isn't supported on Github Actions)
+          # - rvm: rbx-2
+          #   gemfile: gemfiles/mysql2/6-0.gemfile
+          # - rvm: rbx-2
+          #   gemfile: gemfiles/postgresql/6-0.gemfile
+          # - rvm: rbx-2
+          #   gemfile: gemfiles/sqlite3/6-0.gemfile
+    services:
+      postgres:
+        image: postgres
+        # Provide the password for postgres
+        env:
+          POSTGRES_DB: delayed_job_test
+          POSTGRES_PASSWORD: postgres
+        # Set health checks to wait until postgres has started
+        options: >-
+          --health-cmd pg_isready
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        ports:
+          # Maps tcp port 5432 on service container to the host
+          - 5432:5432
+      mysql:
+        image: mysql:5.7
+        env:
+          MYSQL_ALLOW_EMPTY_PASSWORD: yes
+          MYSQL_DATABASE: delayed_job_test
+        ports:
+            - 3306:3306
+        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
+
+    steps:
+    - uses: actions/checkout@v2
+    - uses: ruby/setup-ruby@v1
+      env:
+        BUNDLE_GEMFILE: ${{ matrix.gemfile }}
+      with:
+        ruby-version: ${{ matrix.ruby }}
+        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
+    - name: Run tests
+      env:
+        BUNDLE_GEMFILE: ${{ matrix.gemfile }}
+      run: bundle exec rspec

From eb6c9527d9b62e5b575aecfc179d5ec5ef0bdaef Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 17:31:56 -0500
Subject: [PATCH 34/62] Update db config for Github actions

---
 spec/database.yml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/spec/database.yml b/spec/database.yml
index 225b4bcf..0c41446c 100644
--- a/spec/database.yml
+++ b/spec/database.yml
@@ -1,19 +1,26 @@
 mysql:
   adapter: mysql
+  host: 127.0.0.1
   database: delayed_job_test
   username: root
+  port: 3306
   encoding: utf8
 
 mysql2:
   adapter: mysql2
+  host: 127.0.0.1
   database: delayed_job_test
   username: root
+  port: 3306
   encoding: utf8
 
 postgresql:
   adapter: postgresql
+  host: 127.0.0.1
   database: delayed_job_test
   username: postgres
+  password: postgres
+  port: 5432
 
 sqlite3:
   adapter: sqlite3

From 65c7907dfe4b0fe6fc8001389a6f579dea060d6f Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 18:43:24 -0500
Subject: [PATCH 35/62] Fix coveralls report

---
 .github/workflows/ci.yml           | 16 ++++++++++++++++
 Gemfile                            |  2 +-
 gemfiles/mysql2/3-0.gemfile        |  2 +-
 gemfiles/mysql2/3-1.gemfile        |  2 +-
 gemfiles/mysql2/3-2.gemfile        |  2 +-
 gemfiles/mysql2/4-0.gemfile        |  2 +-
 gemfiles/mysql2/4-1.gemfile        |  2 +-
 gemfiles/mysql2/4-2.gemfile        |  2 +-
 gemfiles/mysql2/5-0.gemfile        |  2 +-
 gemfiles/mysql2/5-1.gemfile        |  2 +-
 gemfiles/mysql2/5-2.gemfile        |  2 +-
 gemfiles/mysql2/6-0.gemfile        |  2 +-
 gemfiles/mysql2/master.gemfile     |  2 +-
 gemfiles/postgresql/3-0.gemfile    |  2 +-
 gemfiles/postgresql/3-1.gemfile    |  2 +-
 gemfiles/postgresql/3-2.gemfile    |  2 +-
 gemfiles/postgresql/4-0.gemfile    |  2 +-
 gemfiles/postgresql/4-1.gemfile    |  2 +-
 gemfiles/postgresql/4-2.gemfile    |  2 +-
 gemfiles/postgresql/5-0.gemfile    |  2 +-
 gemfiles/postgresql/5-1.gemfile    |  2 +-
 gemfiles/postgresql/5-2.gemfile    |  2 +-
 gemfiles/postgresql/6-0.gemfile    |  2 +-
 gemfiles/postgresql/master.gemfile |  2 +-
 gemfiles/sqlite3/3-0.gemfile       |  2 +-
 gemfiles/sqlite3/3-1.gemfile       |  2 +-
 gemfiles/sqlite3/3-2.gemfile       |  2 +-
 gemfiles/sqlite3/4-0.gemfile       |  2 +-
 gemfiles/sqlite3/4-1.gemfile       |  2 +-
 gemfiles/sqlite3/4-2.gemfile       |  2 +-
 gemfiles/sqlite3/5-0.gemfile       |  2 +-
 gemfiles/sqlite3/5-1.gemfile       |  2 +-
 gemfiles/sqlite3/5-2.gemfile       |  2 +-
 gemfiles/sqlite3/6-0.gemfile       |  2 +-
 gemfiles/sqlite3/master.gemfile    |  2 +-
 spec/helper.rb                     | 11 +++++++----
 36 files changed, 57 insertions(+), 38 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a67850ee..605673bb 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -154,3 +154,19 @@ jobs:
       env:
         BUNDLE_GEMFILE: ${{ matrix.gemfile }}
       run: bundle exec rspec
+    - name: Coveralls Parallel
+      uses: coverallsapp/github-action@master
+      with:
+        github-token: ${{ secrets.github_token }}
+        flag-name: run-${{ matrix.ruby }}-${{ matrix.gemfile }}
+        parallel: true
+
+  finish:
+    needs: test
+    runs-on: ubuntu-latest
+    steps:
+    - name: Coveralls Finished
+      uses: coverallsapp/github-action@master
+      with:
+        github-token: ${{ secrets.github_token }}
+        parallel-finished: true
diff --git a/Gemfile b/Gemfile
index 7580756e..b61d03ca 100644
--- a/Gemfile
+++ b/Gemfile
@@ -17,12 +17,12 @@ group :test do
     gem "sqlite3"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 3"
   gem "rubocop"
   gem "rubocop-rails"
   gem "rubocop-rspec"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 end
 
 gemspec
diff --git a/gemfiles/mysql2/3-0.gemfile b/gemfiles/mysql2/3-0.gemfile
index e19ab399..b3b512e9 100644
--- a/gemfiles/mysql2/3-0.gemfile
+++ b/gemfiles/mysql2/3-0.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "activerecord-mysql2-adapter"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/mysql2/3-1.gemfile b/gemfiles/mysql2/3-1.gemfile
index e7529864..02bab73e 100644
--- a/gemfiles/mysql2/3-1.gemfile
+++ b/gemfiles/mysql2/3-1.gemfile
@@ -6,9 +6,9 @@ gem "rake"
 
 gem "mysql2", "~> 0.3.10"
 
-gem "coveralls", require: false
 gem "rspec", ">= 2.11"
 gem "simplecov", require: false
+gem "simplecov-lcov", require: false
 
 gem "activerecord", "~> 3.1.0"
 
diff --git a/gemfiles/mysql2/3-2.gemfile b/gemfiles/mysql2/3-2.gemfile
index e6c599c2..0418af4c 100644
--- a/gemfiles/mysql2/3-2.gemfile
+++ b/gemfiles/mysql2/3-2.gemfile
@@ -6,9 +6,9 @@ gem "rake"
 
 gem "mysql2", "~> 0.3.10"
 
-gem "coveralls", require: false
 gem "rspec", ">= 2.11"
 gem "simplecov", require: false
+gem "simplecov-lcov", require: false
 
 gem "activerecord", "~> 3.2.0"
 
diff --git a/gemfiles/mysql2/4-0.gemfile b/gemfiles/mysql2/4-0.gemfile
index 416eced7..68e58a9f 100644
--- a/gemfiles/mysql2/4-0.gemfile
+++ b/gemfiles/mysql2/4-0.gemfile
@@ -6,9 +6,9 @@ gem "rake"
 
 gem "mysql2", "~> 0.3.10"
 
-gem "coveralls", require: false
 gem "rspec", ">= 2.11"
 gem "simplecov", require: false
+gem "simplecov-lcov", require: false
 
 gem "activerecord", "~> 4.0.0"
 
diff --git a/gemfiles/mysql2/4-1.gemfile b/gemfiles/mysql2/4-1.gemfile
index 9d0d5602..c5b16d87 100644
--- a/gemfiles/mysql2/4-1.gemfile
+++ b/gemfiles/mysql2/4-1.gemfile
@@ -6,9 +6,9 @@ gem "rake"
 
 gem "mysql2", "~> 0.3.13"
 
-gem "coveralls", require: false
 gem "rspec", ">= 2.11"
 gem "simplecov", require: false
+gem "simplecov-lcov", require: false
 
 gem "activerecord", "~> 4.1.0"
 
diff --git a/gemfiles/mysql2/4-2.gemfile b/gemfiles/mysql2/4-2.gemfile
index 8a8610fc..541f06d6 100644
--- a/gemfiles/mysql2/4-2.gemfile
+++ b/gemfiles/mysql2/4-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2", ">= 0.3.13", "< 0.5"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/mysql2/5-0.gemfile b/gemfiles/mysql2/5-0.gemfile
index dcf5d4ec..1535d5dd 100644
--- a/gemfiles/mysql2/5-0.gemfile
+++ b/gemfiles/mysql2/5-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/mysql2/5-1.gemfile b/gemfiles/mysql2/5-1.gemfile
index 2a66992a..42d10e0b 100644
--- a/gemfiles/mysql2/5-1.gemfile
+++ b/gemfiles/mysql2/5-1.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/mysql2/5-2.gemfile b/gemfiles/mysql2/5-2.gemfile
index 58c89300..604dd440 100644
--- a/gemfiles/mysql2/5-2.gemfile
+++ b/gemfiles/mysql2/5-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/mysql2/6-0.gemfile b/gemfiles/mysql2/6-0.gemfile
index 74d1da37..bf0fa973 100644
--- a/gemfiles/mysql2/6-0.gemfile
+++ b/gemfiles/mysql2/6-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index df677e1a..9ca0e8a0 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "mysql2"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", github: "rails"
 end
diff --git a/gemfiles/postgresql/3-0.gemfile b/gemfiles/postgresql/3-0.gemfile
index 5df71c60..75521b03 100644
--- a/gemfiles/postgresql/3-0.gemfile
+++ b/gemfiles/postgresql/3-0.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "pg", "~> 0.18"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/postgresql/3-1.gemfile b/gemfiles/postgresql/3-1.gemfile
index 96685679..b5240c30 100644
--- a/gemfiles/postgresql/3-1.gemfile
+++ b/gemfiles/postgresql/3-1.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "pg", "~> 0.18"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.1.0"
 end
diff --git a/gemfiles/postgresql/3-2.gemfile b/gemfiles/postgresql/3-2.gemfile
index 71cae40f..8a0a68e2 100644
--- a/gemfiles/postgresql/3-2.gemfile
+++ b/gemfiles/postgresql/3-2.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "pg", "~> 0.18"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/postgresql/4-0.gemfile b/gemfiles/postgresql/4-0.gemfile
index 411d8bc6..5a663ec9 100644
--- a/gemfiles/postgresql/4-0.gemfile
+++ b/gemfiles/postgresql/4-0.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "pg", "~> 0.18"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.0.0"
 end
diff --git a/gemfiles/postgresql/4-1.gemfile b/gemfiles/postgresql/4-1.gemfile
index ed86751f..dc163cb5 100644
--- a/gemfiles/postgresql/4-1.gemfile
+++ b/gemfiles/postgresql/4-1.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "pg", "~> 0.18"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/postgresql/4-2.gemfile b/gemfiles/postgresql/4-2.gemfile
index ee591074..ecf500db 100644
--- a/gemfiles/postgresql/4-2.gemfile
+++ b/gemfiles/postgresql/4-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/postgresql/5-0.gemfile b/gemfiles/postgresql/5-0.gemfile
index a0797428..b2363a8c 100644
--- a/gemfiles/postgresql/5-0.gemfile
+++ b/gemfiles/postgresql/5-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/postgresql/5-1.gemfile b/gemfiles/postgresql/5-1.gemfile
index 620753fc..4f4505ea 100644
--- a/gemfiles/postgresql/5-1.gemfile
+++ b/gemfiles/postgresql/5-1.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/postgresql/5-2.gemfile b/gemfiles/postgresql/5-2.gemfile
index 141d9c42..6d244ed5 100644
--- a/gemfiles/postgresql/5-2.gemfile
+++ b/gemfiles/postgresql/5-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/postgresql/6-0.gemfile b/gemfiles/postgresql/6-0.gemfile
index 80090d8a..70762cfd 100644
--- a/gemfiles/postgresql/6-0.gemfile
+++ b/gemfiles/postgresql/6-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index d4113a57..5f5956aa 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "pg", "~> 0.18"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", github: "rails"
 end
diff --git a/gemfiles/sqlite3/3-0.gemfile b/gemfiles/sqlite3/3-0.gemfile
index 51e1554a..f7b6c253 100644
--- a/gemfiles/sqlite3/3-0.gemfile
+++ b/gemfiles/sqlite3/3-0.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "sqlite3", "< 1.4"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/sqlite3/3-1.gemfile b/gemfiles/sqlite3/3-1.gemfile
index f19ef48e..f0fd1094 100644
--- a/gemfiles/sqlite3/3-1.gemfile
+++ b/gemfiles/sqlite3/3-1.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "sqlite3", "< 1.4"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.1.0"
 end
diff --git a/gemfiles/sqlite3/3-2.gemfile b/gemfiles/sqlite3/3-2.gemfile
index 6717b18c..3c1cd917 100644
--- a/gemfiles/sqlite3/3-2.gemfile
+++ b/gemfiles/sqlite3/3-2.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "sqlite3", "< 1.4"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/sqlite3/4-0.gemfile b/gemfiles/sqlite3/4-0.gemfile
index 4f2a0231..8a99f7ff 100644
--- a/gemfiles/sqlite3/4-0.gemfile
+++ b/gemfiles/sqlite3/4-0.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "sqlite3", "< 1.4"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.0.0"
 end
diff --git a/gemfiles/sqlite3/4-1.gemfile b/gemfiles/sqlite3/4-1.gemfile
index db43063d..7ee34625 100644
--- a/gemfiles/sqlite3/4-1.gemfile
+++ b/gemfiles/sqlite3/4-1.gemfile
@@ -7,9 +7,9 @@ gem "rake"
 group :test do
   gem "sqlite3", "< 1.4"
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index 43c159c9..7a45e6ec 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3", "< 1.4"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index e1dcc3ca..44b23282 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3", "< 1.4"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/sqlite3/5-1.gemfile b/gemfiles/sqlite3/5-1.gemfile
index b194e9c0..31d8a489 100644
--- a/gemfiles/sqlite3/5-1.gemfile
+++ b/gemfiles/sqlite3/5-1.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3", "< 1.4"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/sqlite3/5-2.gemfile b/gemfiles/sqlite3/5-2.gemfile
index 4e133eb0..682f4053 100644
--- a/gemfiles/sqlite3/5-2.gemfile
+++ b/gemfiles/sqlite3/5-2.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3", "< 1.4"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/sqlite3/6-0.gemfile b/gemfiles/sqlite3/6-0.gemfile
index 24c43c16..9f48cc50 100644
--- a/gemfiles/sqlite3/6-0.gemfile
+++ b/gemfiles/sqlite3/6-0.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3", "~> 1.4"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index fd130839..393c6a57 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -13,9 +13,9 @@ group :test do
     gem "sqlite3"
   end
 
-  gem "coveralls", require: false
   gem "rspec", ">= 2.11"
   gem "simplecov", require: false
+  gem "simplecov-lcov", require: false
 
   gem "activerecord", github: "rails"
 end
diff --git a/spec/helper.rb b/spec/helper.rb
index 83d10948..8d5bf258 100644
--- a/spec/helper.rb
+++ b/spec/helper.rb
@@ -1,18 +1,21 @@
 # frozen_string_literal: true
 
 require "simplecov"
-require "coveralls"
+require "simplecov-lcov"
 
-SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
+SimpleCov::Formatter::LcovFormatter.config do |c|
+  c.report_with_single_file = true
+  c.single_report_path = "coverage/lcov.info"
+end
+SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(
   [
     SimpleCov::Formatter::HTMLFormatter,
-    Coveralls::SimpleCov::Formatter
+    SimpleCov::Formatter::LcovFormatter
   ]
 )
 
 SimpleCov.start do
   add_filter "/spec/"
-  minimum_coverage(73.33)
 end
 
 require "logger"

From 15f168f9c6d82f9be59468cc5f1f440550cd4671 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 19:24:20 -0500
Subject: [PATCH 36/62] Allow experimental failures

---
 .github/workflows/ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 605673bb..e80f7b17 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -117,6 +117,7 @@ jobs:
           #   gemfile: gemfiles/postgresql/6-0.gemfile
           # - rvm: rbx-2
           #   gemfile: gemfiles/sqlite3/6-0.gemfile
+    continue-on-error: ${{ endsWith(matrix.gemfile, 'master.gemfile') || endsWith(matrix.ruby, 'head') }}
     services:
       postgres:
         image: postgres

From 2b6a1bfaae661408e6e5be8354469677f5b4cf49 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 19:36:23 -0500
Subject: [PATCH 37/62] Set minimum version for simplecov

---
 Gemfile                            | 4 ++--
 gemfiles/mysql2/3-0.gemfile        | 4 ++--
 gemfiles/mysql2/3-1.gemfile        | 4 ++--
 gemfiles/mysql2/3-2.gemfile        | 4 ++--
 gemfiles/mysql2/4-0.gemfile        | 4 ++--
 gemfiles/mysql2/4-1.gemfile        | 4 ++--
 gemfiles/mysql2/4-2.gemfile        | 4 ++--
 gemfiles/mysql2/5-0.gemfile        | 4 ++--
 gemfiles/mysql2/5-1.gemfile        | 4 ++--
 gemfiles/mysql2/5-2.gemfile        | 4 ++--
 gemfiles/mysql2/6-0.gemfile        | 4 ++--
 gemfiles/mysql2/master.gemfile     | 4 ++--
 gemfiles/postgresql/3-0.gemfile    | 4 ++--
 gemfiles/postgresql/3-1.gemfile    | 4 ++--
 gemfiles/postgresql/3-2.gemfile    | 4 ++--
 gemfiles/postgresql/4-0.gemfile    | 4 ++--
 gemfiles/postgresql/4-1.gemfile    | 4 ++--
 gemfiles/postgresql/4-2.gemfile    | 4 ++--
 gemfiles/postgresql/5-0.gemfile    | 4 ++--
 gemfiles/postgresql/5-1.gemfile    | 4 ++--
 gemfiles/postgresql/5-2.gemfile    | 4 ++--
 gemfiles/postgresql/6-0.gemfile    | 4 ++--
 gemfiles/postgresql/master.gemfile | 4 ++--
 gemfiles/sqlite3/3-0.gemfile       | 4 ++--
 gemfiles/sqlite3/3-1.gemfile       | 4 ++--
 gemfiles/sqlite3/3-2.gemfile       | 4 ++--
 gemfiles/sqlite3/4-0.gemfile       | 4 ++--
 gemfiles/sqlite3/4-1.gemfile       | 4 ++--
 gemfiles/sqlite3/4-2.gemfile       | 4 ++--
 gemfiles/sqlite3/5-0.gemfile       | 4 ++--
 gemfiles/sqlite3/5-1.gemfile       | 4 ++--
 gemfiles/sqlite3/5-2.gemfile       | 4 ++--
 gemfiles/sqlite3/6-0.gemfile       | 4 ++--
 gemfiles/sqlite3/master.gemfile    | 4 ++--
 34 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/Gemfile b/Gemfile
index b61d03ca..2feab4db 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,8 +21,8 @@ group :test do
   gem "rubocop"
   gem "rubocop-rails"
   gem "rubocop-rspec"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 end
 
 gemspec
diff --git a/gemfiles/mysql2/3-0.gemfile b/gemfiles/mysql2/3-0.gemfile
index b3b512e9..5c795a97 100644
--- a/gemfiles/mysql2/3-0.gemfile
+++ b/gemfiles/mysql2/3-0.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "activerecord-mysql2-adapter"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/mysql2/3-1.gemfile b/gemfiles/mysql2/3-1.gemfile
index 02bab73e..88ab34c8 100644
--- a/gemfiles/mysql2/3-1.gemfile
+++ b/gemfiles/mysql2/3-1.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.10"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", require: false
-gem "simplecov-lcov", require: false
+gem "simplecov", ">= 0.20.0", require: false
+gem "simplecov-lcov", ">= 0.8.0", require: false
 
 gem "activerecord", "~> 3.1.0"
 
diff --git a/gemfiles/mysql2/3-2.gemfile b/gemfiles/mysql2/3-2.gemfile
index 0418af4c..e0b06405 100644
--- a/gemfiles/mysql2/3-2.gemfile
+++ b/gemfiles/mysql2/3-2.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.10"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", require: false
-gem "simplecov-lcov", require: false
+gem "simplecov", ">= 0.20.0", require: false
+gem "simplecov-lcov", ">= 0.8.0", require: false
 
 gem "activerecord", "~> 3.2.0"
 
diff --git a/gemfiles/mysql2/4-0.gemfile b/gemfiles/mysql2/4-0.gemfile
index 68e58a9f..c6308680 100644
--- a/gemfiles/mysql2/4-0.gemfile
+++ b/gemfiles/mysql2/4-0.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.10"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", require: false
-gem "simplecov-lcov", require: false
+gem "simplecov", ">= 0.20.0", require: false
+gem "simplecov-lcov", ">= 0.8.0", require: false
 
 gem "activerecord", "~> 4.0.0"
 
diff --git a/gemfiles/mysql2/4-1.gemfile b/gemfiles/mysql2/4-1.gemfile
index c5b16d87..fdcc9cc4 100644
--- a/gemfiles/mysql2/4-1.gemfile
+++ b/gemfiles/mysql2/4-1.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.13"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", require: false
-gem "simplecov-lcov", require: false
+gem "simplecov", ">= 0.20.0", require: false
+gem "simplecov-lcov", ">= 0.8.0", require: false
 
 gem "activerecord", "~> 4.1.0"
 
diff --git a/gemfiles/mysql2/4-2.gemfile b/gemfiles/mysql2/4-2.gemfile
index 541f06d6..66d9e95c 100644
--- a/gemfiles/mysql2/4-2.gemfile
+++ b/gemfiles/mysql2/4-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/mysql2/5-0.gemfile b/gemfiles/mysql2/5-0.gemfile
index 1535d5dd..9634e9d1 100644
--- a/gemfiles/mysql2/5-0.gemfile
+++ b/gemfiles/mysql2/5-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/mysql2/5-1.gemfile b/gemfiles/mysql2/5-1.gemfile
index 42d10e0b..245d42aa 100644
--- a/gemfiles/mysql2/5-1.gemfile
+++ b/gemfiles/mysql2/5-1.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/mysql2/5-2.gemfile b/gemfiles/mysql2/5-2.gemfile
index 604dd440..5603af01 100644
--- a/gemfiles/mysql2/5-2.gemfile
+++ b/gemfiles/mysql2/5-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/mysql2/6-0.gemfile b/gemfiles/mysql2/6-0.gemfile
index bf0fa973..539a3917 100644
--- a/gemfiles/mysql2/6-0.gemfile
+++ b/gemfiles/mysql2/6-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index 9ca0e8a0..99de96d1 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", github: "rails"
 end
diff --git a/gemfiles/postgresql/3-0.gemfile b/gemfiles/postgresql/3-0.gemfile
index 75521b03..f1f76235 100644
--- a/gemfiles/postgresql/3-0.gemfile
+++ b/gemfiles/postgresql/3-0.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/postgresql/3-1.gemfile b/gemfiles/postgresql/3-1.gemfile
index b5240c30..541e9d85 100644
--- a/gemfiles/postgresql/3-1.gemfile
+++ b/gemfiles/postgresql/3-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.1.0"
 end
diff --git a/gemfiles/postgresql/3-2.gemfile b/gemfiles/postgresql/3-2.gemfile
index 8a0a68e2..99903982 100644
--- a/gemfiles/postgresql/3-2.gemfile
+++ b/gemfiles/postgresql/3-2.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/postgresql/4-0.gemfile b/gemfiles/postgresql/4-0.gemfile
index 5a663ec9..5f07d69f 100644
--- a/gemfiles/postgresql/4-0.gemfile
+++ b/gemfiles/postgresql/4-0.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.0.0"
 end
diff --git a/gemfiles/postgresql/4-1.gemfile b/gemfiles/postgresql/4-1.gemfile
index dc163cb5..18756ff5 100644
--- a/gemfiles/postgresql/4-1.gemfile
+++ b/gemfiles/postgresql/4-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/postgresql/4-2.gemfile b/gemfiles/postgresql/4-2.gemfile
index ecf500db..b6335fdd 100644
--- a/gemfiles/postgresql/4-2.gemfile
+++ b/gemfiles/postgresql/4-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/postgresql/5-0.gemfile b/gemfiles/postgresql/5-0.gemfile
index b2363a8c..54ac4b81 100644
--- a/gemfiles/postgresql/5-0.gemfile
+++ b/gemfiles/postgresql/5-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/postgresql/5-1.gemfile b/gemfiles/postgresql/5-1.gemfile
index 4f4505ea..91627dd6 100644
--- a/gemfiles/postgresql/5-1.gemfile
+++ b/gemfiles/postgresql/5-1.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/postgresql/5-2.gemfile b/gemfiles/postgresql/5-2.gemfile
index 6d244ed5..99f71d10 100644
--- a/gemfiles/postgresql/5-2.gemfile
+++ b/gemfiles/postgresql/5-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/postgresql/6-0.gemfile b/gemfiles/postgresql/6-0.gemfile
index 70762cfd..37ff814c 100644
--- a/gemfiles/postgresql/6-0.gemfile
+++ b/gemfiles/postgresql/6-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index 5f5956aa..ed4af75d 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", github: "rails"
 end
diff --git a/gemfiles/sqlite3/3-0.gemfile b/gemfiles/sqlite3/3-0.gemfile
index f7b6c253..2788517b 100644
--- a/gemfiles/sqlite3/3-0.gemfile
+++ b/gemfiles/sqlite3/3-0.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.0.0"
 end
diff --git a/gemfiles/sqlite3/3-1.gemfile b/gemfiles/sqlite3/3-1.gemfile
index f0fd1094..1969fda0 100644
--- a/gemfiles/sqlite3/3-1.gemfile
+++ b/gemfiles/sqlite3/3-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.1.0"
 end
diff --git a/gemfiles/sqlite3/3-2.gemfile b/gemfiles/sqlite3/3-2.gemfile
index 3c1cd917..321870e6 100644
--- a/gemfiles/sqlite3/3-2.gemfile
+++ b/gemfiles/sqlite3/3-2.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/sqlite3/4-0.gemfile b/gemfiles/sqlite3/4-0.gemfile
index 8a99f7ff..58f19ce5 100644
--- a/gemfiles/sqlite3/4-0.gemfile
+++ b/gemfiles/sqlite3/4-0.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.0.0"
 end
diff --git a/gemfiles/sqlite3/4-1.gemfile b/gemfiles/sqlite3/4-1.gemfile
index 7ee34625..eb11aaa7 100644
--- a/gemfiles/sqlite3/4-1.gemfile
+++ b/gemfiles/sqlite3/4-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index 7a45e6ec..9d63c8e2 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
 end
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index 44b23282..86690e13 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"
 end
diff --git a/gemfiles/sqlite3/5-1.gemfile b/gemfiles/sqlite3/5-1.gemfile
index 31d8a489..c9aefcaf 100644
--- a/gemfiles/sqlite3/5-1.gemfile
+++ b/gemfiles/sqlite3/5-1.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.1.0"
 end
diff --git a/gemfiles/sqlite3/5-2.gemfile b/gemfiles/sqlite3/5-2.gemfile
index 682f4053..b3d195fb 100644
--- a/gemfiles/sqlite3/5-2.gemfile
+++ b/gemfiles/sqlite3/5-2.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.2.0"
 end
diff --git a/gemfiles/sqlite3/6-0.gemfile b/gemfiles/sqlite3/6-0.gemfile
index 9f48cc50..4f858454 100644
--- a/gemfiles/sqlite3/6-0.gemfile
+++ b/gemfiles/sqlite3/6-0.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 6.0.0"
 end
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index 393c6a57..0f24c089 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -14,8 +14,8 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", require: false
-  gem "simplecov-lcov", require: false
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", github: "rails"
 end

From bee840d6152443bca97d8f65a29709a4ca92d320 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 19:46:59 -0500
Subject: [PATCH 38/62] Older versions of AR do not work with PG 12

---
 .github/workflows/ci.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e80f7b17..35340f59 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -120,7 +120,8 @@ jobs:
     continue-on-error: ${{ endsWith(matrix.gemfile, 'master.gemfile') || endsWith(matrix.ruby, 'head') }}
     services:
       postgres:
-        image: postgres
+        # AR before 4.2.6 doesn't work with 12
+        image: postgres:11-alpine
         # Provide the password for postgres
         env:
           POSTGRES_DB: delayed_job_test

From 33929a530ac84946975107a45dac3072e8486072 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 21:33:25 -0500
Subject: [PATCH 39/62] Correct version incompatabilities in old ruby

---
 gemfiles/mysql2/3-2.gemfile     | 4 ++--
 gemfiles/mysql2/4-1.gemfile     | 4 ++--
 gemfiles/mysql2/4-2.gemfile     | 2 +-
 gemfiles/mysql2/5-0.gemfile     | 2 +-
 gemfiles/postgresql/3-2.gemfile | 4 ++--
 gemfiles/postgresql/4-1.gemfile | 4 ++--
 gemfiles/postgresql/4-2.gemfile | 2 +-
 gemfiles/postgresql/5-0.gemfile | 2 +-
 gemfiles/sqlite3/3-2.gemfile    | 4 ++--
 gemfiles/sqlite3/4-1.gemfile    | 4 ++--
 gemfiles/sqlite3/4-2.gemfile    | 2 +-
 gemfiles/sqlite3/5-0.gemfile    | 2 +-
 12 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/gemfiles/mysql2/3-2.gemfile b/gemfiles/mysql2/3-2.gemfile
index e0b06405..7c5b0555 100644
--- a/gemfiles/mysql2/3-2.gemfile
+++ b/gemfiles/mysql2/3-2.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.10"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", ">= 0.20.0", require: false
-gem "simplecov-lcov", ">= 0.8.0", require: false
+gem "simplecov", ">= 0.17.0", require: false
+gem "simplecov-lcov", "< 0.8.0", require: false
 
 gem "activerecord", "~> 3.2.0"
 
diff --git a/gemfiles/mysql2/4-1.gemfile b/gemfiles/mysql2/4-1.gemfile
index fdcc9cc4..7e08a6ef 100644
--- a/gemfiles/mysql2/4-1.gemfile
+++ b/gemfiles/mysql2/4-1.gemfile
@@ -7,8 +7,8 @@ gem "rake"
 gem "mysql2", "~> 0.3.13"
 
 gem "rspec", ">= 2.11"
-gem "simplecov", ">= 0.20.0", require: false
-gem "simplecov-lcov", ">= 0.8.0", require: false
+gem "simplecov", ">= 0.17.0", require: false
+gem "simplecov-lcov", "< 0.8.0", require: false
 
 gem "activerecord", "~> 4.1.0"
 
diff --git a/gemfiles/mysql2/4-2.gemfile b/gemfiles/mysql2/4-2.gemfile
index 66d9e95c..ec864669 100644
--- a/gemfiles/mysql2/4-2.gemfile
+++ b/gemfiles/mysql2/4-2.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
diff --git a/gemfiles/mysql2/5-0.gemfile b/gemfiles/mysql2/5-0.gemfile
index 9634e9d1..61c8eb04 100644
--- a/gemfiles/mysql2/5-0.gemfile
+++ b/gemfiles/mysql2/5-0.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"
diff --git a/gemfiles/postgresql/3-2.gemfile b/gemfiles/postgresql/3-2.gemfile
index 99903982..54017ba8 100644
--- a/gemfiles/postgresql/3-2.gemfile
+++ b/gemfiles/postgresql/3-2.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
-  gem "simplecov-lcov", ">= 0.8.0", require: false
+  gem "simplecov", ">= 0.17.0", require: false
+  gem "simplecov-lcov", "< 0.8.0", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/postgresql/4-1.gemfile b/gemfiles/postgresql/4-1.gemfile
index 18756ff5..ec6e40e3 100644
--- a/gemfiles/postgresql/4-1.gemfile
+++ b/gemfiles/postgresql/4-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "pg", "~> 0.18"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
-  gem "simplecov-lcov", ">= 0.8.0", require: false
+  gem "simplecov", ">= 0.17.0", require: false
+  gem "simplecov-lcov", "< 0.8.0", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/postgresql/4-2.gemfile b/gemfiles/postgresql/4-2.gemfile
index b6335fdd..6ee5bb3a 100644
--- a/gemfiles/postgresql/4-2.gemfile
+++ b/gemfiles/postgresql/4-2.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
diff --git a/gemfiles/postgresql/5-0.gemfile b/gemfiles/postgresql/5-0.gemfile
index 54ac4b81..fdf9448d 100644
--- a/gemfiles/postgresql/5-0.gemfile
+++ b/gemfiles/postgresql/5-0.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"
diff --git a/gemfiles/sqlite3/3-2.gemfile b/gemfiles/sqlite3/3-2.gemfile
index 321870e6..1521817c 100644
--- a/gemfiles/sqlite3/3-2.gemfile
+++ b/gemfiles/sqlite3/3-2.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
-  gem "simplecov-lcov", ">= 0.8.0", require: false
+  gem "simplecov", ">= 0.17.0", require: false
+  gem "simplecov-lcov", "< 0.8.0", require: false
 
   gem "activerecord", "~> 3.2.0"
 end
diff --git a/gemfiles/sqlite3/4-1.gemfile b/gemfiles/sqlite3/4-1.gemfile
index eb11aaa7..0c3720f5 100644
--- a/gemfiles/sqlite3/4-1.gemfile
+++ b/gemfiles/sqlite3/4-1.gemfile
@@ -8,8 +8,8 @@ group :test do
   gem "sqlite3", "< 1.4"
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
-  gem "simplecov-lcov", ">= 0.8.0", require: false
+  gem "simplecov", ">= 0.17.0", require: false
+  gem "simplecov-lcov", "< 0.8.0", require: false
 
   gem "activerecord", "~> 4.1.0"
 end
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index 9d63c8e2..dcca26d3 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 4.2.0"
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index 86690e13..3498c34d 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -14,7 +14,7 @@ group :test do
   end
 
   gem "rspec", ">= 2.11"
-  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov", ">= 0.18.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
   gem "activerecord", "~> 5.0.0"

From be150fd011c3583c571b168915d52bf99aea9b05 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 21:42:05 -0500
Subject: [PATCH 40/62] mysql segfaults on ruby 2.1

---
 .github/workflows/ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 35340f59..2f11ea8c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -73,8 +73,6 @@ jobs:
           # - rvm: 2.0.0-p648
           #   gemfile: gemfiles/sqlite3/4-0.gemfile
           # Rails 4.1 was only compatible with ruby 2.1
-          - ruby: 2.1
-            gemfile: gemfiles/mysql2/4-1.gemfile
           - ruby: 2.1
             gemfile: gemfiles/postgresql/4-1.gemfile
           - ruby: 2.1

From 110ea0ac30c109b5b123e502f0af580763e001dc Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 22:01:32 -0500
Subject: [PATCH 41/62] Add packaging and performance rubocops

---
 .rubocop.yml |  2 ++
 Gemfile      | 10 ++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/.rubocop.yml b/.rubocop.yml
index 5a15ad1f..bb1eab8e 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,4 +1,6 @@
 require:
+  - rubocop-packaging
+  - rubocop-performance
   - rubocop-rails
   - rubocop-rspec
 
diff --git a/Gemfile b/Gemfile
index 2feab4db..270c0b85 100644
--- a/Gemfile
+++ b/Gemfile
@@ -18,11 +18,17 @@ group :test do
   end
 
   gem "rspec", ">= 3"
+
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+end
+
+group :rubocop do
   gem "rubocop"
+  gem "rubocop-packaging"
+  gem "rubocop-performance"
   gem "rubocop-rails"
   gem "rubocop-rspec"
-  gem "simplecov", ">= 0.20.0", require: false
-  gem "simplecov-lcov", ">= 0.8.0", require: false
 end
 
 gemspec

From 65752256a36174f794b0a711783821d9520cc6bd Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 22:01:43 -0500
Subject: [PATCH 42/62] Add rubocop workflow

---
 .github/workflows/rubocop.yml | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100644 .github/workflows/rubocop.yml

diff --git a/.github/workflows/rubocop.yml b/.github/workflows/rubocop.yml
new file mode 100644
index 00000000..7519676e
--- /dev/null
+++ b/.github/workflows/rubocop.yml
@@ -0,0 +1,30 @@
+name: RuboCop
+
+on: [push, pull_request]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Ruby 2.7
+      uses: ruby/setup-ruby@v1
+      with:
+        ruby-version: 2.7
+    - name: Generate lockfile for cache key
+      run: bundle lock
+    - name: Cache gems
+      uses: actions/cache@v1
+      with:
+        path: vendor/bundle
+        key: ${{ runner.os }}-rubocop-${{ hashFiles('**/Gemfile.lock') }}
+        restore-keys: |
+          ${{ runner.os }}-rubocop-
+    - name: Install gems
+      run: |
+        bundle config path vendor/bundle
+        bundle config set without 'default test'
+        bundle install --jobs 4 --retry 3
+    - name: Run RuboCop
+      run: bundle exec rubocop --parallel

From 187ee428db19e9d1bc95c8155732ff9348e111fa Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 22:02:21 -0500
Subject: [PATCH 43/62] Remove travis config

---
 .travis.yml | 147 ----------------------------------------------------
 1 file changed, 147 deletions(-)
 delete mode 100644 .travis.yml

diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index f770d4f7..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,147 +0,0 @@
-language: ruby
-branches:
-  only:
-    - master
-services:
-  - mysql
-  - postgresql
-addons:
-  postgresql: '9.6'
-before_script:
-  - mysql -e 'create database delayed_job_test;'
-  - mysql --version
-  - psql -c 'create database delayed_job_test;' -U postgres
-script: bundle exec $COMMAND
-env:
-  global:
-    - JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug"
-    - COMMAND=rspec
-gemfile: # Supported
-  - gemfiles/mysql2/6-0.gemfile
-  - gemfiles/postgresql/6-0.gemfile
-  - gemfiles/sqlite3/6-0.gemfile
-rvm: # Supported
-  - 2.5.8
-  - 2.6.6
-  - 2.7.2
-  - jruby-9.2.13.0
-
-jdk: oraclejdk11
-
-matrix:
-  allow_failures:
-    - rvm: jruby-head # Future
-    - rvm: rbx-2 # Parallel dimension
-    - rvm: ruby-head # Future
-    - gemfile: gemfiles/mysql2/master.gemfile # Future
-    - gemfile: gemfiles/postgresql/master.gemfile # Future
-    - gemfile: gemfiles/sqlite3/master.gemfile # Future
-
-  include:
-    #
-    # Rubocop
-    #
-    - rvm: 2.6.6
-      gemfile: Gemfile
-      env:
-        - COMMAND=rubocop
-    #
-    # The future
-    #
-    # Active Record head
-    - rvm: 2.6.3
-      gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.6.3
-      gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.6.3
-      gemfile: gemfiles/sqlite3/master.gemfile
-    - rvm: 2.7.2
-      gemfile: gemfiles/mysql2/master.gemfile
-    - rvm: 2.7.2
-      gemfile: gemfiles/postgresql/master.gemfile
-    - rvm: 2.7.2
-      gemfile: gemfiles/sqlite3/master.gemfile
-    # MRI Ruby head
-    - rvm: ruby-head
-      gemfile: gemfiles/mysql2/6-0.gemfile
-    - rvm: ruby-head
-      gemfile: gemfiles/postgresql/6-0.gemfile
-    - rvm: ruby-head
-      gemfile: gemfiles/sqlite3/6-0.gemfile
-    # JRuby head
-    - rvm: jruby-head
-      gemfile: gemfiles/mysql2/6-0.gemfile
-    - rvm: jruby-head
-      gemfile: gemfiles/postgresql/6-0.gemfile
-    - rvm: jruby-head
-      gemfile: gemfiles/sqlite3/6-0.gemfile
-    #
-    # The past
-    #
-    # EOL Active Record
-    # Rails 3.2 was maintained longer and is ruby 2.2 compatible
-    - rvm: 2.2.10
-      gemfile: gemfiles/postgresql/3-2.gemfile
-    - rvm: 2.2.10
-      gemfile: gemfiles/sqlite3/3-2.gemfile
-    # Rails <= 4.0 was only compatible with ruby 2.0
-    # The test were running, but there are known incompatibilites
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/postgresql/3-0.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/sqlite3/3-0.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/postgresql/3-1.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/sqlite3/3-1.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/postgresql/4-0.gemfile
-    - rvm: 2.0.0-p648
-      gemfile: gemfiles/sqlite3/4-0.gemfile
-    # Rails 4.1 was only compatible with ruby 2.1
-    - rvm: 2.1.9
-      gemfile: gemfiles/mysql2/4-1.gemfile
-    - rvm: 2.1.9
-      gemfile: gemfiles/postgresql/4-1.gemfile
-    - rvm: 2.1.9
-      gemfile: gemfiles/sqlite3/4-1.gemfile
-    # Rails 4.2 was EOL with the release of 6.0 and compatible with ruby 2.4
-    - rvm: 2.4.9
-      gemfile: gemfiles/mysql2/4-2.gemfile
-    - rvm: 2.4.9
-      gemfile: gemfiles/postgresql/4-2.gemfile
-    - rvm: 2.4.9
-      gemfile: gemfiles/sqlite3/4-2.gemfile
-    # Rails 5.0 was EOL with the release of 5.2 and compatible with ruby 2.4
-    - rvm: 2.4.9
-      gemfile: gemfiles/mysql2/5-0.gemfile
-    - rvm: 2.4.9
-      gemfile: gemfiles/postgresql/5-0.gemfile
-    - rvm: 2.4.9
-      gemfile: gemfiles/sqlite3/5-0.gemfile
-    # Rails 5.1 was EOL with the release of 6.0 and compatible with ruby 2.5
-    - rvm: 2.5.8
-      gemfile: gemfiles/mysql2/5-1.gemfile
-    - rvm: 2.5.8
-      gemfile: gemfiles/postgresql/5-1.gemfile
-    - rvm: 2.5.8
-      gemfile: gemfiles/sqlite3/5-1.gemfile
-    # While not yet EOL, 5.2 is only tested against up to ruby 2.5 https://github.com/rails/rails/blob/5-2-stable/.travis.yml
-    - rvm: 2.5.8
-      gemfile: gemfiles/mysql2/5-2.gemfile
-    - rvm: 2.5.8
-      gemfile: gemfiles/postgresql/5-2.gemfile
-    - rvm: 2.5.8
-      gemfile: gemfiles/sqlite3/5-2.gemfile
-    #
-    # The parallel dimension
-    #
-    # Rubinius
-    - rvm: rbx-2
-      gemfile: gemfiles/mysql2/6-0.gemfile
-    - rvm: rbx-2
-      gemfile: gemfiles/postgresql/6-0.gemfile
-    - rvm: rbx-2
-      gemfile: gemfiles/sqlite3/6-0.gemfile
-
-sudo: false

From b4686bb8ae0177f91df5bcb9de015cb34b36bd30 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 7 Dec 2020 22:06:53 -0500
Subject: [PATCH 44/62] Update readme badge

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ca4db81b..ea06d34e 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ you're reading the documentation for the master branch.
 # DelayedJob ActiveRecord Backend
 
 [![Gem Version](https://img.shields.io/gem/v/delayed_job_active_record.svg)](https://rubygems.org/gems/delayed_job_active_record)
-[![Build Status](https://img.shields.io/travis/collectiveidea/delayed_job_active_record.svg)](https://travis-ci.org/collectiveidea/delayed_job_active_record)
+![CI](https://github.com/collectiveidea/delayed_job_active_record/workflows/CI/badge.svg)
 [![Coverage Status](https://img.shields.io/coveralls/collectiveidea/delayed_job_active_record.svg)](https://coveralls.io/r/collectiveidea/delayed_job_active_record)
 
 ## Installation

From cf6f864733e2273e822e458e4fd360f76eec074a Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 15:32:40 -0500
Subject: [PATCH 45/62] Updated jdbc adapters were released

---
 gemfiles/mysql2/6-0.gemfile     | 2 +-
 gemfiles/postgresql/6-0.gemfile | 2 +-
 gemfiles/sqlite3/6-0.gemfile    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gemfiles/mysql2/6-0.gemfile b/gemfiles/mysql2/6-0.gemfile
index 539a3917..e7f4dae9 100644
--- a/gemfiles/mysql2/6-0.gemfile
+++ b/gemfiles/mysql2/6-0.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcmysql-adapter", ">= 60.0.rc1"
+    gem "activerecord-jdbcmysql-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do
diff --git a/gemfiles/postgresql/6-0.gemfile b/gemfiles/postgresql/6-0.gemfile
index 37ff814c..0114ea45 100644
--- a/gemfiles/postgresql/6-0.gemfile
+++ b/gemfiles/postgresql/6-0.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcpostgresql-adapter", ">= 60.0.rc1"
+    gem "activerecord-jdbcpostgresql-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do
diff --git a/gemfiles/sqlite3/6-0.gemfile b/gemfiles/sqlite3/6-0.gemfile
index 4f858454..e69f1fb1 100644
--- a/gemfiles/sqlite3/6-0.gemfile
+++ b/gemfiles/sqlite3/6-0.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcsqlite3-adapter", ">= 60.0.rc1"
+    gem "activerecord-jdbcsqlite3-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do

From c459b7c8b390320a7db72b23cb766b7e92104116 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 15:33:06 -0500
Subject: [PATCH 46/62] Rely on latest jdbc code for edge testing

---
 gemfiles/mysql2/master.gemfile     | 2 +-
 gemfiles/postgresql/master.gemfile | 2 +-
 gemfiles/sqlite3/master.gemfile    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index 99de96d1..dafeeff9 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcmysql-adapter"
+    gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index ed4af75d..5b508780 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcpostgresql-adapter"
+    gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index 0f24c089..ee339446 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -6,7 +6,7 @@ gem "rake"
 
 group :test do
   platforms :jruby do
-    gem "activerecord-jdbcsqlite3-adapter"
+    gem "activerecord-jdbcsqlite3-adapter", github: "jruby/activerecord-jdbc-adapter"
   end
 
   platforms :ruby, :mswin, :mingw do

From d88886e02980bf91a336e00e962d470edfaa5e69 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 15:33:47 -0500
Subject: [PATCH 47/62] Allow rails 6.1

---
 delayed_job_active_record.gemspec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 8b2ebb96..7a6a7bbc 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 Gem::Specification.new do |spec|
-  spec.add_dependency "activerecord", [">= 3.0", "< 6.1"]
+  spec.add_dependency "activerecord", [">= 3.0", "< 6.2"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
   spec.authors        = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
   spec.description    = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"

From 3d6f9f7c20c9f3c3979626df45e36e533093c09d Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 15:53:05 -0500
Subject: [PATCH 48/62] Add Rails 6.1 to biuld grid

---
 .github/workflows/ci.yml           | 25 ++++++++++++-------------
 gemfiles/mysql2/6-1.gemfile        | 24 ++++++++++++++++++++++++
 gemfiles/mysql2/master.gemfile     |  2 +-
 gemfiles/postgresql/6-1.gemfile    | 24 ++++++++++++++++++++++++
 gemfiles/postgresql/master.gemfile |  2 +-
 gemfiles/sqlite3/6-1.gemfile       | 24 ++++++++++++++++++++++++
 gemfiles/sqlite3/master.gemfile    |  2 +-
 7 files changed, 87 insertions(+), 16 deletions(-)
 create mode 100644 gemfiles/mysql2/6-1.gemfile
 create mode 100644 gemfiles/postgresql/6-1.gemfile
 create mode 100644 gemfiles/sqlite3/6-1.gemfile

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2f11ea8c..7b0e7f6f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,9 +14,15 @@ jobs:
       matrix:
         ruby: [2.5, 2.6, 2.7, jruby]
         gemfile:
+          - gemfiles/mysql2/5-2.gemfile
+          - gemfiles/postgresql/5-2.gemfile
+          - gemfiles/sqlite3/5-2.gemfile
           - gemfiles/mysql2/6-0.gemfile
           - gemfiles/postgresql/6-0.gemfile
           - gemfiles/sqlite3/6-0.gemfile
+          - gemfiles/mysql2/6-1.gemfile
+          - gemfiles/postgresql/6-1.gemfile
+          - gemfiles/sqlite3/6-1.gemfile
         include:
           #
           # The future
@@ -36,18 +42,18 @@ jobs:
             gemfile: gemfiles/sqlite3/master.gemfile
           # MRI Ruby head
           - ruby: head
-            gemfile: gemfiles/mysql2/6-0.gemfile
+            gemfile: gemfiles/mysql2/6-1.gemfile
           - ruby: head
-            gemfile: gemfiles/postgresql/6-0.gemfile
+            gemfile: gemfiles/postgresql/6-1.gemfile
           - ruby: head
-            gemfile: gemfiles/sqlite3/6-0.gemfile
+            gemfile: gemfiles/sqlite3/6-1.gemfile
           # JRuby head
           - ruby: jruby-head
-            gemfile: gemfiles/mysql2/6-0.gemfile
+            gemfile: gemfiles/mysql2/6-1.gemfile
           - ruby: jruby-head
-            gemfile: gemfiles/postgresql/6-0.gemfile
+            gemfile: gemfiles/postgresql/6-1.gemfile
           - ruby: jruby-head
-            gemfile: gemfiles/sqlite3/6-0.gemfile
+            gemfile: gemfiles/sqlite3/6-1.gemfile
           #
           # The past
           #
@@ -98,13 +104,6 @@ jobs:
             gemfile: gemfiles/postgresql/5-1.gemfile
           - ruby: 2.5
             gemfile: gemfiles/sqlite3/5-1.gemfile
-          # While not yet EOL, 5.2 is only tested against up to ruby 2.5 https://github.com/rails/rails/blob/5-2-stable/.travis.yml
-          - ruby: 2.5
-            gemfile: gemfiles/mysql2/5-2.gemfile
-          - ruby: 2.5
-            gemfile: gemfiles/postgresql/5-2.gemfile
-          - ruby: 2.5
-            gemfile: gemfiles/sqlite3/5-2.gemfile
           #
           # The parallel dimension
           #
diff --git a/gemfiles/mysql2/6-1.gemfile b/gemfiles/mysql2/6-1.gemfile
new file mode 100644
index 00000000..a350c325
--- /dev/null
+++ b/gemfiles/mysql2/6-1.gemfile
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    # Remove github when 61.0 releases
+    gem "activerecord-jdbcmysql-adapter", github: "jruby/activerecord-jdbc-adapter"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "mysql2", "~> 0.5"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 6.1.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/mysql2/master.gemfile b/gemfiles/mysql2/master.gemfile
index dafeeff9..2fa7be31 100644
--- a/gemfiles/mysql2/master.gemfile
+++ b/gemfiles/mysql2/master.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2"
+    gem "mysql2", "~> 0.5"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/6-1.gemfile b/gemfiles/postgresql/6-1.gemfile
new file mode 100644
index 00000000..19cb2b83
--- /dev/null
+++ b/gemfiles/postgresql/6-1.gemfile
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    # Remove github when 61.0 releases
+    gem "activerecord-jdbcpostgresql-adapter", github: "jruby/activerecord-jdbc-adapter"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "pg", "~> 1.1"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 6.1.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/postgresql/master.gemfile b/gemfiles/postgresql/master.gemfile
index 5b508780..8e6af335 100644
--- a/gemfiles/postgresql/master.gemfile
+++ b/gemfiles/postgresql/master.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", "~> 1.1"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/6-1.gemfile b/gemfiles/sqlite3/6-1.gemfile
new file mode 100644
index 00000000..cf00d980
--- /dev/null
+++ b/gemfiles/sqlite3/6-1.gemfile
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :jruby do
+    # Remove github when 61.0 releases
+    gem "activerecord-jdbcsqlite3-adapter", github: "jruby/activerecord-jdbc-adapter"
+  end
+
+  platforms :ruby, :mswin, :mingw do
+    gem "sqlite3", "~> 1.4"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 6.1.0"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/sqlite3/master.gemfile b/gemfiles/sqlite3/master.gemfile
index ee339446..e2342249 100644
--- a/gemfiles/sqlite3/master.gemfile
+++ b/gemfiles/sqlite3/master.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3"
+    gem "sqlite3", "~> 1.4"
   end
 
   gem "rspec", ">= 2.11"

From 9bcaa27371e385ebd51ea349544ce4449bcffe4a Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 16:02:35 -0500
Subject: [PATCH 49/62] Correct legacy database adapter versions

---
 gemfiles/mysql2/4-2.gemfile     | 2 +-
 gemfiles/mysql2/5-0.gemfile     | 2 +-
 gemfiles/mysql2/5-1.gemfile     | 2 +-
 gemfiles/mysql2/5-2.gemfile     | 2 +-
 gemfiles/mysql2/6-0.gemfile     | 2 +-
 gemfiles/postgresql/4-2.gemfile | 2 +-
 gemfiles/postgresql/5-0.gemfile | 2 +-
 gemfiles/postgresql/5-1.gemfile | 2 +-
 gemfiles/postgresql/5-2.gemfile | 2 +-
 gemfiles/postgresql/6-0.gemfile | 2 +-
 gemfiles/sqlite3/4-2.gemfile    | 2 +-
 gemfiles/sqlite3/5-0.gemfile    | 2 +-
 gemfiles/sqlite3/5-1.gemfile    | 2 +-
 gemfiles/sqlite3/5-2.gemfile    | 2 +-
 14 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/gemfiles/mysql2/4-2.gemfile b/gemfiles/mysql2/4-2.gemfile
index ec864669..27225289 100644
--- a/gemfiles/mysql2/4-2.gemfile
+++ b/gemfiles/mysql2/4-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2", ">= 0.3.13", "< 0.5"
+    gem "mysql2", [">= 0.3.13", "< 0.5"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/mysql2/5-0.gemfile b/gemfiles/mysql2/5-0.gemfile
index 61c8eb04..46561217 100644
--- a/gemfiles/mysql2/5-0.gemfile
+++ b/gemfiles/mysql2/5-0.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2"
+    gem "mysql2", [">= 0.3.18", "< 0.6.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/mysql2/5-1.gemfile b/gemfiles/mysql2/5-1.gemfile
index 245d42aa..e4794542 100644
--- a/gemfiles/mysql2/5-1.gemfile
+++ b/gemfiles/mysql2/5-1.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2"
+    gem "mysql2", [">= 0.3.18", "< 0.6.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/mysql2/5-2.gemfile b/gemfiles/mysql2/5-2.gemfile
index 5603af01..e9e29970 100644
--- a/gemfiles/mysql2/5-2.gemfile
+++ b/gemfiles/mysql2/5-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2"
+    gem "mysql2", [">= 0.4.4", "< 0.6.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/mysql2/6-0.gemfile b/gemfiles/mysql2/6-0.gemfile
index e7f4dae9..047b5b23 100644
--- a/gemfiles/mysql2/6-0.gemfile
+++ b/gemfiles/mysql2/6-0.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "mysql2"
+    gem "mysql2", ">= 0.4.4"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/4-2.gemfile b/gemfiles/postgresql/4-2.gemfile
index 6ee5bb3a..d9ce2220 100644
--- a/gemfiles/postgresql/4-2.gemfile
+++ b/gemfiles/postgresql/4-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", "~> 0.15"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/5-0.gemfile b/gemfiles/postgresql/5-0.gemfile
index fdf9448d..af510ae8 100644
--- a/gemfiles/postgresql/5-0.gemfile
+++ b/gemfiles/postgresql/5-0.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", [">= 0.18", "< 2.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/5-1.gemfile b/gemfiles/postgresql/5-1.gemfile
index 91627dd6..4aa022d7 100644
--- a/gemfiles/postgresql/5-1.gemfile
+++ b/gemfiles/postgresql/5-1.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", [">= 0.18", "< 2.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/5-2.gemfile b/gemfiles/postgresql/5-2.gemfile
index 99f71d10..758fd1bb 100644
--- a/gemfiles/postgresql/5-2.gemfile
+++ b/gemfiles/postgresql/5-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", [">= 0.18", "< 2.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/postgresql/6-0.gemfile b/gemfiles/postgresql/6-0.gemfile
index 0114ea45..d26dc504 100644
--- a/gemfiles/postgresql/6-0.gemfile
+++ b/gemfiles/postgresql/6-0.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "pg", "~> 0.18"
+    gem "pg", [">= 0.18", "< 2.0"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/4-2.gemfile b/gemfiles/sqlite3/4-2.gemfile
index dcca26d3..3dd24edc 100644
--- a/gemfiles/sqlite3/4-2.gemfile
+++ b/gemfiles/sqlite3/4-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3", "< 1.4"
+    gem "sqlite3", "~> 1.3.6"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/5-0.gemfile b/gemfiles/sqlite3/5-0.gemfile
index 3498c34d..e6534cb0 100644
--- a/gemfiles/sqlite3/5-0.gemfile
+++ b/gemfiles/sqlite3/5-0.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3", "< 1.4"
+    gem "sqlite3", "~> 1.3.6"
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/5-1.gemfile b/gemfiles/sqlite3/5-1.gemfile
index c9aefcaf..e26dac0f 100644
--- a/gemfiles/sqlite3/5-1.gemfile
+++ b/gemfiles/sqlite3/5-1.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3", "< 1.4"
+    gem "sqlite3", ["~> 1.3", ">= 1.3.6"]
   end
 
   gem "rspec", ">= 2.11"
diff --git a/gemfiles/sqlite3/5-2.gemfile b/gemfiles/sqlite3/5-2.gemfile
index b3d195fb..e504f4f5 100644
--- a/gemfiles/sqlite3/5-2.gemfile
+++ b/gemfiles/sqlite3/5-2.gemfile
@@ -10,7 +10,7 @@ group :test do
   end
 
   platforms :ruby, :mswin, :mingw do
-    gem "sqlite3", "< 1.4"
+    gem "sqlite3", ["~> 1.3", ">= 1.3.6"]
   end
 
   gem "rspec", ">= 2.11"

From 001b24687ca146581cb7b075f4353ea99ed51f70 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Wed, 9 Dec 2020 16:50:20 -0500
Subject: [PATCH 50/62] Prepare 4.1.5 release

---
 README.md                         | 2 +-
 delayed_job_active_record.gemspec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ea06d34e..b996bd2e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 **If you're viewing this at https://github.com/collectiveidea/delayed_job_active_record,
 you're reading the documentation for the master branch.
 [View documentation for the latest release
-(4.1.4).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.4)**
+(4.1.5).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.5)**
 
 # DelayedJob ActiveRecord Backend
 
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 7a6a7bbc..7df7e94f 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -12,5 +12,5 @@ Gem::Specification.new do |spec|
   spec.name           = "delayed_job_active_record"
   spec.require_paths  = ["lib"]
   spec.summary        = "ActiveRecord backend for DelayedJob"
-  spec.version        = "4.1.4"
+  spec.version        = "4.1.5"
 end

From 09350615677a47748820f2ed65602fe0c4625773 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 26 Mar 2021 10:16:03 -0400
Subject: [PATCH 51/62] Revert "Fix Rails autoloading"

---
 lib/delayed/backend/active_record/railtie.rb | 14 --------------
 lib/delayed_job_active_record.rb             | 11 +++--------
 2 files changed, 3 insertions(+), 22 deletions(-)
 delete mode 100644 lib/delayed/backend/active_record/railtie.rb

diff --git a/lib/delayed/backend/active_record/railtie.rb b/lib/delayed/backend/active_record/railtie.rb
deleted file mode 100644
index e353ae77..00000000
--- a/lib/delayed/backend/active_record/railtie.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-module Delayed
-  module Backend
-    module ActiveRecord
-      class Railtie < ::Rails::Railtie
-        config.after_initialize do
-          require "delayed/backend/active_record"
-          Delayed::Worker.backend = :active_record
-        end
-      end
-    end
-  end
-end
diff --git a/lib/delayed_job_active_record.rb b/lib/delayed_job_active_record.rb
index b6d4ca33..a09638e6 100644
--- a/lib/delayed_job_active_record.rb
+++ b/lib/delayed_job_active_record.rb
@@ -1,12 +1,7 @@
 # frozen_string_literal: true
 
+require "active_record"
 require "delayed_job"
+require "delayed/backend/active_record"
 
-if defined?(Rails::Railtie)
-  require "delayed/backend/active_record/railtie"
-else
-  require "active_record"
-  require "delayed/backend/active_record"
-
-  Delayed::Worker.backend = :active_record
-end
+Delayed::Worker.backend = :active_record

From d65b0f9900f5b0c78c341c7c0209c2d138d64ec5 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Fri, 26 Mar 2021 11:37:21 -0400
Subject: [PATCH 52/62] Prepare 4.1.6 release

---
 README.md                         | 2 +-
 delayed_job_active_record.gemspec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b996bd2e..88f029a6 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 **If you're viewing this at https://github.com/collectiveidea/delayed_job_active_record,
 you're reading the documentation for the master branch.
 [View documentation for the latest release
-(4.1.5).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.5)**
+(4.1.6).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.6)**
 
 # DelayedJob ActiveRecord Backend
 
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 7df7e94f..f801480d 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -12,5 +12,5 @@ Gem::Specification.new do |spec|
   spec.name           = "delayed_job_active_record"
   spec.require_paths  = ["lib"]
   spec.summary        = "ActiveRecord backend for DelayedJob"
-  spec.version        = "4.1.5"
+  spec.version        = "4.1.6"
 end

From cded883d5eeab45ddff8e697177b23779202bfa0 Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 11 Oct 2021 14:50:37 +0900
Subject: [PATCH 53/62] Support Rails 7.0

---
 .github/workflows/ci.yml          | 72 +++++++++++++++++++++++--------
 delayed_job_active_record.gemspec |  2 +-
 gemfiles/mysql2/7-0.gemfile       | 19 ++++++++
 gemfiles/postgresql/7-0.gemfile   | 19 ++++++++
 gemfiles/sqlite3/7-0.gemfile      | 19 ++++++++
 5 files changed, 112 insertions(+), 19 deletions(-)
 create mode 100644 gemfiles/mysql2/7-0.gemfile
 create mode 100644 gemfiles/postgresql/7-0.gemfile
 create mode 100644 gemfiles/sqlite3/7-0.gemfile

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7b0e7f6f..a200b043 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,41 +12,41 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        ruby: [2.5, 2.6, 2.7, jruby]
+        ruby: [2.7, 3.0]
         gemfile:
-          - gemfiles/mysql2/5-2.gemfile
-          - gemfiles/postgresql/5-2.gemfile
-          - gemfiles/sqlite3/5-2.gemfile
-          - gemfiles/mysql2/6-0.gemfile
-          - gemfiles/postgresql/6-0.gemfile
-          - gemfiles/sqlite3/6-0.gemfile
-          - gemfiles/mysql2/6-1.gemfile
-          - gemfiles/postgresql/6-1.gemfile
-          - gemfiles/sqlite3/6-1.gemfile
+          - gemfiles/mysql2/7-0.gemfile
+          - gemfiles/postgresql/7-0.gemfile
+          - gemfiles/sqlite3/7-0.gemfile
         include:
           #
           # The future
           #
           # Active Record head
-          - ruby: 2.6
+          - ruby: 2.7
             gemfile: gemfiles/mysql2/master.gemfile
-          - ruby: 2.6
+          - ruby: 3.0
             gemfile: gemfiles/postgresql/master.gemfile
-          - ruby: 2.6
-            gemfile: gemfiles/sqlite3/master.gemfile
           - ruby: 2.7
+            gemfile: gemfiles/sqlite3/master.gemfile
+          - ruby: 3.0
             gemfile: gemfiles/mysql2/master.gemfile
           - ruby: 2.7
             gemfile: gemfiles/postgresql/master.gemfile
-          - ruby: 2.7
+          - ruby: 3.0
             gemfile: gemfiles/sqlite3/master.gemfile
           # MRI Ruby head
           - ruby: head
-            gemfile: gemfiles/mysql2/6-1.gemfile
+            gemfile: gemfiles/mysql2/master.gemfile
           - ruby: head
-            gemfile: gemfiles/postgresql/6-1.gemfile
+            gemfile: gemfiles/postgresql/master.gemfile
           - ruby: head
-            gemfile: gemfiles/sqlite3/6-1.gemfile
+            gemfile: gemfiles/sqlite3/master.gemfile
+          - ruby: head
+            gemfile: gemfiles/mysql2/7-0.gemfile
+          - ruby: head
+            gemfile: gemfiles/postgresql/7-0.gemfile
+          - ruby: head
+            gemfile: gemfiles/sqlite3/7-0.gemfile
           # JRuby head
           - ruby: jruby-head
             gemfile: gemfiles/mysql2/6-1.gemfile
@@ -55,6 +55,31 @@ jobs:
           - ruby: jruby-head
             gemfile: gemfiles/sqlite3/6-1.gemfile
           #
+          # The current
+          #
+          - ruby: 2.5
+            gemfile: gemfiles/mysql2/6-1.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/postgresql/6-1.gemfile
+          - ruby: 2.5
+            gemfile: gemfiles/sqlite3/6-1.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/mysql2/6-1.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/postgresql/6-1.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/sqlite3/6-1.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/mysql2/6-1.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/postgresql/6-1.gemfile
+          - ruby: 2.7
+            gemfile: gemfiles/sqlite3/6-1.gemfile
+          - ruby: jruby-9.2
+            gemfile: gemfiles/mysql2/6-1.gemfile
+          - ruby: jruby-9.3
+            gemfile: gemfiles/postgresql/6-1.gemfile
+          #
           # The past
           #
           # EOL Active Record
@@ -104,6 +129,17 @@ jobs:
             gemfile: gemfiles/postgresql/5-1.gemfile
           - ruby: 2.5
             gemfile: gemfiles/sqlite3/5-1.gemfile
+          # Rails 6.0 was EOL with the release of 7.0 and compatible with ruby 2.6
+          - ruby: 2.6
+            gemfile: gemfiles/mysql2/6-0.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/postgresql/6-0.gemfile
+          - ruby: 2.6
+            gemfile: gemfiles/sqlite3/6-0.gemfile
+          - ruby: jruby-9.2
+            gemfile: gemfiles/mysql2/6-0.gemfile
+          - ruby: jruby-9.3
+            gemfile: gemfiles/postgresql/6-0.gemfile
           #
           # The parallel dimension
           #
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index f801480d..2bc81374 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 Gem::Specification.new do |spec|
-  spec.add_dependency "activerecord", [">= 3.0", "< 6.2"]
+  spec.add_dependency "activerecord", [">= 3.0", "< 7.1"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
   spec.authors        = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
   spec.description    = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"
diff --git a/gemfiles/mysql2/7-0.gemfile b/gemfiles/mysql2/7-0.gemfile
new file mode 100644
index 00000000..045269bd
--- /dev/null
+++ b/gemfiles/mysql2/7-0.gemfile
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :ruby, :mswin, :mingw do
+    gem "mysql2", "~> 0.5"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 7.0.0.alpha2"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/postgresql/7-0.gemfile b/gemfiles/postgresql/7-0.gemfile
new file mode 100644
index 00000000..a7fa29c3
--- /dev/null
+++ b/gemfiles/postgresql/7-0.gemfile
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :ruby, :mswin, :mingw do
+    gem "pg", "~> 1.1"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 7.0.0.alpha2"
+end
+
+gemspec path: "../../"
diff --git a/gemfiles/sqlite3/7-0.gemfile b/gemfiles/sqlite3/7-0.gemfile
new file mode 100644
index 00000000..125254f2
--- /dev/null
+++ b/gemfiles/sqlite3/7-0.gemfile
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rake"
+
+group :test do
+  platforms :ruby, :mswin, :mingw do
+    gem "sqlite3", "~> 1.4"
+  end
+
+  gem "rspec", ">= 2.11"
+  gem "simplecov", ">= 0.20.0", require: false
+  gem "simplecov-lcov", ">= 0.8.0", require: false
+
+  gem "activerecord", "~> 7.0.0.alpha2"
+end
+
+gemspec path: "../../"

From 72da7676697cf995a42fd8140a834bfd6eef6a69 Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 1 Nov 2021 17:32:01 +0900
Subject: [PATCH 54/62] Fix a broken spec due to Psych >= 4

Since psych4.0, the load method has been safe_load, which causes the following error.

So I use YAML#load_dj to avoid them. ref: ref: https://github.com/collectiveidea/delayed_job/pull/1152/commits/b4ddd3dfe1450f1e51f9a6ac90db3134b5d7af78

```
  1) ActiveRecord loads classes with non-default primary key
     Failure/Error:
       expect do
         YAML.load(Story.create.to_yaml)
       end.not_to raise_error

       expected no Exception, got #<Psych::DisallowedClass: Tried to load unspecified class: Story> with backtrace:
         # ./spec/delayed/serialization/active_record_spec.rb:8:in `block (3 levels) in <top (required)>'
         # ./spec/delayed/serialization/active_record_spec.rb:7:in `block (2 levels) in <top (required)>'
     # ./spec/delayed/serialization/active_record_spec.rb:7:in `block (2 levels) in <top (required)>'
```
---
 spec/delayed/serialization/active_record_spec.rb | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/spec/delayed/serialization/active_record_spec.rb b/spec/delayed/serialization/active_record_spec.rb
index 4aa27f11..f0b0cd30 100644
--- a/spec/delayed/serialization/active_record_spec.rb
+++ b/spec/delayed/serialization/active_record_spec.rb
@@ -5,13 +5,13 @@
 describe ActiveRecord do
   it "loads classes with non-default primary key" do
     expect do
-      YAML.load(Story.create.to_yaml)
+      YAML.load_dj(Story.create.to_yaml)
     end.not_to raise_error
   end
 
   it "loads classes even if not in default scope" do
     expect do
-      YAML.load(Story.create(scoped: false).to_yaml)
+      YAML.load_dj(Story.create(scoped: false).to_yaml)
     end.not_to raise_error
   end
 end

From 3715b87c5e92470310d09d1f8d46a285b77a60c2 Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 15 Nov 2021 17:53:19 +0900
Subject: [PATCH 55/62] Set rubygems_mfa_required in gemspec

ref: https://github.com/rubocop/rubocop/pull/10239
---
 delayed_job_active_record.gemspec | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 2bc81374..f49cdf46 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -3,6 +3,9 @@
 Gem::Specification.new do |spec|
   spec.add_dependency "activerecord", [">= 3.0", "< 7.1"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
+  spec.metadata = {
+    "rubygems_mfa_required" => "true"
+  }
   spec.authors        = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
   spec.description    = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"
   spec.email          = ["bryckbost@gmail.com", "matt@griffinonline.org", "sferik@gmail.com"]

From 47e45711ee1061bc6499552ee888bdc87b958570 Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 17 Jan 2022 17:34:43 +0900
Subject: [PATCH 56/62] Enclose every ruby version in quotations

If we use Ruby 3.0 without quotations in YAML, It is interpreted as "3". If you specify 3 on GitHub Actions, it means the latest stable version of the 3 series, so 3.1 will be used.
---
 .github/workflows/ci.yml | 64 ++++++++++++++++++++--------------------
 1 file changed, 32 insertions(+), 32 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a200b043..9e1f96fa 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        ruby: [2.7, 3.0]
+        ruby: ['2.7', '3.0']
         gemfile:
           - gemfiles/mysql2/7-0.gemfile
           - gemfiles/postgresql/7-0.gemfile
@@ -22,17 +22,17 @@ jobs:
           # The future
           #
           # Active Record head
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/mysql2/master.gemfile
-          - ruby: 3.0
+          - ruby: '3.0'
             gemfile: gemfiles/postgresql/master.gemfile
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/sqlite3/master.gemfile
-          - ruby: 3.0
+          - ruby: '3.0'
             gemfile: gemfiles/mysql2/master.gemfile
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/postgresql/master.gemfile
-          - ruby: 3.0
+          - ruby: '3.0'
             gemfile: gemfiles/sqlite3/master.gemfile
           # MRI Ruby head
           - ruby: head
@@ -57,23 +57,23 @@ jobs:
           #
           # The current
           #
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/mysql2/6-1.gemfile
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/postgresql/6-1.gemfile
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/sqlite3/6-1.gemfile
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/mysql2/6-1.gemfile
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/postgresql/6-1.gemfile
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/sqlite3/6-1.gemfile
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/mysql2/6-1.gemfile
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/postgresql/6-1.gemfile
-          - ruby: 2.7
+          - ruby: '2.7'
             gemfile: gemfiles/sqlite3/6-1.gemfile
           - ruby: jruby-9.2
             gemfile: gemfiles/mysql2/6-1.gemfile
@@ -84,9 +84,9 @@ jobs:
           #
           # EOL Active Record
           # Rails 3.2 was maintained longer and is ruby 2.2 compatible
-          - ruby: 2.2
+          - ruby: '2.2'
             gemfile: gemfiles/postgresql/3-2.gemfile
-          - ruby: 2.2
+          - ruby: '2.2'
             gemfile: gemfiles/sqlite3/3-2.gemfile
           # Rails <= 4.0 was only compatible with ruby 2.0
           # The test were running, but there are known incompatibilites
@@ -104,37 +104,37 @@ jobs:
           # - rvm: 2.0.0-p648
           #   gemfile: gemfiles/sqlite3/4-0.gemfile
           # Rails 4.1 was only compatible with ruby 2.1
-          - ruby: 2.1
+          - ruby: '2.1'
             gemfile: gemfiles/postgresql/4-1.gemfile
-          - ruby: 2.1
+          - ruby: '2.1'
             gemfile: gemfiles/sqlite3/4-1.gemfile
           # Rails 4.2 was EOL with the release of 6.0 and compatible with ruby 2.4
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/mysql2/4-2.gemfile
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/postgresql/4-2.gemfile
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/sqlite3/4-2.gemfile
           # Rails 5.0 was EOL with the release of 5.2 and compatible with ruby 2.4
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/mysql2/5-0.gemfile
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/postgresql/5-0.gemfile
-          - ruby: 2.4
+          - ruby: '2.4'
             gemfile: gemfiles/sqlite3/5-0.gemfile
           # Rails 5.1 was EOL with the release of 6.0 and compatible with ruby 2.5
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/mysql2/5-1.gemfile
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/postgresql/5-1.gemfile
-          - ruby: 2.5
+          - ruby: '2.5'
             gemfile: gemfiles/sqlite3/5-1.gemfile
           # Rails 6.0 was EOL with the release of 7.0 and compatible with ruby 2.6
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/mysql2/6-0.gemfile
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/postgresql/6-0.gemfile
-          - ruby: 2.6
+          - ruby: '2.6'
             gemfile: gemfiles/sqlite3/6-0.gemfile
           - ruby: jruby-9.2
             gemfile: gemfiles/mysql2/6-0.gemfile

From fa6187c541a74605e91fabb1d8747c693116b29c Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 17 Jan 2022 17:36:31 +0900
Subject: [PATCH 57/62] Add Ruby 3.1 on CI

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9e1f96fa..32203067 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        ruby: ['2.7', '3.0']
+        ruby: ['2.7', '3.0', '3.1']
         gemfile:
           - gemfiles/mysql2/7-0.gemfile
           - gemfiles/postgresql/7-0.gemfile

From dd7e90da128a1f33055ded67f44cc0e9f63063e9 Mon Sep 17 00:00:00 2001
From: willnet <netwillnet@gmail.com>
Date: Mon, 17 Jan 2022 17:49:48 +0900
Subject: [PATCH 58/62] Use Rails 7.0.1

Rails 7.0.0 doesn't work with Ruby 3.1.

ref: https://github.com/rails/rails/pull/43951
---
 gemfiles/mysql2/7-0.gemfile     | 2 +-
 gemfiles/postgresql/7-0.gemfile | 2 +-
 gemfiles/sqlite3/7-0.gemfile    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gemfiles/mysql2/7-0.gemfile b/gemfiles/mysql2/7-0.gemfile
index 045269bd..57bcae35 100644
--- a/gemfiles/mysql2/7-0.gemfile
+++ b/gemfiles/mysql2/7-0.gemfile
@@ -13,7 +13,7 @@ group :test do
   gem "simplecov", ">= 0.20.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
-  gem "activerecord", "~> 7.0.0.alpha2"
+  gem "activerecord", "~> 7.0.1"
 end
 
 gemspec path: "../../"
diff --git a/gemfiles/postgresql/7-0.gemfile b/gemfiles/postgresql/7-0.gemfile
index a7fa29c3..5e1a693d 100644
--- a/gemfiles/postgresql/7-0.gemfile
+++ b/gemfiles/postgresql/7-0.gemfile
@@ -13,7 +13,7 @@ group :test do
   gem "simplecov", ">= 0.20.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
-  gem "activerecord", "~> 7.0.0.alpha2"
+  gem "activerecord", "~> 7.0.1"
 end
 
 gemspec path: "../../"
diff --git a/gemfiles/sqlite3/7-0.gemfile b/gemfiles/sqlite3/7-0.gemfile
index 125254f2..b8950958 100644
--- a/gemfiles/sqlite3/7-0.gemfile
+++ b/gemfiles/sqlite3/7-0.gemfile
@@ -13,7 +13,7 @@ group :test do
   gem "simplecov", ">= 0.20.0", require: false
   gem "simplecov-lcov", ">= 0.8.0", require: false
 
-  gem "activerecord", "~> 7.0.0.alpha2"
+  gem "activerecord", "~> 7.0.1"
 end
 
 gemspec path: "../../"

From e6d350ae60c327f81d6039db21cefa9a43e7a3fb Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 17 Jan 2022 20:07:08 -0500
Subject: [PATCH 59/62] Update the test matrix

---
 .github/workflows/ci.yml | 95 +++++++++++++++++++++++-----------------
 1 file changed, 54 insertions(+), 41 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 32203067..3a630cf6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,8 +12,14 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        ruby: ['2.7', '3.0', '3.1']
+        ruby: ['2.7', '3.0', '3.1', 'jruby-9.3']
         gemfile:
+          - gemfiles/mysql2/6-0.gemfile
+          - gemfiles/postgresql/6-0.gemfile
+          - gemfiles/sqlite3/6-0.gemfile
+          - gemfiles/mysql2/6-1.gemfile
+          - gemfiles/postgresql/6-1.gemfile
+          - gemfiles/sqlite3/6-1.gemfile
           - gemfiles/mysql2/7-0.gemfile
           - gemfiles/postgresql/7-0.gemfile
           - gemfiles/sqlite3/7-0.gemfile
@@ -24,16 +30,22 @@ jobs:
           # Active Record head
           - ruby: '2.7'
             gemfile: gemfiles/mysql2/master.gemfile
-          - ruby: '3.0'
+          - ruby: '2.7'
             gemfile: gemfiles/postgresql/master.gemfile
           - ruby: '2.7'
             gemfile: gemfiles/sqlite3/master.gemfile
           - ruby: '3.0'
             gemfile: gemfiles/mysql2/master.gemfile
-          - ruby: '2.7'
+          - ruby: '3.0'
             gemfile: gemfiles/postgresql/master.gemfile
           - ruby: '3.0'
             gemfile: gemfiles/sqlite3/master.gemfile
+          - ruby: '3.1'
+            gemfile: gemfiles/mysql2/master.gemfile
+          - ruby: '3.1'
+            gemfile: gemfiles/postgresql/master.gemfile
+          - ruby: '3.1'
+            gemfile: gemfiles/sqlite3/master.gemfile
           # MRI Ruby head
           - ruby: head
             gemfile: gemfiles/mysql2/master.gemfile
@@ -54,31 +66,43 @@ jobs:
             gemfile: gemfiles/postgresql/6-1.gemfile
           - ruby: jruby-head
             gemfile: gemfiles/sqlite3/6-1.gemfile
+
           #
-          # The current
+          # Current
           #
-          - ruby: '2.5'
-            gemfile: gemfiles/mysql2/6-1.gemfile
-          - ruby: '2.5'
-            gemfile: gemfiles/postgresql/6-1.gemfile
-          - ruby: '2.5'
-            gemfile: gemfiles/sqlite3/6-1.gemfile
+          # MRI Ruby 2.6
+          - ruby: '2.6'
+            gemfile: gemfiles/mysql2/6-0.gemfile
+          - ruby: '2.6'
+            gemfile: gemfiles/postgresql/6-0.gemfile
+          - ruby: '2.6'
+            gemfile: gemfiles/sqlite3/6-0.gemfile
           - ruby: '2.6'
             gemfile: gemfiles/mysql2/6-1.gemfile
           - ruby: '2.6'
             gemfile: gemfiles/postgresql/6-1.gemfile
           - ruby: '2.6'
             gemfile: gemfiles/sqlite3/6-1.gemfile
+          # Rails 5.2
+          - ruby: '2.6'
+            gemfile: gemfiles/mysql2/5-2.gemfile
+          - ruby: '2.6'
+            gemfile: gemfiles/postgresql/5-2.gemfile
+          - ruby: '2.6'
+            gemfile: gemfiles/sqlite3/5-2.gemfile
           - ruby: '2.7'
-            gemfile: gemfiles/mysql2/6-1.gemfile
+            gemfile: gemfiles/mysql2/5-2.gemfile
           - ruby: '2.7'
-            gemfile: gemfiles/postgresql/6-1.gemfile
+            gemfile: gemfiles/postgresql/5-2.gemfile
           - ruby: '2.7'
-            gemfile: gemfiles/sqlite3/6-1.gemfile
-          - ruby: jruby-9.2
-            gemfile: gemfiles/mysql2/6-1.gemfile
-          - ruby: jruby-9.3
-            gemfile: gemfiles/postgresql/6-1.gemfile
+            gemfile: gemfiles/sqlite3/5-2.gemfile
+          - ruby: 'jruby-9.2'
+            gemfile: gemfiles/mysql2/5-2.gemfile
+          - ruby: 'jruby-9.2'
+            gemfile: gemfiles/postgresql/5-2.gemfile
+          - ruby: 'jruby-9.2'
+            gemfile: gemfiles/sqlite3/5-2.gemfile
+
           #
           # The past
           #
@@ -90,19 +114,18 @@ jobs:
             gemfile: gemfiles/sqlite3/3-2.gemfile
           # Rails <= 4.0 was only compatible with ruby 2.0
           # The test were running, but there are known incompatibilites
-          # (Isn't supported on Github Actions)
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/postgresql/3-0.gemfile
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/sqlite3/3-0.gemfile
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/postgresql/3-1.gemfile
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/sqlite3/3-1.gemfile
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/postgresql/4-0.gemfile
-          # - rvm: 2.0.0-p648
-          #   gemfile: gemfiles/sqlite3/4-0.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/postgresql/3-0.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/sqlite3/3-0.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/postgresql/3-1.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/sqlite3/3-1.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/postgresql/4-0.gemfile
+          - ruby: 2.0.0
+            gemfile: gemfiles/sqlite3/4-0.gemfile
           # Rails 4.1 was only compatible with ruby 2.1
           - ruby: '2.1'
             gemfile: gemfiles/postgresql/4-1.gemfile
@@ -129,17 +152,7 @@ jobs:
             gemfile: gemfiles/postgresql/5-1.gemfile
           - ruby: '2.5'
             gemfile: gemfiles/sqlite3/5-1.gemfile
-          # Rails 6.0 was EOL with the release of 7.0 and compatible with ruby 2.6
-          - ruby: '2.6'
-            gemfile: gemfiles/mysql2/6-0.gemfile
-          - ruby: '2.6'
-            gemfile: gemfiles/postgresql/6-0.gemfile
-          - ruby: '2.6'
-            gemfile: gemfiles/sqlite3/6-0.gemfile
-          - ruby: jruby-9.2
-            gemfile: gemfiles/mysql2/6-0.gemfile
-          - ruby: jruby-9.3
-            gemfile: gemfiles/postgresql/6-0.gemfile
+
           #
           # The parallel dimension
           #

From 7bd1abbe3c437777cfdb2e95a46336902398ed03 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 17 Jan 2022 20:14:12 -0500
Subject: [PATCH 60/62] Allow less than Active Record 8

Active Record shouldn't introduce any breaking changes until version 8
---
 delayed_job_active_record.gemspec | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index f49cdf46..325368e2 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -1,17 +1,15 @@
 # frozen_string_literal: true
 
 Gem::Specification.new do |spec|
-  spec.add_dependency "activerecord", [">= 3.0", "< 7.1"]
+  spec.add_dependency "activerecord", [">= 3.0", "< 8.0"]
   spec.add_dependency "delayed_job",  [">= 3.0", "< 5"]
-  spec.metadata = {
-    "rubygems_mfa_required" => "true"
-  }
   spec.authors        = ["Brian Ryckbost", "Matt Griffin", "Erik Michaels-Ober"]
   spec.description    = "ActiveRecord backend for Delayed::Job, originally authored by Tobias Lütke"
   spec.email          = ["bryckbost@gmail.com", "matt@griffinonline.org", "sferik@gmail.com"]
   spec.files          = %w[CONTRIBUTING.md LICENSE.md README.md delayed_job_active_record.gemspec] + Dir["lib/**/*.rb"]
   spec.homepage       = "http://github.com/collectiveidea/delayed_job_active_record"
   spec.licenses       = ["MIT"]
+  spec.metadata       = { "rubygems_mfa_required" => "true" }
   spec.name           = "delayed_job_active_record"
   spec.require_paths  = ["lib"]
   spec.summary        = "ActiveRecord backend for DelayedJob"

From 97f26a3e1b82b338cd8270aad988c75b82ea5c86 Mon Sep 17 00:00:00 2001
From: David Genord II <david@collectiveidea.com>
Date: Mon, 17 Jan 2022 20:47:27 -0500
Subject: [PATCH 61/62] Prepare 4.1.7 release

---
 README.md                         | 2 +-
 delayed_job_active_record.gemspec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 88f029a6..49c821ec 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 **If you're viewing this at https://github.com/collectiveidea/delayed_job_active_record,
 you're reading the documentation for the master branch.
 [View documentation for the latest release
-(4.1.6).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.6)**
+(4.1.7).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.7)**
 
 # DelayedJob ActiveRecord Backend
 
diff --git a/delayed_job_active_record.gemspec b/delayed_job_active_record.gemspec
index 325368e2..91f8a852 100644
--- a/delayed_job_active_record.gemspec
+++ b/delayed_job_active_record.gemspec
@@ -13,5 +13,5 @@ Gem::Specification.new do |spec|
   spec.name           = "delayed_job_active_record"
   spec.require_paths  = ["lib"]
   spec.summary        = "ActiveRecord backend for DelayedJob"
-  spec.version        = "4.1.6"
+  spec.version        = "4.1.7"
 end

From e260ca204f2275ed1c2bda5ebc2728577fd5f7e7 Mon Sep 17 00:00:00 2001
From: Kenneth Chan <kenneth@docsend.com>
Date: Tue, 24 Jul 2018 15:49:25 -0700
Subject: [PATCH 62/62] Apply SKIP LOCKED optimization for reserving a delayed
 job entry

---
 lib/delayed/backend/active_record.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/delayed/backend/active_record.rb b/lib/delayed/backend/active_record.rb
index 62b186a1..1380ec8e 100644
--- a/lib/delayed/backend/active_record.rb
+++ b/lib/delayed/backend/active_record.rb
@@ -131,7 +131,7 @@ def self.reserve_with_scope_using_optimized_postgres(ready_scope, worker, now)
           # use 'FOR UPDATE' and we would have many locking conflicts
           quoted_name = connection.quote_table_name(table_name)
           subquery    = ready_scope.limit(1).lock(true).select("id").to_sql
-          sql         = "UPDATE #{quoted_name} SET locked_at = ?, locked_by = ? WHERE id IN (#{subquery}) RETURNING *"
+          sql         = "UPDATE #{quoted_name} SET locked_at = ?, locked_by = ? WHERE id IN (#{subquery} SKIP LOCKED) RETURNING *"
           reserved    = find_by_sql([sql, now, worker.name])
           reserved[0]
         end