mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-26 18:46:23 +00:00
fix: descubrir el tipo de objeto siempre
closes #15656 closes #15657 closes #15658 closes #15660 closes #15661 closes #15662 closes #15663 closes #15664 closes #15665 closes #15666 closes #15667 closes #15668 closes #15669 closes #15670 closes #15671 closes #15672 closes #15673 closes #15674 closes #15675 closes #15676 closes #15677 closes #15678 closes #15679 closes #15680 closes #15681 closes #15682 closes #15683 closes #15684 closes #15685 closes #15686 closes #15687 closes #15688 closes #15689 closes #15690 closes #15691 closes #15692 closes #15693 closes #15694 closes #15695 closes #15696 closes #15697 closes #15698 closes #15699 closes #15700 closes #15701 closes #15702 closes #15704 closes #15705 closes #15706 closes #15707 closes #15708
This commit is contained in:
parent
bcfb7a5a7f
commit
ceeb0009ef
2 changed files with 18 additions and 12 deletions
|
@ -64,18 +64,7 @@ class ActivityPub
|
|||
# @return [ActivityPub::Object]
|
||||
def object
|
||||
@object ||= ::ActivityPub::Object.find_or_initialize_by(uri: object_uri).tap do |o|
|
||||
# XXX: Si el objeto es una actividad, esto siempre va a ser
|
||||
# Generic
|
||||
o.type ||= 'ActivityPub::Object::Generic'
|
||||
|
||||
if object_embedded?
|
||||
o.content = original_object
|
||||
begin
|
||||
type = original_object[:type].presence
|
||||
o.type = "ActivityPub::Object::#{type}".constantize if type
|
||||
rescue NameError
|
||||
end
|
||||
end
|
||||
o.content = original_object if object_embedded?
|
||||
|
||||
o.save!
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ class ActivityPub
|
|||
class Object < ApplicationRecord
|
||||
include ActivityPub::Concerns::JsonLdConcern
|
||||
|
||||
before_validation :type_from_content!, unless: :type?
|
||||
|
||||
# Los objetos son únicos a toda la base de datos
|
||||
validates :uri, presence: true, url: true, uniqueness: true
|
||||
|
||||
|
@ -38,5 +40,20 @@ class ActivityPub
|
|||
|
||||
@referenced ||= DistributedPress::V1::Social::ReferencedObject.new(object: content, dereferencer: site.social_inbox.dereferencer)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Encuentra el tipo a partir del contenido, si existe.
|
||||
#
|
||||
# XXX: Si el objeto es una actividad, esto siempre va a ser
|
||||
# Generic
|
||||
def type_from_content!
|
||||
self.type =
|
||||
begin
|
||||
"ActivityPub::Object::#{content['type'].presence || 'Generic'}".constantize
|
||||
rescue NameError
|
||||
ActivityPub::Object::Generic
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue