From 2594581e9f5594b32918326be895b4d443ab3e9c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 7 Dec 2004 11:49:38 +0000 Subject: Added a better generator for scaffolding that actually creates the code, so it can be edited bit by bit. See "script/generate scaffold" [bitsweat]. Added a whole new approach to generators that used the shared "script/generate" command. Run with no-args to see help [bitsweat]. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@63 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- railties/generators/controller/USAGE | 29 ++++++ .../generators/controller/controller_generator.rb | 22 +++++ .../generators/controller/templates/controller.rb | 10 ++ .../controller/templates/functional_test.rb | 17 ++++ railties/generators/controller/templates/helper.rb | 2 + .../generators/controller/templates/view.rhtml | 2 + railties/generators/generate.rb | 41 ++++++++ railties/generators/mailer/USAGE | 29 ++++++ railties/generators/mailer/mailer_generator.rb | 22 +++++ railties/generators/mailer/templates/fixture.rhtml | 4 + railties/generators/mailer/templates/mailer.rb | 14 +++ railties/generators/mailer/templates/unit_test.rb | 37 +++++++ railties/generators/mailer/templates/view.rhtml | 3 + railties/generators/model/USAGE | 17 ++++ railties/generators/model/model_generator.rb | 10 ++ railties/generators/model/templates/fixtures.yml | 1 + railties/generators/model/templates/model.rb | 2 + railties/generators/model/templates/unit_test.rb | 11 +++ railties/generators/new_controller.rb | 43 -------- railties/generators/new_crud.rb | 34 ------- railties/generators/new_mailer.rb | 43 -------- railties/generators/new_model.rb | 31 ------ railties/generators/scaffold/USAGE | 18 ++++ railties/generators/scaffold/scaffold_generator.rb | 53 ++++++++++ .../generators/scaffold/templates/controller.rb | 58 +++++++++++ .../generators/scaffold/templates/fixtures.yml | 7 ++ .../scaffold/templates/functional_test.rb | 109 +++++++++++++++++++++ .../generators/scaffold/templates/layout.rhtml | 11 +++ railties/generators/scaffold/templates/style.css | 17 ++++ .../generators/scaffold/templates/view_edit.rhtml | 6 ++ .../generators/scaffold/templates/view_list.rhtml | 24 +++++ .../generators/scaffold/templates/view_new.rhtml | 5 + .../generators/scaffold/templates/view_show.rhtml | 8 ++ railties/generators/templates/controller.erb | 19 ---- railties/generators/templates/controller_test.erb | 17 ---- .../generators/templates/controller_view.rhtml | 10 -- railties/generators/templates/helper.erb | 2 - railties/generators/templates/mailer.erb | 15 --- railties/generators/templates/mailer_action.rhtml | 3 - railties/generators/templates/mailer_fixture.rhtml | 4 - railties/generators/templates/mailer_test.erb | 37 ------- railties/generators/templates/model.erb | 2 - railties/generators/templates/model_test.erb | 11 --- 43 files changed, 589 insertions(+), 271 deletions(-) create mode 100644 railties/generators/controller/USAGE create mode 100644 railties/generators/controller/controller_generator.rb create mode 100644 railties/generators/controller/templates/controller.rb create mode 100644 railties/generators/controller/templates/functional_test.rb create mode 100644 railties/generators/controller/templates/helper.rb create mode 100644 railties/generators/controller/templates/view.rhtml create mode 100755 railties/generators/generate.rb create mode 100644 railties/generators/mailer/USAGE create mode 100644 railties/generators/mailer/mailer_generator.rb create mode 100644 railties/generators/mailer/templates/fixture.rhtml create mode 100644 railties/generators/mailer/templates/mailer.rb create mode 100644 railties/generators/mailer/templates/unit_test.rb create mode 100644 railties/generators/mailer/templates/view.rhtml create mode 100644 railties/generators/model/USAGE create mode 100644 railties/generators/model/model_generator.rb create mode 100644 railties/generators/model/templates/fixtures.yml create mode 100644 railties/generators/model/templates/model.rb create mode 100644 railties/generators/model/templates/unit_test.rb delete mode 100755 railties/generators/new_controller.rb delete mode 100755 railties/generators/new_crud.rb delete mode 100644 railties/generators/new_mailer.rb delete mode 100755 railties/generators/new_model.rb create mode 100644 railties/generators/scaffold/USAGE create mode 100644 railties/generators/scaffold/scaffold_generator.rb create mode 100644 railties/generators/scaffold/templates/controller.rb create mode 100644 railties/generators/scaffold/templates/fixtures.yml create mode 100644 railties/generators/scaffold/templates/functional_test.rb create mode 100644 railties/generators/scaffold/templates/layout.rhtml create mode 100644 railties/generators/scaffold/templates/style.css create mode 100644 railties/generators/scaffold/templates/view_edit.rhtml create mode 100644 railties/generators/scaffold/templates/view_list.rhtml create mode 100644 railties/generators/scaffold/templates/view_new.rhtml create mode 100644 railties/generators/scaffold/templates/view_show.rhtml delete mode 100644 railties/generators/templates/controller.erb delete mode 100644 railties/generators/templates/controller_test.erb delete mode 100644 railties/generators/templates/controller_view.rhtml delete mode 100644 railties/generators/templates/helper.erb delete mode 100644 railties/generators/templates/mailer.erb delete mode 100644 railties/generators/templates/mailer_action.rhtml delete mode 100644 railties/generators/templates/mailer_fixture.rhtml delete mode 100644 railties/generators/templates/mailer_test.erb delete mode 100644 railties/generators/templates/model.erb delete mode 100644 railties/generators/templates/model_test.erb (limited to 'railties/generators') diff --git a/railties/generators/controller/USAGE b/railties/generators/controller/USAGE new file mode 100644 index 0000000000..0259b3d027 --- /dev/null +++ b/railties/generators/controller/USAGE @@ -0,0 +1,29 @@ +NAME + new_controller - create controller and view stub files + +SYNOPSIS + new_controller ControllerName action [action ...] + +DESCRIPTION + The new_controller generator takes the name of the new controller as the + first argument and a variable number of view names as subsequent arguments. + The controller name should be supplied without a "Controller" suffix. The + generator will add that itself. + + From the passed arguments, new_controller generates a controller file in + app/controllers with a render action for each of the view names passed. + It then creates a controller test suite in test/functional with one failing + test case. Finally, it creates an HTML stub for each of the view names in + app/views under a directory with the same name as the controller. + +EXAMPLE + new_controller Blog list display new edit + + This will generate a BlogController class in + app/controllers/blog_controller.rb, a BlogHelper class in + app/helpers/blog_helper.rb and a BlogControllerTest in + test/functional/blog_controller_test.rb. It will also create list.rhtml, + display.rhtml, new.rhtml, and edit.rhtml in app/views/blog. + + The BlogController class will have the following methods: list, display, new, edit. + Each will default to render the associated template file. diff --git a/railties/generators/controller/controller_generator.rb b/railties/generators/controller/controller_generator.rb new file mode 100644 index 0000000000..4b53741565 --- /dev/null +++ b/railties/generators/controller/controller_generator.rb @@ -0,0 +1,22 @@ +require 'rails_generator' + +class ControllerGenerator < Rails::Generator::Base + attr_reader :actions + + def generate + @actions = args + + # Controller class, functional test, and helper class. + template "controller.rb", "app/controllers/#{file_name}_controller.rb" + template "functional_test.rb", "test/functional/#{file_name}_controller_test.rb" + template "helper.rb", "app/helpers/#{file_name}_helper.rb" + + # Create the views directory even if there are no actions. + FileUtils.mkdir_p "app/views/#{file_name}" + + # Create a view for each action. + actions.each do |action| + template "view.rhtml", "app/views/#{file_name}/#{action}.rhtml", binding + end + end +end diff --git a/railties/generators/controller/templates/controller.rb b/railties/generators/controller/templates/controller.rb new file mode 100644 index 0000000000..f9800ab556 --- /dev/null +++ b/railties/generators/controller/templates/controller.rb @@ -0,0 +1,10 @@ +class <%= class_name %>Controller < AbstractApplicationController +<% if options[:scaffold] -%> + scaffold :<%= singular_name %> +<% end -%> +<% for action in actions -%> + + def <%= action %> + end +<% end -%> +end diff --git a/railties/generators/controller/templates/functional_test.rb b/railties/generators/controller/templates/functional_test.rb new file mode 100644 index 0000000000..c975cb3ce3 --- /dev/null +++ b/railties/generators/controller/templates/functional_test.rb @@ -0,0 +1,17 @@ +require File.dirname(__FILE__) + '/../test_helper' +require '<%= file_name %>_controller' + +# Re-raise errors caught by the controller. +class <%= class_name %>Controller; def rescue_action(e) raise e end; end + +class <%= class_name %>ControllerTest < Test::Unit::TestCase + def setup + @controller = <%= class_name %>Controller.new + @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new + end + + # Replace this with your real tests. + def test_truth + assert true + end +end diff --git a/railties/generators/controller/templates/helper.rb b/railties/generators/controller/templates/helper.rb new file mode 100644 index 0000000000..3fe2ecdc74 --- /dev/null +++ b/railties/generators/controller/templates/helper.rb @@ -0,0 +1,2 @@ +module <%= class_name %>Helper +end diff --git a/railties/generators/controller/templates/view.rhtml b/railties/generators/controller/templates/view.rhtml new file mode 100644 index 0000000000..7e7a7d53ce --- /dev/null +++ b/railties/generators/controller/templates/view.rhtml @@ -0,0 +1,2 @@ +

