Fix semantics of follow requests another slaps

main
Eugen Rochko 8 years ago
parent 0b95eb3612
commit 50660d54e8

@ -191,6 +191,7 @@ module AtomBuilderHelper
include_author xml, stream_entry.target include_author xml, stream_entry.target
else else
object_type xml, stream_entry.target.object_type object_type xml, stream_entry.target.object_type
verb xml, stream_entry.target.verb
title xml, stream_entry.target.title title xml, stream_entry.target.title
link_alternate xml, TagManager.instance.url_for(stream_entry.target) link_alternate xml, TagManager.instance.url_for(stream_entry.target)
end end

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

@ -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}" destroyed? ? "#{account.acct} no longer favourites a status by #{status.account.acct}" : "#{account.acct} favourited a status by #{status.account.acct}"
end end
delegate :object_type, to: :target
def thread def thread
status status
end end

@ -20,10 +20,6 @@ class Follow < ApplicationRecord
target_account target_account
end end
def object_type
:person
end
def title def title
destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}" destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}"
end end

@ -13,7 +13,8 @@ class FollowRequest < ApplicationRecord
validates :account_id, uniqueness: { scope: :target_account_id } validates :account_id, uniqueness: { scope: :target_account_id }
def authorize! def authorize!
@verb = :authorize @verb = :authorize
@target = clone.freeze
account.follow!(target_account) account.follow!(target_account)
MergeWorker.perform_async(target_account.id, account.id) MergeWorker.perform_async(target_account.id, account.id)
@ -22,7 +23,9 @@ class FollowRequest < ApplicationRecord
end end
def reject! def reject!
@verb = :reject @verb = :reject
@target = clone.freeze
destroy! destroy!
end end
@ -31,11 +34,11 @@ class FollowRequest < ApplicationRecord
end end
def target def target
target_account if destroyed? && @verb
end @target
else
def object_type target_account
:person end
end end
def hidden? def hidden?

@ -6,10 +6,11 @@ class StreamEntry < ApplicationRecord
belongs_to :account, inverse_of: :stream_entries belongs_to :account, inverse_of: :stream_entries
belongs_to :activity, polymorphic: true belongs_to :activity, polymorphic: true
belongs_to :status, foreign_type: 'Status', 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 :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
belongs_to :favourite, foreign_type: 'Favourite', 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 :block, foreign_type: 'Block', foreign_key: 'activity_id'
belongs_to :follow_request, foreign_type: 'FollowRequest', foreign_key: 'activity_id'
validates :account, :activity, presence: true validates :account, :activity, presence: true
@ -30,7 +31,7 @@ class StreamEntry < ApplicationRecord
end end
def targeted? 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 end
def target def target
@ -58,7 +59,7 @@ class StreamEntry < ApplicationRecord
end end
def activity def activity
!new_record? ? send(activity_type.downcase) : super !new_record? ? send(activity_type.underscore) : super
end end
private private

@ -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. 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: 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/authorize`
- `http://activitystrea.ms/schema/1.0/reject` - `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 #### PuSH amendment

@ -26,13 +26,8 @@ RSpec.describe Favourite, type: :model do
end end
describe '#object_type' do describe '#object_type' do
it 'is a note when the target is a note' do it 'is an activity' do
expect(subject.object_type).to be :note expect(subject.object_type).to be :activity
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
end end
end end

@ -25,8 +25,8 @@ RSpec.describe Follow, type: :model do
end end
describe '#object_type' do describe '#object_type' do
it 'is a person' do it 'is an activity' do
expect(subject.object_type).to be :person expect(subject.object_type).to be :activity
end end
end end

Loading…
Cancel
Save