From a6c01074728c3130f37d472d4be6ba092295059f Mon Sep 17 00:00:00 2001 From: Pavel Kalashnikov Date: Sat, 10 Aug 2024 17:38:16 +0400 Subject: [PATCH] Hotfix for support of Rails 7.2.0 --- .github/workflows/test.yml | 4 ++-- Appraisals | 5 +++++ README.md | 2 +- gemfiles/rails_7.2.gemfile | 8 ++++++++ lib/paper_trail/compatibility.rb | 2 +- lib/paper_trail/model_config.rb | 4 ++-- spec/paper_trail/compatibility_spec.rb | 2 +- spec/paper_trail/model_config_spec.rb | 8 ++++---- spec/support/paper_trail_spec_migrator.rb | 4 +++- 9 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 gemfiles/rails_7.2.gemfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34444ad3..9c049313 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -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.0', '3.2', '3.3' ] steps: - name: Checkout source uses: actions/checkout@v4 diff --git a/Appraisals b/Appraisals index c0041883..a76050d0 100644 --- a/Appraisals +++ b/Appraisals @@ -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 diff --git a/README.md b/README.md index 00760fad..e1197874 100644 --- a/README.md +++ b/README.md @@ -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 | diff --git a/gemfiles/rails_7.2.gemfile b/gemfiles/rails_7.2.gemfile new file mode 100644 index 00000000..a806930d --- /dev/null +++ b/gemfiles/rails_7.2.gemfile @@ -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: "../" diff --git a/lib/paper_trail/compatibility.rb b/lib/paper_trail/compatibility.rb index 57947005..4ac21f7d 100644 --- a/lib/paper_trail/compatibility.rb +++ b/lib/paper_trail/compatibility.rb @@ -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 diff --git a/lib/paper_trail/model_config.rb b/lib/paper_trail/model_config.rb index 0f3b1ba0..be44d507 100644 --- a/lib/paper_trail/model_config.rb +++ b/lib/paper_trail/model_config.rb @@ -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( + ::ActiveSupport::Deprecation._instance.warn( format( DPR_CLASS_NAME_OPTION, class_name: options[:class_name].inspect @@ -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( + ::ActiveSupport::Deprecation._instance.warn( format( DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION, versions_name: options[:versions].inspect diff --git a/spec/paper_trail/compatibility_spec.rb b/spec/paper_trail/compatibility_spec.rb index a3fe3aab..f503ea89 100644 --- a/spec/paper_trail/compatibility_spec.rb +++ b/spec/paper_trail/compatibility_spec.rb @@ -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 diff --git a/spec/paper_trail/model_config_spec.rb b/spec/paper_trail/model_config_spec.rb index accb161b..16ba35ba 100644 --- a/spec/paper_trail/model_config_spec.rb +++ b/spec/paper_trail/model_config_spec.rb @@ -7,14 +7,14 @@ module PaperTrail describe "has_paper_trail" do describe "versions:" do it "name can be passed instead of an options hash", :deprecated do - allow(::ActiveSupport::Deprecation).to receive(:warn) + allow(::ActiveSupport::Deprecation._instance).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(::ActiveSupport::Deprecation._instance).to have_received(:warn).once.with( a_string_starting_with("Passing versions association name"), array_including(/#{__FILE__}:/) ) @@ -78,14 +78,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(::ActiveSupport::Deprecation._instance).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(::ActiveSupport::Deprecation._instance).to have_received(:warn).once.with( a_string_starting_with("Passing Version class name"), array_including(/#{__FILE__}:/) ) diff --git a/spec/support/paper_trail_spec_migrator.rb b/spec/support/paper_trail_spec_migrator.rb index f53903cb..b62d294c 100644 --- a/spec/support/paper_trail_spec_migrator.rb +++ b/spec/support/paper_trail_spec_migrator.rb @@ -19,9 +19,11 @@ def initialize end def migrate + schema_migration = ::ActiveRecord::SchemaMigration.new(ActiveRecord::Tasks::DatabaseTasks.migration_connection_pool) + ::ActiveRecord::MigrationContext.new( @migrations_path, - ::ActiveRecord::Base.connection.schema_migration + schema_migration ).migrate end