Skip to content

Commit

Permalink
Merge pull request #278 from ilyakatz/rails7-1
Browse files Browse the repository at this point in the history
Support Rails 7.1
  • Loading branch information
wildmaples authored Jul 28, 2023
2 parents 22d2e37 + 06a9605 commit dd6b3b2
Show file tree
Hide file tree
Showing 27 changed files with 491 additions and 166 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
gemfile:
- gemfiles/rails_6.1.gemfile
- gemfiles/rails_7.0.gemfile
- gemfiles/rails_7.1.0.alpha.gemfile
runs-on: ubuntu-latest
env:
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
Expand Down
4 changes: 4 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@ end
appraise 'rails-7.0' do
gem 'rails', '~> 7.0'
end

appraise 'rails-7.1.0.alpha' do
gem 'rails', git: "https://github.com/rails/rails.git", branch: "main"
end
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## 11.0.0
- Commit *.lock files
- Remove support for Rails 6.0
- Support Rails 7.1

## 9.1.0

Expand Down
8 changes: 8 additions & 0 deletions gemfiles/rails_7.1.0.alpha.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This file was generated by Appraisal

source "http://rubygems.org"

gem "sqlite3", "~> 1.4"
gem "rails", git: "https://github.com/rails/rails.git", branch: "main"

