Allow users to configure the queue for the mailers

This allow the users to do:

    config.action_mailer.queue = MyQueue.new

and

    class UsersMailer < ActionMailer::Base
      self.queue = MyQueue.new
    end
上级 9bb4850e
...@@ -389,6 +389,8 @@ class Base < AbstractController::Base ...@@ -389,6 +389,8 @@ class Base < AbstractController::Base
:parts_order => [ "text/plain", "text/enriched", "text/html" ] :parts_order => [ "text/plain", "text/enriched", "text/html" ]
}.freeze }.freeze
class_attribute :queue
class << self class << self
# Register one or more Observers which will be notified when mail is delivered. # Register one or more Observers which will be notified when mail is delivered.
def register_observers(*observers) def register_observers(*observers)
...@@ -486,11 +488,6 @@ def method_missing(method_name, *args) ...@@ -486,11 +488,6 @@ def method_missing(method_name, *args)
super super
end end
end end
def queue
Rails.queue
end
end end
attr_internal :message attr_internal :message
......
...@@ -19,6 +19,8 @@ class Railtie < Rails::Railtie ...@@ -19,6 +19,8 @@ class Railtie < Rails::Railtie
options.javascripts_dir ||= paths["public/javascripts"].first options.javascripts_dir ||= paths["public/javascripts"].first
options.stylesheets_dir ||= paths["public/stylesheets"].first options.stylesheets_dir ||= paths["public/stylesheets"].first
options.queue ||= app.queue
# make sure readers methods get compiled # make sure readers methods get compiled
options.asset_path ||= app.config.asset_path options.asset_path ||= app.config.asset_path
options.asset_host ||= app.config.asset_host options.asset_host ||= app.config.asset_host
......
...@@ -27,14 +27,7 @@ ...@@ -27,14 +27,7 @@
FIXTURE_LOAD_PATH = File.expand_path('fixtures', File.dirname(__FILE__)) FIXTURE_LOAD_PATH = File.expand_path('fixtures', File.dirname(__FILE__))
ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH
ActionMailer::Base.queue = Rails::Queueing::SynchronousQueue.new
class ActionMailer::Base < AbstractController::Base
class << self
def queue
@queue ||= Rails::Queueing::Container.new(Rails::Queueing::SynchronousQueue.new)
end
end
end
class MockSMTP class MockSMTP
def self.deliveries def self.deliveries
......
...@@ -50,6 +50,23 @@ def teardown ...@@ -50,6 +50,23 @@ def teardown
assert_equal "test.rails", ActionMailer::Base.default_url_options[:host] assert_equal "test.rails", ActionMailer::Base.default_url_options[:host]
end end
test "uses the default queue for ActionMailer" do
require "#{app_path}/config/environment"
assert_kind_of Rails::Queueing::Container, ActionMailer::Base.queue
end
test "allows me to configure queue for ActionMailer" do
app_file "config/environments/development.rb", <<-RUBY
AppTemplate::Application.configure do
Rails.queue[:mailer] = Rails::Queueing::TestQueue.new
config.action_mailer.queue = Rails.queue[:mailer]
end
RUBY
require "#{app_path}/config/environment"
assert_kind_of Rails::Queueing::TestQueue, ActionMailer::Base.queue
end
test "does not include url helpers as action methods" do test "does not include url helpers as action methods" do
app_file "config/routes.rb", <<-RUBY app_file "config/routes.rb", <<-RUBY
AppTemplate::Application.routes.draw do AppTemplate::Application.routes.draw do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册