diff options
author | ThibG <thib@sitedethib.com> | 2019-03-05 22:20:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-05 22:20:58 +0100 |
commit | 772b4ba24c60e0394d25d0fad4eefb338a9befea (patch) | |
tree | 804bb8ba01b1ff55471cc558d72456d2b9d0aea9 /app/serializers/activitypub/note_serializer.rb | |
parent | 2a4ce7458a16c64029842fde210089453be2ede1 (diff) | |
parent | 866496ac16b47ee17138db600519a630be833e4e (diff) |
Merge pull request #935 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/serializers/activitypub/note_serializer.rb')
-rw-r--r-- | app/serializers/activitypub/note_serializer.rb | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 4aab993a9..3a9e388a5 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -15,12 +15,18 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer has_one :replies, serializer: ActivityPub::CollectionSerializer, if: :local? + has_many :poll_options, key: :one_of, if: :poll_and_not_multiple? + has_many :poll_options, key: :any_of, if: :poll_and_multiple? + + attribute :end_time, if: :poll_and_expires? + attribute :closed, if: :poll_and_expired? + def id ActivityPub::TagManager.instance.uri_for(object) end def type - 'Note' + object.poll ? 'Question' : 'Note' end def summary @@ -38,6 +44,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer def replies replies = object.self_replies(5).pluck(:id, :uri) last_id = replies.last&.first + ActivityPub::CollectionPresenter.new( type: :unordered, id: ActivityPub::TagManager.instance.replies_uri_for(object), @@ -114,6 +121,36 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer object.account.local? end + def poll_options + if !object.poll.expired? && object.poll.hide_totals? + object.poll.unloaded_options + else + object.poll.loaded_options + end + end + + def poll_and_multiple? + object.poll&.multiple? + end + + def poll_and_not_multiple? + object.poll && !object.poll.multiple? + end + + def closed + object.poll.expires_at.iso8601 + end + + alias end_time closed + + def poll_and_expires? + object.poll&.expires_at&.present? + end + + def poll_and_expired? + object.poll&.expired? + end + class MediaAttachmentSerializer < ActiveModel::Serializer include RoutingHelper @@ -181,4 +218,34 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer class CustomEmojiSerializer < ActivityPub::EmojiSerializer end + + class OptionSerializer < ActiveModel::Serializer + class RepliesSerializer < ActiveModel::Serializer + attributes :type, :total_items + + def type + 'Collection' + end + + def total_items + object.votes_count + end + end + + attributes :type, :name + + has_one :replies, serializer: ActivityPub::NoteSerializer::OptionSerializer::RepliesSerializer + + def type + 'Note' + end + + def name + object.title + end + + def replies + object + end + end end |