2007-01-22 14:43:50 +01:00
|
|
|
class ModelGenerator < Rails::Generator::NamedBase
|
2007-12-21 08:48:59 +01:00
|
|
|
default_options :skip_timestamps => false, :skip_migration => false, :skip_fixture => false
|
2007-01-22 14:43:50 +01:00
|
|
|
|
|
|
|
def manifest
|
|
|
|
record do |m|
|
|
|
|
# Check for class naming collisions.
|
2008-10-27 07:47:01 +01:00
|
|
|
m.class_collisions class_name, "#{class_name}Test"
|
2007-01-22 14:43:50 +01:00
|
|
|
|
|
|
|
# Model, test, and fixture directories.
|
|
|
|
m.directory File.join('app/models', class_path)
|
|
|
|
m.directory File.join('test/unit', class_path)
|
|
|
|
m.directory File.join('test/fixtures', class_path)
|
|
|
|
|
|
|
|
# Model class, unit test, and fixtures.
|
|
|
|
m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
|
|
|
|
m.template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb")
|
2007-12-21 08:48:59 +01:00
|
|
|
|
|
|
|
unless options[:skip_fixture]
|
|
|
|
m.template 'fixtures.yml', File.join('test/fixtures', "#{table_name}.yml")
|
|
|
|
end
|
2007-01-22 14:43:50 +01:00
|
|
|
|
|
|
|
unless options[:skip_migration]
|
|
|
|
m.migration_template 'migration.rb', 'db/migrate', :assigns => {
|
|
|
|
:migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
|
|
|
|
}, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
2007-02-09 09:04:31 +01:00
|
|
|
def banner
|
2007-12-21 08:48:59 +01:00
|
|
|
"Usage: #{$0} #{spec.name} ModelName [field:type, field:type]"
|
2007-02-09 09:04:31 +01:00
|
|
|
end
|
|
|
|
|
2007-01-22 14:43:50 +01:00
|
|
|
def add_options!(opt)
|
|
|
|
opt.separator ''
|
|
|
|
opt.separator 'Options:'
|
2007-12-21 08:48:59 +01:00
|
|
|
opt.on("--skip-timestamps",
|
|
|
|
"Don't add timestamps to the migration file for this model") { |v| options[:skip_timestamps] = v }
|
2007-01-22 14:43:50 +01:00
|
|
|
opt.on("--skip-migration",
|
|
|
|
"Don't generate a migration file for this model") { |v| options[:skip_migration] = v }
|
2007-12-21 08:48:59 +01:00
|
|
|
opt.on("--skip-fixture",
|
|
|
|
"Don't generation a fixture file for this model") { |v| options[:skip_fixture] = v}
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
|
|
|
end
|