logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 50660d54e8cabd08fee649a6abc26f35a8d7a82c
parent: 0b95eb36128077b3074f661dd451a90a18441ef0
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Sat, 11 Feb 2017 17:09:36 +0100

Fix semantics of follow requests another slaps

Diffstat:

Mapp/helpers/atom_builder_helper.rb1+
Mapp/models/block.rb4----
Mapp/models/favourite.rb2--
Mapp/models/follow.rb4----
Mapp/models/follow_request.rb17++++++++++-------
Mapp/models/stream_entry.rb13+++++++------
Mdocs/Extensions.md4++--
Mspec/models/favourite_spec.rb9++-------
Mspec/models/follow_spec.rb4++--
9 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/app/helpers/atom_builder_helper.rb b/app/helpers/atom_builder_helper.rb @@ -191,6 +191,7 @@ module AtomBuilderHelper include_author xml, stream_entry.target else object_type xml, stream_entry.target.object_type + verb xml, stream_entry.target.verb title xml, stream_entry.target.title link_alternate xml, TagManager.instance.url_for(stream_entry.target) end diff --git a/app/models/block.rb b/app/models/block.rb @@ -18,10 +18,6 @@ class Block < ApplicationRecord target_account end - def object_type - :person - end - def hidden? true end diff --git a/app/models/favourite.rb b/app/models/favourite.rb @@ -19,8 +19,6 @@ class Favourite < ApplicationRecord destroyed? ? "#{account.acct} no longer favourites a status by #{status.account.acct}" : "#{account.acct} favourited a status by #{status.account.acct}" end - delegate :object_type, to: :target - def thread status end diff --git a/app/models/follow.rb b/app/models/follow.rb @@ -20,10 +20,6 @@ class Follow < ApplicationRecord target_account end - def object_type - :person - end - def title destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}" end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb @@ -13,7 +13,8 @@ class FollowRequest < ApplicationRecord validates :account_id, uniqueness: { scope: :target_account_id } def authorize! - @verb = :authorize + @verb = :authorize + @target = clone.freeze account.follow!(target_account) MergeWorker.perform_async(target_account.id, account.id) @@ -22,7 +23,9 @@ class FollowRequest < ApplicationRecord end def reject! - @verb = :reject + @verb = :reject + @target = clone.freeze + destroy! end @@ -31,11 +34,11 @@ class FollowRequest < ApplicationRecord end def target - target_account - end - - def object_type - :person + if destroyed? && @verb + @target + else + target_account + end end def hidden? diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb @@ -6,10 +6,11 @@ class StreamEntry < ApplicationRecord belongs_to :account, inverse_of: :stream_entries belongs_to :activity, polymorphic: true - belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id' - belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id' - belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id' - belongs_to :block, foreign_type: 'Block', foreign_key: 'activity_id' + belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id' + belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id' + belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id' + belongs_to :block, foreign_type: 'Block', foreign_key: 'activity_id' + belongs_to :follow_request, foreign_type: 'FollowRequest', foreign_key: 'activity_id' validates :account, :activity, presence: true @@ -30,7 +31,7 @@ class StreamEntry < ApplicationRecord end def targeted? - [:follow, :request_friend, :authorize, :unfollow, :block, :unblock, :share, :favorite].include? verb + [:follow, :request_friend, :authorize, :reject, :unfollow, :block, :unblock, :share, :favorite].include? verb end def target @@ -58,7 +59,7 @@ class StreamEntry < ApplicationRecord end def activity - !new_record? ? send(activity_type.downcase) : super + !new_record? ? send(activity_type.underscore) : super end private diff --git a/docs/Extensions.md b/docs/Extensions.md @@ -23,7 +23,7 @@ Accounts and statuses have an access "scope": Accounts can be "private" or "public". The former requires a follow request to be approved before a follow relationship can be established, the latter can be followed directly. -Statuses can be "private", "unlisted" or "public". Private must only be shown to the followers of the account, public can be displayed publicly. Unlisted statuses may be displayed publicly but preferably outside of any spotlights e.g. "whole known network" or "public" timelines. +Statuses can be "private", "unlisted" or "public". Private must only be shown to the followers of the account or people mentioned in the status; public can be displayed publicly. Unlisted statuses may be displayed publicly but preferably outside of any spotlights e.g. "whole known network" or "public" timelines. Namespace of the scope element is `http://mastodon.social/schema/1.0`. Example: @@ -47,7 +47,7 @@ Mastodon uses the following Salmon slaps to signal a follow request, a follow re - `http://activitystrea.ms/schema/1.0/authorize` - `http://activitystrea.ms/schema/1.0/reject` -The activity object of the slaps is the account in question. Request-friend slap is sent to that account, when the end-user of that account decides, the authorize/reject decision slap is sent back to the requester. +The activity object of the request-friend slap is the account in question. The activity object of the authorize and reject slaps is the original request-friend activity. Request-friend slap is sent to the locked account, when the end-user of that account decides, the authorize/reject decision slap is sent back to the requester. #### PuSH amendment diff --git a/spec/models/favourite_spec.rb b/spec/models/favourite_spec.rb @@ -26,13 +26,8 @@ RSpec.describe Favourite, type: :model do end describe '#object_type' do - it 'is a note when the target is a note' do - expect(subject.object_type).to be :note - end - - it 'is a comment when the target is a comment' do - status.in_reply_to_id = 2 - expect(subject.object_type).to be :comment + it 'is an activity' do + expect(subject.object_type).to be :activity end end diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb @@ -25,8 +25,8 @@ RSpec.describe Follow, type: :model do end describe '#object_type' do - it 'is a person' do - expect(subject.object_type).to be :person + it 'is an activity' do + expect(subject.object_type).to be :activity end end