Skip to content

Commit 383f2fb

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

File tree

7 files changed

+58
-21
lines changed

7 files changed

+58
-21
lines changed

.github/workflows/main.yml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,29 @@ on:
1010
jobs:
1111
build:
1212
runs-on: ubuntu-latest
13-
name: Ruby ${{ matrix.ruby }}
13+
name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}
1414
strategy:
15+
fail-fast: false
1516
matrix:
1617
ruby:
1718
- '3.2.2'
1819
- '3.3.6'
1920
- '3.4.7'
21+
rails:
22+
- '~> 8.0.0'
23+
- '~> 8.1.0'
24+
25+
env:
26+
RAILS_VERSION: ${{ matrix.rails }}
2027

2128
steps:
2229
- uses: actions/checkout@v4
2330
- name: Set up Ruby
2431
uses: ruby/setup-ruby@v1
2532
with:
2633
ruby-version: ${{ matrix.ruby }}
27-
bundler-cache: true
34+
bundler-cache: false
35+
- name: Install gems
36+
run: bundle install
2837
- name: Run the default task
2938
run: bin/rake

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'
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
module Code0
4+
module ZeroTrack
5+
module Database
6+
module SchemaMigrations
7+
class Formatter
8+
def initialize(connection)
9+
@connection = connection
10+
end
11+
12+
def format(_)
13+
Database::SchemaMigrations.touch_all(@connection) unless Rails.env.production?
14+
nil
15+
end
16+
end
17+
end
18+
end
19+
end
20+
end

lib/code0/zero_track/injectors/active_record_schema_migrations.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ module Code0
44
module ZeroTrack
55
module Injectors
66
class ActiveRecordSchemaMigrations
7-
def self.inject!
8-
# Patch to write version information as empty files under the db/schema_migrations directory
9-
# This is intended to reduce potential for merge conflicts in db/structure.sql
10-
ActiveSupport.on_load(:active_record_postgresqladapter) do
11-
prepend Database::PostgresqlAdapter::DumpSchemaVersionsMixin
7+
def self.inject!(config)
8+
if Rails.gem_version >= Gem::Version.create('8.1')
9+
config.active_record.schema_versions_formatter = Database::SchemaMigrations::Formatter
10+
else
11+
# Patch to write version information as empty files under the db/schema_migrations directory
12+
# This is intended to reduce potential for merge conflicts in db/structure.sql
13+
ActiveSupport.on_load(:active_record_postgresqladapter) do
14+
prepend Database::PostgresqlAdapter::DumpSchemaVersionsMixin
15+
end
1216
end
17+
1318
# Patch to load version information from empty files under the db/schema_migrations directory
1419
ActiveRecord::Tasks::PostgreSQLDatabaseTasks
1520
.prepend Database::PostgresqlDatabaseTasks::LoadSchemaVersionsMixin

lib/code0/zero_track/railtie.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Railtie < ::Rails::Railtie
1616

1717
config.after_initialize do
1818
Injectors::ActiveRecordTimestamps.inject! if config.zero_track.active_record.timestamps
19-
Injectors::ActiveRecordSchemaMigrations.inject! if config.zero_track.active_record.schema_migrations
19+
Injectors::ActiveRecordSchemaMigrations.inject!(config) if config.zero_track.active_record.schema_migrations
2020
end
2121
end
2222
end

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,24 @@ def original_dump_schema_information; end
2626

2727
let(:instance) { instance_class.new }
2828

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)
29+
context 'when using Rails < 8.1', if: Rails.gem_version < Gem::Version.create('8.1') do
30+
it 'calls SchemaMigrations touch_all and skips original implementation' do
31+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
32+
allow(instance).to receive(:original_dump_schema_information)
3233

33-
instance.dump_schema_information
34+
instance.dump_schema_information
3435

35-
expect(Code0::ZeroTrack::Database::SchemaMigrations).to have_received(:touch_all).with(instance)
36-
expect(instance).not_to have_received(:original_dump_schema_information)
37-
end
36+
expect(Code0::ZeroTrack::Database::SchemaMigrations).to have_received(:touch_all).with(instance)
37+
expect(instance).not_to have_received(:original_dump_schema_information)
38+
end
3839

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)
40+
it 'does not call touch_all in production' do
41+
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('production'))
42+
allow(Code0::ZeroTrack::Database::SchemaMigrations).to receive(:touch_all)
4243

43-
instance.dump_schema_information
44+
instance.dump_schema_information
4445

45-
expect(Code0::ZeroTrack::Database::SchemaMigrations).not_to have_received(:touch_all)
46+
expect(Code0::ZeroTrack::Database::SchemaMigrations).not_to have_received(:touch_all)
47+
end
4648
end
4749
end

0 commit comments

Comments
 (0)