diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-07 11:49:38 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-07 11:49:38 +0000 |
commit | 2594581e9f5594b32918326be895b4d443ab3e9c (patch) | |
tree | 051f52e4619b70f4757dbabf362d51a7d5f5fde9 /railties/generators/mailer | |
parent | 3ee4357b8643c611bbe9eb3a7ce820a5e32cddaa (diff) | |
download | rails-2594581e9f5594b32918326be895b4d443ab3e9c.tar.gz rails-2594581e9f5594b32918326be895b4d443ab3e9c.tar.bz2 rails-2594581e9f5594b32918326be895b4d443ab3e9c.zip |
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
Diffstat (limited to 'railties/generators/mailer')
-rw-r--r-- | railties/generators/mailer/USAGE | 29 | ||||
-rw-r--r-- | railties/generators/mailer/mailer_generator.rb | 22 | ||||
-rw-r--r-- | railties/generators/mailer/templates/fixture.rhtml | 4 | ||||
-rw-r--r-- | railties/generators/mailer/templates/mailer.rb | 14 | ||||
-rw-r--r-- | railties/generators/mailer/templates/unit_test.rb | 37 | ||||
-rw-r--r-- | railties/generators/mailer/templates/view.rhtml | 3 |
6 files changed, 109 insertions, 0 deletions
diff --git a/railties/generators/mailer/USAGE b/railties/generators/mailer/USAGE new file mode 100644 index 0000000000..b6f2bbd54b --- /dev/null +++ b/railties/generators/mailer/USAGE @@ -0,0 +1,29 @@ +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. diff --git a/railties/generators/mailer/mailer_generator.rb b/railties/generators/mailer/mailer_generator.rb new file mode 100644 index 0000000000..ae0ad6bbe4 --- /dev/null +++ b/railties/generators/mailer/mailer_generator.rb @@ -0,0 +1,22 @@ +require 'rails_generator' + +class MailerGenerator < Rails::Generator::Base + attr_reader :actions + + def generate + @actions = args + + # Mailer class and unit test. + template "mailer.rb", "app/models/#{file_name}.rb" + template "unit_test.rb", "test/unit/#{file_name}_test.rb" + + # Test fixtures directory. + FileUtils.mkdir_p "test/fixtures/#{table_name}" + + # View template and fixture for each action. + args.each do |action| + template "view.rhtml", "app/views/#{file_name}/#{action}.rhtml", binding + template "fixture.rhtml", "test/fixtures/#{table_name}/#{action}", binding + end + end +end diff --git a/railties/generators/mailer/templates/fixture.rhtml b/railties/generators/mailer/templates/fixture.rhtml new file mode 100644 index 0000000000..f315d430ed --- /dev/null +++ b/railties/generators/mailer/templates/fixture.rhtml @@ -0,0 +1,4 @@ +<%= 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/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 |