Fix semantics of follow requests another slaps

This commit is contained in:
Eugen Rochko 2017-02-11 17:09:36 +01:00
parent 0b95eb3612
commit 50660d54e8
9 changed files with 24 additions and 34 deletions

View File

@ -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

View File

@ -18,10 +18,6 @@ class Block < ApplicationRecord
target_account
end
def object_type
:person
end
def hidden?
true
end

View File

@ -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

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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