Allow skipping incineration of processed emails

This commit is contained in:
Pratik 2019-02-06 18:28:49 -06:00 committed by George Claghorn
parent 9cc463ed7b
commit d0037daa37
6 changed files with 23 additions and 1 deletions

View File

@ -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.

View File

@ -6,6 +6,9 @@ module ActionMailbox
#
# Since this incineration is set for the future, it'll automatically ignore any <tt>InboundEmail</tt>s
# 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] }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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