require 'rails/version' require File.dirname(__FILE__) + '/../default_values' require 'generators/rspec_rails3_gen_base' module Rspec module Generators class ModelGenerator < NamedBase # argument :model_name, :type => :string, :required => true, :banner => 'ModelName' argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" class_option :skip_fixture, :type => :boolean, :aliases => "-F", :default => false, :desc => "Skip Fixture creation" class_option :skip_migration, :type => :boolean, :aliases => "-M", :default => false, :desc => "Skip Migration creation" def self.source_root @source_root ||= File.expand_path('../templates', __FILE__) end def create_files empty_directory 'app/models' empty_directory 'spec/models' unless options[:skip_fixture] empty_directory 'spec/fixtures' end end def create_model # use hook to execute model generator # create spec for model template 'model_spec.rb', "spec/models/#{file_name}_spec.rb" attribs = attributes.map{|a| a.to_s}.join(' ') # puts "script/generate model #{file_name} #{attribs}" no_fixture = options[:skip_fixture] ? '--skip-fixture' : '' skip_migration = options[:skip_migration] ? '--skip-migration' : '' flags = [no_fixture, skip_migration].join(' ') generate "model #{file_name} #{attribs} #{flags}" # unless options[:skip_fixture] # template 'fixtures.yml', File.join('spec/fixtures', "#{table_name}.yml") # end # # unless options[:skip_migration] # migration_template 'model:migration.rb', 'db/migrate', :assigns => { # :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}" # }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}" # end end # hook into generators for model, migration and fixture and have them execute with same arguments hook_for :model, :in => :rails hook_for :migration, :in => :rails hook_for :fixture, :in => :rails end end end