mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Attach a concrete router to the root mailbox and use it
Don't think this is how it's going to stay. Doesn't feel like the right place for it.
This commit is contained in:
parent
ee6d9545dd
commit
da697e8444
6 changed files with 56 additions and 15 deletions
|
@ -3,7 +3,7 @@ module ActionMailroom
|
|||
queue_as :action_mailroom_inbound_email
|
||||
|
||||
def perform(inbound_email)
|
||||
# ActionMailroom::Router.receive inbound_email
|
||||
ActionMailroom::Mailbox.route inbound_email
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,22 +1,20 @@
|
|||
require "active_support/rescuable"
|
||||
|
||||
require "action_mailroom/mailbox/callbacks"
|
||||
require "action_mailroom/mailbox/routing"
|
||||
|
||||
class ActionMailroom::Mailbox
|
||||
include ActiveSupport::Rescuable, Callbacks
|
||||
|
||||
class << self
|
||||
def receive(inbound_email)
|
||||
new(inbound_email).perform_processing
|
||||
end
|
||||
|
||||
def routing(routes)
|
||||
@router = ActionMailroom::Router.new(routes)
|
||||
end
|
||||
end
|
||||
include ActiveSupport::Rescuable
|
||||
include Callbacks, Routing
|
||||
|
||||
attr_reader :inbound_email
|
||||
delegate :mail, to: :inbound_email
|
||||
|
||||
def self.receive(inbound_email)
|
||||
new(inbound_email).perform_processing
|
||||
end
|
||||
|
||||
|
||||
def initialize(inbound_email)
|
||||
@inbound_email = inbound_email
|
||||
end
|
||||
|
|
15
lib/action_mailroom/mailbox/routing.rb
Normal file
15
lib/action_mailroom/mailbox/routing.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module ActionMailroom::Mailbox::Routing
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
attr_reader :router
|
||||
|
||||
def routing(routes)
|
||||
(@router ||= ActionMailroom::Router.new).add_routes(routes)
|
||||
end
|
||||
|
||||
def route(inbound_email)
|
||||
@router.route(inbound_email)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,6 +1,10 @@
|
|||
class ActionMailroom::Router
|
||||
def initialize(routes)
|
||||
@routes = routes
|
||||
def initialize
|
||||
@routes = {}
|
||||
end
|
||||
|
||||
def add_routes(routes)
|
||||
@routes.merge!(routes)
|
||||
end
|
||||
|
||||
def route(inbound_email)
|
||||
|
|
23
test/unit/mailbox/routing_test.rb
Normal file
23
test/unit/mailbox/routing_test.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require_relative '../../test_helper'
|
||||
|
||||
class ApplicationMailbox < ActionMailroom::Mailbox
|
||||
routing "replies@example.com" => :replies
|
||||
end
|
||||
|
||||
class RepliesMailbox < ActionMailroom::Mailbox
|
||||
def process
|
||||
$processed = mail.subject
|
||||
end
|
||||
end
|
||||
|
||||
class ActionMailroom::Mailbox::RoutingTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
$processed = false
|
||||
@inbound_email = create_inbound_email("welcome.eml")
|
||||
end
|
||||
|
||||
test "string routing" do
|
||||
ApplicationMailbox.route @inbound_email
|
||||
assert_equal "Discussion: Let's debate these attachments", $processed
|
||||
end
|
||||
end
|
|
@ -9,7 +9,8 @@ end
|
|||
module ActionMailroom
|
||||
class RouterTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
@router = ActionMailroom::Router.new('replies@example.com' => :replies)
|
||||
@router = ActionMailroom::Router.new
|
||||
@router.add_routes('replies@example.com' => :replies)
|
||||
$processed = false
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue