Clean up the post deployment migration generator (#24233)
This commit is contained in:
		
							
								
								
									
										10
									
								
								lib/generators/post_deployment_migration/USAGE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/generators/post_deployment_migration/USAGE
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
					 | 
				
			||||||
							
								
								
									
										27
									
								
								spec/generators/post_deployment_migration_generator_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								spec/generators/post_deployment_migration_generator_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user