blob: c3fa183438287d7c0833a52b2ffa0f62fa43b55c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
class ActionMailroom::Router
class RoutingError < StandardError; end
def initialize
@routes = []
end
def add_routes(routes)
routes.each do |(address, mailbox_name)|
add_route address, to: mailbox_name
end
end
def add_route(address, to:)
routes.append Route.new(address, to: to)
end
def route(inbound_email)
if mailbox = locate_mailbox(inbound_email)
mailbox.receive(inbound_email)
else
raise RoutingError
end
end
private
attr_reader :routes
def locate_mailbox(inbound_email)
routes.detect { |route| route.match?(inbound_email) }.try(:mailbox_class)
end
end
require "action_mailroom/router/route"
|