aboutsummaryrefslogtreecommitdiffstats
path: root/railties/generators/mailer
diff options
context:
space:
mode:
Diffstat (limited to 'railties/generators/mailer')
-rw-r--r--railties/generators/mailer/USAGE29
-rw-r--r--railties/generators/mailer/mailer_generator.rb22
-rw-r--r--railties/generators/mailer/templates/fixture.rhtml4
-rw-r--r--railties/generators/mailer/templates/mailer.rb14
-rw-r--r--railties/generators/mailer/templates/unit_test.rb37
-rw-r--r--railties/generators/mailer/templates/view.rhtml3
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