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