diff options
-rw-r--r-- | app/jobs/action_mailbox/incineration_job.rb (renamed from app/jobs/action_mailbox/inbound_email/incineration_job.rb) | 2 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email.rb | 4 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/incineratable.rb | 23 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/incineratable/incineration.rb | 4 | ||||
-rw-r--r-- | app/models/action_mailbox/inbound_email/routable.rb | 2 | ||||
-rw-r--r-- | test/unit/inbound_email/incineration_test.rb | 6 |
6 files changed, 16 insertions, 25 deletions
diff --git a/app/jobs/action_mailbox/inbound_email/incineration_job.rb b/app/jobs/action_mailbox/incineration_job.rb index d9422a3fa8..e9f0c78e0f 100644 --- a/app/jobs/action_mailbox/inbound_email/incineration_job.rb +++ b/app/jobs/action_mailbox/incineration_job.rb @@ -1,4 +1,4 @@ -class ActionMailbox::InboundEmail::IncinerationJob < ApplicationJob +class ActionMailbox::IncinerationJob < ApplicationJob queue_as :action_mailbox_incineration def self.schedule(inbound_email) diff --git a/app/models/action_mailbox/inbound_email.rb b/app/models/action_mailbox/inbound_email.rb index f2589d7429..7d1a36b705 100644 --- a/app/models/action_mailbox/inbound_email.rb +++ b/app/models/action_mailbox/inbound_email.rb @@ -19,4 +19,8 @@ class ActionMailbox::InboundEmail < ActiveRecord::Base def source @source ||= raw_email.download end + + def processed? + delivered? || failed? || bounced? + end end diff --git a/app/models/action_mailbox/inbound_email/incineratable.rb b/app/models/action_mailbox/inbound_email/incineratable.rb index 364231a443..198846422c 100644 --- a/app/models/action_mailbox/inbound_email/incineratable.rb +++ b/app/models/action_mailbox/inbound_email/incineratable.rb @@ -2,27 +2,14 @@ module ActionMailbox::InboundEmail::Incineratable extend ActiveSupport::Concern included do - before_update :remember_to_incinerate_later - after_update_commit :incinerate_later, if: :incinerating_later? + after_update_commit :incinerate_later, if: -> { status_previously_changed? && processed? } + end + + def incinerate_later + ActionMailbox::IncinerationJob.schedule self end def incinerate Incineration.new(self).run end - - private - # TODO: Use enum change tracking once merged into Active Support - def remember_to_incinerate_later - if status_changed? && (delivered? || bounced? || failed?) - @incinerating_later = true - end - end - - def incinerating_later? - @incinerating_later ||= false - end - - def incinerate_later - ActionMailbox::InboundEmail::IncinerationJob.schedule(self) - end end diff --git a/app/models/action_mailbox/inbound_email/incineratable/incineration.rb b/app/models/action_mailbox/inbound_email/incineratable/incineration.rb index ab9311edfb..801cc0c8b9 100644 --- a/app/models/action_mailbox/inbound_email/incineratable/incineration.rb +++ b/app/models/action_mailbox/inbound_email/incineratable/incineration.rb @@ -4,7 +4,7 @@ class ActionMailbox::InboundEmail::Incineratable::Incineration end def run - @inbound_email.destroy if due? && processed? + @inbound_email.destroy! if due? && processed? end private @@ -13,6 +13,6 @@ class ActionMailbox::InboundEmail::Incineratable::Incineration end def processed? - @inbound_email.delivered? || @inbound_email.bounced? || @inbound_email.failed? + @inbound_email.processed? end end diff --git a/app/models/action_mailbox/inbound_email/routable.rb b/app/models/action_mailbox/inbound_email/routable.rb index 48b357af45..8f5b0ddd39 100644 --- a/app/models/action_mailbox/inbound_email/routable.rb +++ b/app/models/action_mailbox/inbound_email/routable.rb @@ -2,7 +2,7 @@ module ActionMailbox::InboundEmail::Routable extend ActiveSupport::Concern included do - after_create_commit :route_later, if: ->(inbound_email) { inbound_email.pending? } + after_create_commit :route_later, if: :pending? end def route_later diff --git a/test/unit/inbound_email/incineration_test.rb b/test/unit/inbound_email/incineration_test.rb index 72378df05a..a3267afac9 100644 --- a/test/unit/inbound_email/incineration_test.rb +++ b/test/unit/inbound_email/incineration_test.rb @@ -4,7 +4,7 @@ class ActionMailbox::InboundEmail::IncinerationTest < ActiveSupport::TestCase test "incinerating 30 days after delivery" do freeze_time - assert_enqueued_with job: ActionMailbox::InboundEmail::IncinerationJob, at: 30.days.from_now do + assert_enqueued_with job: ActionMailbox::IncinerationJob, at: 30.days.from_now do create_inbound_email_from_fixture("welcome.eml").delivered! end end @@ -12,7 +12,7 @@ class ActionMailbox::InboundEmail::IncinerationTest < ActiveSupport::TestCase test "incinerating 30 days after bounce" do freeze_time - assert_enqueued_with job: ActionMailbox::InboundEmail::IncinerationJob, at: 30.days.from_now do + assert_enqueued_with job: ActionMailbox::IncinerationJob, at: 30.days.from_now do create_inbound_email_from_fixture("welcome.eml").bounced! end end @@ -20,7 +20,7 @@ class ActionMailbox::InboundEmail::IncinerationTest < ActiveSupport::TestCase test "incinerating 30 days after failure" do freeze_time - assert_enqueued_with job: ActionMailbox::InboundEmail::IncinerationJob, at: 30.days.from_now do + assert_enqueued_with job: ActionMailbox::IncinerationJob, at: 30.days.from_now do create_inbound_email_from_fixture("welcome.eml").failed! end end |