From 05bd61d4ff4481a0a38d455e4eb03cf1b7cb1a9e Mon Sep 17 00:00:00 2001 From: Benjamin Neff <benjamin@coding4coffee.ch> Date: Tue, 24 May 2016 01:37:32 +0200 Subject: [PATCH] create Diaspora::Federation::Entities.build --- lib/diaspora/federation/entities.rb | 93 ++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 3 deletions(-) diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb index 2515a0f95d..56a942ad69 100644 --- a/lib/diaspora/federation/entities.rb +++ b/lib/diaspora/federation/entities.rb @@ -1,6 +1,25 @@ module Diaspora module Federation module Entities + def self.build(entity) + case entity + when AccountDeletion then account_deletion(entity) + when Comment then comment(entity) + when Contact then contact(entity) + when Conversation then conversation(entity) + when Like then like(entity) + when Message then message(entity) + when Participation then participation(entity) + when Photo then photo(entity) + when PollParticipation then poll_participation(entity) + when Profile then profile(entity) + when Reshare then reshare(entity) + when StatusMessage then status_message(entity) + else + raise DiasporaFederation::Entity::UnknownEntity, "unknown entity: #{entity.class}" + end + end + def self.post(post) case post when StatusMessage @@ -12,6 +31,12 @@ module Diaspora end end + def self.account_deletion(account_deletion) + DiasporaFederation::Entities::AccountDeletion.new( + author: account_deletion.diaspora_handle + ) + end + def self.comment(comment) DiasporaFederation::Entities::Comment.new( author: comment.diaspora_handle, @@ -22,6 +47,36 @@ module Diaspora ) end + def self.contact(contact) + # TODO: use DiasporaFederation::Entities::Contact + DiasporaFederation::Entities::Request.new( + author: contact.user.diaspora_handle, + recipient: contact.person.diaspora_handle + ) + end + + def self.conversation(conversation) + DiasporaFederation::Entities::Conversation.new( + author: conversation.diaspora_handle, + guid: conversation.guid, + subject: conversation.subject, + created_at: conversation.created_at, + participants: conversation.participant_handles, + messages: conversation.messages.map {|message| message(message) } + ) + end + + def self.like(like) + DiasporaFederation::Entities::Like.new( + author: like.diaspora_handle, + guid: like.guid, + parent_guid: like.parent_guid, + positive: like.positive, + parent_type: like.parent.class.base_class.to_s, + parent: related_entity(like.parent) + ) + end + def self.location(location) DiasporaFederation::Entities::Location.new( address: location.address, @@ -30,6 +85,28 @@ module Diaspora ) end + def self.message(message) + DiasporaFederation::Entities::Message.new( + author: message.diaspora_handle, + guid: message.guid, + text: message.text, + created_at: message.created_at, + parent_guid: message.parent_guid, + conversation_guid: message.parent_guid, + parent: related_entity(message.parent) + ) + end + + def self.participation(participation) + DiasporaFederation::Entities::Participation.new( + author: participation.diaspora_handle, + guid: participation.guid, + parent_guid: participation.parent_guid, + parent_type: participation.parent.class.base_class.to_s, + parent: related_entity(participation.parent) + ) + end + def self.photo(photo) DiasporaFederation::Entities::Photo.new( author: photo.diaspora_handle, @@ -60,6 +137,16 @@ module Diaspora ) end + def self.poll_participation(poll_participation) + DiasporaFederation::Entities::PollParticipation.new( + author: poll_participation.diaspora_handle, + guid: poll_participation.guid, + parent_guid: poll_participation.parent_guid, + poll_answer_guid: poll_participation.poll_answer.guid, + parent: related_entity(poll_participation.parent) + ) + end + def self.profile(profile) DiasporaFederation::Entities::Profile.new( author: profile.diaspora_handle, @@ -82,7 +169,7 @@ module Diaspora def self.relayable_retraction(target, sender) DiasporaFederation::Entities::RelayableRetraction.new( target_guid: target.guid, - target_type: target.class.to_s, + target_type: target.class.base_class.to_s, target: related_entity(target), author: sender.diaspora_handle ) @@ -103,7 +190,7 @@ module Diaspora def self.retraction(target) DiasporaFederation::Entities::Retraction.new( target_guid: target.is_a?(User) ? target.person.guid : target.guid, - target_type: target.is_a?(User) ? Person.to_s : target.class.to_s, + target_type: target.is_a?(User) ? Person.to_s : target.class.base_class.to_s, target: related_entity(target), author: target.diaspora_handle ) @@ -113,7 +200,7 @@ module Diaspora def self.signed_retraction(target, sender) DiasporaFederation::Entities::SignedRetraction.new( target_guid: target.guid, - target_type: target.class.to_s, + target_type: target.class.base_class.to_s, target: related_entity(target), author: sender.diaspora_handle ) -- GitLab