<%= class_name %>#<%= action %>

+

Find me in app/views/<%= file_name %>/<%= action %>.rhtml

diff --git a/railties/generators/generate.rb b/railties/generators/generate.rb new file mode 100755 index 0000000000..8f2f1497d6 --- /dev/null +++ b/railties/generators/generate.rb @@ -0,0 +1,41 @@ +#!/usr/local/bin/ruby +require File.dirname(__FILE__) + '/../config/environment' +require 'rails_generator' + +unless ARGV.empty? + begin + name = ARGV.shift + Rails::Generator.instance(name, ARGV).generate + rescue Rails::Generator::UsageError => e + puts e.message + end +else + builtin_generators = Rails::Generator.builtin_generators.join(', ') + contrib_generators = Rails::Generator.contrib_generators.join(', ') + + $stderr.puts <#<%= action %> + +Find me in test/fixtures/<%= file_name %>/<%= action %>. +I'm tested against the view in app/views/<%= file_name %>/<%= action %>. diff --git a/railties/generators/mailer/templates/mailer.rb b/railties/generators/mailer/templates/mailer.rb new file mode 100644 index 0000000000..6621ba9a01 --- /dev/null +++ b/railties/generators/mailer/templates/mailer.rb @@ -0,0 +1,14 @@ +require 'action_mailer' + +class <%= class_name %> < ActionMailer::Base +<% for action in actions -%> + + def <%= action %>(sent_on = Time.now) + @recipients = '' + @from = '' + @subject = '' + @body = {} + @sent_on = sent_on + end +<% end -%> +end diff --git a/railties/generators/mailer/templates/unit_test.rb b/railties/generators/mailer/templates/unit_test.rb new file mode 100644 index 0000000000..3bf460907f --- /dev/null +++ b/railties/generators/mailer/templates/unit_test.rb @@ -0,0 +1,37 @@ +require File.dirname(__FILE__) + '/../test_helper' +require '<%= file_name %>' + +class <%= class_name %>Test < Test::Unit::TestCase + FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' + + def setup + ActionMailer::Base.delivery_method = :test + ActionMailer::Base.perform_deliveries = true + ActionMailer::Base.deliveries = [] + + @expected = TMail::Mail.new + @expected.to = 'test@localhost' + @expected.from = 'test@localhost' + end + +<% for action in actions -%> + def test_<%= action %> + @expected.subject = '<%= class_name %>#<%= action %> test mail' + @expected.body = read_fixture('<%= action %>') + @expected.date = Time.now + + created = nil + assert_nothing_raised { created = <%= class_name %>.create_<%= action %>(@expected.date) } + assert_not_nil created + assert_equal @expected.encoded, created.encoded + + assert_nothing_raised { <%= class_name %>.deliver_<%= action %>(@expected.date) } + assert_equal @expected.encoded, ActionMailer::Base.deliveries.first.encoded + end + +<% end -%> + private + def read_fixture(action) + IO.readlines("#{FIXTURES_PATH}/<%= file_name %>/#{action}") + end +end diff --git a/railties/generators/mailer/templates/view.rhtml b/railties/generators/mailer/templates/view.rhtml new file mode 100644 index 0000000000..b481906829 --- /dev/null +++ b/railties/generators/mailer/templates/view.rhtml @@ -0,0 +1,3 @@ +<%= class_name %>#<%= action %> + +Find me in app/views/<%= file_name %>/<%= action %>.rhtml diff --git a/railties/generators/model/USAGE b/railties/generators/model/USAGE new file mode 100644 index 0000000000..debf185bea --- /dev/null +++ b/railties/generators/model/USAGE @@ -0,0 +1,17 @@ +NAME + new_model - create model stub files + +SYNOPSIS + new_model ModelName + +DESCRIPTION + The new_model generator takes a model name (in CamelCase) and generates + a new, empty model in app/models, a test suite in test/unit with one + failing test case, and a fixtures directory in test/fixtures. + +EXAMPLE + new_model Account + + This will generate an Account class in app/models/account.rb, an + AccountTest in test/unit/account_test.rb, and the directory + test/fixtures/account. diff --git a/railties/generators/model/model_generator.rb b/railties/generators/model/model_generator.rb new file mode 100644 index 0000000000..04540d6e40 --- /dev/null +++ b/railties/generators/model/model_generator.rb @@ -0,0 +1,10 @@ +require 'rails_generator' + +class ModelGenerator < Rails::Generator::Base + def generate + # Model class, unit test, and fixtures. + template "model.rb", "app/models/#{file_name}.rb" + template "unit_test.rb", "test/unit/#{file_name}_test.rb" + template "fixtures.yml", "test/fixtures/#{table_name}.yml" + end +end diff --git a/railties/generators/model/templates/fixtures.yml b/railties/generators/model/templates/fixtures.yml new file mode 100644 index 0000000000..a56c16462a --- /dev/null +++ b/railties/generators/model/templates/fixtures.yml @@ -0,0 +1 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html diff --git a/railties/generators/model/templates/model.rb b/railties/generators/model/templates/model.rb new file mode 100644 index 0000000000..8d4c89e912 --- /dev/null +++ b/railties/generators/model/templates/model.rb @@ -0,0 +1,2 @@ +class <%= class_name %> < ActiveRecord::Base +end diff --git a/railties/generators/model/templates/unit_test.rb b/railties/generators/model/templates/unit_test.rb new file mode 100644 index 0000000000..6162d4cf96 --- /dev/null +++ b/railties/generators/model/templates/unit_test.rb @@ -0,0 +1,11 @@ +require File.dirname(__FILE__) + '/../test_helper' +require '<%= file_name %>' + +class <%= class_name %>Test < Test::Unit::TestCase + fixtures :<%= table_name %> + + # Replace this with your real tests. + def test_truth + assert true + end +end diff --git a/railties/generators/new_controller.rb b/railties/generators/new_controller.rb deleted file mode 100755 index 3060c06382..0000000000 --- a/railties/generators/new_controller.rb +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/local/bin/ruby -require File.dirname(__FILE__) + '/../config/environment' -require 'generator' - -unless ARGV.empty? - rails_root = File.dirname(__FILE__) + '/..' - name = ARGV.shift - actions = ARGV - Generator::Controller.new(rails_root, name, actions).generate -else - puts <<-END_HELP - -NAME - new_controller - create controller and view stub files - -SYNOPSIS - new_controller ControllerName action [action ...] - -DESCRIPTION - The new_controller generator takes the name of the new controller as the - first argument and a variable number of view names as subsequent arguments. - The controller name should be supplied without a "Controller" suffix. The - generator will add that itself. - - From the passed arguments, new_controller generates a controller file in - app/controllers with a render action for each of the view names passed. - It then creates a controller test suite in test/functional with one failing - test case. Finally, it creates an HTML stub for each of the view names in - app/views under a directory with the same name as the controller. - -EXAMPLE - new_controller Blog list display new edit - - This will generate a BlogController class in - app/controllers/blog_controller.rb, a BlogHelper class in - app/helpers/blog_helper.rb and a BlogControllerTest in - test/functional/blog_controller_test.rb. It will also create list.rhtml, - display.rhtml, new.rhtml, and edit.rhtml in app/views/blog. - - The BlogController class will have the following methods: list, display, new, edit. - Each will default to render the associated template file. -END_HELP -end diff --git a/railties/generators/new_crud.rb b/railties/generators/new_crud.rb deleted file mode 100755 index 4eaa1cb1f3..0000000000 --- a/railties/generators/new_crud.rb +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/local/bin/ruby -require File.dirname(__FILE__) + '/../config/environment' -require 'generator' - -unless ARGV.empty? - rails_root = File.dirname(__FILE__) + '/..' - name = ARGV.shift - actions = ARGV - Generator::Model.new(rails_root, name).generate - Generator::Controller.new(rails_root, name, actions, :scaffold => true).generate -else - puts <<-END_HELP - -NAME - new_crud - create a model and a controller scaffold - -SYNOPSIS - new_crud ModelName [action ...] - -DESCRIPTION - The new_crud generator takes the name of the new model as the - first argument and an optional list of controller actions as the - subsequent arguments. All actions may be omitted since the controller - will have scaffolding automatically set up for this model. - -EXAMPLE - new_crud Account - - This will generate an Account model and controller with scaffolding. - Now create the accounts table in your database and browse to - http://localhost/account/ -- voila, you're on Rails! - -END_HELP -end diff --git a/railties/generators/new_mailer.rb b/railties/generators/new_mailer.rb deleted file mode 100644 index 05d0c9ae82..0000000000 --- a/railties/generators/new_mailer.rb +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/local/bin/ruby -require File.dirname(__FILE__) + '/../config/environment' -require 'generator' - -unless ARGV.empty? - rails_root = File.dirname(__FILE__) + '/..' - name = ARGV.shift - actions = ARGV - Generator::Mailer.new(rails_root, name, actions).generate -else - puts <<-END_HELP - -NAME - new_mailer - create mailer and view stub files - -SYNOPSIS - new_mailer MailerName action [action ...] - -DESCRIPTION - The new_mailer generator takes the name of the new mailer class as the - first argument and a variable number of mail action names as subsequent - arguments. - - From the passed arguments, new_mailer generates a class file in - app/models with a mail action for each of the mail action names passed. - It then creates a mail test suite in test/unit with one stub test case - and one stub fixture per mail action. Finally, it creates a template stub - for each of the mail action names in app/views under a directory with the - same name as the class. - -EXAMPLE - new_mailer Notifications signup forgot_password invoice - - This will generate a Notifications class in - app/models/notifications.rb, a NotificationsTest in - test/unit/notifications_test.rb, and signup, forgot_password, and invoice - in test/fixture/notification. It will also create signup.rhtml, - forgot_password.rhtml, and invoice.rhtml in app/views/notifications. - - The Notifications class will have the following methods: signup, - forgot_password, and invoice. -END_HELP -end diff --git a/railties/generators/new_model.rb b/railties/generators/new_model.rb deleted file mode 100755 index f6fbf5f002..0000000000 --- a/railties/generators/new_model.rb +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/local/bin/ruby -require File.dirname(__FILE__) + '/../config/environment' -require 'generator' - -if ARGV.size == 1 - rails_root = File.dirname(__FILE__) + '/..' - name = ARGV.shift - Generator::Model.new(rails_root, name).generate -else - puts <<-HELP - -NAME - new_model - create model stub files - -SYNOPSIS - new_model ModelName - -DESCRIPTION - The new_model generator takes a model name (in CamelCase) and generates - a new, empty model in app/models, a test suite in test/unit with one - failing test case, and a fixtures directory in test/fixtures. - -EXAMPLE - new_model Account - - This will generate an Account class in app/models/account.rb, an - AccountTest in test/unit/account_test.rb, and the directory - test/fixtures/account. - -HELP -end diff --git a/railties/generators/scaffold/USAGE b/railties/generators/scaffold/USAGE new file mode 100644 index 0000000000..f299ee6f06 --- /dev/null +++ b/railties/generators/scaffold/USAGE @@ -0,0 +1,18 @@ +NAME + new_scaffold - create a model and a skeleton controller + +SYNOPSIS + new_scaffold ModelName [action ...] + +DESCRIPTION + The new_scaffold generator takes the name of the new model as the + first argument and an optional list of controller actions as the + subsequent arguments. Any actions with scaffolding code available + will be generated in your controller; others will be left as stubs. + +EXAMPLE + new_scaffold Account + + This will generate an Account model and controller. + Now create the accounts table in your database and browse to + http://localhost/account/ -- voila, you're on Rails! diff --git a/railties/generators/scaffold/scaffold_generator.rb b/railties/generators/scaffold/scaffold_generator.rb new file mode 100644 index 0000000000..ee556e8a03 --- /dev/null +++ b/railties/generators/scaffold/scaffold_generator.rb @@ -0,0 +1,53 @@ +require 'rails_generator' + +class ScaffoldGenerator < Rails::Generator::Base + def generate + # Model. + generator('model').generate + + # Fixtures. + template "fixtures.yml", "test/fixtures/#{table_name}.yml" + + # Controller class, functional test, helper, and views. + template "controller.rb", "app/controllers/#{file_name}_controller.rb" + template "functional_test.rb", "test/functional/#{file_name}_controller_test.rb" + template "controller/helper.rb", "app/helpers/#{file_name}_helper.rb" + + # Layout and stylesheet. + unless File.file?("app/views/layouts/scaffold.rhtml") + template "layout.rhtml", "app/views/layouts/scaffold.rhtml" + end + unless File.file?("public/stylesheets/scaffold.css") + template "style.css", "public/stylesheets/scaffold.css" + end + + # Scaffolded views. + scaffold_views.each do |action| + template "view_#{action}.rhtml", "app/views/#{file_name}/#{action}.rhtml" + end + + # Unscaffolded views. + unscaffolded_actions.each do |action| + template "controller/view.rhtml", + "app/views/#{file_name}/#{action}.rhtml", + binding + end + end + + protected + def scaffold_views + %w(list show new edit) + end + + def scaffold_actions + scaffold_views + %w(index create update destroy) + end + + def unscaffolded_actions + args - scaffold_actions + end + + def suffix + "_#{singular_name}" if options[:suffix] + end +end diff --git a/railties/generators/scaffold/templates/controller.rb b/railties/generators/scaffold/templates/controller.rb new file mode 100644 index 0000000000..c8706098da --- /dev/null +++ b/railties/generators/scaffold/templates/controller.rb @@ -0,0 +1,58 @@ +class <%= class_name %>Controller < AbstractApplicationController + model :<%= singular_name %> + layout 'scaffold' + +<% unless suffix -%> + def index + list + render_action 'list' + end +<% end -%> + +<% for action in unscaffolded_actions -%> + def <%= action %><%= suffix %> + end + +<% end -%> + def list<%= suffix %> + @<%= plural_name %> = <%= class_name %>.find_all + end + + def show<%= suffix %> + @<%= singular_name %> = <%= class_name %>.find(@params['id']) + end + + def new<%= suffix %> + @<%= singular_name %> = <%= class_name %>.new + end + + def create<%= suffix %> + @<%= singular_name %> = <%= class_name %>.new(@params['<%= singular_name %>']) + if @<%= singular_name %>.save + flash['notice'] = '<%= class_name %> was successfully created.' + redirect_to :action => 'list<%= suffix %>' + else + render_action 'new<%= suffix %>' + end + end + + def edit<%= suffix %> + @<%= singular_name %> = <%= class_name %>.find(@params['id']) + end + + def update + @<%= singular_name %> = <%= class_name %>.find(@params['<%= singular_name %>']['id']) + @<%= singular_name %>.attributes = @params['<%= singular_name %>'] + if @<%= singular_name %>.save + flash['notice'] = '<%= class_name %> was successfully updated.' + redirect_to :action => 'show<%= suffix %>', :id => @<%= singular_name %>.id + else + render_action 'edit<%= suffix %>' + end + end + + def destroy<%= suffix %> + <%= class_name %>.find(@params['id']).destroy + redirect_to :action => 'list<%= suffix %>' + end +end diff --git a/railties/generators/scaffold/templates/fixtures.yml b/railties/generators/scaffold/templates/fixtures.yml new file mode 100644 index 0000000000..ea67f36ad8 --- /dev/null +++ b/railties/generators/scaffold/templates/fixtures.yml @@ -0,0 +1,7 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + +first_<%= singular_name %>: + id: 1 + +another_<%= singular_name %>: + id: 2 diff --git a/railties/generators/scaffold/templates/functional_test.rb b/railties/generators/scaffold/templates/functional_test.rb new file mode 100644 index 0000000000..e82349375b --- /dev/null +++ b/railties/generators/scaffold/templates/functional_test.rb @@ -0,0 +1,109 @@ +require File.dirname(__FILE__) + '/../test_helper' +require '<%= file_name %>_controller' + +# Re-raise errors caught by the controller. +class <%= class_name %>Controller; def rescue_action(e) raise e end; end + +class <%= class_name %>ControllerTest < Test::Unit::TestCase + fixtures :<%= table_name %> + + def setup + @controller = <%= class_name %>Controller.new + @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new + end + +<% for action in unscaffolded_actions -%> + def test_<%= action %> + process :<%= action %> + assert_success + assert_rendered_file '<%= action %>' + end + +<% end -%> +<% unless suffix -%> + def test_index + process :index + assert_success + assert_rendered_file 'list' + end + +<% end -%> + def test_list<%= suffix %> + process :list<%= suffix %> + assert_success + assert_rendered_file 'list<%= suffix %>' + assert_template_has '<%= plural_name %>' + end + + def test_show<%= suffix %> + process :show<%= suffix %>, 'id' => 1 + assert_success + assert_rendered_file 'show' + assert_template_has '<%= singular_name %>' + assert_valid_record '<%= singular_name %>' + end + + def test_show_missing_<%= suffix || 'record' %> + process :show<%= suffix %> + assert_success + assert_rendered_file 'error' + end + + def test_new<%= suffix %> + process :new<%= suffix %> + assert_success + assert_rendered_file 'new<%= suffix %>' + assert_template_has '<%= singular_name %>' + end + + def test_create + num_<%= plural_name %> = <%= class_name %>.find_all.size + + process :create<%= suffix %>, '<%= singular_name %>' => { } + assert_redirected_to :action => 'list<%= suffix %>' + + assert_equal num_<%= plural_name %> + 1, <%= class_name %>.find_all.size + end + + def test_edit<%= suffix %> + process :edit<%= suffix %>, 'id' => 1 + assert_success + assert_rendered_file 'edit<%= suffix %>' + assert_template_has '<%= singular_name %>' + assert_valid_record '<%= singular_name %>' + end + + def test_edit_missing_<%= suffix || 'record' %> + process :edit<%= suffix %> + assert_success + assert_rendered_file 'error' + end + + def test_update<%= suffix %> + process :update<%= suffix %>, 'id' => 1 + assert_redirected_to :action => 'show<%= suffix %>', :id => 1 + end + + def test_update_missing_<%= suffix || 'record' %> + process :update<%= suffix %>, '<%= singular_name %>' => {} + assert_success + assert_rendered_file 'error' + end + + def test_destroy<%= suffix %> + assert_not_nil <%= class_name %>.find(1) + + process :destroy, 'id' => 1 + assert_redirected_to :action => 'list<%= suffix %>' + + assert_raise(ActiveRecord::RecordNotFound) { + <%= singular_name %> = <%= class_name %>.find(1) + } + end + + def test_destroy_missing_<%= suffix || 'record' %> + process :destroy<%= suffix %> + assert_success + assert_rendered_file 'error' + end +end diff --git a/railties/generators/scaffold/templates/layout.rhtml b/railties/generators/scaffold/templates/layout.rhtml new file mode 100644 index 0000000000..59d5585b51 --- /dev/null +++ b/railties/generators/scaffold/templates/layout.rhtml @@ -0,0 +1,11 @@ + + + Scaffolding: <%%= controller.controller_name %>#<%%= controller.action_name %> + + + + +<%%= @content_for_layout %> + + + diff --git a/railties/generators/scaffold/templates/style.css b/railties/generators/scaffold/templates/style.css new file mode 100644 index 0000000000..2db43b7fa1 --- /dev/null +++ b/railties/generators/scaffold/templates/style.css @@ -0,0 +1,17 @@ +body { background-color: #fff; color: #333; } + +body, p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { color: #000; } +a:visited { color: #666; } +a:hover { color: #fff; background-color:#000; } diff --git a/railties/generators/scaffold/templates/view_edit.rhtml b/railties/generators/scaffold/templates/view_edit.rhtml new file mode 100644 index 0000000000..fec09e2cbe --- /dev/null +++ b/railties/generators/scaffold/templates/view_edit.rhtml @@ -0,0 +1,6 @@ +

