diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-03-29 16:39:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 16:39:43 +0200 |
commit | eaea849035ea407afb2d5db411dbddc1ccca6f44 (patch) | |
tree | 19a0b6e761fc453fac2f5a8aba24595ad93f0382 /app/models/concerns | |
parent | 2287eebae0c1d699436a8cf3218d7cfe990a3605 (diff) | |
parent | 8d6f3f8a379c8d552d2101cf35ae8f6fe956da53 (diff) |
Merge pull request #1724 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/models/concerns')
-rw-r--r-- | app/models/concerns/status_snapshot_concern.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/models/concerns/status_snapshot_concern.rb b/app/models/concerns/status_snapshot_concern.rb new file mode 100644 index 000000000..c728db7c3 --- /dev/null +++ b/app/models/concerns/status_snapshot_concern.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module StatusSnapshotConcern + extend ActiveSupport::Concern + + included do + has_many :edits, class_name: 'StatusEdit', inverse_of: :status, dependent: :destroy + end + + def edited? + edited_at.present? + end + + def build_snapshot(account_id: nil, at_time: nil, rate_limit: true) + # We don't use `edits#new` here to avoid it having saved when the + # status is saved, since we want to control that manually + + StatusEdit.new( + status_id: id, + text: text, + spoiler_text: spoiler_text, + sensitive: sensitive, + ordered_media_attachment_ids: ordered_media_attachment_ids&.dup || media_attachments.pluck(:id), + media_descriptions: ordered_media_attachments.map(&:description), + poll_options: preloadable_poll&.options&.dup, + account_id: account_id || self.account_id, + content_type: content_type, + created_at: at_time || edited_at, + rate_limit: rate_limit + ) + end + + def snapshot!(**options) + build_snapshot(**options).save! + end +end |