Clean up the post deployment migration generator (#24233)

local
Matt Jankowski 1 year ago committed by GitHub
parent 3c7053a2db
commit a2a66300d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      lib/generators/post_deployment_migration/USAGE
  2. 17
      lib/generators/post_deployment_migration/post_deployment_migration_generator.rb
  3. 8
      lib/generators/post_deployment_migration/templates/migration.erb
  4. 17
      lib/generators/post_deployment_migration_generator.rb
  5. 8
      lib/templates/rails/post_deployment_migration/migration.rb
  6. 27
      spec/generators/post_deployment_migration_generator_spec.rb

@ -0,0 +1,10 @@
Description:
Generate a Rails migration in the db/post_migrate/ dir.
Interacts with the post_deployment_migrations initializer.
Example:
bin/rails generate post_deployment_migration IsolateChanges
Creates a migration in db/post_migrate/<timestamp>_isolate_changes.rb
which will have `disable_ddl_transaction!` and a `change` method included.

@ -0,0 +1,17 @@
# frozen_string_literal: true
require 'rails/generators/active_record'
class PostDeploymentMigrationGenerator < Rails::Generators::NamedBase
source_root File.expand_path('templates', __dir__)
include Rails::Generators::Migration
def create_post_deployment_migration
migration_template 'migration.erb', "db/post_migrate/#{file_name}.rb"
end
def self.next_migration_number(path)
ActiveRecord::Generators::Base.next_migration_number(path)
end
end

@ -0,0 +1,8 @@
# frozen_string_literal: true
class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
disable_ddl_transaction!
def change
end
end

@ -1,17 +0,0 @@
# frozen_string_literal: true
require 'rails/generators'
module Rails
class PostDeploymentMigrationGenerator < Rails::Generators::NamedBase
def create_migration_file
timestamp = Time.zone.now.strftime('%Y%m%d%H%M%S')
template 'migration.rb', "db/post_migrate/#{timestamp}_#{file_name}.rb"
end
def migration_class_name
file_name.camelize
end
end
end

@ -1,8 +0,0 @@
# frozen_string_literal: true
class <%= migration_class_name %> < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
end
end

@ -0,0 +1,27 @@
# frozen_string_literal: true
require 'rails_helper'
require 'rails/generators/testing/behaviour'
require 'rails/generators/testing/assertions'
require 'generators/post_deployment_migration/post_deployment_migration_generator'
describe PostDeploymentMigrationGenerator, type: :generator do
include Rails::Generators::Testing::Behaviour
include Rails::Generators::Testing::Assertions
include FileUtils
tests described_class
destination File.expand_path('../../tmp', __dir__)
before { prepare_destination }
after { rm_rf(destination_root) }
describe 'the migration' do
it 'generates expected file' do
run_generator %w(Changes)
assert_migration('db/post_migrate/changes.rb', /disable_ddl/)
assert_migration('db/post_migrate/changes.rb', /change/)
end
end
end
Loading…
Cancel
Save