aboutsummaryrefslogtreecommitdiffstats
path: root/lib/action_mailroom
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2018-09-28 12:19:43 -0700
committerDavid Heinemeier Hansson <david@loudthinking.com>2018-09-28 12:19:43 -0700
commit8a0a1034955544ee2e4c1f85317c0db84f3aa55b (patch)
tree1e00acdce252b2ce505ff2e8f9f5acd4ba19bbeb /lib/action_mailroom
parent5ad0813322820a6c42d7b3074531ac40108bfb69 (diff)
downloadrails-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_mailroom')
-rw-r--r--lib/action_mailroom/engine.rb14
-rw-r--r--lib/action_mailroom/mailbox.rb45
-rw-r--r--lib/action_mailroom/mailbox/callbacks.rb28
-rw-r--r--lib/action_mailroom/mailbox/routing.rb15
-rw-r--r--lib/action_mailroom/router.rb36
-rw-r--r--lib/action_mailroom/router/route.rb31
-rw-r--r--lib/action_mailroom/test_helper.rb22
-rw-r--r--lib/action_mailroom/version.rb3
8 files changed, 0 insertions, 194 deletions
diff --git a/lib/action_mailroom/engine.rb b/lib/action_mailroom/engine.rb
deleted file mode 100644
index 6a8d4c23c0..0000000000
--- a/lib/action_mailroom/engine.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require "rails/engine"
-
-module ActionMailroom
- class Engine < Rails::Engine
- isolate_namespace ActionMailroom
- config.eager_load_namespaces << ActionMailroom
-
- initializer "action_mailroom.config" do
- config.after_initialize do |app|
- # Configure
- end
- end
- end
-end
diff --git a/lib/action_mailroom/mailbox.rb b/lib/action_mailroom/mailbox.rb
deleted file mode 100644
index 936054810f..0000000000
--- a/lib/action_mailroom/mailbox.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require "active_support/rescuable"
-
-require "action_mailroom/mailbox/callbacks"
-require "action_mailroom/mailbox/routing"
-
-class ActionMailroom::Mailbox
- include ActiveSupport::Rescuable
- include Callbacks, Routing
-
- attr_reader :inbound_email
- delegate :mail, :bounced!, to: :inbound_email
-
- def self.receive(inbound_email)
- new(inbound_email).perform_processing
- end
-
- def initialize(inbound_email)
- @inbound_email = inbound_email
- end
-
- def perform_processing
- run_callbacks :process do
- track_status_of_inbound_email do
- process
- end
- end
- rescue => exception
- # TODO: Include a reference to the inbound_email in the exception raised so error handling becomes easier
- rescue_with_handler(exception) || raise
- end
-
- def process
- # Overwrite in subclasses
- end
-
- private
- def track_status_of_inbound_email
- inbound_email.processing!
- yield
- inbound_email.delivered! unless inbound_email.bounced?
- rescue => exception
- inbound_email.failed!
- raise
- end
-end
diff --git a/lib/action_mailroom/mailbox/callbacks.rb b/lib/action_mailroom/mailbox/callbacks.rb
deleted file mode 100644
index ae5a461d8f..0000000000
--- a/lib/action_mailroom/mailbox/callbacks.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require "active_support/callbacks"
-
-module ActionMailroom
- class Mailbox
- module Callbacks
- extend ActiveSupport::Concern
- include ActiveSupport::Callbacks
-
- included do
- define_callbacks :process
- end
-
- module ClassMethods
- def before_processing(*methods, &block)
- set_callback(:process, :before, *methods, &block)
- end
-
- def after_processing(*methods, &block)
- set_callback(:process, :after, *methods, &block)
- end
-
- def around_processing(*methods, &block)
- set_callback(:process, :around, *methods, &block)
- end
- end
- end
- end
-end
diff --git a/lib/action_mailroom/mailbox/routing.rb b/lib/action_mailroom/mailbox/routing.rb
deleted file mode 100644
index 9f082c8aa5..0000000000
--- a/lib/action_mailroom/mailbox/routing.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module ActionMailroom::Mailbox::Routing
- extend ActiveSupport::Concern
-
- class_methods do
- attr_reader :router
-
- def routing(routes)
- (@router ||= ActionMailroom::Router.new).add_routes(routes)
- end
-
- def route(inbound_email)
- @router.route(inbound_email)
- end
- end
-end
diff --git a/lib/action_mailroom/router.rb b/lib/action_mailroom/router.rb
deleted file mode 100644
index 29ba803e03..0000000000
--- a/lib/action_mailroom/router.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-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 = match_to_mailbox(inbound_email)
- mailbox.receive(inbound_email)
- else
- inbound_email.bounced!
-
- raise RoutingError
- end
- end
-
- private
- attr_reader :routes
-
- def match_to_mailbox(inbound_email)
- routes.detect { |route| route.match?(inbound_email) }.try(:mailbox_class)
- end
-end
-
-require "action_mailroom/router/route"
diff --git a/lib/action_mailroom/router/route.rb b/lib/action_mailroom/router/route.rb
deleted file mode 100644
index 6d0b922275..0000000000
--- a/lib/action_mailroom/router/route.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-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
- 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
diff --git a/lib/action_mailroom/test_helper.rb b/lib/action_mailroom/test_helper.rb
deleted file mode 100644
index 3e1ff87839..0000000000
--- a/lib/action_mailroom/test_helper.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require "mail"
-
-module ActionMailroom
- module TestHelper
- # Create an InboundEmail record using an eml fixture in the format of message/rfc822
- # referenced with +fixture_name+ located in +test/fixtures/files/fixture_name+.
- def create_inbound_email_from_fixture(fixture_name, status: :processing)
- create_inbound_email file_fixture(fixture_name), filename: fixture_name, status: status
- end
-
- def create_inbound_email_from_mail(status: :processing, **mail_options)
- raw_email = Tempfile.new.tap { |raw_email| raw_email.write Mail.new(mail_options).to_s }
- create_inbound_email(raw_email, status: status)
- end
-
- def create_inbound_email(io, filename: 'mail.eml', status: :processing)
- ActionMailroom::InboundEmail.create_and_extract_message_id! \
- ActionDispatch::Http::UploadedFile.new(tempfile: io, filename: filename, type: 'message/rfc822'),
- status: status
- end
- end
-end
diff --git a/lib/action_mailroom/version.rb b/lib/action_mailroom/version.rb
deleted file mode 100644
index 64a9d8eacd..0000000000
--- a/lib/action_mailroom/version.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-module ActionMailroom
- VERSION = '0.1.0'
-end