Skip to content

Commit

Permalink
Rails 7.2.0 (#1485)
Browse files Browse the repository at this point in the history
* Hotfix for support of Rails 7.2.0

* Change ActiveRecord compatibility versions

* Change ruby versions in test workflow

* Update README

* Adjust deprecator definition to be more inline with the official API

As per the comment from @bvogel here: #1485 (comment)

* Update railtie.rb

* Decreased test line-coverage by 0.01%

---------

Co-authored-by: Tom Brammar <6734934+tbrammar@users.noreply.github.com>
  • Loading branch information
kalashnikovisme and tbrammar authored Sep 8, 2024
1 parent be31c66 commit d304bd5
Show file tree
Hide file tree
Showing 13 changed files with 44 additions and 18 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.1', '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.1.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: "../"
4 changes: 4 additions & 0 deletions lib/paper_trail.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ def version
def active_record_gte_7_0?
@active_record_gte_7_0 ||= ::ActiveRecord.gem_version >= ::Gem::Version.new("7.0.0")
end

def deprecator
@deprecator ||= ActiveSupport::Deprecation.new("16.0", "PaperTrail")
end
end
end

Expand Down
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 = "< 7.3" # not enforced in gemspec

E_INCOMPATIBLE_AR = <<-EOS
PaperTrail %s is not compatible with ActiveRecord %s. We allow PT
Expand Down
6 changes: 5 additions & 1 deletion lib/paper_trail/frameworks/rails/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Railtie < ::Rails::Railtie
# We specify `before: "load_config_initializers"` to ensure that the PT
# initializer happens before "app initializers" (those defined in
# the app's `config/initalizers`).
initializer "paper_trail", before: "load_config_initializers" do
initializer "paper_trail", before: "load_config_initializers" do |app|
# `on_load` is a "lazy load hook". It "declares a block that will be
# executed when a Rails component is fully loaded". (See
# `active_support/lazy_load_hooks.rb`)
Expand All @@ -25,6 +25,10 @@ class Railtie < ::Rails::Railtie
ActiveSupport.on_load(:active_record) do
require "paper_trail/frameworks/active_record"
end

if Gem::Version.new(::Rails::VERSION::STRING) >= Gem::Version.new("7.1")
app.deprecators[:paper_trail] = PaperTrail.deprecator
end
end
end
end
4 changes: 2 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(
PaperTrail.deprecator.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(
PaperTrail.deprecator.warn(
format(
DPR_PASSING_ASSOC_NAME_DIRECTLY_TO_VERSIONS_OPTION,
versions_name: options[:versions].inspect
Expand Down
2 changes: 1 addition & 1 deletion paper_trail.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ has been destroyed.
# PT supports request_store versions for 3 years.
s.add_dependency "request_store", "~> 1.4"

s.add_development_dependency "appraisal", "~> 2.4.1"
s.add_development_dependency "appraisal", "~> 2.5"
s.add_development_dependency "byebug", "~> 11.1"
s.add_development_dependency "ffaker", "~> 2.20"
s.add_development_dependency "generator_spec", "~> 0.9.4"
Expand Down
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
8 changes: 4 additions & 4 deletions spec/paper_trail/model_config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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(PaperTrail.deprecator).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(PaperTrail.deprecator).to have_received(:warn).once.with(
a_string_starting_with("Passing versions association name"),
array_including(/#{__FILE__}:/)
)
Expand Down Expand Up @@ -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(PaperTrail.deprecator).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(PaperTrail.deprecator).to have_received(:warn).once.with(
a_string_starting_with("Passing Version class name"),
array_including(/#{__FILE__}:/)
)
Expand Down
2 changes: 1 addition & 1 deletion spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
SimpleCov.start do
add_filter %w[Appraisals Gemfile Rakefile doc gemfiles spec]
end
SimpleCov.minimum_coverage(ENV["DB"] == "postgres" ? 96.79 : 92.4)
SimpleCov.minimum_coverage(ENV["DB"] == "postgres" ? 96.71 : 92.4)

require "byebug"
require_relative "support/pt_arel_helpers"
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 d304bd5

Please sign in to comment.