Fix semantics of follow requests another slaps

master
Eugen Rochko 8 years ago
parent 0b95eb3612
commit 50660d54e8
  1. 1
      app/helpers/atom_builder_helper.rb
  2. 4
      app/models/block.rb
  3. 2
      app/models/favourite.rb
  4. 4
      app/models/follow.rb
  5. 17
      app/models/follow_request.rb
  6. 13
      app/models/stream_entry.rb
  7. 4
      docs/Extensions.md
  8. 9
      spec/models/favourite_spec.rb
  9. 4
      spec/models/follow_spec.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

@ -18,10 +18,6 @@ class Block < ApplicationRecord
target_account
end
def object_type
:person
end
def hidden?
true
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}"
end
delegate :object_type, to: :target
def thread
status
end

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

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

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

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

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

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

Loading…
Cancel
Save