Editing <%= singular_name %>

+ +<%%= form '<%= singular_name %>', :action => 'update<%= suffix %>' %> + +<%%= link_to 'Show', :action => 'show<%= suffix %>', :id => @<%= singular_name %>.id %> | +<%%= link_to 'Back', :action => 'list<%= suffix %>' %> diff --git a/railties/generators/scaffold/templates/view_list.rhtml b/railties/generators/scaffold/templates/view_list.rhtml new file mode 100644 index 0000000000..068fd67472 --- /dev/null +++ b/railties/generators/scaffold/templates/view_list.rhtml @@ -0,0 +1,24 @@ +

Listing <%= plural_name %>

+ + + +<%% for column in <%= class_name %>.content_columns %> + +<%% end %> + + +<%% for <%= singular_name %> in @<%= plural_name %> %> + + <%% for column in <%= class_name %>.content_columns %> + + <%% end %> + + + + +<%% end %> +
<%%= column.human_name %>
<%%=h <%= singular_name %>[column.name] %><%%= link_to 'Show', :action => 'show<%= suffix %>', :id => <%= singular_name %>.id %><%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => <%= singular_name %>.id %><%%= link_to 'Destroy', :action => 'destroy<%= suffix %>', :id => <%= singular_name %>.id %>
+ +
+ +<%%= link_to 'New <%= singular_name %>', :action => 'new<%= suffix %>' %> diff --git a/railties/generators/scaffold/templates/view_new.rhtml b/railties/generators/scaffold/templates/view_new.rhtml new file mode 100644 index 0000000000..840bb02775 --- /dev/null +++ b/railties/generators/scaffold/templates/view_new.rhtml @@ -0,0 +1,5 @@ +

