From 6c168aaffb37c62dee6c895a22e240e5552be669 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Wed, 26 Dec 2018 16:18:42 -0500 Subject: Nest Action Mailbox classes in the API docs --- .../action_mailbox/mail_ext/address_equality.rb | 8 +-- .../action_mailbox/mail_ext/address_wrapping.rb | 8 +-- .../lib/action_mailbox/mail_ext/addresses.rb | 38 ++++++------- .../lib/action_mailbox/mail_ext/recipients.rb | 8 +-- actionmailbox/lib/action_mailbox/router.rb | 56 +++++++++---------- actionmailbox/lib/action_mailbox/router/route.rb | 62 +++++++++++----------- 6 files changed, 96 insertions(+), 84 deletions(-) (limited to 'actionmailbox/lib/action_mailbox') 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 -- cgit v1.2.3