class SqlMigrationGenerator
Public Instance Methods
create_sql_migration_files()
click to toggle source
# File lib/generators/sql_migration/sql_migration_generator.rb, line 7 def create_sql_migration_files say_status :invoke, :active_record, :white raise(ActiveRecord::IllegalMigrationNameError, file_name) unless /^[_a-z0-9]+$/.match?(file_name) timestamp = Time.now.utc.strftime('%Y%m%d%H%M%S') up_migration = "db/migrate/#{timestamp}_#{file_name}.up.sql" down_migration = "db/migrate/#{timestamp}_#{file_name}.down.sql" existing_migrations = Rails.root.join('db/migrate').glob("*_#{file_name}.{rb,{up,down}.sql}") if existing_migrations.empty? create_file up_migration create_file down_migration elsif existing_migrations.all? { |x| x.to_s.end_with?('.sql') } && existing_migrations.count == 2 && existing_migrations.map(&:read).all?(&:empty?) say_status :identical, up_migration, :blue say_status :identical, down_migration, :blue elsif (ARGV & %w[--skip -s]).any? say_status :skip, up_migration, :yellow say_status :skip, down_migration, :yellow elsif (ARGV & %w[--force -f]).any? existing_migrations.each { |file| file.delete; say_status :remove, file, :green } create_file up_migration create_file down_migration else say_status :conflict, up_migration, :red say_status :conflict, down_migration, :red raise Thor::Error, "Another migration is already named #{file_name}: " \ "#{existing_migrations.first}. Use --force to replace this migration " \ 'or --skip to ignore conflicted file.' end end