diff options
-rw-r--r-- | Gemfile.lock | 4 | ||||
-rw-r--r-- | actionmailbox.gemspec (renamed from actionmailroom.gemspec) | 8 | ||||
-rw-r--r-- | app/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/controllers/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/controllers/action_mailbox/inbound_emails_controller.rb (renamed from app/controllers/action_mailroom/inbound_emails_controller.rb) | 4 | ||||
-rw-r--r-- | app/controllers/rails/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb (renamed from app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb) | 8 | ||||
-rw-r--r-- | app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb (renamed from app/controllers/rails/conductor/action_mailroom/reroutes_controller.rb) | 4 | ||||
-rw-r--r-- | app/jobs/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/jobs/action_mailbox/inbound_email/incineration_job.rb | 11 | ||||
-rw-r--r-- | app/jobs/action_mailbox/routing_job.rb | 7 | ||||
-rw-r--r-- | app/jobs/action_mailroom/inbound_email/incineration_job.rb | 11 | ||||
-rw-r--r-- | app/jobs/action_mailroom/routing_job.rb | 7 | ||||
-rw-r--r-- | app/models/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/models/action_mailbox/inbound_email.rb (renamed from app/models/action_mailroom/inbound_email.rb) | 4 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/incineratable.rb (renamed from app/models/action_mailroom/inbound_email/incineratable.rb) | 4 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/incineratable/incineration.rb (renamed from app/models/action_mailroom/inbound_email/incineratable/incineration.rb) | 4 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/message_id.rb (renamed from app/models/action_mailroom/inbound_email/message_id.rb) | 2 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/routable.rb (renamed from app/models/action_mailroom/inbound_email/routable.rb) | 4 | ||||
-rw-r--r-- | app/views/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/views/layouts/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/views/rails/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/views/rails/conductor/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb (renamed from app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb) | 0 | ||||
-rw-r--r-- | app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb (renamed from app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb) | 0 | ||||
-rw-r--r-- | app/views/rails/conductor/action_mailbox/inbound_emails/show.html.erb (renamed from app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb) | 0 | ||||
-rw-r--r-- | config/routes.rb | 4 | ||||
-rw-r--r-- | db/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | db/migrate/20180917164000_create_action_mailbox_tables.rb (renamed from db/migrate/20180917164000_create_action_mailroom_tables.rb) | 4 | ||||
-rw-r--r-- | lib/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | lib/action_mailbox.rb | 10 | ||||
-rw-r--r-- | lib/action_mailbox/base.rb (renamed from lib/action_mailroom/mailbox.rb) | 8 | ||||
-rw-r--r-- | lib/action_mailbox/callbacks.rb | 26 | ||||
-rw-r--r-- | lib/action_mailbox/engine.rb | 14 | ||||
-rw-r--r-- | lib/action_mailbox/router.rb (renamed from lib/action_mailroom/router.rb) | 4 | ||||
-rw-r--r-- | lib/action_mailbox/router/route.rb (renamed from lib/action_mailroom/router/route.rb) | 2 | ||||
-rw-r--r-- | lib/action_mailbox/routing.rb | 17 | ||||
-rw-r--r-- | lib/action_mailbox/test_helper.rb (renamed from lib/action_mailroom/test_helper.rb) | 4 | ||||
-rw-r--r-- | lib/action_mailbox/version.rb (renamed from lib/action_mailroom/version.rb) | 2 | ||||
-rw-r--r-- | lib/action_mailroom.rb | 8 | ||||
-rw-r--r-- | lib/action_mailroom/engine.rb | 14 | ||||
-rw-r--r-- | lib/action_mailroom/mailbox/callbacks.rb | 28 | ||||
-rw-r--r-- | lib/action_mailroom/mailbox/routing.rb | 15 | ||||
-rw-r--r-- | lib/tasks/action_mailbox.rake (renamed from lib/tasks/action_mailroom.rake) | 8 | ||||
-rw-r--r-- | test/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | test/dummy/app/mailboxes/application_mailbox.rb | 2 | ||||
-rw-r--r-- | test/dummy/config/application.rb | 2 | ||||
-rw-r--r-- | test/dummy/db/development.sqlite3 | bin | 49152 -> 0 bytes | |||
-rw-r--r-- | test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb | 4 | ||||
-rw-r--r-- | test/dummy/db/schema.rb | 2 | ||||
-rw-r--r-- | test/test_helper.rb | 4 | ||||
-rw-r--r-- | test/unit/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | test/unit/controller_test.rb | 8 | ||||
-rw-r--r-- | test/unit/inbound_email/incineration_test.rb | 4 | ||||
-rw-r--r-- | test/unit/inbound_email/message_id_test.rb | 2 | ||||
-rw-r--r-- | test/unit/inbound_email_test.rb | 2 | ||||
-rw-r--r-- | test/unit/mailbox/callbacks_test.rb | 4 | ||||
-rw-r--r-- | test/unit/mailbox/routing_test.rb | 8 | ||||
-rw-r--r-- | test/unit/mailbox/state_test.rb | 8 | ||||
-rw-r--r-- | test/unit/router_test.rb | 10 |
60 files changed, 156 insertions, 154 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 0ceac134ff..b3f3ab1f70 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - actionmailroom (0.1.0) + actionmailbox (0.1.0) rails (>= 5.2.0) GEM @@ -121,7 +121,7 @@ PLATFORMS ruby DEPENDENCIES - actionmailroom! + actionmailbox! bundler (~> 1.15) byebug sqlite3 diff --git a/actionmailroom.gemspec b/actionmailbox.gemspec index 217904d62f..e413ac57f6 100644 --- a/actionmailroom.gemspec +++ b/actionmailbox.gemspec @@ -1,16 +1,16 @@ $:.push File.expand_path("lib", __dir__) # Maintain your gem's version: -require "action_mailroom/version" +require "action_mailbox/version" # Describe your gem and declare its dependencies: Gem::Specification.new do |s| - s.name = "actionmailroom" - s.version = ActionMailroom::VERSION + s.name = "actionmailbox" + s.version = ActionMailbox::VERSION s.authors = ["Jeremy Daer", "David Heinemeier Hansson"] s.email = ["jeremy@basecamp.com", "david@loudthinking.com"] s.summary = "Receive and process incoming emails in Rails" - s.homepage = "https://github.com/basecamp/actionmailroom" + s.homepage = "https://github.com/basecamp/actionmailbox" s.license = "MIT" s.required_ruby_version = ">= 2.5.0" diff --git a/app/.DS_Store b/app/.DS_Store Binary files differnew file mode 100644 index 0000000000..6719b65737 --- /dev/null +++ b/app/.DS_Store diff --git a/app/controllers/.DS_Store b/app/controllers/.DS_Store Binary files differnew file mode 100644 index 0000000000..ea1205963a --- /dev/null +++ b/app/controllers/.DS_Store diff --git a/app/controllers/action_mailroom/inbound_emails_controller.rb b/app/controllers/action_mailbox/inbound_emails_controller.rb index 57e0530ac6..ec9bd6f229 100644 --- a/app/controllers/action_mailroom/inbound_emails_controller.rb +++ b/app/controllers/action_mailbox/inbound_emails_controller.rb @@ -1,12 +1,12 @@ # TODO: Add access protection using basic auth with verified tokens. Maybe coming from credentials by default? # TODO: Spam/malware catching? # TODO: Specific bounces for SMTP good citizenship: 200/404/400 -class ActionMailroom::InboundEmailsController < ActionController::Base +class ActionMailbox::InboundEmailsController < ActionController::Base skip_forgery_protection before_action :require_rfc822_message, only: :create def create - ActionMailroom::InboundEmail.create_and_extract_message_id!(params[:message]) + ActionMailbox::InboundEmail.create_and_extract_message_id!(params[:message]) head :created end diff --git a/app/controllers/rails/.DS_Store b/app/controllers/rails/.DS_Store Binary files differnew file mode 100644 index 0000000000..627263b12d --- /dev/null +++ b/app/controllers/rails/.DS_Store diff --git a/app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb b/app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb index a5a1f34929..70537da9c4 100644 --- a/app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb +++ b/app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb @@ -1,13 +1,13 @@ -class Rails::Conductor::ActionMailroom::InboundEmailsController < Rails::Conductor::BaseController +class Rails::Conductor::ActionMailbox::InboundEmailsController < Rails::Conductor::BaseController def index - @inbound_emails = ActionMailroom::InboundEmail.order(created_at: :desc) + @inbound_emails = ActionMailbox::InboundEmail.order(created_at: :desc) end def new end def show - @inbound_email = ActionMailroom::InboundEmail.find(params[:id]) + @inbound_email = ActionMailbox::InboundEmail.find(params[:id]) end def create @@ -21,7 +21,7 @@ class Rails::Conductor::ActionMailroom::InboundEmailsController < Rails::Conduct end def create_inbound_email(mail) - ActionMailroom::InboundEmail.create! raw_email: \ + ActionMailbox::InboundEmail.create! raw_email: \ { io: StringIO.new(mail.to_s), filename: 'inbound.eml', content_type: 'message/rfc822', identify: false } end end diff --git a/app/controllers/rails/conductor/action_mailroom/reroutes_controller.rb b/app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb index 028ed9e2d6..226116a3d6 100644 --- a/app/controllers/rails/conductor/action_mailroom/reroutes_controller.rb +++ b/app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb @@ -1,6 +1,6 @@ -class Rails::Conductor::ActionMailroom::ReroutesController < Rails::Conductor::BaseController +class Rails::Conductor::ActionMailbox::ReroutesController < Rails::Conductor::BaseController def create - inbound_email = ActionMailroom::InboundEmail.find(params[:inbound_email_id]) + inbound_email = ActionMailbox::InboundEmail.find(params[:inbound_email_id]) reroute inbound_email redirect_to main_app.rails_conductor_inbound_email_url(inbound_email) diff --git a/app/jobs/.DS_Store b/app/jobs/.DS_Store Binary files differnew file mode 100644 index 0000000000..4f6e8d17e4 --- /dev/null +++ b/app/jobs/.DS_Store diff --git a/app/jobs/action_mailbox/inbound_email/incineration_job.rb b/app/jobs/action_mailbox/inbound_email/incineration_job.rb new file mode 100644 index 0000000000..a2911efef1 --- /dev/null +++ b/app/jobs/action_mailbox/inbound_email/incineration_job.rb @@ -0,0 +1,11 @@ +class ActionMailbox::InboundEmail::IncinerationJob < ApplicationJob + queue_as :action_mailbox_incineration + + def self.schedule(inbound_email) + set(wait: ActionMailbox::InboundEmail::Incineratable::INCINERATABLE_AFTER).perform_later(inbound_email) + end + + def perform(inbound_email) + inbound_email.incinerate + end +end diff --git a/app/jobs/action_mailbox/routing_job.rb b/app/jobs/action_mailbox/routing_job.rb new file mode 100644 index 0000000000..a2618bb8aa --- /dev/null +++ b/app/jobs/action_mailbox/routing_job.rb @@ -0,0 +1,7 @@ +class ActionMailbox::RoutingJob < ActiveJob::Base + queue_as :action_mailbox_routing + + def perform(inbound_email) + ApplicationMailbox.route inbound_email + end +end diff --git a/app/jobs/action_mailroom/inbound_email/incineration_job.rb b/app/jobs/action_mailroom/inbound_email/incineration_job.rb deleted file mode 100644 index fa1d346008..0000000000 --- a/app/jobs/action_mailroom/inbound_email/incineration_job.rb +++ /dev/null @@ -1,11 +0,0 @@ -class ActionMailroom::InboundEmail::IncinerationJob < ApplicationJob - queue_as :action_mailroom_incineration - - def self.schedule(inbound_email) - set(wait: ActionMailroom::InboundEmail::Incineratable::INCINERATABLE_AFTER).perform_later(inbound_email) - end - - def perform(inbound_email) - inbound_email.incinerate - end -end diff --git a/app/jobs/action_mailroom/routing_job.rb b/app/jobs/action_mailroom/routing_job.rb deleted file mode 100644 index 85a3c7ab00..0000000000 --- a/app/jobs/action_mailroom/routing_job.rb +++ /dev/null @@ -1,7 +0,0 @@ -class ActionMailroom::RoutingJob < ActiveJob::Base - queue_as :action_mailroom_routing - - def perform(inbound_email) - ApplicationMailbox.route inbound_email - end -end diff --git a/app/models/.DS_Store b/app/models/.DS_Store Binary files differnew file mode 100644 index 0000000000..4f6e8d17e4 --- /dev/null +++ b/app/models/.DS_Store diff --git a/app/models/action_mailroom/inbound_email.rb b/app/models/action_mailbox/inbound_email.rb index cf7370d543..f2589d7429 100644 --- a/app/models/action_mailroom/inbound_email.rb +++ b/app/models/action_mailbox/inbound_email.rb @@ -1,7 +1,7 @@ require "mail" -class ActionMailroom::InboundEmail < ActiveRecord::Base - self.table_name = "action_mailroom_inbound_emails" +class ActionMailbox::InboundEmail < ActiveRecord::Base + self.table_name = "action_mailbox_inbound_emails" include Incineratable, MessageId, Routable diff --git a/app/models/action_mailroom/inbound_email/incineratable.rb b/app/models/action_mailbox/inbound_email/incineratable.rb index 83ccec89ba..6ba73c0c6d 100644 --- a/app/models/action_mailroom/inbound_email/incineratable.rb +++ b/app/models/action_mailbox/inbound_email/incineratable.rb @@ -1,4 +1,4 @@ -module ActionMailroom::InboundEmail::Incineratable +module ActionMailbox::InboundEmail::Incineratable extend ActiveSupport::Concern # TODO: Extract into framework configuration @@ -26,6 +26,6 @@ module ActionMailroom::InboundEmail::Incineratable end def incinerate_later - ActionMailroom::InboundEmail::IncinerationJob.schedule(self) + ActionMailbox::InboundEmail::IncinerationJob.schedule(self) end end diff --git a/app/models/action_mailroom/inbound_email/incineratable/incineration.rb b/app/models/action_mailbox/inbound_email/incineratable/incineration.rb index 8b88c1fc5b..bd2bf7d91e 100644 --- a/app/models/action_mailroom/inbound_email/incineratable/incineration.rb +++ b/app/models/action_mailbox/inbound_email/incineratable/incineration.rb @@ -1,4 +1,4 @@ -class ActionMailroom::InboundEmail::Incineratable::Incineration +class ActionMailbox::InboundEmail::Incineratable::Incineration def initialize(inbound_email) @inbound_email = inbound_email end @@ -9,7 +9,7 @@ class ActionMailroom::InboundEmail::Incineratable::Incineration private def due? - @inbound_email.updated_at < ActionMailroom::InboundEmail::Incineratable::INCINERATABLE_AFTER.ago.end_of_day + @inbound_email.updated_at < ActionMailbox::InboundEmail::Incineratable::INCINERATABLE_AFTER.ago.end_of_day end def processed? diff --git a/app/models/action_mailroom/inbound_email/message_id.rb b/app/models/action_mailbox/inbound_email/message_id.rb index 6bdda8c1c7..590dbfc4d7 100644 --- a/app/models/action_mailroom/inbound_email/message_id.rb +++ b/app/models/action_mailbox/inbound_email/message_id.rb @@ -1,4 +1,4 @@ -module ActionMailroom::InboundEmail::MessageId +module ActionMailbox::InboundEmail::MessageId extend ActiveSupport::Concern included do diff --git a/app/models/action_mailroom/inbound_email/routable.rb b/app/models/action_mailbox/inbound_email/routable.rb index 5075db326e..1928f9e387 100644 --- a/app/models/action_mailroom/inbound_email/routable.rb +++ b/app/models/action_mailbox/inbound_email/routable.rb @@ -1,4 +1,4 @@ -module ActionMailroom::InboundEmail::Routable +module ActionMailbox::InboundEmail::Routable extend ActiveSupport::Concern included do @@ -6,6 +6,6 @@ module ActionMailroom::InboundEmail::Routable end def route_later - ActionMailroom::RoutingJob.perform_later self + ActionMailbox::RoutingJob.perform_later self end end diff --git a/app/views/.DS_Store b/app/views/.DS_Store Binary files differnew file mode 100644 index 0000000000..bedd266c7a --- /dev/null +++ b/app/views/.DS_Store diff --git a/app/views/layouts/.DS_Store b/app/views/layouts/.DS_Store Binary files differnew file mode 100644 index 0000000000..5de81d0983 --- /dev/null +++ b/app/views/layouts/.DS_Store diff --git a/app/views/rails/.DS_Store b/app/views/rails/.DS_Store Binary files differnew file mode 100644 index 0000000000..627263b12d --- /dev/null +++ b/app/views/rails/.DS_Store diff --git a/app/views/rails/conductor/.DS_Store b/app/views/rails/conductor/.DS_Store Binary files differnew file mode 100644 index 0000000000..4f6e8d17e4 --- /dev/null +++ b/app/views/rails/conductor/.DS_Store diff --git a/app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb b/app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb index 19c53984e2..19c53984e2 100644 --- a/app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb +++ b/app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb diff --git a/app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb b/app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb index be989ff0bc..be989ff0bc 100644 --- a/app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb +++ b/app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb diff --git a/app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb b/app/views/rails/conductor/action_mailbox/inbound_emails/show.html.erb index e761904196..e761904196 100644 --- a/app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb +++ b/app/views/rails/conductor/action_mailbox/inbound_emails/show.html.erb diff --git a/config/routes.rb b/config/routes.rb index b44ddf648a..733f137262 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true Rails.application.routes.draw do - post "/rails/action_mailroom/inbound_emails" => "action_mailroom/inbound_emails#create", as: :rails_inbound_emails + post "/rails/action_mailbox/inbound_emails" => "action_mailbox/inbound_emails#create", as: :rails_inbound_emails # TODO: Should these be mounted within the engine only? - scope "rails/conductor/action_mailroom/", module: "rails/conductor/action_mailroom" do + scope "rails/conductor/action_mailbox/", module: "rails/conductor/action_mailbox" do resources :inbound_emails, as: :rails_conductor_inbound_emails post ":inbound_email_id/reroute" => "reroutes#create", as: :rails_conductor_inbound_email_reroute end diff --git a/db/.DS_Store b/db/.DS_Store Binary files differnew file mode 100644 index 0000000000..ef5ba06993 --- /dev/null +++ b/db/.DS_Store diff --git a/db/migrate/20180917164000_create_action_mailroom_tables.rb b/db/migrate/20180917164000_create_action_mailbox_tables.rb index cea05a6437..85e19bc3c6 100644 --- a/db/migrate/20180917164000_create_action_mailroom_tables.rb +++ b/db/migrate/20180917164000_create_action_mailbox_tables.rb @@ -1,6 +1,6 @@ -class CreateActionMailroomTables < ActiveRecord::Migration[5.2] +class CreateActionMailboxTables < ActiveRecord::Migration[5.2] def change - create_table :action_mailroom_inbound_emails do |t| + create_table :action_mailbox_inbound_emails do |t| t.integer :status, default: 0, null: false t.string :message_id diff --git a/lib/.DS_Store b/lib/.DS_Store Binary files differnew file mode 100644 index 0000000000..4bb82d51a5 --- /dev/null +++ b/lib/.DS_Store diff --git a/lib/action_mailbox.rb b/lib/action_mailbox.rb new file mode 100644 index 0000000000..f638dc3f80 --- /dev/null +++ b/lib/action_mailbox.rb @@ -0,0 +1,10 @@ +require "action_mailbox/engine" + +module ActionMailbox + extend ActiveSupport::Autoload + + autoload :Base + autoload :Router + autoload :Callbacks + autoload :Routing +end diff --git a/lib/action_mailroom/mailbox.rb b/lib/action_mailbox/base.rb index 936054810f..476c343415 100644 --- a/lib/action_mailroom/mailbox.rb +++ b/lib/action_mailbox/base.rb @@ -1,11 +1,11 @@ require "active_support/rescuable" -require "action_mailroom/mailbox/callbacks" -require "action_mailroom/mailbox/routing" +require "action_mailbox/callbacks" +require "action_mailbox/routing" -class ActionMailroom::Mailbox +class ActionMailbox::Base include ActiveSupport::Rescuable - include Callbacks, Routing + include ActionMailbox::Callbacks, ActionMailbox::Routing attr_reader :inbound_email delegate :mail, :bounced!, to: :inbound_email diff --git a/lib/action_mailbox/callbacks.rb b/lib/action_mailbox/callbacks.rb new file mode 100644 index 0000000000..33caaafd2a --- /dev/null +++ b/lib/action_mailbox/callbacks.rb @@ -0,0 +1,26 @@ +require "active_support/callbacks" + +module ActionMailbox + 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 diff --git a/lib/action_mailbox/engine.rb b/lib/action_mailbox/engine.rb new file mode 100644 index 0000000000..92852a0fa3 --- /dev/null +++ b/lib/action_mailbox/engine.rb @@ -0,0 +1,14 @@ +require "rails/engine" + +module ActionMailbox + class Engine < Rails::Engine + isolate_namespace ActionMailbox + config.eager_load_namespaces << ActionMailbox + + initializer "action_mailbox.config" do + config.after_initialize do |app| + # Configure + end + end + end +end diff --git a/lib/action_mailroom/router.rb b/lib/action_mailbox/router.rb index 29ba803e03..8ba3ad0bae 100644 --- a/lib/action_mailroom/router.rb +++ b/lib/action_mailbox/router.rb @@ -1,4 +1,4 @@ -class ActionMailroom::Router +class ActionMailbox::Router class RoutingError < StandardError; end def initialize @@ -33,4 +33,4 @@ class ActionMailroom::Router end end -require "action_mailroom/router/route" +require "action_mailbox/router/route" diff --git a/lib/action_mailroom/router/route.rb b/lib/action_mailbox/router/route.rb index 6d0b922275..7be4407339 100644 --- a/lib/action_mailroom/router/route.rb +++ b/lib/action_mailbox/router/route.rb @@ -1,4 +1,4 @@ -class ActionMailroom::Router::Route +class ActionMailbox::Router::Route class InvalidAddressError < StandardError; end attr_reader :address, :mailbox_name diff --git a/lib/action_mailbox/routing.rb b/lib/action_mailbox/routing.rb new file mode 100644 index 0000000000..b40e2774e4 --- /dev/null +++ b/lib/action_mailbox/routing.rb @@ -0,0 +1,17 @@ +module ActionMailbox + module Routing + extend ActiveSupport::Concern + + class_methods do + attr_reader :router + + def routing(routes) + (@router ||= ActionMailbox::Router.new).add_routes(routes) + end + + def route(inbound_email) + @router.route(inbound_email) + end + end + end +end diff --git a/lib/action_mailroom/test_helper.rb b/lib/action_mailbox/test_helper.rb index 3e1ff87839..65a15a1281 100644 --- a/lib/action_mailroom/test_helper.rb +++ b/lib/action_mailbox/test_helper.rb @@ -1,6 +1,6 @@ require "mail" -module ActionMailroom +module ActionMailbox 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+. @@ -14,7 +14,7 @@ module ActionMailroom end def create_inbound_email(io, filename: 'mail.eml', status: :processing) - ActionMailroom::InboundEmail.create_and_extract_message_id! \ + ActionMailbox::InboundEmail.create_and_extract_message_id! \ ActionDispatch::Http::UploadedFile.new(tempfile: io, filename: filename, type: 'message/rfc822'), status: status end diff --git a/lib/action_mailroom/version.rb b/lib/action_mailbox/version.rb index 64a9d8eacd..23c615dbbd 100644 --- a/lib/action_mailroom/version.rb +++ b/lib/action_mailbox/version.rb @@ -1,3 +1,3 @@ -module ActionMailroom +module ActionMailbox VERSION = '0.1.0' end diff --git a/lib/action_mailroom.rb b/lib/action_mailroom.rb deleted file mode 100644 index e50d1c4ebe..0000000000 --- a/lib/action_mailroom.rb +++ /dev/null @@ -1,8 +0,0 @@ -require "action_mailroom/engine" - -module ActionMailroom - extend ActiveSupport::Autoload - - autoload :Mailbox - autoload :Router -end 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/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/tasks/action_mailroom.rake b/lib/tasks/action_mailbox.rake index 5c929af119..b7c11934f8 100644 --- a/lib/tasks/action_mailroom.rake +++ b/lib/tasks/action_mailbox.rake @@ -1,6 +1,6 @@ # frozen_string_literal: true -namespace :action_mailroom do +namespace :action_mailbox do # Prevent migration installation task from showing up twice. Rake::Task["install:migrations"].clear_comments @@ -8,10 +8,10 @@ namespace :action_mailroom do task install: %w( environment copy_migration active_storage:install ) task :copy_migration do - if Rake::Task.task_defined?("action_mailroom:install:migrations") - Rake::Task["action_mailroom:install:migrations"].invoke + if Rake::Task.task_defined?("action_mailbox:install:migrations") + Rake::Task["action_mailbox:install:migrations"].invoke else - Rake::Task["app:action_mailroom:install:migrations"].invoke + Rake::Task["app:action_mailbox:install:migrations"].invoke end end end diff --git a/test/.DS_Store b/test/.DS_Store Binary files differnew file mode 100644 index 0000000000..4baab2932c --- /dev/null +++ b/test/.DS_Store diff --git a/test/dummy/app/mailboxes/application_mailbox.rb b/test/dummy/app/mailboxes/application_mailbox.rb index 3ea37aaf8f..47fb2017d6 100644 --- a/test/dummy/app/mailboxes/application_mailbox.rb +++ b/test/dummy/app/mailboxes/application_mailbox.rb @@ -1,2 +1,2 @@ -class ApplicationMailbox < ActionMailroom::Mailbox +class ApplicationMailbox < ActionMailbox::Base end diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index dc57837cde..5018690331 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -3,7 +3,7 @@ require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups) -require "action_mailroom" +require "action_mailbox" module Dummy class Application < Rails::Application diff --git a/test/dummy/db/development.sqlite3 b/test/dummy/db/development.sqlite3 Binary files differdeleted file mode 100644 index 8bd6b8dec3..0000000000 --- a/test/dummy/db/development.sqlite3 +++ /dev/null diff --git a/test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb b/test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb index cea05a6437..85e19bc3c6 100644 --- a/test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb +++ b/test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb @@ -1,6 +1,6 @@ -class CreateActionMailroomTables < ActiveRecord::Migration[5.2] +class CreateActionMailboxTables < ActiveRecord::Migration[5.2] def change - create_table :action_mailroom_inbound_emails do |t| + create_table :action_mailbox_inbound_emails do |t| t.integer :status, default: 0, null: false t.string :message_id diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb index 339a6b2afd..6cfe7de765 100644 --- a/test/dummy/db/schema.rb +++ b/test/dummy/db/schema.rb @@ -12,7 +12,7 @@ ActiveRecord::Schema.define(version: 2018_02_12_164506) do - create_table "action_mailroom_inbound_emails", force: :cascade do |t| + create_table "action_mailbox_inbound_emails", force: :cascade do |t| t.integer "status", default: 0, null: false t.string "message_id" t.datetime "created_at", precision: 6 diff --git a/test/test_helper.rb b/test/test_helper.rb index 50ddc85463..b042cfb679 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -22,10 +22,10 @@ if ActiveSupport::TestCase.respond_to?(:fixture_path=) ActiveSupport::TestCase.fixtures :all end -require "action_mailroom/test_helper" +require "action_mailbox/test_helper" class ActiveSupport::TestCase - include ActionMailroom::TestHelper, ActiveJob::TestHelper + include ActionMailbox::TestHelper, ActiveJob::TestHelper end if ARGV.include?("-v") diff --git a/test/unit/.DS_Store b/test/unit/.DS_Store Binary files differnew file mode 100644 index 0000000000..69403a911f --- /dev/null +++ b/test/unit/.DS_Store diff --git a/test/unit/controller_test.rb b/test/unit/controller_test.rb index f2a49f415f..508e561244 100644 --- a/test/unit/controller_test.rb +++ b/test/unit/controller_test.rb @@ -1,19 +1,19 @@ require_relative '../test_helper' -class ActionMailroom::InboundEmailsControllerTest < ActionDispatch::IntegrationTest +class ActionMailbox::InboundEmailsControllerTest < ActionDispatch::IntegrationTest test "receiving a valid RFC 822 message" do - assert_difference -> { ActionMailroom::InboundEmail.count }, +1 do + assert_difference -> { ActionMailbox::InboundEmail.count }, +1 do post_inbound_email "welcome.eml" end assert_response :created - inbound_email = ActionMailroom::InboundEmail.last + inbound_email = ActionMailbox::InboundEmail.last assert_equal file_fixture('../files/welcome.eml').read, inbound_email.raw_email.download end test "rejecting a message of an unsupported type" do - assert_no_difference -> { ActionMailroom::InboundEmail.count } do + assert_no_difference -> { ActionMailbox::InboundEmail.count } do post rails_inbound_emails_url, params: { message: fixture_file_upload('files/text.txt', 'text/plain') } end diff --git a/test/unit/inbound_email/incineration_test.rb b/test/unit/inbound_email/incineration_test.rb index 3de0af3225..212325b92d 100644 --- a/test/unit/inbound_email/incineration_test.rb +++ b/test/unit/inbound_email/incineration_test.rb @@ -1,10 +1,10 @@ require_relative '../../test_helper' -class ActionMailroom::InboundEmail::IncinerationTest < ActiveSupport::TestCase +class ActionMailbox::InboundEmail::IncinerationTest < ActiveSupport::TestCase test "incinerate emails 30 days after they have been processed" do freeze_time - assert_enqueued_with job: ActionMailroom::InboundEmail::IncinerationJob, at: 30.days.from_now do + assert_enqueued_with job: ActionMailbox::InboundEmail::IncinerationJob, at: 30.days.from_now do create_inbound_email_from_fixture("welcome.eml").delivered! end end diff --git a/test/unit/inbound_email/message_id_test.rb b/test/unit/inbound_email/message_id_test.rb index 75c15a531a..aa9ce90b4c 100644 --- a/test/unit/inbound_email/message_id_test.rb +++ b/test/unit/inbound_email/message_id_test.rb @@ -1,6 +1,6 @@ require_relative '../../test_helper' -class ActionMailroom::InboundEmail::MessageIdTest < ActiveSupport::TestCase +class ActionMailbox::InboundEmail::MessageIdTest < ActiveSupport::TestCase test "message id is extracted from raw email" do inbound_email = create_inbound_email_from_fixture("welcome.eml") assert_equal "0CB459E0-0336-41DA-BC88-E6E28C697DDB@37signals.com", inbound_email.message_id diff --git a/test/unit/inbound_email_test.rb b/test/unit/inbound_email_test.rb index e4b7be2440..7c42188584 100644 --- a/test/unit/inbound_email_test.rb +++ b/test/unit/inbound_email_test.rb @@ -1,6 +1,6 @@ require_relative '../test_helper' -module ActionMailroom +module ActionMailbox class InboundEmailTest < ActiveSupport::TestCase test "mail provides the parsed source" do assert_equal "Discussion: Let's debate these attachments", create_inbound_email_from_fixture("welcome.eml").mail.subject diff --git a/test/unit/mailbox/callbacks_test.rb b/test/unit/mailbox/callbacks_test.rb index 4cafeb3534..b6cfef9868 100644 --- a/test/unit/mailbox/callbacks_test.rb +++ b/test/unit/mailbox/callbacks_test.rb @@ -1,6 +1,6 @@ require_relative '../../test_helper' -class CallbackMailbox < ActionMailroom::Mailbox +class CallbackMailbox < ActionMailbox::Base before_processing { $before_processing = "Ran that!" } after_processing { $after_processing = "Ran that too!" } around_processing ->(r, block) { block.call; $around_processing = "Ran that as well!" } @@ -10,7 +10,7 @@ class CallbackMailbox < ActionMailroom::Mailbox end end -class ActionMailroom::Mailbox::CallbacksTest < ActiveSupport::TestCase +class ActionMailbox::Base::CallbacksTest < ActiveSupport::TestCase setup do $before_processing = $after_processing = $around_processing = $processed = false @inbound_email = create_inbound_email_from_fixture("welcome.eml") diff --git a/test/unit/mailbox/routing_test.rb b/test/unit/mailbox/routing_test.rb index 4a8ed10eb0..320dee6aab 100644 --- a/test/unit/mailbox/routing_test.rb +++ b/test/unit/mailbox/routing_test.rb @@ -1,16 +1,16 @@ require_relative '../../test_helper' -class ApplicationMailbox < ActionMailroom::Mailbox +class ApplicationMailbox < ActionMailbox::Base routing "replies@example.com" => :replies end -class RepliesMailbox < ActionMailroom::Mailbox +class RepliesMailbox < ActionMailbox::Base def process $processed = mail.subject end end -class ActionMailroom::Mailbox::RoutingTest < ActiveSupport::TestCase +class ActionMailbox::Base::RoutingTest < ActiveSupport::TestCase setup do $processed = false @inbound_email = create_inbound_email_from_fixture("welcome.eml") @@ -22,7 +22,7 @@ class ActionMailroom::Mailbox::RoutingTest < ActiveSupport::TestCase end test "delayed routing" do - perform_enqueued_jobs only: ActionMailroom::RoutingJob do + perform_enqueued_jobs only: ActionMailbox::RoutingJob do another_inbound_email = create_inbound_email_from_fixture("welcome.eml", status: :pending) assert_equal "Discussion: Let's debate these attachments", $processed end diff --git a/test/unit/mailbox/state_test.rb b/test/unit/mailbox/state_test.rb index 6215e02837..32d16ca8fe 100644 --- a/test/unit/mailbox/state_test.rb +++ b/test/unit/mailbox/state_test.rb @@ -1,12 +1,12 @@ require_relative '../../test_helper' -class SuccessfulMailbox < ActionMailroom::Mailbox +class SuccessfulMailbox < ActionMailbox::Base def process $processed = mail.subject end end -class UnsuccessfulMailbox < ActionMailroom::Mailbox +class UnsuccessfulMailbox < ActionMailbox::Base rescue_from(RuntimeError) { $processed = :failure } def process @@ -14,7 +14,7 @@ class UnsuccessfulMailbox < ActionMailroom::Mailbox end end -class BouncingMailbox < ActionMailroom::Mailbox +class BouncingMailbox < ActionMailbox::Base def process $processed = :bounced bounced! @@ -22,7 +22,7 @@ class BouncingMailbox < ActionMailroom::Mailbox end -class ActionMailroom::Mailbox::StateTest < ActiveSupport::TestCase +class ActionMailbox::Base::StateTest < ActiveSupport::TestCase setup do $processed = false @inbound_email = create_inbound_email_from_mail \ diff --git a/test/unit/router_test.rb b/test/unit/router_test.rb index 678810a900..e244ff45f4 100644 --- a/test/unit/router_test.rb +++ b/test/unit/router_test.rb @@ -1,6 +1,6 @@ require_relative '../test_helper' -class RootMailbox < ActionMailroom::Mailbox +class RootMailbox < ActionMailbox::Base def process $processed_by = self.class.to_s $processed_mail = mail @@ -19,10 +19,10 @@ class FirstMailboxAddress end end -module ActionMailroom +module ActionMailbox class RouterTest < ActiveSupport::TestCase setup do - @router = ActionMailroom::Router.new + @router = ActionMailbox::Router.new $processed_by = $processed_mail = nil end @@ -82,7 +82,7 @@ module ActionMailroom end test "missing route" do - assert_raises(ActionMailroom::Router::RoutingError) do + assert_raises(ActionMailbox::Router::RoutingError) do inbound_email = create_inbound_email_from_mail(to: "going-nowhere@example.com", subject: "This is a reply") @router.route inbound_email assert inbound_email.bounced? @@ -90,7 +90,7 @@ module ActionMailroom end test "invalid address" do - assert_raises(ActionMailroom::Router::Route::InvalidAddressError) do + assert_raises(ActionMailbox::Router::Route::InvalidAddressError) do @router.add_route Array.new, to: :first @router.route create_inbound_email_from_mail(to: "replies-nowhere@example.com", subject: "This is a reply") end |