diff --git a/app/models/block.rb b/app/models/block.rb index 5476542a5ab..ec9d96e52d9 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -13,6 +13,7 @@ # class Block < ApplicationRecord + include ActivityPubPayloadGeneration include Paginable include RelationshipCacheable @@ -25,7 +26,6 @@ class Block < ApplicationRecord false # Force uri_for to use uri attribute end - before_validation :set_uri, only: :create after_commit :invalidate_blocking_cache after_commit :invalidate_follow_recommendations_cache @@ -39,8 +39,4 @@ class Block < ApplicationRecord def invalidate_follow_recommendations_cache Rails.cache.delete("follow_recommendations/#{account_id}") end - - def set_uri - self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? - end end diff --git a/app/models/concerns/activitypub_payload_generation.rb b/app/models/concerns/activitypub_payload_generation.rb new file mode 100644 index 00000000000..372b282a08a --- /dev/null +++ b/app/models/concerns/activitypub_payload_generation.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module ActivityPubPayloadGeneration + extend ActiveSupport::Concern + + included do + before_validation :generate_payload_uri, + only: :create, + unless: :uri? + end + + private + + def generate_payload_uri + self.uri = ActivityPub::TagManager + .instance + .generate_uri_for(self) + end +end diff --git a/app/models/follow.rb b/app/models/follow.rb index 4d1598dcad6..963f1c23359 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -16,6 +16,7 @@ # class Follow < ApplicationRecord + include ActivityPubPayloadGeneration include Paginable include RelationshipCacheable include RateLimitable @@ -42,7 +43,6 @@ class Follow < ApplicationRecord destroy! end - before_validation :set_uri, only: :create after_create :increment_cache_counters after_destroy :remove_endorsements after_destroy :decrement_cache_counters @@ -51,10 +51,6 @@ class Follow < ApplicationRecord private - def set_uri - self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? - end - def remove_endorsements AccountPin.where(target_account_id: target_account_id, account_id: account_id).delete_all end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index c13cc718d8f..923fc4173cc 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -16,6 +16,7 @@ # class FollowRequest < ApplicationRecord + include ActivityPubPayloadGeneration include Paginable include RelationshipCacheable include RateLimitable @@ -44,15 +45,10 @@ class FollowRequest < ApplicationRecord false # Force uri_for to use uri attribute end - before_validation :set_uri, only: :create after_commit :invalidate_follow_recommendations_cache private - def set_uri - self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil? - end - def invalidate_follow_recommendations_cache Rails.cache.delete("follow_recommendations/#{account_id}") end