From 8a0a1034955544ee2e4c1f85317c0db84f3aa55b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 28 Sep 2018 12:19:43 -0700 Subject: ActionMailroom -> ActionMailbox We didn't end up using the mailroom metaphor directly, so let's stick with a more conventional naming strategy. --- lib/action_mailroom/engine.rb | 14 ---------- lib/action_mailroom/mailbox.rb | 45 -------------------------------- lib/action_mailroom/mailbox/callbacks.rb | 28 -------------------- lib/action_mailroom/mailbox/routing.rb | 15 ----------- lib/action_mailroom/router.rb | 36 ------------------------- lib/action_mailroom/router/route.rb | 31 ---------------------- lib/action_mailroom/test_helper.rb | 22 ---------------- lib/action_mailroom/version.rb | 3 --- 8 files changed, 194 deletions(-) delete mode 100644 lib/action_mailroom/engine.rb delete mode 100644 lib/action_mailroom/mailbox.rb delete mode 100644 lib/action_mailroom/mailbox/callbacks.rb delete mode 100644 lib/action_mailroom/mailbox/routing.rb delete mode 100644 lib/action_mailroom/router.rb delete mode 100644 lib/action_mailroom/router/route.rb delete mode 100644 lib/action_mailroom/test_helper.rb delete mode 100644 lib/action_mailroom/version.rb (limited to 'lib/action_mailroom') 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 -- cgit v1.2.3