aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb')
-rw-r--r--actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb b/actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb
new file mode 100644
index 0000000000..4656f359bf
--- /dev/null
+++ b/actionmailbox/app/models/action_mailbox/inbound_email/incineratable/incineration.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+# Command class for carrying out the actual incineration of the `InboundMail` that's been scheduled
+# for removal. Before the incineration – which really is just a call to `#destroy!` – is run, we verify
+# that it's both eligible (by virtue of having already been processed) and time to do so (that is,
+# the `InboundEmail` was processed after the `incinerate_after` time).
+class ActionMailbox::InboundEmail::Incineratable::Incineration
+ def initialize(inbound_email)
+ @inbound_email = inbound_email
+ end
+
+ def run
+ @inbound_email.destroy! if due? && processed?
+ end
+
+ private
+ def due?
+ @inbound_email.updated_at < ActionMailbox.incinerate_after.ago.end_of_day
+ end
+
+ def processed?
+ @inbound_email.processed?
+ end
+end