From d0037daa3738ac754781ce5e55778a2cf9d3d2f7 Mon Sep 17 00:00:00 2001 From: Pratik Date: Wed, 6 Feb 2019 18:28:49 -0600 Subject: Allow skipping incineration of processed emails --- actionmailbox/CHANGELOG.md | 6 ++++++ actionmailbox/app/jobs/action_mailbox/incineration_job.rb | 3 +++ .../app/models/action_mailbox/inbound_email/incineratable.rb | 2 +- actionmailbox/lib/action_mailbox.rb | 1 + actionmailbox/lib/action_mailbox/engine.rb | 2 ++ actionmailbox/test/unit/inbound_email/incineration_test.rb | 10 ++++++++++ 6 files changed, 23 insertions(+), 1 deletion(-) (limited to 'actionmailbox') diff --git a/actionmailbox/CHANGELOG.md b/actionmailbox/CHANGELOG.md index d92367dc17..3e92283c12 100644 --- a/actionmailbox/CHANGELOG.md +++ b/actionmailbox/CHANGELOG.md @@ -1,3 +1,9 @@ +* Allow skipping incineration of processed emails. + + This can be done by setting `config.action_mailbox.incinerate` to `false`. + + *Pratik Naik* + ## Rails 6.0.0.beta1 (January 18, 2019) ## * Added to Rails. diff --git a/actionmailbox/app/jobs/action_mailbox/incineration_job.rb b/actionmailbox/app/jobs/action_mailbox/incineration_job.rb index 1579a3c7c8..351bd67c69 100644 --- a/actionmailbox/app/jobs/action_mailbox/incineration_job.rb +++ b/actionmailbox/app/jobs/action_mailbox/incineration_job.rb @@ -6,6 +6,9 @@ module ActionMailbox # # Since this incineration is set for the future, it'll automatically ignore any InboundEmails # that have already been deleted and discard itself if so. + # + # You can disable incinerating processed emails by setting +config.action_mailbox.incinerate+ or + # +ActionMailbox.incinerate+ to +false+. class IncinerationJob < ActiveJob::Base queue_as { ActionMailbox.queues[:incineration] } diff --git a/actionmailbox/app/models/action_mailbox/inbound_email/incineratable.rb b/actionmailbox/app/models/action_mailbox/inbound_email/incineratable.rb index 697331ede4..e7c8782f33 100644 --- a/actionmailbox/app/models/action_mailbox/inbound_email/incineratable.rb +++ b/actionmailbox/app/models/action_mailbox/inbound_email/incineratable.rb @@ -7,7 +7,7 @@ module ActionMailbox::InboundEmail::Incineratable extend ActiveSupport::Concern included do - after_update_commit :incinerate_later, if: -> { status_previously_changed? && processed? } + after_update_commit :incinerate_later, if: -> { ActionMailbox.incinerate && status_previously_changed? && processed? } end def incinerate_later diff --git a/actionmailbox/lib/action_mailbox.rb b/actionmailbox/lib/action_mailbox.rb index b4ff25a9ab..772dbd6529 100644 --- a/actionmailbox/lib/action_mailbox.rb +++ b/actionmailbox/lib/action_mailbox.rb @@ -11,6 +11,7 @@ module ActionMailbox mattr_accessor :ingress mattr_accessor :logger + mattr_accessor :incinerate, default: true mattr_accessor :incinerate_after, default: 30.days mattr_accessor :queues, default: {} end diff --git a/actionmailbox/lib/action_mailbox/engine.rb b/actionmailbox/lib/action_mailbox/engine.rb index d5a07a7dce..27334c037e 100644 --- a/actionmailbox/lib/action_mailbox/engine.rb +++ b/actionmailbox/lib/action_mailbox/engine.rb @@ -14,6 +14,7 @@ module ActionMailbox config.eager_load_namespaces << ActionMailbox config.action_mailbox = ActiveSupport::OrderedOptions.new + config.action_mailbox.incinerate = true config.action_mailbox.incinerate_after = 30.days config.action_mailbox.queues = ActiveSupport::InheritableOptions.new \ @@ -22,6 +23,7 @@ module ActionMailbox initializer "action_mailbox.config" do config.after_initialize do |app| ActionMailbox.logger = app.config.action_mailbox.logger || Rails.logger + ActionMailbox.incinerate = app.config.action_mailbox.incinerate.nil? ? true : app.config.action_mailbox.incinerate ActionMailbox.incinerate_after = app.config.action_mailbox.incinerate_after || 30.days ActionMailbox.queues = app.config.action_mailbox.queues || {} end diff --git a/actionmailbox/test/unit/inbound_email/incineration_test.rb b/actionmailbox/test/unit/inbound_email/incineration_test.rb index 21c01a9cea..54488349fd 100644 --- a/actionmailbox/test/unit/inbound_email/incineration_test.rb +++ b/actionmailbox/test/unit/inbound_email/incineration_test.rb @@ -44,4 +44,14 @@ class ActionMailbox::InboundEmail::IncinerationTest < ActiveSupport::TestCase perform_enqueued_jobs only: ActionMailbox::IncinerationJob end end + + test "skipping incineration" do + original, ActionMailbox.incinerate = ActionMailbox.incinerate, false + + assert_no_enqueued_jobs only: ActionMailbox::IncinerationJob do + create_inbound_email_from_fixture("welcome.eml").delivered! + end + ensure + ActionMailbox.incinerate = original + end end -- cgit v1.2.3