diff --git a/railties/lib/generator/generators/app.rb b/railties/lib/generator/generators/app.rb index b54f8dc41fe4c8a9e8b98fb221386bc07181d02d..742918768449dbb66b4ac47b5cbf285a14504294 100644 --- a/railties/lib/generator/generators/app.rb +++ b/railties/lib/generator/generators/app.rb @@ -24,14 +24,14 @@ class App < Base class_option :with_dispatchers, :type => :boolean, :aliases => "-D", :default => false, :desc => "Add CGI/FastCGI/mod_ruby dispatchers code" - class_option :no_activerecord, :type => :boolean, :aliases => "-A", :default => false, - :desc => "Do not generate ActiveRecord files" + class_option :skip_activerecord, :type => :boolean, :aliases => "-A", :default => false, + :desc => "Skip ActiveRecord files" - class_option :no_testunit, :type => :boolean, :aliases => "-U", :default => false, - :desc => "Do not generate TestUnit files" + class_option :skip_testunit, :type => :boolean, :aliases => "-U", :default => false, + :desc => "Skip TestUnit files" - class_option :no_prototype, :type => :boolean, :aliases => "-P", :default => false, - :desc => "Do not generate Prototype files" + class_option :skip_prototype, :type => :boolean, :aliases => "-P", :default => false, + :desc => "Skip Prototype files" # Add Rails options # @@ -79,8 +79,8 @@ def create_config_files end end + conditions :skip_activerecord => false def create_activerecord_files - return if options[:no_activerecord] template "config/databases/#{options[:database]}.yml", "config/database.yml" end @@ -112,9 +112,8 @@ def create_public_files directory "public", "public", false # Non-recursive. Do small steps, so anyone can overwrite it. end + conditions :with_dispatchers => true def create_dispatch_files - return unless options[:with_dispatchers] - copy_file "dispatchers/config.ru", "config.ru" template "dispatchers/dispatch.rb", "public/dispatch.rb" @@ -135,8 +134,8 @@ def create_public_stylesheets_files directory "public/stylesheets" end + conditions :skip_prototype => false def create_prototype_files - return if options[:no_prototype] directory "public/javascripts" end @@ -145,8 +144,8 @@ def create_script_files chmod "script", 0755, false end + conditions :skip_testunit => false def create_test_files - return if options[:no_testunit] directory "test" end @@ -170,8 +169,9 @@ def apply_rails_template raise Error, "The template [#{options[:template]}] could not be loaded. Error: #{e}" end - def freeze? - freeze! if options[:freeze] + conditions :freeze => true + def vendorize_rails + freeze! end protected diff --git a/railties/lib/generator/templates/app/config/environment.rb b/railties/lib/generator/templates/app/config/environment.rb index 6a4db65e8ffafcdffade7cd16823631bde180ac1..d1080cb52995a051b4895d39cd4aaa43584a6040 100644 --- a/railties/lib/generator/templates/app/config/environment.rb +++ b/railties/lib/generator/templates/app/config/environment.rb @@ -26,7 +26,7 @@ # Skip frameworks you're not going to use. To use Rails without a database, # you must remove the Active Record framework. -<%- if options[:no_activerecord] -%> +<%- if options[:skip_activerecord] -%> config.frameworks -= [ :active_record ] <%- else -%> # config.frameworks -= [ :active_record, :active_resource, :action_mailer ] diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb index ab0554d0cfd48faea74070e1061c8be213c95398..431a4bc4f6d71cba027962b580419e6e52c92611 100644 --- a/railties/test/generator/app_test.rb +++ b/railties/test/generator/app_test.rb @@ -37,6 +37,72 @@ def test_application_skeleton_is_created ).each{ |path| assert_file path } end + def test_invalid_database_option_raises_an_error + content = capture(:stderr){ run_generator(["-d", "unknown"]) } + assert_match /Invalid value for \-\-database option/, content + end + + def test_dispatchers_are_not_added_by_default + run_generator + assert_no_file "config.ru" + assert_no_file "public/dispatch.cgi" + assert_no_file "public/dispatch.fcgi" + end + + def test_dispatchers_are_added_if_required + run_generator ["--with-dispatchers"] + assert_file "config.ru" + assert_file "public/dispatch.cgi" + assert_file "public/dispatch.fcgi" + end + + def test_config_database_is_added_by_default + run_generator + assert_file "config/database.yml", /sqlite3/ + end + + def test_config_database_is_not_added_if_skip_activerecord_is_given + run_generator ["--skip-activerecord"] + assert_no_file "config/database.yml" + end + + def test_activerecord_is_removed_from_frameworks_if_skip_activerecord_is_given + run_generator ["--skip-activerecord"] + assert_file "config/environment.rb", /config\.frameworks \-= \[ :active_record \]/ + end + + def test_prototype_and_test_unit_are_added_by_default + run_generator + assert_file "public/javascripts/prototype.js" + assert_file "test" + end + + def test_prototype_and_test_unit_are_skipped_if_required + run_generator ["--skip-prototype", "--skip-testunit"] + assert_no_file "public/javascripts/prototype.js" + assert_no_file "test" + end + + def test_shebang_is_added_to_files + run_generator ["--ruby", "foo/bar/baz"] + + %w( + about + console + dbconsole + destroy + generate + plugin + runner + server + ).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ } + end + + def test_rails_is_vendorized_if_freeze_is_supplied + generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) + silence(:stdout){ generator.invoke(:all) } + end + def test_template_raises_an_error_with_invalid_path content = capture(:stderr){ run_generator(["-m", "non/existant/path"]) } assert_match /The template \[.*\] could not be loaded/, content diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb index a405a5cd9d90c82433a2b824ca753c6146914c69..cdfd9bac0d48481b10a983eb9ea76493d9b57a0a 100644 --- a/railties/test/generator/generator_test_helper.rb +++ b/railties/test/generator/generator_test_helper.rb @@ -47,4 +47,9 @@ def assert_file(relative, content=nil) assert_match content, File.read(absolute) end end + + def assert_no_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert !File.exists?(absolute) + end end