class Hobo::MigrationGenerator

Public Class Methods

banner() click to toggle source
next_migration_number(dirname) click to toggle source

the Rails::Generators::Migration.next_migration_number gives a NotImplementedError in Rails 3.0.0.beta4, so we need to implement the logic of ActiveRecord. For other ORMs we will wait for the rails implementation see groups.google.com/group/rubyonrails-talk/browse_thread/thread/a507ce419076cda2

# File lib/generators/hobo/migration/migration_generator.rb, line 18
def self.next_migration_number(dirname)
  ActiveRecord::Generators::Base.next_migration_number dirname
end

Public Instance Methods

migrate() click to toggle source
# File lib/generators/hobo/migration/migration_generator.rb, line 46
def migrate
  return if migrations_pending?

  generator = Generators::Hobo::Migration::Migrator.new(lambda{|c,d,k,p| extract_renames!(c,d,k,p)})
  up, down = generator.generate

  if up.blank?
    say "Database and models match -- nothing to change"
    return
  end

  say "\n---------- Up Migration ----------"
  say up
  say "----------------------------------"

  say "\n---------- Down Migration --------"
  say down
  say "----------------------------------"

  action = options[:generate] && 'g' ||
           options[:migrate] && 'm' ||
           choose("\nWhat now: [g]enerate migration, generate and [m]igrate now or [c]ancel?", /^(g|m|c)$/)

  if action != 'c'
    if name.blank? && !options[:default_name]
      final_migration_name = choose("\nMigration filename: [<enter>=#{migration_name}|<custom_name>]:", /^[a-z0-9_ ]*$/, migration_name).strip.gsub(' ', '_')
    end
    final_migration_name = migration_name if final_migration_name.blank?

    up.gsub!("\n", "\n    ")
    up.gsub!(/ +\n/, "\n")
    down.gsub!("\n", "\n    ")
    down.gsub!(/ +\n/, "\n")

    @up = up
    @down = down
    @migration_class_name = final_migration_name.camelize

    migration_template 'migration.rb.erb', "db/migrate/#{final_migration_name.underscore}.rb"
    rake('db:migrate') if action == 'm'
  end
rescue HoboFields::Model::FieldSpec::UnknownSqlTypeError => e
  say "Invalid field type: #{e}"
end