diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-02-07 13:14:05 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-02-07 13:14:05 +0000 |
commit | daee6fd92ac16878f6806c3382a9e74592aa9656 (patch) | |
tree | d477c6502960cb141403f8b4640dd483b487e5df /railties/lib/rails_generator/generators/components/mailer | |
parent | 838c5a3d82367977d13ced01f9e28c22ccff32ef (diff) | |
download | rails-daee6fd92ac16878f6806c3382a9e74592aa9656.tar.gz rails-daee6fd92ac16878f6806c3382a9e74592aa9656.tar.bz2 rails-daee6fd92ac16878f6806c3382a9e74592aa9656.zip |
Added new generator framework that informs about its doings on generation and enables updating and destruction of generated artifacts. See the new script/destroy and script/update for more details #487 [bitsweat]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@518 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/lib/rails_generator/generators/components/mailer')
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 |