* Fix edits with no actual changes being allowed locally * Fix edits with no actual changes being allowed through ActivityPub * Fix false positive changes caused by description processing in model * Fix not recording poll expiration update * Fix test * Revert changes to ProcessStatusUpdateService * Various fixes and improvements * Fix code style issues * Various changes and improvements * Add guard clause
		
			
				
	
	
		
			36 lines
		
	
	
		
			1001 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1001 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # 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,
 | |
|       created_at: at_time || edited_at,
 | |
|       rate_limit: rate_limit
 | |
|     )
 | |
|   end
 | |
| 
 | |
|   def snapshot!(**options)
 | |
|     build_snapshot(**options).save!
 | |
|   end
 | |
| end
 |