gemspec path: "../"
252 changes: 252 additions & 0 deletions gemfiles/rails_7.1.0.alpha.gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
GIT
remote: https://github.com/rails/rails.git
revision: 5f3eb2195ba503919665028c01e4c76125e59fac
branch: main
specs:
actioncable (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
activejob (= 7.1.0.alpha)
activerecord (= 7.1.0.alpha)
activestorage (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
actionview (= 7.1.0.alpha)
activejob (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0)
actionpack (7.1.0.alpha)
actionview (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.6)
actiontext (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
activerecord (= 7.1.0.alpha)
activestorage (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.1.0.alpha)
activesupport (= 7.1.0.alpha)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.6)
activejob (7.1.0.alpha)
activesupport (= 7.1.0.alpha)
globalid (>= 0.3.6)
activemodel (7.1.0.alpha)
activesupport (= 7.1.0.alpha)
activerecord (7.1.0.alpha)
activemodel (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
timeout (>= 0.4.0)
activestorage (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
activejob (= 7.1.0.alpha)
activerecord (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
marcel (~> 1.0)
activesupport (7.1.0.alpha)
concurrent-ruby (~> 1.0, >= 1.0.2)
connection_pool (>= 2.2.5)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
rails (7.1.0.alpha)
actioncable (= 7.1.0.alpha)
actionmailbox (= 7.1.0.alpha)
actionmailer (= 7.1.0.alpha)
actionpack (= 7.1.0.alpha)
actiontext (= 7.1.0.alpha)
actionview (= 7.1.0.alpha)
activejob (= 7.1.0.alpha)
activemodel (= 7.1.0.alpha)
activerecord (= 7.1.0.alpha)
activestorage (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
bundler (>= 1.15.0)
railties (= 7.1.0.alpha)
railties (7.1.0.alpha)
actionpack (= 7.1.0.alpha)
activesupport (= 7.1.0.alpha)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6)

PATH
remote: ..
specs:
data_migrate (9.1.0)
activerecord (>= 6.1)
railties (>= 6.1)

GEM
remote: http://rubygems.org/
specs:
appraisal (2.5.0)
bundler
rake
thor (>= 0.14.0)
ast (2.4.2)
builder (3.2.4)
childprocess (4.1.0)
coderay (1.1.3)
concurrent-ruby (1.2.2)
connection_pool (2.4.1)
crass (1.0.6)
date (3.3.3)
diff-lcs (1.5.0)
erubi (1.12.0)
globalid (1.1.0)
activesupport (>= 5.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
iniparse (1.5.0)
io-console (0.6.0)
irb (1.7.4)
reline (>= 0.3.6)
json (2.6.3)
language_server-protocol (3.17.0.3)
loofah (2.21.3)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
mini_mime (>= 0.1.1)
net-imap
net-pop
net-smtp
marcel (1.0.2)
method_source (1.0.0)
mini_mime (1.1.2)
minitest (5.18.1)
net-imap (0.3.6)
date
net-protocol
net-pop (0.1.2)
net-protocol
net-protocol (0.2.1)
timeout
net-smtp (0.3.3)
net-protocol
nio4r (2.5.9)
nokogiri (1.15.3-arm64-darwin)
racc (~> 1.4)
nokogiri (1.15.3-x86_64-linux)
racc (~> 1.4)
overcommit (0.60.0)
childprocess (>= 0.6.3, < 5)
iniparse (~> 1.4)
rexml (~> 3.2)
parallel (1.23.0)
parser (3.2.2.3)
ast (~> 2.4.1)
racc
pry (0.14.2)
coderay (~> 1.1)
method_source (~> 1.0)
racc (1.7.1)
rack (3.0.8)
rack-session (2.0.0)
rack (>= 3.0.0)
rack-test (2.1.0)
rack (>= 1.3)
rackup (2.1.0)
rack (>= 3)
webrick (~> 1.8)
rails-dom-testing (2.1.1)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
rainbow (3.1.1)
rake (13.0.6)
rb-readline (0.5.5)
regexp_parser (2.8.1)
reline (0.3.6)
io-console (~> 0.5)
rexml (3.2.5)
rspec (3.12.0)
rspec-core (~> 3.12.0)
rspec-expectations (~> 3.12.0)
rspec-mocks (~> 3.12.0)
rspec-core (3.12.2)
rspec-support (~> 3.12.0)
rspec-expectations (3.12.3)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-mocks (3.12.6)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-support (3.12.1)
rubocop (1.54.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.2.2.3)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.28.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.29.0)
parser (>= 3.2.1.0)
ruby-progressbar (1.13.0)
sqlite3 (1.6.3-arm64-darwin)
sqlite3 (1.6.3-x86_64-linux)
thor (1.2.2)
timecop (0.9.6)
timeout (0.4.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.4.2)
webrick (1.8.1)
websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
zeitwerk (2.6.8)

PLATFORMS
arm64-darwin-22
x86_64-linux

DEPENDENCIES
appraisal
data_migrate!
overcommit
pry
rails!
rake
rb-readline
rspec
rspec-core
rubocop
sqlite3 (~> 1.4)
timecop

BUNDLED WITH
2.4.17
2 changes: 1 addition & 1 deletion lib/data_migrate.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# frozen_string_literal: true

require File.join(File.dirname(__FILE__), "data_migrate", "rails_helper")
require File.join(File.dirname(__FILE__), "data_migrate", "data_migrator")
require File.join(File.dirname(__FILE__), "data_migrate", "data_schema_migration")
require File.join(File.dirname(__FILE__), "data_migrate", "data_schema")
Expand All @@ -9,7 +10,6 @@
require File.join(File.dirname(__FILE__), "data_migrate", "migration_context")
require File.join(File.dirname(__FILE__), "data_migrate", "railtie")
require File.join(File.dirname(__FILE__), "data_migrate", "tasks/data_migrate_tasks")
require File.join(File.dirname(__FILE__), "data_migrate", "legacy_migrator")
require File.join(File.dirname(__FILE__), "data_migrate", "config")
require File.join(File.dirname(__FILE__), "data_migrate", "schema_migration")

Expand Down
34 changes: 11 additions & 23 deletions lib/data_migrate/data_migrator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,20 @@

module DataMigrate
class DataMigrator < ActiveRecord::Migrator
def self.migrations_paths
[DataMigrate.config.data_migrations_path]
end

def self.create_data_schema_table
DataMigrate::DataSchemaMigration.create_table
end

def initialize(direction, migrations, target_version = nil)
@direction = direction
@target_version = target_version
@migrated_versions = nil
@migrations = migrations

validate(@migrations)

DataMigrate::DataSchemaMigration.create_table
ActiveRecord::InternalMetadata.create_table
end

def load_migrated
@migrated_versions =
DataMigrate::DataSchemaMigration.normalized_versions.map(&:to_i).sort
DataMigrate::RailsHelper.data_schema_migration.normalized_versions.map(&:to_i).sort
end

class << self
def migrations_paths
[DataMigrate.config.data_migrations_path]
end

def create_data_schema_table
DataMigrate::RailsHelper.data_schema_migration.create_table
end

def current_version
DataMigrate::MigrationContext.new(migrations_paths).current_version
end
Expand Down Expand Up @@ -79,10 +67,10 @@ def rollback(migrations_path, steps)
def record_version_state_after_migrating(version)
if down?
migrated.delete(version)
DataMigrate::DataSchemaMigration.where(version: version.to_s).delete_all
DataMigrate::RailsHelper.data_schema_delete_version(version.to_s)
else
migrated << version
DataMigrate::DataSchemaMigration.create!(version: version.to_s)
DataMigrate::RailsHelper.data_schema_migration.create_version(version.to_s)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/data_migrate/data_schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def sm_table
end

def table_name
DataMigrate::DataSchemaMigration.table_name
DataMigrate::RailsHelper.data_schema_migration.table_name
end
end
end
20 changes: 19 additions & 1 deletion lib/data_migrate/data_schema_migration.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
module DataMigrate
class DataSchemaMigration < ActiveRecord::SchemaMigration
class << self
# In Rails 7.1+, ActiveRecord::SchemaMigration methods are instance methods
# So we only load the appropriate methods depending on Rails version.
if DataMigrate::RailsHelper.rails_version_equal_to_or_higher_than_7_1
def table_name
ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix
end

def primary_key
"version"
end
else
class << self
def table_name
ActiveRecord::Base.table_name_prefix + 'data_migrations' + ActiveRecord::Base.table_name_suffix
end

def primary_key
"version"
end

def create_version(version)
# Note that SchemaMigration.create_version in Rails 7.1 does not
# raise an error if validations fail but we retain this behaviour for now.
create!(version: version)
end
end
end
end
end
Loading

0 comments on commit dd6b3b2

Please sign in to comment.