aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailbox/lib/action_mailbox
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-12-26 16:18:42 -0500
committerGeorge Claghorn <george@basecamp.com>2018-12-26 16:18:42 -0500
commit6c168aaffb37c62dee6c895a22e240e5552be669 (patch)
treeb081b79a1088d9bc2bad0ee9f85fd4d7e5cc3638 /actionmailbox/lib/action_mailbox
parent11a8ba12723c919397c8ccc0b4cf2e9f50da99ed (diff)
downloadrails-6c168aaffb37c62dee6c895a22e240e5552be669.tar.gz
rails-6c168aaffb37c62dee6c895a22e240e5552be669.tar.bz2
rails-6c168aaffb37c62dee6c895a22e240e5552be669.zip
Nest Action Mailbox classes in the API docs
Diffstat (limited to 'actionmailbox/lib/action_mailbox')
-rw-r--r--actionmailbox/lib/action_mailbox/mail_ext/address_equality.rb8
-rw-r--r--actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb8
-rw-r--r--actionmailbox/lib/action_mailbox/mail_ext/addresses.rb38
-rw-r--r--actionmailbox/lib/action_mailbox/mail_ext/recipients.rb8
-rw-r--r--actionmailbox/lib/action_mailbox/router.rb56
-rw-r--r--actionmailbox/lib/action_mailbox/router/route.rb62
6 files changed, 96 insertions, 84 deletions
diff --git a/actionmailbox/lib/action_mailbox/mail_ext/address_equality.rb b/actionmailbox/lib/action_mailbox/mail_ext/address_equality.rb
index 69243a666e..39a43b3468 100644
--- a/actionmailbox/lib/action_mailbox/mail_ext/address_equality.rb
+++ b/actionmailbox/lib/action_mailbox/mail_ext/address_equality.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
-class Mail::Address
- def ==(other_address)
- other_address.is_a?(Mail::Address) && to_s == other_address.to_s
+module Mail
+ class Address
+ def ==(other_address)
+ other_address.is_a?(Mail::Address) && to_s == other_address.to_s
+ end
end
end
diff --git a/actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb b/actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb
index fcdfbb6f6f..19eb624c1c 100644
--- a/actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb
+++ b/actionmailbox/lib/action_mailbox/mail_ext/address_wrapping.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
-class Mail::Address
- def self.wrap(address)
- address.is_a?(Mail::Address) ? address : Mail::Address.new(address)
+module Mail
+ class Address
+ def self.wrap(address)
+ address.is_a?(Mail::Address) ? address : Mail::Address.new(address)
+ end
end
end
diff --git a/actionmailbox/lib/action_mailbox/mail_ext/addresses.rb b/actionmailbox/lib/action_mailbox/mail_ext/addresses.rb
index 377373bee6..5eab1feb3d 100644
--- a/actionmailbox/lib/action_mailbox/mail_ext/addresses.rb
+++ b/actionmailbox/lib/action_mailbox/mail_ext/addresses.rb
@@ -1,27 +1,29 @@
# frozen_string_literal: true
-class Mail::Message
- def from_address
- header[:from]&.address_list&.addresses&.first
- end
+module Mail
+ class Message
+ def from_address
+ header[:from]&.address_list&.addresses&.first
+ end
- def recipients_addresses
- to_addresses + cc_addresses + bcc_addresses + x_original_to_addresses
- end
+ def recipients_addresses
+ to_addresses + cc_addresses + bcc_addresses + x_original_to_addresses
+ end
- def to_addresses
- Array(header[:to]&.address_list&.addresses)
- end
+ def to_addresses
+ Array(header[:to]&.address_list&.addresses)
+ end
- def cc_addresses
- Array(header[:cc]&.address_list&.addresses)
- end
+ def cc_addresses
+ Array(header[:cc]&.address_list&.addresses)
+ end
- def bcc_addresses
- Array(header[:bcc]&.address_list&.addresses)
- end
+ def bcc_addresses
+ Array(header[:bcc]&.address_list&.addresses)
+ end
- def x_original_to_addresses
- Array(header[:x_original_to]).collect { |header| Mail::Address.new header.to_s }
+ def x_original_to_addresses
+ Array(header[:x_original_to]).collect { |header| Mail::Address.new header.to_s }
+ end
end
end
diff --git a/actionmailbox/lib/action_mailbox/mail_ext/recipients.rb b/actionmailbox/lib/action_mailbox/mail_ext/recipients.rb
index a8ac42d602..1f8a713218 100644
--- a/actionmailbox/lib/action_mailbox/mail_ext/recipients.rb
+++ b/actionmailbox/lib/action_mailbox/mail_ext/recipients.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
-class Mail::Message
- def recipients
- Array(to) + Array(cc) + Array(bcc) + Array(header[:x_original_to]).map(&:to_s)
+module Mail
+ class Message
+ def recipients
+ Array(to) + Array(cc) + Array(bcc) + Array(header[:x_original_to]).map(&:to_s)
+ end
end
end
diff --git a/actionmailbox/lib/action_mailbox/router.rb b/actionmailbox/lib/action_mailbox/router.rb
index 0f041a8389..71370e409d 100644
--- a/actionmailbox/lib/action_mailbox/router.rb
+++ b/actionmailbox/lib/action_mailbox/router.rb
@@ -1,40 +1,42 @@
# frozen_string_literal: true
-# Encapsulates the routes that live on the ApplicationMailbox and performs the actual routing when
-# an inbound_email is received.
-class ActionMailbox::Router
- class RoutingError < StandardError; end
-
- def initialize
- @routes = []
- end
+module ActionMailbox
+ # Encapsulates the routes that live on the ApplicationMailbox and performs the actual routing when
+ # an inbound_email is received.
+ class 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
+ def add_routes(routes)
+ routes.each do |(address, mailbox_name)|
+ add_route address, to: mailbox_name
+ end
end
- end
- def add_route(address, to:)
- routes.append Route.new(address, to: to)
- end
+ def add_route(address, to:)
+ routes.append Route.new(address, to: to)
+ end
- def route(inbound_email)
- if mailbox = match_to_mailbox(inbound_email)
- mailbox.receive(inbound_email)
- else
- inbound_email.bounced!
+ def route(inbound_email)
+ if mailbox = match_to_mailbox(inbound_email)
+ mailbox.receive(inbound_email)
+ else
+ inbound_email.bounced!
- raise RoutingError
+ raise RoutingError
+ end
end
- end
- private
- attr_reader :routes
+ private
+ attr_reader :routes
- def match_to_mailbox(inbound_email)
- routes.detect { |route| route.match?(inbound_email) }.try(:mailbox_class)
- end
+ def match_to_mailbox(inbound_email)
+ routes.detect { |route| route.match?(inbound_email) }.try(:mailbox_class)
+ end
+ end
end
require "action_mailbox/router/route"
diff --git a/actionmailbox/lib/action_mailbox/router/route.rb b/actionmailbox/lib/action_mailbox/router/route.rb
index adb9f94c1a..b681eb7ea8 100644
--- a/actionmailbox/lib/action_mailbox/router/route.rb
+++ b/actionmailbox/lib/action_mailbox/router/route.rb
@@ -1,40 +1,42 @@
# frozen_string_literal: true
-# Encapsulates a route, which can then be matched against an inbound_email and provide a lookup of the matching
-# mailbox class. See examples for the different route addresses and how to use them in the `ActionMailbox::Base`
-# documentation.
-class ActionMailbox::Router::Route
- attr_reader :address, :mailbox_name
+module ActionMailbox
+ # Encapsulates a route, which can then be matched against an inbound_email and provide a lookup of the matching
+ # mailbox class. See examples for the different route addresses and how to use them in the `ActionMailbox::Base`
+ # documentation.
+ class Router::Route
+ attr_reader :address, :mailbox_name
- def initialize(address, to:)
- @address, @mailbox_name = address, to
+ def initialize(address, to:)
+ @address, @mailbox_name = address, to
- ensure_valid_address
- end
+ ensure_valid_address
+ end
- def match?(inbound_email)
- case address
- when :all
- true
- when String
- inbound_email.mail.recipients.any? { |recipient| address.casecmp?(recipient) }
- when Regexp
- inbound_email.mail.recipients.any? { |recipient| address.match?(recipient) }
- when Proc
- address.call(inbound_email)
- else
- address.match?(inbound_email)
+ def match?(inbound_email)
+ case address
+ when :all
+ true
+ when String
+ inbound_email.mail.recipients.any? { |recipient| address.casecmp?(recipient) }
+ when Regexp
+ inbound_email.mail.recipients.any? { |recipient| address.match?(recipient) }
+ when Proc
+ address.call(inbound_email)
+ else
+ address.match?(inbound_email)
+ end
end
- end
- def mailbox_class
- "#{mailbox_name.to_s.camelize}Mailbox".constantize
- end
+ def mailbox_class
+ "#{mailbox_name.to_s.camelize}Mailbox".constantize
+ end
- private
- def ensure_valid_address
- unless [ Symbol, String, Regexp, Proc ].any? { |klass| address.is_a?(klass) } || address.respond_to?(:match?)
- raise ArgumentError, "Expected a Symbol, String, Regexp, Proc, or matchable, got #{address.inspect}"
+ private
+ def ensure_valid_address
+ unless [ Symbol, String, Regexp, Proc ].any? { |klass| address.is_a?(klass) } || address.respond_to?(:match?)
+ raise ArgumentError, "Expected a Symbol, String, Regexp, Proc, or matchable, got #{address.inspect}"
+ end
end
- end
+ end
end