Skip to content

Commit a4aa383

Browse files
committed
Add compatibility with rails 8.1
1 parent 56a65ca commit a4aa383

5 files changed

Lines changed: 60 additions & 17 deletions

File tree

.github/workflows/main.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ jobs:
1717
- '3.2.2'
1818
- '3.3.6'
1919
- '3.4.7'
20+
rails:
21+
- '~> 8.0.0'
22+
- '~> 8.1.0'
23+
24+
env:
25+
RAILS_VERSION: ${{ matrix.rails }}
2026

2127
steps:
2228
- uses: actions/checkout@v4

code0-zero_track.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
2121
Dir['{app,config,db,lib,rubocop}/**/*', 'LICENSE', 'Rakefile', 'README.md']
2222
end
2323

24-
spec.add_dependency 'rails', '>= 8.0.1'
24+
spec.add_dependency 'rails', ENV.fetch('RAILS_VERSION', '>= 8.0.1')
2525
spec.add_dependency 'zeitwerk', '~> 2.7'
2626

2727
spec.add_development_dependency 'rake', '~> 13.0'

lib/code0/zero_track.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# frozen_string_literal: true
22

3+
require 'active_support/core_ext/module/delegation'
34
require 'rails/railtie'
45

56
require 'zeitwerk'

lib/code0/zero_track/database/postgresql_adapter/dump_schema_versions_mixin.rb

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,20 @@ module PostgresqlAdapter
1414
module DumpSchemaVersionsMixin
1515
extend ActiveSupport::Concern
1616

17-
def dump_schema_information
18-
# rubocop:disable Rails/SkipsModelValidations -- not an active record object
19-
Database::SchemaMigrations.touch_all(self) unless Rails.env.production?
20-
# rubocop:enable Rails/SkipsModelValidations
21-
nil
17+
if ::Rails.gem_version >= Gem::Version.create('8.1')
18+
def dump_schema_versions
19+
# rubocop:disable Rails/SkipsModelValidations -- not an active record object
20+
Database::SchemaMigrations.touch_all(self) unless Rails.env.production?
21+
# rubocop:enable Rails/SkipsModelValidations
22+
nil
23+
end
24+
else
25+
def dump_schema_information
26+
# rubocop:disable Rails/SkipsModelValidations -- not an active record object
27+
Database::SchemaMigrations.touch_all(self) unless Rails.env.production?
28+
# rubocop:enable Rails/SkipsModelValidations
29+
nil
30+
end
2231
end
2332
end
2433
end

spec/code0/zero_track/database/postgresql_adapter/dump_schema_versions_mixin_spec.rb

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ def dump_schema_information
1616
original_dump_schema_information
1717
end
1818

19+
def dump_schema_versions
20+
original_dump_schema_information
21+
end
22+
1923
def original_dump_schema_information; end
2024
end
2125

@@ -26,22 +30,45 @@ def original_dump_schema_information; end
2630

2731
let(:instance) { instance_class.new }
2832

29-
it 'calls SchemaMigrations touch_all and skips original implementation' do
30-
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
31-
allow(instance).to receive(:original_dump_schema_information)
33+
context 'when using Rails >= 8.1', if: Rails.gem_version >= Gem::Version.create('8.1') do
34+
it 'calls SchemaMigrations touch_all and skips original implementation' do
35+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
36+
allow(instance).to receive(:original_dump_schema_information)
37+
38+
instance.dump_schema_versions
39+
40+
expect(Code0::ZeroTrack::Database::SchemaMigrations).to have_received(:touch_all).with(instance)
41+
expect(instance).not_to have_received(:original_dump_schema_information)
42+
end
43+
44+
it 'does not call touch_all in production' do
45+
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('production'))
46+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
3247

33-
instance.dump_schema_information
48+
instance.dump_schema_versions
3449

35-
expect(Code0::ZeroTrack::Database::SchemaMigrations).to have_received(:touch_all).with(instance)
36-
expect(instance).not_to have_received(:original_dump_schema_information)
50+
expect(Code0::ZeroTrack::Database::SchemaMigrations).not_to have_received(:touch_all)
51+
end
3752
end
3853

39-
it 'does not call touch_all in production' do
40-
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('production'))
41-
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
54+
context 'when using Rails < 8.1', if: Rails.gem_version < Gem::Version.create('8.1') do
55+
it 'calls SchemaMigrations touch_all and skips original implementation' do
56+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
57+
allow(instance).to receive(:original_dump_schema_information)
58+
59+
instance.dump_schema_information
60+
61+
expect(Code0::ZeroTrack::Database::SchemaMigrations).to have_received(:touch_all).with(instance)
62+
expect(instance).not_to have_received(:original_dump_schema_information)
63+
end
64+
65+
it 'does not call touch_all in production' do
66+
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('production'))
67+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
4268

43-
instance.dump_schema_information
69+
instance.dump_schema_information
4470

45-
expect(Code0::ZeroTrack::Database::SchemaMigrations).not_to have_received(:touch_all)
71+
expect(Code0::ZeroTrack::Database::SchemaMigrations).not_to have_received(:touch_all)
72+
end
4673
end
4774
end

0 commit comments

Comments
 (0)