Skip to content

Commit

Permalink
Hotfix for support of Rails 7.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
kalashnikovisme committed Aug 10, 2024
1 parent 67a1ec2 commit 09e9e96
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 15 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ jobs:
# have set this up with each database as a separate job, but then we'd be
# duplicating the matrix configuration three times.
matrix:
gemfile: [ 'rails_6.1', 'rails_7.0', 'rails_7.1' ]
gemfile: [ 'rails_6.1', 'rails_7.0', 'rails_7.1', 'rails_7.2' ]

# To keep matrix size down, only test highest and lowest rubies.
# See "Lowest supported ruby version" in CONTRIBUTING.md
ruby: [ '3.0', '3.2' ]
ruby: [ '3.2', '3.3' ]
steps:
- name: Checkout source
uses: actions/checkout@v4
Expand Down
5 changes: 5 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,8 @@ appraise "rails-7.1" do
gem "rails", "~> 7.1.0"
gem "rails-controller-testing", "~> 1.0.5"
end

appraise "rails-7.2" do
gem "rails", "~> 7.2.0"
gem "rails-controller-testing", "~> 1.0.5"
end
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Choose version:

| paper_trail | ruby | activerecord |
|-------------|----------|---------------|
| unreleased | >= 3.0.0 | >= 6.1, < 7.2 |
| unreleased | >= 3.0.0 | >= 6.1, <= 7.2 |
| 15 | >= 3.0.0 | >= 6.1, < 7.2 |
| 14 | >= 2.7.0 | >= 6.0, < 7.1 |
| 13 | >= 2.6.0 | >= 5.2, < 7.1 |
Expand Down
8 changes: 8 additions & 0 deletions gemfiles/rails_7.2.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "rails", "~> 7.2.0"
gem "rails-controller-testing", "~> 1.0.5"

gemspec path: "../"
2 changes: 1 addition & 1 deletion lib/paper_trail/compatibility.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module PaperTrail
# versions.
module Compatibility
ACTIVERECORD_GTE = ">= 6.1" # enforced in gemspec
ACTIVERECORD_LT = "< 7.2" # not enforced in gemspec
ACTIVERECORD_LT = "< 8" # not enforced in gemspec

E_INCOMPATIBLE_AR = <<-EOS
PaperTrail %s is not compatible with ActiveRecord %s. We allow PT
Expand Down
12 changes: 10 additions & 2 deletions lib/paper_trail/model_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def check_version_class_name(options)
# @api private - `version_class_name`
@model_class.class_attribute :version_class_name
if options[:class_name]
::ActiveSupport::Deprecation.warn(
deprecation.warn(
format(
DPR_CLASS_NAME_OPTION,
class_name: options[:class_name].inspect
Expand Down Expand Up @@ -192,7 +192,7 @@ def define_has_many_versions(options)
def ensure_versions_option_is_hash(options)
unless options[:versions].is_a?(Hash)
if options[:versions]
::ActiveSupport::Deprecation.warn(
deprecation.warn(
format(
DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION,
versions_name: options[:versions].inspect
Expand Down Expand Up @@ -253,5 +253,13 @@ def setup_options(options)
end
@model_class.paper_trail_options[:meta] ||= {}
end

def deprecation
if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("7.2")
::ActiveSupport::Deprecation
else
::ActiveSupport::Deprecation._instance
end
end
end
end
2 changes: 1 addition & 1 deletion spec/paper_trail/compatibility_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module PaperTrail

context "when incompatible" do
it "writes a warning to stderr" do
ar_version = ::Gem::Version.new("7.2.0")
ar_version = ::Gem::Version.new("8.0.0")
expect {
described_class.check_activerecord(ar_version)
}.to output(/not compatible/).to_stderr
Expand Down
16 changes: 12 additions & 4 deletions spec/paper_trail/model_config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,24 @@
module PaperTrail
::RSpec.describe ModelConfig do
describe "has_paper_trail" do
let(:deprecation) do
if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("7.2")
::ActiveSupport::Deprecation
else
::ActiveSupport::Deprecation._instance
end
end

describe "versions:" do
it "name can be passed instead of an options hash", :deprecated do
allow(::ActiveSupport::Deprecation).to receive(:warn)
allow(deprecation).to receive(:warn)
klass = Class.new(ApplicationRecord) do
has_paper_trail versions: :drafts
end
expect(klass.reflect_on_association(:drafts)).to be_a(
ActiveRecord::Reflection::HasManyReflection
)
expect(::ActiveSupport::Deprecation).to have_received(:warn).once.with(
expect(deprecation).to have_received(:warn).once.with(
a_string_starting_with("Passing versions association name"),
array_including(/#{__FILE__}:/)
)
Expand Down Expand Up @@ -78,14 +86,14 @@ module PaperTrail

describe "class_name:" do
it "can be used instead of versions: {class_name: ...}", :deprecated do
allow(::ActiveSupport::Deprecation).to receive(:warn)
allow(deprecation).to receive(:warn)
klass = Class.new(ApplicationRecord) do
has_paper_trail class_name: "NoObjectVersion"
end
expect(klass.reflect_on_association(:versions).options[:class_name]).to eq(
"NoObjectVersion"
)
expect(::ActiveSupport::Deprecation).to have_received(:warn).once.with(
expect(deprecation).to have_received(:warn).once.with(
a_string_starting_with("Passing Version class name"),
array_including(/#{__FILE__}:/)
)
Expand Down
13 changes: 9 additions & 4 deletions spec/support/paper_trail_spec_migrator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,15 @@ def initialize
end

def migrate
::ActiveRecord::MigrationContext.new(
@migrations_path,
::ActiveRecord::Base.connection.schema_migration
).migrate
schema_migration = if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("7.2")
::ActiveRecord::Base.connection.schema_migration
else
::ActiveRecord::SchemaMigration.new(
ActiveRecord::Tasks::DatabaseTasks.migration_connection_pool
)
end

::ActiveRecord::MigrationContext.new(@migrations_path, schema_migration).migrate
end

# Generate a migration, run it, and delete it. We use this for testing the
Expand Down

0 comments on commit 09e9e96

Please sign in to comment.