diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-20 17:16:19 -0700 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-20 17:16:19 -0700 |
commit | d14f54b0e085128b5305c806a4fe01f07b97b8fa (patch) | |
tree | b7b9c0772ad800f9074f7440aee5d9c00dc4431e /lib/action_mailroom/router | |
parent | 2d6c79413d01f48df11ef76e65ba45673dcf580c (diff) | |
download | rails-d14f54b0e085128b5305c806a4fe01f07b97b8fa.tar.gz rails-d14f54b0e085128b5305c806a4fe01f07b97b8fa.tar.bz2 rails-d14f54b0e085128b5305c806a4fe01f07b97b8fa.zip |
Expand router with real routing object and 4-way address options
Diffstat (limited to 'lib/action_mailroom/router')
-rw-r--r-- | lib/action_mailroom/router/route.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/action_mailroom/router/route.rb b/lib/action_mailroom/router/route.rb new file mode 100644 index 0000000000..316c77d711 --- /dev/null +++ b/lib/action_mailroom/router/route.rb @@ -0,0 +1,26 @@ +class ActionMailroom::Router::Route + class InvalidAddressError < StandardError; end + + attr_reader :address, :mailbox_name + + def initialize(address, to:) + @address, @mailbox_name = address, to + end + + def match?(inbound_email) + case address + when String + inbound_email.mail.to.include?(address) + when Regexp + inbound_email.mail.to.detect { |recipient| address.match?(recipient) } + when Proc + address.call(inbound_email) + else + address.try(:match?, inbound_email) || raise(InvalidAddressError) + end + end + + def mailbox_class + "#{mailbox_name.to_s.capitalize}Mailbox".constantize + end +end |