aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails_generator/generators/components/mailer
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails_generator/generators/components/mailer')
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/USAGE19
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb26
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml3
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb13
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb29
-rw-r--r--railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml3
6 files changed, 93 insertions, 0 deletions
diff --git a/railties/lib/rails_generator/generators/components/mailer/USAGE b/railties/lib/rails_generator/generators/components/mailer/USAGE
new file mode 100644
index 0000000000..50d3de19de
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/USAGE
@@ -0,0 +1,19 @@
+Description:
+ The mailer generator creates stubs for a new mailer and its views.
+
+ The generator takes a mailer name and a list of views as arguments.
+ The mailer name may be given in CamelCase or under_score and should
+ not be suffixed with 'Mailer'.
+
+ The generator creates a mailer class in app/models with view templates
+ in app/views/mailer_name, and a test suite with fixtures in test/unit.
+
+Example:
+ ./script/generate mailer Notifications signup forgot_password invoice
+
+ This will create a NotificationsMailer:
+ Mailer: app/models/notifications.rb
+ Views: app/views/notifications/signup.rhtml [...]
+ Test: test/unit/credit_card_controller_test.rb
+ Fixtures: test/fixtures/notifications/signup [...]
+
diff --git a/railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb b/railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb
new file mode 100644
index 0000000000..81d4599f7f
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/mailer_generator.rb
@@ -0,0 +1,26 @@
+class MailerGenerator < Rails::Generator::NamedBase
+ def manifest
+ record do |m|
+ # Check for class naming collisions.
+ m.class_collisions class_name, "#{class_name}Test"
+
+ # Mailer class and unit test.
+ m.template "mailer.rb", "app/models/#{file_name}.rb"
+ m.template "unit_test.rb", "test/unit/#{file_name}_test.rb"
+
+ # Views and fixtures directories.
+ m.directory "app/views/#{file_name}"
+ m.directory "test/fixtures/#{table_name}"
+
+ # View template and fixture for each action.
+ actions.each do |action|
+ m.template "view.rhtml",
+ "app/views/#{file_name}/#{action}.rhtml",
+ :assigns => { :action => action }
+ m.template "fixture.rhtml",
+ "test/fixtures/#{table_name}/#{action}",
+ :assigns => { :action => action }
+ end
+ end
+ end
+end
diff --git a/railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml b/railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml
new file mode 100644
index 0000000000..b481906829
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml
@@ -0,0 +1,3 @@
+<%= class_name %>#<%= action %>
+
+Find me in app/views/<%= file_name %>/<%= action %>.rhtml
diff --git a/railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb b/railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb
new file mode 100644
index 0000000000..81c19fa76d
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/templates/mailer.rb
@@ -0,0 +1,13 @@
+class <%= class_name %> < ActionMailer::Base
+<% for action in actions -%>
+
+ def <%= action %>(sent_on = Time.now)
+ @subject = '<%= class_name %>#<%= action %>'
+ @body = {}
+ @recipients = ''
+ @from = ''
+ @sent_on = sent_on
+ @headers = {}
+ end
+<% end -%>
+end
diff --git a/railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb b/railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb
new file mode 100644
index 0000000000..70fd3afe37
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/templates/unit_test.rb
@@ -0,0 +1,29 @@
+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
+ end
+
+<% for action in actions -%>
+ def test_<%= action %>
+ @expected.subject = '<%= class_name %>#<%= action %>'
+ @expected.body = read_fixture('<%= action %>')
+ @expected.date = Time.now
+
+ assert_equal @expected.encoded, <%= class_name %>.create_<%= action %>(@expected.date).encoded
+ end
+
+<% end -%>
+ private
+ def read_fixture(action)
+ IO.readlines("#{FIXTURES_PATH}/<%= file_name %>/#{action}")
+ end
+end
diff --git a/railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml b/railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml
new file mode 100644
index 0000000000..b481906829
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/mailer/templates/view.rhtml
@@ -0,0 +1,3 @@
+<%= class_name %>#<%= action %>
+
+Find me in app/views/<%= file_name %>/<%= action %>.rhtml