提交 35362fc2 编写于 作者: D David Heinemeier Hansson

Merge pull request #17646 from andyjeffries/html_layout_fix

Creating mailer layouts by default, including html and body tags
......@@ -8,6 +8,7 @@ class MailerGenerator < NamedBase
def create_mailer_file
template "mailer.rb", File.join('app/mailers', class_path, "#{file_name}.rb")
template "application_mailer.rb", 'app/mailers/application_mailer.rb'
end
hook_for :template_engine, :test_framework
......
class ApplicationMailer < ActionMailer::Base
default from: "from@example.com"
layout 'mailer'
end
<% module_namespacing do -%>
class <%= class_name %> < ActionMailer::Base
default from: "from@example.com"
class <%= class_name %> < ApplicationMailer
<% actions.each do |action| -%>
# Subject can be set in your I18n file at config/locales/en.yml
......
......@@ -3,6 +3,26 @@
module Erb # :nodoc:
module Generators # :nodoc:
class MailerGenerator < ControllerGenerator # :nodoc:
def copy_view_files
view_base_path = File.join("app/views", class_path, file_name)
empty_directory view_base_path
layout_base_path = "app/views/layouts"
actions.each do |action|
@action = action
formats.each do |format|
@view_path = File.join(view_base_path, filename_with_extensions(action, format))
template filename_with_extensions(:view, format), @view_path
@layout_path = File.join(layout_base_path, filename_with_extensions("mailer", format))
template filename_with_extensions(:layout, format), @layout_path
end
end
end
protected
def formats
......
......@@ -8,8 +8,18 @@ class MailerGeneratorTest < Rails::Generators::TestCase
def test_mailer_skeleton_is_created
run_generator
assert_file "app/mailers/notifier.rb" do |mailer|
assert_match(/class Notifier < ActionMailer::Base/, mailer)
assert_match(/class Notifier < ApplicationMailer/, mailer)
assert_no_match(/default from: "from@example.com"/, mailer)
assert_no_match(/layout :mailer_notifier/, mailer)
end
end
def test_application_mailer_skeleton_is_created
run_generator
assert_file "app/mailers/application_mailer.rb" do |mailer|
assert_match(/class ApplicationMailer < ActionMailer::Base/, mailer)
assert_match(/default from: "from@example.com"/, mailer)
assert_match(/layout 'mailer'/, mailer)
end
end
......@@ -69,27 +79,31 @@ def test_check_preview_class_collision
def test_invokes_default_text_template_engine
run_generator
assert_file "app/views/notifier/foo.text.erb" do |view|
assert_match(%r(\sapp/views/notifier/foo\.text\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/notifier/bar.text.erb" do |view|
assert_match(%r(\sapp/views/notifier/bar\.text\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/layouts/mailer.text.erb" do |view|
assert_match(/<%= yield %>/, view)
end
end
def test_invokes_default_html_template_engine
run_generator
assert_file "app/views/notifier/foo.html.erb" do |view|
assert_match(%r(\sapp/views/notifier/foo\.html\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/notifier/bar.html.erb" do |view|
assert_match(%r(\sapp/views/notifier/bar\.html\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/layouts/mailer.html.erb" do |view|
assert_match(%r{<html>\n <body>\n <%= yield %>\n </body>\n</html>}, view)
end
end
def test_invokes_default_template_engine_even_with_no_action
......@@ -105,7 +119,7 @@ def test_logs_if_the_template_engine_cannot_be_found
def test_mailer_with_namedspaced_mailer
run_generator ["Farm::Animal", "moos"]
assert_file "app/mailers/farm/animal.rb" do |mailer|
assert_match(/class Farm::Animal < ActionMailer::Base/, mailer)
assert_match(/class Farm::Animal < ApplicationMailer/, mailer)
assert_match(/en\.farm\.animal\.moos\.subject/, mailer)
end
assert_file "test/mailers/previews/farm/animal_preview.rb" do |preview|
......
......@@ -148,8 +148,8 @@ def test_mailer_skeleton_is_created
run_generator
assert_file "app/mailers/test_app/notifier.rb" do |mailer|
assert_match(/module TestApp/, mailer)
assert_match(/class Notifier < ActionMailer::Base/, mailer)
assert_match(/default from: "from@example.com"/, mailer)
assert_match(/class Notifier < ApplicationMailer/, mailer)
assert_no_match(/default from: "from@example.com"/, mailer)
end
end
......@@ -174,12 +174,10 @@ def test_invokes_default_test_framework
def test_invokes_default_template_engine
run_generator
assert_file "app/views/test_app/notifier/foo.text.erb" do |view|
assert_match(%r(app/views/test_app/notifier/foo\.text\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
assert_file "app/views/test_app/notifier/bar.text.erb" do |view|
assert_match(%r(app/views/test_app/notifier/bar\.text\.erb), view)
assert_match(/<%= @greeting %>/, view)
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册