diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-28 12:19:43 -0700 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-28 12:19:43 -0700 |
commit | 8a0a1034955544ee2e4c1f85317c0db84f3aa55b (patch) | |
tree | 1e00acdce252b2ce505ff2e8f9f5acd4ba19bbeb /lib/action_mailbox/router | |
parent | 5ad0813322820a6c42d7b3074531ac40108bfb69 (diff) | |
download | rails-8a0a1034955544ee2e4c1f85317c0db84f3aa55b.tar.gz rails-8a0a1034955544ee2e4c1f85317c0db84f3aa55b.tar.bz2 rails-8a0a1034955544ee2e4c1f85317c0db84f3aa55b.zip |
ActionMailroom -> ActionMailbox
We didn't end up using the mailroom metaphor directly, so let's stick with a more conventional naming strategy.
Diffstat (limited to 'lib/action_mailbox/router')
-rw-r--r-- | lib/action_mailbox/router/route.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/action_mailbox/router/route.rb b/lib/action_mailbox/router/route.rb new file mode 100644 index 0000000000..7be4407339 --- /dev/null +++ b/lib/action_mailbox/router/route.rb @@ -0,0 +1,31 @@ +class ActionMailbox::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 + recipients_from(inbound_email.mail).include?(address) + when Regexp + recipients_from(inbound_email.mail).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 + + private + def recipients_from(mail) + Array(mail.to) + Array(mail.cc) + Array(mail.bcc) + end +end |