From 3c8fc4e9ae53af9739a0e84b1141a79e03552d4a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 19 Sep 2018 15:20:04 -0700 Subject: Add incineration by default --- .../action_mailroom/inbound_email/incineratable.rb | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/models/action_mailroom/inbound_email/incineratable.rb (limited to 'app/models/action_mailroom/inbound_email/incineratable.rb') diff --git a/app/models/action_mailroom/inbound_email/incineratable.rb b/app/models/action_mailroom/inbound_email/incineratable.rb new file mode 100644 index 0000000000..83ccec89ba --- /dev/null +++ b/app/models/action_mailroom/inbound_email/incineratable.rb @@ -0,0 +1,31 @@ +module ActionMailroom::InboundEmail::Incineratable + extend ActiveSupport::Concern + + # TODO: Extract into framework configuration + INCINERATABLE_AFTER = 30.days + + included do + before_update :remember_to_incinerate_later + after_update_commit :incinerate_later, if: :need_to_incinerate_later? + 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? || failed?) + @incinerate_later = true + end + end + + def need_to_incinerate_later? + @incinerate_later + end + + def incinerate_later + ActionMailroom::InboundEmail::IncinerationJob.schedule(self) + end +end -- cgit v1.2.3