New <%= @singular_name %>

+ +<%%= form '<%= singular_name %>', :action => 'create<%= suffix %>' %> + +<%%= link_to 'Back', :action => 'list<%= suffix %>' %> diff --git a/railties/generators/scaffold/templates/view_show.rhtml b/railties/generators/scaffold/templates/view_show.rhtml new file mode 100644 index 0000000000..30a3242f14 --- /dev/null +++ b/railties/generators/scaffold/templates/view_show.rhtml @@ -0,0 +1,8 @@ +<%% for column in <%= class_name %>.content_columns %> +

+ <%%= column.human_name %>: <%%= @<%= singular_name %>[column.name] %> +

+<%% end %> + +<%%= link_to 'Edit', :action => 'edit<%= suffix %>', :id => @<%= singular_name %>.id %> | +<%%= link_to 'Back', :action => 'list<%= suffix %>' %> diff --git a/railties/generators/templates/controller.erb b/railties/generators/templates/controller.erb deleted file mode 100644 index 600f5d2c59..0000000000 --- a/railties/generators/templates/controller.erb +++ /dev/null @@ -1,19 +0,0 @@ -class <%= class_name %>Controller < AbstractApplicationController - helper :<%= file_name %> -<% if options[:scaffold] -%> - model :<%= file_name %> - scaffold :<%= options[:scaffold] %> - - <%- for action in actions -%> - #def <%= action %> - #end - - <%- end -%> -<% else -%> - <%- for action in actions -%> - def <%= action %> - end - - <%- end -%> -<% end -%> -end diff --git a/railties/generators/templates/controller_test.erb b/railties/generators/templates/controller_test.erb deleted file mode 100644 index 5577379c62..0000000000 --- a/railties/generators/templates/controller_test.erb +++ /dev/null @@ -1,17 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' -require '<%= file_name %>_controller' - -# Re-raise errors caught by the controller. -class <%= class_name %>Controller; def rescue_action(e) raise e end; end - -class <%= class_name %>ControllerTest < Test::Unit::TestCase - def setup - @controller = <%= class_name %>Controller.new - @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new - end - - # Replace this with your real tests - def test_truth - assert true - end -end diff --git a/railties/generators/templates/controller_view.rhtml b/railties/generators/templates/controller_view.rhtml deleted file mode 100644 index d8a310df50..0000000000 --- a/railties/generators/templates/controller_view.rhtml +++ /dev/null @@ -1,10 +0,0 @@ - - - - <%= class_name %>#<%= action %> - - -

