Skip to content

Commit

Permalink
Add support for multiple preview_path
Browse files Browse the repository at this point in the history
  • Loading branch information
camelmasa committed Sep 8, 2014
1 parent 8683396 commit cd69eea
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 3 deletions.
4 changes: 3 additions & 1 deletion actionmailer/lib/action_mailer/preview.rb
Expand Up @@ -96,7 +96,9 @@ def preview_name
protected
def load_previews #:nodoc:
if preview_path
Dir["#{preview_path}/**/*_preview.rb"].each{ |file| require_dependency file }
Array(preview_path).each do |path|
Dir["#{path}/**/*_preview.rb"].each{ |file| require_dependency file }
end
end
end

Expand Down
6 changes: 4 additions & 2 deletions actionmailer/lib/action_mailer/railtie.rb
Expand Up @@ -22,7 +22,7 @@ class Railtie < Rails::Railtie # :nodoc:
options.show_previews = Rails.env.development? if options.show_previews.nil?

if options.show_previews
options.preview_path ||= defined?(Rails.root) ? "#{Rails.root}/test/mailers/previews" : nil
options.preview_path ||= defined?(Rails.root) ? ["#{Rails.root}/test/mailers/previews"] : []
end

# make sure readers methods get compiled
Expand Down Expand Up @@ -57,7 +57,9 @@ class Railtie < Rails::Railtie # :nodoc:

config.after_initialize do
if ActionMailer::Base.preview_path
ActiveSupport::Dependencies.autoload_paths << ActionMailer::Base.preview_path
Array(ActionMailer::Base.preview_path).each do |path|
ActiveSupport::Dependencies.autoload_paths << path
end
end
end
end
Expand Down
36 changes: 36 additions & 0 deletions railties/test/application/mailer_previews_test.rb
Expand Up @@ -102,6 +102,42 @@ def foo
assert_match '<li><a href="/rails/mailers/notifier/foo">foo</a></li>', last_response.body
end

test "mailer previews are loaded from a custom preview_path when it's multiple" do
add_to_config "config.action_mailer.preview_path = ['#{app_path}/lib/notifier_previews', '#{app_path}/lib/confirm_previews']"

['notifier', 'confirm'].each do |keyword|
mailer keyword, <<-RUBY
class #{keyword.camelize} < ActionMailer::Base
default from: "from@example.com"
def foo
mail to: "to@example.org"
end
end
RUBY

text_template "#{keyword}/foo", <<-RUBY
Hello, World!
RUBY

app_file "lib/#{keyword}_previews/notifier_preview.rb", <<-RUBY
class #{keyword.camelize}Preview < ActionMailer::Preview
def foo
#{keyword.camelize}.foo
end
end
RUBY
end

app('development')

get "/rails/mailers"
assert_match '<h3><a href="/rails/mailers/notifier">Notifier</a></h3>', last_response.body
assert_match '<li><a href="/rails/mailers/notifier/foo">foo</a></li>', last_response.body
assert_match '<h3><a href="/rails/mailers/confirm">Confirm</a></h3>', last_response.body
assert_match '<li><a href="/rails/mailers/confirm/foo">foo</a></li>', last_response.body
end

test "mailer previews are reloaded across requests" do
app('development')

Expand Down

0 comments on commit cd69eea

Please sign in to comment.