<%= class_name %>#<%= action %>

-

Find me in app/views/<%= file_name %>/<%= action %>.rhtml

- - diff --git a/railties/generators/templates/helper.erb b/railties/generators/templates/helper.erb deleted file mode 100644 index 3fe2ecdc74..0000000000 --- a/railties/generators/templates/helper.erb +++ /dev/null @@ -1,2 +0,0 @@ -module <%= class_name %>Helper -end diff --git a/railties/generators/templates/mailer.erb b/railties/generators/templates/mailer.erb deleted file mode 100644 index 5afc254923..0000000000 --- a/railties/generators/templates/mailer.erb +++ /dev/null @@ -1,15 +0,0 @@ -require 'action_mailer' - -class <%= class_name %> < ActionMailer::Base - -<% for action in actions -%> - def <%= action %>(sent_on = Time.now) - @recipients = '' - @from = '' - @subject = '' - @body = {} - @sent_on = sent_on - end - -<% end -%> -end diff --git a/railties/generators/templates/mailer_action.rhtml b/railties/generators/templates/mailer_action.rhtml deleted file mode 100644 index b481906829..0000000000 --- a/railties/generators/templates/mailer_action.rhtml +++ /dev/null @@ -1,3 +0,0 @@ -<%= class_name %>#<%= action %> - -Find me in app/views/<%= file_name %>/<%= action %>.rhtml diff --git a/railties/generators/templates/mailer_fixture.rhtml b/railties/generators/templates/mailer_fixture.rhtml deleted file mode 100644 index f315d430ed..0000000000 --- a/railties/generators/templates/mailer_fixture.rhtml +++ /dev/null @@ -1,4 +0,0 @@ -<%= class_name %>#<%= action %> - -Find me in test/fixtures/<%= file_name %>/<%= action %>. -I'm tested against the view in app/views/<%= file_name %>/<%= action %>. diff --git a/railties/generators/templates/mailer_test.erb b/railties/generators/templates/mailer_test.erb deleted file mode 100644 index f17d614195..0000000000 --- a/railties/generators/templates/mailer_test.erb +++ /dev/null @@ -1,37 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' -require '<%= file_name %>' - -class <%= class_name %>Test < Test::Unit::TestCase - FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' - - def setup - ActionMailer::Base.delivery_method = :test - ActionMailer::Base.perform_deliveries = true - ActionMailer::Base.deliveries = [] - - @expected = TMail::Mail.new - @expected.to = 'test@localhost' - @expected.from = 'test@localhost' - @expected.subject = '<%= class_name %> test mail' - end - -<% for action in actions -%> - def test_<%= action %> - @expected.body = read_fixture('<%= action %>') - @expected.date = Time.now - - created = nil - assert_nothing_raised { created = <%= class_name %>.create_<%= action %>(@expected.date) } - assert_not_nil created - assert_equal @expected.encoded, created.encoded - - assert_nothing_raised { <%= class_name %>.deliver_<%= action %>(@expected.date) } - assert_equal @expected.encoded, ActionMailer::Base.deliveries.first.encoded - end - -<% end -%> - private - def read_fixture(action) - IO.readlines("#{FIXTURES_PATH}/<%= file_name %>/#{action}") - end -end diff --git a/railties/generators/templates/model.erb b/railties/generators/templates/model.erb deleted file mode 100644 index 8d4c89e912..0000000000 --- a/railties/generators/templates/model.erb +++ /dev/null @@ -1,2 +0,0 @@ -class <%= class_name %> < ActiveRecord::Base -end diff --git a/railties/generators/templates/model_test.erb b/railties/generators/templates/model_test.erb deleted file mode 100644 index a3ad2b72fb..0000000000 --- a/railties/generators/templates/model_test.erb +++ /dev/null @@ -1,11 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' -require '<%= file_name %>' - -class <%= class_name %>Test < Test::Unit::TestCase - fixtures :<%= table_name %> - - # Replace this with your real tests - def test_truth - assert true - end -end \ No newline at end of file -- cgit v1.2.3