Introduce OStatus::TagManager (#5008)

signup-info-prompt
Akihiko Odaki 2017-09-20 01:08:08 +09:00 committed by Eugen Rochko
parent df1ce2350c
commit bb4d005a83
31 changed files with 308 additions and 297 deletions

View File

@ -115,7 +115,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def conversation_from_uri(uri) def conversation_from_uri(uri)
return nil if uri.nil? return nil if uri.nil?
return Conversation.find_by(id: TagManager.instance.unique_tag_to_local_id(uri, 'Conversation')) if TagManager.instance.local_id?(uri) return Conversation.find_by(id: OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Conversation')) if OStatus::TagManager.instance.local_id?(uri)
Conversation.find_by(uri: uri) || Conversation.create!(uri: uri) Conversation.find_by(uri: uri) || Conversation.create!(uri: uri)
end end

View File

@ -98,8 +98,8 @@ class ActivityPub::TagManager
else else
StatusFinder.new(uri).status StatusFinder.new(uri).status
end end
elsif ::TagManager.instance.local_id?(uri) elsif OStatus::TagManager.instance.local_id?(uri)
klass.find_by(id: ::TagManager.instance.unique_tag_to_local_id(uri, klass.to_s)) klass.find_by(id: OStatus::TagManager.instance.unique_tag_to_local_id(uri, klass.to_s))
else else
klass.find_by(uri: uri.split('#').first) klass.find_by(uri: uri.split('#').first)
end end

View File

@ -11,30 +11,30 @@ class OStatus::Activity::Base
end end
def verb def verb
raw = @xml.at_xpath('./activity:verb', activity: TagManager::AS_XMLNS).content raw = @xml.at_xpath('./activity:verb', activity: OStatus::TagManager::AS_XMLNS).content
TagManager::VERBS.key(raw) OStatus::TagManager::VERBS.key(raw)
rescue rescue
:post :post
end end
def type def type
raw = @xml.at_xpath('./activity:object-type', activity: TagManager::AS_XMLNS).content raw = @xml.at_xpath('./activity:object-type', activity: OStatus::TagManager::AS_XMLNS).content
TagManager::TYPES.key(raw) OStatus::TagManager::TYPES.key(raw)
rescue rescue
:activity :activity
end end
def id def id
@xml.at_xpath('./xmlns:id', xmlns: TagManager::XMLNS).content @xml.at_xpath('./xmlns:id', xmlns: OStatus::TagManager::XMLNS).content
end end
def url def url
link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: TagManager::XMLNS).find { |link_candidate| link_candidate['type'] == 'text/html' } link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: OStatus::TagManager::XMLNS).find { |link_candidate| link_candidate['type'] == 'text/html' }
link.nil? ? nil : link['href'] link.nil? ? nil : link['href']
end end
def activitypub_uri def activitypub_uri
link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: TagManager::XMLNS).find { |link_candidate| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link_candidate['type']) } link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: OStatus::TagManager::XMLNS).find { |link_candidate| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link_candidate['type']) }
link.nil? ? nil : link['href'] link.nil? ? nil : link['href']
end end
@ -45,8 +45,8 @@ class OStatus::Activity::Base
private private
def find_status(uri) def find_status(uri)
if TagManager.instance.local_id?(uri) if OStatus::TagManager.instance.local_id?(uri)
local_id = TagManager.instance.unique_tag_to_local_id(uri, 'Status') local_id = OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Status')
return Status.find_by(id: local_id) return Status.find_by(id: local_id)
elsif ActivityPub::TagManager.instance.local_uri?(uri) elsif ActivityPub::TagManager.instance.local_uri?(uri)
local_id = ActivityPub::TagManager.instance.uri_to_local_id(uri) local_id = ActivityPub::TagManager.instance.uri_to_local_id(uri)

View File

@ -63,42 +63,42 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
end end
def content def content
@xml.at_xpath('./xmlns:content', xmlns: TagManager::XMLNS).content @xml.at_xpath('./xmlns:content', xmlns: OStatus::TagManager::XMLNS).content
end end
def content_language def content_language
@xml.at_xpath('./xmlns:content', xmlns: TagManager::XMLNS)['xml:lang']&.presence || 'en' @xml.at_xpath('./xmlns:content', xmlns: OStatus::TagManager::XMLNS)['xml:lang']&.presence || 'en'
end end
def content_warning def content_warning
@xml.at_xpath('./xmlns:summary', xmlns: TagManager::XMLNS)&.content || '' @xml.at_xpath('./xmlns:summary', xmlns: OStatus::TagManager::XMLNS)&.content || ''
end end
def visibility_scope def visibility_scope
@xml.at_xpath('./mastodon:scope', mastodon: TagManager::MTDN_XMLNS)&.content&.to_sym || :public @xml.at_xpath('./mastodon:scope', mastodon: OStatus::TagManager::MTDN_XMLNS)&.content&.to_sym || :public
end end
def published def published
@xml.at_xpath('./xmlns:published', xmlns: TagManager::XMLNS).content @xml.at_xpath('./xmlns:published', xmlns: OStatus::TagManager::XMLNS).content
end end
def thread? def thread?
!@xml.at_xpath('./thr:in-reply-to', thr: TagManager::THR_XMLNS).nil? !@xml.at_xpath('./thr:in-reply-to', thr: OStatus::TagManager::THR_XMLNS).nil?
end end
def thread def thread
thr = @xml.at_xpath('./thr:in-reply-to', thr: TagManager::THR_XMLNS) thr = @xml.at_xpath('./thr:in-reply-to', thr: OStatus::TagManager::THR_XMLNS)
[thr['ref'], thr['href']] [thr['ref'], thr['href']]
end end
private private
def find_or_create_conversation def find_or_create_conversation
uri = @xml.at_xpath('./ostatus:conversation', ostatus: TagManager::OS_XMLNS)&.attribute('ref')&.content uri = @xml.at_xpath('./ostatus:conversation', ostatus: OStatus::TagManager::OS_XMLNS)&.attribute('ref')&.content
return if uri.nil? return if uri.nil?
if TagManager.instance.local_id?(uri) if OStatus::TagManager.instance.local_id?(uri)
local_id = TagManager.instance.unique_tag_to_local_id(uri, 'Conversation') local_id = OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Conversation')
return Conversation.find_by(id: local_id) return Conversation.find_by(id: local_id)
end end
@ -108,8 +108,8 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
def save_mentions(parent) def save_mentions(parent)
processed_account_ids = [] processed_account_ids = []
@xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: TagManager::XMLNS).each do |link| @xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: OStatus::TagManager::XMLNS).each do |link|
next if [TagManager::TYPES[:group], TagManager::TYPES[:collection]].include? link['ostatus:object-type'] next if [OStatus::TagManager::TYPES[:group], OStatus::TagManager::TYPES[:collection]].include? link['ostatus:object-type']
mentioned_account = account_from_href(link['href']) mentioned_account = account_from_href(link['href'])
@ -123,14 +123,14 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
end end
def save_hashtags(parent) def save_hashtags(parent)
tags = @xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select(&:present?) tags = @xml.xpath('./xmlns:category', xmlns: OStatus::TagManager::XMLNS).map { |category| category['term'] }.select(&:present?)
ProcessHashtagsService.new.call(parent, tags) ProcessHashtagsService.new.call(parent, tags)
end end
def save_media(parent) def save_media(parent)
do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media? do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media?
@xml.xpath('./xmlns:link[@rel="enclosure"]', xmlns: TagManager::XMLNS).each do |link| @xml.xpath('./xmlns:link[@rel="enclosure"]', xmlns: OStatus::TagManager::XMLNS).each do |link|
next unless link['href'] next unless link['href']
media = MediaAttachment.where(status: parent, remote_url: link['href']).first_or_initialize(account: parent.account, status: parent, remote_url: link['href']) media = MediaAttachment.where(status: parent, remote_url: link['href']).first_or_initialize(account: parent.account, status: parent, remote_url: link['href'])
@ -156,7 +156,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
return if do_not_download return if do_not_download
@xml.xpath('./xmlns:link[@rel="emoji"]', xmlns: TagManager::XMLNS).each do |link| @xml.xpath('./xmlns:link[@rel="emoji"]', xmlns: OStatus::TagManager::XMLNS).each do |link|
next unless link['href'] && link['name'] next unless link['href'] && link['name']
shortcode = link['name'].delete(':') shortcode = link['name'].delete(':')

View File

@ -10,7 +10,7 @@ class OStatus::Activity::Share < OStatus::Activity::Creation
end end
def object def object
@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS) @xml.at_xpath('.//activity:object', activity: OStatus::TagManager::AS_XMLNS)
end end
private private

View File

@ -15,10 +15,10 @@ class OStatus::AtomSerializer
def author(account) def author(account)
author = Ox::Element.new('author') author = Ox::Element.new('author')
uri = TagManager.instance.uri_for(account) uri = OStatus::TagManager.instance.uri_for(account)
append_element(author, 'id', uri) append_element(author, 'id', uri)
append_element(author, 'activity:object-type', TagManager::TYPES[:person]) append_element(author, 'activity:object-type', OStatus::TagManager::TYPES[:person])
append_element(author, 'uri', uri) append_element(author, 'uri', uri)
append_element(author, 'name', account.username) append_element(author, 'name', account.username)
append_element(author, 'email', account.local? ? account.local_username_and_domain : account.acct) append_element(author, 'email', account.local? ? account.local_username_and_domain : account.acct)
@ -65,15 +65,15 @@ class OStatus::AtomSerializer
add_namespaces(entry) if root add_namespaces(entry) if root
append_element(entry, 'id', TagManager.instance.uri_for(stream_entry.status)) append_element(entry, 'id', OStatus::TagManager.instance.uri_for(stream_entry.status))
append_element(entry, 'published', stream_entry.created_at.iso8601) append_element(entry, 'published', stream_entry.created_at.iso8601)
append_element(entry, 'updated', stream_entry.updated_at.iso8601) append_element(entry, 'updated', stream_entry.updated_at.iso8601)
append_element(entry, 'title', stream_entry&.status&.title || "#{stream_entry.account.acct} deleted status") append_element(entry, 'title', stream_entry&.status&.title || "#{stream_entry.account.acct} deleted status")
entry << author(stream_entry.account) if root entry << author(stream_entry.account) if root
append_element(entry, 'activity:object-type', TagManager::TYPES[stream_entry.object_type]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[stream_entry.object_type])
append_element(entry, 'activity:verb', TagManager::VERBS[stream_entry.verb]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[stream_entry.verb])
entry << object(stream_entry.target) if stream_entry.targeted? entry << object(stream_entry.target) if stream_entry.targeted?
@ -88,7 +88,7 @@ class OStatus::AtomSerializer
append_element(entry, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(stream_entry.status)) append_element(entry, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(stream_entry.status))
append_element(entry, 'link', nil, rel: :self, type: 'application/atom+xml', href: account_stream_entry_url(stream_entry.account, stream_entry, format: 'atom')) append_element(entry, 'link', nil, rel: :self, type: 'application/atom+xml', href: account_stream_entry_url(stream_entry.account, stream_entry, format: 'atom'))
append_element(entry, 'thr:in-reply-to', nil, ref: TagManager.instance.uri_for(stream_entry.thread), href: TagManager.instance.url_for(stream_entry.thread)) if stream_entry.threaded? append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(stream_entry.thread), href: TagManager.instance.url_for(stream_entry.thread)) if stream_entry.threaded?
append_element(entry, 'ostatus:conversation', nil, ref: conversation_uri(stream_entry.status.conversation)) unless stream_entry&.status&.conversation_id.nil? append_element(entry, 'ostatus:conversation', nil, ref: conversation_uri(stream_entry.status.conversation)) unless stream_entry&.status&.conversation_id.nil?
entry entry
@ -97,20 +97,20 @@ class OStatus::AtomSerializer
def object(status) def object(status)
object = Ox::Element.new('activity:object') object = Ox::Element.new('activity:object')
append_element(object, 'id', TagManager.instance.uri_for(status)) append_element(object, 'id', OStatus::TagManager.instance.uri_for(status))
append_element(object, 'published', status.created_at.iso8601) append_element(object, 'published', status.created_at.iso8601)
append_element(object, 'updated', status.updated_at.iso8601) append_element(object, 'updated', status.updated_at.iso8601)
append_element(object, 'title', status.title) append_element(object, 'title', status.title)
object << author(status.account) object << author(status.account)
append_element(object, 'activity:object-type', TagManager::TYPES[status.object_type]) append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[status.object_type])
append_element(object, 'activity:verb', TagManager::VERBS[status.verb]) append_element(object, 'activity:verb', OStatus::TagManager::VERBS[status.verb])
serialize_status_attributes(object, status) serialize_status_attributes(object, status)
append_element(object, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(status)) append_element(object, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(status))
append_element(object, 'thr:in-reply-to', nil, ref: TagManager.instance.uri_for(status.thread), href: TagManager.instance.url_for(status.thread)) unless status.thread.nil? append_element(object, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(status.thread), href: TagManager.instance.url_for(status.thread)) unless status.thread.nil?
append_element(object, 'ostatus:conversation', nil, ref: conversation_uri(status.conversation)) unless status.conversation_id.nil? append_element(object, 'ostatus:conversation', nil, ref: conversation_uri(status.conversation)) unless status.conversation_id.nil?
object object
@ -122,14 +122,14 @@ class OStatus::AtomSerializer
description = "#{follow.account.acct} started following #{follow.target_account.acct}" description = "#{follow.account.acct} started following #{follow.target_account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(follow.created_at, follow.id, 'Follow')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(follow.created_at, follow.id, 'Follow'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
append_element(entry, 'content', description, type: :html) append_element(entry, 'content', description, type: :html)
entry << author(follow.account) entry << author(follow.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:follow]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:follow])
object = author(follow.target_account) object = author(follow.target_account)
object.value = 'activity:object' object.value = 'activity:object'
@ -142,13 +142,13 @@ class OStatus::AtomSerializer
entry = Ox::Element.new('entry') entry = Ox::Element.new('entry')
add_namespaces(entry) add_namespaces(entry)
append_element(entry, 'id', TagManager.instance.unique_tag(follow_request.created_at, follow_request.id, 'FollowRequest')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(follow_request.created_at, follow_request.id, 'FollowRequest'))
append_element(entry, 'title', "#{follow_request.account.acct} requested to follow #{follow_request.target_account.acct}") append_element(entry, 'title', "#{follow_request.account.acct} requested to follow #{follow_request.target_account.acct}")
entry << author(follow_request.account) entry << author(follow_request.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:request_friend]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:request_friend])
object = author(follow_request.target_account) object = author(follow_request.target_account)
object.value = 'activity:object' object.value = 'activity:object'
@ -161,19 +161,19 @@ class OStatus::AtomSerializer
entry = Ox::Element.new('entry') entry = Ox::Element.new('entry')
add_namespaces(entry) add_namespaces(entry)
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest'))
append_element(entry, 'title', "#{follow_request.target_account.acct} authorizes follow request by #{follow_request.account.acct}") append_element(entry, 'title', "#{follow_request.target_account.acct} authorizes follow request by #{follow_request.account.acct}")
entry << author(follow_request.target_account) entry << author(follow_request.target_account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:authorize]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:authorize])
object = Ox::Element.new('activity:object') object = Ox::Element.new('activity:object')
object << author(follow_request.account) object << author(follow_request.account)
append_element(object, 'activity:object-type', TagManager::TYPES[:activity]) append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(object, 'activity:verb', TagManager::VERBS[:request_friend]) append_element(object, 'activity:verb', OStatus::TagManager::VERBS[:request_friend])
inner_object = author(follow_request.target_account) inner_object = author(follow_request.target_account)
inner_object.value = 'activity:object' inner_object.value = 'activity:object'
@ -187,19 +187,19 @@ class OStatus::AtomSerializer
entry = Ox::Element.new('entry') entry = Ox::Element.new('entry')
add_namespaces(entry) add_namespaces(entry)
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest'))
append_element(entry, 'title', "#{follow_request.target_account.acct} rejects follow request by #{follow_request.account.acct}") append_element(entry, 'title', "#{follow_request.target_account.acct} rejects follow request by #{follow_request.account.acct}")
entry << author(follow_request.target_account) entry << author(follow_request.target_account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:reject]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:reject])
object = Ox::Element.new('activity:object') object = Ox::Element.new('activity:object')
object << author(follow_request.account) object << author(follow_request.account)
append_element(object, 'activity:object-type', TagManager::TYPES[:activity]) append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(object, 'activity:verb', TagManager::VERBS[:request_friend]) append_element(object, 'activity:verb', OStatus::TagManager::VERBS[:request_friend])
inner_object = author(follow_request.target_account) inner_object = author(follow_request.target_account)
inner_object.value = 'activity:object' inner_object.value = 'activity:object'
@ -215,14 +215,14 @@ class OStatus::AtomSerializer
description = "#{follow.account.acct} is no longer following #{follow.target_account.acct}" description = "#{follow.account.acct} is no longer following #{follow.target_account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, follow.id, 'Follow')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow.id, 'Follow'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
append_element(entry, 'content', description, type: :html) append_element(entry, 'content', description, type: :html)
entry << author(follow.account) entry << author(follow.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:unfollow]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unfollow])
object = author(follow.target_account) object = author(follow.target_account)
object.value = 'activity:object' object.value = 'activity:object'
@ -237,13 +237,13 @@ class OStatus::AtomSerializer
description = "#{block.account.acct} no longer wishes to interact with #{block.target_account.acct}" description = "#{block.account.acct} no longer wishes to interact with #{block.target_account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
entry << author(block.account) entry << author(block.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:block]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:block])
object = author(block.target_account) object = author(block.target_account)
object.value = 'activity:object' object.value = 'activity:object'
@ -258,13 +258,13 @@ class OStatus::AtomSerializer
description = "#{block.account.acct} no longer blocks #{block.target_account.acct}" description = "#{block.account.acct} no longer blocks #{block.target_account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
entry << author(block.account) entry << author(block.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:unblock]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unblock])
object = author(block.target_account) object = author(block.target_account)
object.value = 'activity:object' object.value = 'activity:object'
@ -279,18 +279,18 @@ class OStatus::AtomSerializer
description = "#{favourite.account.acct} favourited a status by #{favourite.status.account.acct}" description = "#{favourite.account.acct} favourited a status by #{favourite.status.account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(favourite.created_at, favourite.id, 'Favourite')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(favourite.created_at, favourite.id, 'Favourite'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
append_element(entry, 'content', description, type: :html) append_element(entry, 'content', description, type: :html)
entry << author(favourite.account) entry << author(favourite.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:favorite]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:favorite])
entry << object(favourite.status) entry << object(favourite.status)
append_element(entry, 'thr:in-reply-to', nil, ref: TagManager.instance.uri_for(favourite.status), href: TagManager.instance.url_for(favourite.status)) append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(favourite.status), href: TagManager.instance.url_for(favourite.status))
entry entry
end end
@ -301,18 +301,18 @@ class OStatus::AtomSerializer
description = "#{favourite.account.acct} no longer favourites a status by #{favourite.status.account.acct}" description = "#{favourite.account.acct} no longer favourites a status by #{favourite.status.account.acct}"
append_element(entry, 'id', TagManager.instance.unique_tag(Time.now.utc, favourite.id, 'Favourite')) append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, favourite.id, 'Favourite'))
append_element(entry, 'title', description) append_element(entry, 'title', description)
append_element(entry, 'content', description, type: :html) append_element(entry, 'content', description, type: :html)
entry << author(favourite.account) entry << author(favourite.account)
append_element(entry, 'activity:object-type', TagManager::TYPES[:activity]) append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity])
append_element(entry, 'activity:verb', TagManager::VERBS[:unfavorite]) append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unfavorite])
entry << object(favourite.status) entry << object(favourite.status)
append_element(entry, 'thr:in-reply-to', nil, ref: TagManager.instance.uri_for(favourite.status), href: TagManager.instance.url_for(favourite.status)) append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(favourite.status), href: TagManager.instance.url_for(favourite.status))
entry entry
end end
@ -332,17 +332,17 @@ class OStatus::AtomSerializer
def conversation_uri(conversation) def conversation_uri(conversation)
return conversation.uri if conversation.uri? return conversation.uri if conversation.uri?
TagManager.instance.unique_tag(conversation.created_at, conversation.id, 'Conversation') OStatus::TagManager.instance.unique_tag(conversation.created_at, conversation.id, 'Conversation')
end end
def add_namespaces(parent) def add_namespaces(parent)
parent['xmlns'] = TagManager::XMLNS parent['xmlns'] = OStatus::TagManager::XMLNS
parent['xmlns:thr'] = TagManager::THR_XMLNS parent['xmlns:thr'] = OStatus::TagManager::THR_XMLNS
parent['xmlns:activity'] = TagManager::AS_XMLNS parent['xmlns:activity'] = OStatus::TagManager::AS_XMLNS
parent['xmlns:poco'] = TagManager::POCO_XMLNS parent['xmlns:poco'] = OStatus::TagManager::POCO_XMLNS
parent['xmlns:media'] = TagManager::MEDIA_XMLNS parent['xmlns:media'] = OStatus::TagManager::MEDIA_XMLNS
parent['xmlns:ostatus'] = TagManager::OS_XMLNS parent['xmlns:ostatus'] = OStatus::TagManager::OS_XMLNS
parent['xmlns:mastodon'] = TagManager::MTDN_XMLNS parent['xmlns:mastodon'] = OStatus::TagManager::MTDN_XMLNS
end end
def serialize_status_attributes(entry, status) def serialize_status_attributes(entry, status)
@ -352,10 +352,10 @@ class OStatus::AtomSerializer
append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language) append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language)
status.mentions.each do |mentioned| status.mentions.each do |mentioned|
append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': TagManager::TYPES[:person], href: TagManager.instance.uri_for(mentioned.account)) append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account))
end end
append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': TagManager::TYPES[:collection], href: TagManager::COLLECTIONS[:public]) if status.public_visibility? append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:collection], href: OStatus::TagManager::COLLECTIONS[:public]) if status.public_visibility?
status.tags.each do |tag| status.tags.each do |tag|
append_element(entry, 'category', nil, term: tag.name) append_element(entry, 'category', nil, term: tag.name)

View File

@ -0,0 +1,73 @@
# frozen_string_literal: true
class OStatus::TagManager
include Singleton
include RoutingHelper
VERBS = {
post: 'http://activitystrea.ms/schema/1.0/post',
share: 'http://activitystrea.ms/schema/1.0/share',
favorite: 'http://activitystrea.ms/schema/1.0/favorite',
unfavorite: 'http://activitystrea.ms/schema/1.0/unfavorite',
delete: 'http://activitystrea.ms/schema/1.0/delete',
follow: 'http://activitystrea.ms/schema/1.0/follow',
request_friend: 'http://activitystrea.ms/schema/1.0/request-friend',
authorize: 'http://activitystrea.ms/schema/1.0/authorize',
reject: 'http://activitystrea.ms/schema/1.0/reject',
unfollow: 'http://ostatus.org/schema/1.0/unfollow',
block: 'http://mastodon.social/schema/1.0/block',
unblock: 'http://mastodon.social/schema/1.0/unblock',
}.freeze
TYPES = {
activity: 'http://activitystrea.ms/schema/1.0/activity',
note: 'http://activitystrea.ms/schema/1.0/note',
comment: 'http://activitystrea.ms/schema/1.0/comment',
person: 'http://activitystrea.ms/schema/1.0/person',
collection: 'http://activitystrea.ms/schema/1.0/collection',
group: 'http://activitystrea.ms/schema/1.0/group',
}.freeze
COLLECTIONS = {
public: 'http://activityschema.org/collection/public',
}.freeze
XMLNS = 'http://www.w3.org/2005/Atom'
MEDIA_XMLNS = 'http://purl.org/syndication/atommedia'
AS_XMLNS = 'http://activitystrea.ms/spec/1.0/'
THR_XMLNS = 'http://purl.org/syndication/thread/1.0'
POCO_XMLNS = 'http://portablecontacts.net/spec/1.0'
DFRN_XMLNS = 'http://purl.org/macgirvin/dfrn/1.0'
OS_XMLNS = 'http://ostatus.org/schema/1.0'
MTDN_XMLNS = 'http://mastodon.social/schema/1.0'
def unique_tag(date, id, type)
"tag:#{Rails.configuration.x.local_domain},#{date.strftime('%Y-%m-%d')}:objectId=#{id}:objectType=#{type}"
end
def unique_tag_to_local_id(tag, expected_type)
return nil unless local_id?(tag)
if ActivityPub::TagManager.instance.local_uri?(tag)
ActivityPub::TagManager.instance.uri_to_local_id(tag)
else
matches = Regexp.new("objectId=([\\d]+):objectType=#{expected_type}").match(tag)
return matches[1] unless matches.nil?
end
end
def local_id?(id)
id.start_with?("tag:#{Rails.configuration.x.local_domain}") || ActivityPub::TagManager.instance.local_uri?(id)
end
def uri_for(target)
return target.uri if target.respond_to?(:local?) && !target.local?
case target.object_type
when :person
account_url(target)
when :note, :comment, :activity
target.uri || unique_tag(target.created_at, target.id, 'Status')
end
end
end

View File

@ -6,62 +6,6 @@ class TagManager
include Singleton include Singleton
include RoutingHelper include RoutingHelper
VERBS = {
post: 'http://activitystrea.ms/schema/1.0/post',
share: 'http://activitystrea.ms/schema/1.0/share',
favorite: 'http://activitystrea.ms/schema/1.0/favorite',
unfavorite: 'http://activitystrea.ms/schema/1.0/unfavorite',
delete: 'http://activitystrea.ms/schema/1.0/delete',
follow: 'http://activitystrea.ms/schema/1.0/follow',
request_friend: 'http://activitystrea.ms/schema/1.0/request-friend',
authorize: 'http://activitystrea.ms/schema/1.0/authorize',
reject: 'http://activitystrea.ms/schema/1.0/reject',
unfollow: 'http://ostatus.org/schema/1.0/unfollow',
block: 'http://mastodon.social/schema/1.0/block',
unblock: 'http://mastodon.social/schema/1.0/unblock',
}.freeze
TYPES = {
activity: 'http://activitystrea.ms/schema/1.0/activity',
note: 'http://activitystrea.ms/schema/1.0/note',
comment: 'http://activitystrea.ms/schema/1.0/comment',
person: 'http://activitystrea.ms/schema/1.0/person',
collection: 'http://activitystrea.ms/schema/1.0/collection',
group: 'http://activitystrea.ms/schema/1.0/group',
}.freeze
COLLECTIONS = {
public: 'http://activityschema.org/collection/public',
}.freeze
XMLNS = 'http://www.w3.org/2005/Atom'
MEDIA_XMLNS = 'http://purl.org/syndication/atommedia'
AS_XMLNS = 'http://activitystrea.ms/spec/1.0/'
THR_XMLNS = 'http://purl.org/syndication/thread/1.0'
POCO_XMLNS = 'http://portablecontacts.net/spec/1.0'
DFRN_XMLNS = 'http://purl.org/macgirvin/dfrn/1.0'
OS_XMLNS = 'http://ostatus.org/schema/1.0'
MTDN_XMLNS = 'http://mastodon.social/schema/1.0'
def unique_tag(date, id, type)
"tag:#{Rails.configuration.x.local_domain},#{date.strftime('%Y-%m-%d')}:objectId=#{id}:objectType=#{type}"
end
def unique_tag_to_local_id(tag, expected_type)
return nil unless local_id?(tag)
if ActivityPub::TagManager.instance.local_uri?(tag)
ActivityPub::TagManager.instance.uri_to_local_id(tag)
else
matches = Regexp.new("objectId=([\\d]+):objectType=#{expected_type}").match(tag)
return matches[1] unless matches.nil?
end
end
def local_id?(id)
id.start_with?("tag:#{Rails.configuration.x.local_domain}") || ActivityPub::TagManager.instance.local_uri?(id)
end
def web_domain?(domain) def web_domain?(domain)
domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.web_domain).zero? domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.web_domain).zero?
end end
@ -90,17 +34,6 @@ class TagManager
TagManager.instance.web_domain?(domain) TagManager.instance.web_domain?(domain)
end end
def uri_for(target)
return target.uri if target.respond_to?(:local?) && !target.local?
case target.object_type
when :person
account_url(target)
when :note, :comment, :activity
target.uri || unique_tag(target.created_at, target.id, 'Status')
end
end
def url_for(target) def url_for(target)
return target.url if target.respond_to?(:local?) && !target.local? return target.url if target.respond_to?(:local?) && !target.local?

View File

@ -10,11 +10,11 @@ class RemoteProfile
end end
def root def root
@root ||= document.at_xpath('/atom:feed|/atom:entry', atom: TagManager::XMLNS) @root ||= document.at_xpath('/atom:feed|/atom:entry', atom: OStatus::TagManager::XMLNS)
end end
def author def author
@author ||= root.at_xpath('./atom:author|./dfrn:owner', atom: TagManager::XMLNS, dfrn: TagManager::DFRN_XMLNS) @author ||= root.at_xpath('./atom:author|./dfrn:owner', atom: OStatus::TagManager::XMLNS, dfrn: OStatus::TagManager::DFRN_XMLNS)
end end
def hub_link def hub_link
@ -22,15 +22,15 @@ class RemoteProfile
end end
def display_name def display_name
@display_name ||= author.at_xpath('./poco:displayName', poco: TagManager::POCO_XMLNS)&.content @display_name ||= author.at_xpath('./poco:displayName', poco: OStatus::TagManager::POCO_XMLNS)&.content
end end
def note def note
@note ||= author.at_xpath('./atom:summary|./poco:note', atom: TagManager::XMLNS, poco: TagManager::POCO_XMLNS)&.content @note ||= author.at_xpath('./atom:summary|./poco:note', atom: OStatus::TagManager::XMLNS, poco: OStatus::TagManager::POCO_XMLNS)&.content
end end
def scope def scope
@scope ||= author.at_xpath('./mastodon:scope', mastodon: TagManager::MTDN_XMLNS)&.content @scope ||= author.at_xpath('./mastodon:scope', mastodon: OStatus::TagManager::MTDN_XMLNS)&.content
end end
def avatar def avatar
@ -48,6 +48,6 @@ class RemoteProfile
private private
def link_href_from_xml(xml, type) def link_href_from_xml(xml, type)
xml.at_xpath(%(./atom:link[@rel="#{type}"]/@href), atom: TagManager::XMLNS)&.content xml.at_xpath(%(./atom:link[@rel="#{type}"]/@href), atom: OStatus::TagManager::XMLNS)&.content
end end
end end

View File

@ -13,7 +13,7 @@ class ActivityPub::DeleteSerializer < ActiveModel::Serializer
end end
def atom_uri def atom_uri
::TagManager.instance.uri_for(object) OStatus::TagManager.instance.uri_for(object)
end end
end end

View File

@ -63,13 +63,13 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
def atom_uri def atom_uri
return unless object.local? return unless object.local?
::TagManager.instance.uri_for(object) OStatus::TagManager.instance.uri_for(object)
end end
def in_reply_to_atom_uri def in_reply_to_atom_uri
return unless object.reply? && !object.thread.nil? return unless object.reply? && !object.thread.nil?
::TagManager.instance.uri_for(object.thread) OStatus::TagManager.instance.uri_for(object.thread)
end end
def conversation def conversation
@ -78,7 +78,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
if object.conversation.uri? if object.conversation.uri?
object.conversation.uri object.conversation.uri
else else
TagManager.instance.unique_tag(object.conversation.created_at, object.conversation.id, 'Conversation') OStatus::TagManager.instance.unique_tag(object.conversation.created_at, object.conversation.id, 'Conversation')
end end
end end

View File

@ -24,7 +24,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
end end
def uri def uri
TagManager.instance.uri_for(object) OStatus::TagManager.instance.uri_for(object)
end end
def content def content

View File

@ -5,12 +5,12 @@ module AuthorExtractor
return nil if xml.nil? return nil if xml.nil?
# Try <email> for acct # Try <email> for acct
acct = xml.at_xpath('./xmlns:author/xmlns:email', xmlns: TagManager::XMLNS)&.content acct = xml.at_xpath('./xmlns:author/xmlns:email', xmlns: OStatus::TagManager::XMLNS)&.content
# Try <name> + <uri> # Try <name> + <uri>
if acct.blank? if acct.blank?
username = xml.at_xpath('./xmlns:author/xmlns:name', xmlns: TagManager::XMLNS)&.content username = xml.at_xpath('./xmlns:author/xmlns:name', xmlns: OStatus::TagManager::XMLNS)&.content
uri = xml.at_xpath('./xmlns:author/xmlns:uri', xmlns: TagManager::XMLNS)&.content uri = xml.at_xpath('./xmlns:author/xmlns:uri', xmlns: OStatus::TagManager::XMLNS)&.content
return nil if username.blank? || uri.blank? return nil if username.blank? || uri.blank?

View File

@ -25,7 +25,7 @@ class FetchRemoteAccountService < BaseService
xml = Nokogiri::XML(body) xml = Nokogiri::XML(body)
xml.encoding = 'utf-8' xml.encoding = 'utf-8'
account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: TagManager::XMLNS), false) account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: OStatus::TagManager::XMLNS), false)
UpdateRemoteProfileService.new.call(xml, account) unless account.nil? UpdateRemoteProfileService.new.call(xml, account) unless account.nil?

View File

@ -27,7 +27,7 @@ class FetchRemoteStatusService < BaseService
xml = Nokogiri::XML(body) xml = Nokogiri::XML(body)
xml.encoding = 'utf-8' xml.encoding = 'utf-8'
account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: TagManager::XMLNS)) account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS))
domain = Addressable::URI.parse(url).normalized_host domain = Addressable::URI.parse(url).normalized_host
return nil unless !account.nil? && confirmed_domain?(domain, account) return nil unless !account.nil? && confirmed_domain?(domain, account)

View File

@ -16,7 +16,7 @@ class ProcessFeedService < BaseService
end end
def process_entries(xml, account) def process_entries(xml, account)
xml.xpath('//xmlns:entry', xmlns: TagManager::XMLNS).reverse_each.map { |entry| process_entry(entry, account) }.compact xml.xpath('//xmlns:entry', xmlns: OStatus::TagManager::XMLNS).reverse_each.map { |entry| process_entry(entry, account) }.compact
end end
def process_entry(xml, account) def process_entry(xml, account)

View File

@ -13,7 +13,7 @@ class ProcessInteractionService < BaseService
xml = Nokogiri::XML(body) xml = Nokogiri::XML(body)
xml.encoding = 'utf-8' xml.encoding = 'utf-8'
account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: TagManager::XMLNS)) account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS))
return if account.nil? || account.suspended? return if account.nil? || account.suspended?
@ -54,13 +54,13 @@ class ProcessInteractionService < BaseService
private private
def mentions_account?(xml, account) def mentions_account?(xml, account)
xml.xpath('/xmlns:entry/xmlns:link[@rel="mentioned"]', xmlns: TagManager::XMLNS).each { |mention_link| return true if [TagManager.instance.uri_for(account), TagManager.instance.url_for(account)].include?(mention_link.attribute('href').value) } xml.xpath('/xmlns:entry/xmlns:link[@rel="mentioned"]', xmlns: OStatus::TagManager::XMLNS).each { |mention_link| return true if [OStatus::TagManager.instance.uri_for(account), OStatus::TagManager.instance.url_for(account)].include?(mention_link.attribute('href').value) }
false false
end end
def verb(xml) def verb(xml)
raw = xml.at_xpath('//activity:verb', activity: TagManager::AS_XMLNS).content raw = xml.at_xpath('//activity:verb', activity: OStatus::TagManager::AS_XMLNS).content
TagManager::VERBS.key(raw) OStatus::TagManager::VERBS.key(raw)
rescue rescue
:post :post
end end
@ -104,7 +104,7 @@ class ProcessInteractionService < BaseService
end end
def delete_post!(xml, account) def delete_post!(xml, account)
status = Status.find(xml.at_xpath('//xmlns:id', xmlns: TagManager::XMLNS).content) status = Status.find(xml.at_xpath('//xmlns:id', xmlns: OStatus::TagManager::XMLNS).content)
return if status.nil? return if status.nil?
@ -137,12 +137,12 @@ class ProcessInteractionService < BaseService
def status(xml) def status(xml)
uri = activity_id(xml) uri = activity_id(xml)
return nil unless TagManager.instance.local_id?(uri) return nil unless OStatus::TagManager.instance.local_id?(uri)
Status.find(TagManager.instance.unique_tag_to_local_id(uri, 'Status')) Status.find(OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Status'))
end end
def activity_id(xml) def activity_id(xml)
xml.at_xpath('//activity:object', activity: TagManager::AS_XMLNS).at_xpath('./xmlns:id', xmlns: TagManager::XMLNS).content xml.at_xpath('//activity:object', activity: OStatus::TagManager::AS_XMLNS).at_xpath('./xmlns:id', xmlns: OStatus::TagManager::XMLNS).content
end end
def salmon def salmon

View File

@ -9,7 +9,7 @@ class VerifySalmonService < BaseService
xml = Nokogiri::XML(body) xml = Nokogiri::XML(body)
xml.encoding = 'utf-8' xml.encoding = 'utf-8'
account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: TagManager::XMLNS)) account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS))
if account.nil? if account.nil?
false false

View File

@ -108,7 +108,7 @@ RSpec.describe ActivityPub::TagManager do
it 'returns the local status for OStatus tag: URI' do it 'returns the local status for OStatus tag: URI' do
status = Fabricate(:status) status = Fabricate(:status)
expect(subject.uri_to_resource(::TagManager.instance.uri_for(status), Status)).to eq status expect(subject.uri_to_resource(OStatus::TagManager.instance.uri_for(status), Status)).to eq status
end end
it 'returns the local status for OStatus StreamEntry URL' do it 'returns the local status for OStatus StreamEntry URL' do

View File

@ -17,7 +17,7 @@ RSpec.describe OStatus::AtomSerializer do
follow_request_salmon = serialize(follow_request) follow_request_salmon = serialize(follow_request)
object_type = follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with request_friend type' do it 'appends activity:verb element with request_friend type' do
@ -26,7 +26,7 @@ RSpec.describe OStatus::AtomSerializer do
follow_request_salmon = serialize(follow_request) follow_request_salmon = serialize(follow_request)
verb = follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:request_friend] expect(verb.text).to eq OStatus::TagManager::VERBS[:request_friend]
end end
it 'appends activity:object with target account' do it 'appends activity:object with target account' do
@ -44,13 +44,13 @@ RSpec.describe OStatus::AtomSerializer do
it 'adds namespaces' do it 'adds namespaces' do
element = serialize element = serialize
expect(element['xmlns']).to eq TagManager::XMLNS expect(element['xmlns']).to eq OStatus::TagManager::XMLNS
expect(element['xmlns:thr']).to eq TagManager::THR_XMLNS expect(element['xmlns:thr']).to eq OStatus::TagManager::THR_XMLNS
expect(element['xmlns:activity']).to eq TagManager::AS_XMLNS expect(element['xmlns:activity']).to eq OStatus::TagManager::AS_XMLNS
expect(element['xmlns:poco']).to eq TagManager::POCO_XMLNS expect(element['xmlns:poco']).to eq OStatus::TagManager::POCO_XMLNS
expect(element['xmlns:media']).to eq TagManager::MEDIA_XMLNS expect(element['xmlns:media']).to eq OStatus::TagManager::MEDIA_XMLNS
expect(element['xmlns:ostatus']).to eq TagManager::OS_XMLNS expect(element['xmlns:ostatus']).to eq OStatus::TagManager::OS_XMLNS
expect(element['xmlns:mastodon']).to eq TagManager::MTDN_XMLNS expect(element['xmlns:mastodon']).to eq OStatus::TagManager::MTDN_XMLNS
end end
end end
@ -98,7 +98,7 @@ RSpec.describe OStatus::AtomSerializer do
mentioned = element.nodes.find do |node| mentioned = element.nodes.find do |node|
node.name == 'link' && node.name == 'link' &&
node[:rel] == 'mentioned' && node[:rel] == 'mentioned' &&
node['ostatus:object-type'] == TagManager::TYPES[:person] node['ostatus:object-type'] == OStatus::TagManager::TYPES[:person]
end end
expect(mentioned[:href]).to eq 'https://cb6e6126.ngrok.io/users/username' expect(mentioned[:href]).to eq 'https://cb6e6126.ngrok.io/users/username'
@ -188,7 +188,7 @@ RSpec.describe OStatus::AtomSerializer do
author = OStatus::AtomSerializer.new.author(account) author = OStatus::AtomSerializer.new.author(account)
object_type = author.nodes.find { |node| node.name == 'activity:object-type' } object_type = author.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:person] expect(object_type.text).to eq OStatus::TagManager::TYPES[:person]
end end
it 'appends email element with username and domain for local account' do it 'appends email element with username and domain for local account' do
@ -358,9 +358,9 @@ RSpec.describe OStatus::AtomSerializer do
mentioned_person = entry.nodes.find do |node| mentioned_person = entry.nodes.find do |node|
node.name == 'link' && node.name == 'link' &&
node[:rel] == 'mentioned' && node[:rel] == 'mentioned' &&
node['ostatus:object-type'] == TagManager::TYPES[:collection] node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection]
end end
expect(mentioned_person[:href]).to eq TagManager::COLLECTIONS[:public] expect(mentioned_person[:href]).to eq OStatus::TagManager::COLLECTIONS[:public]
end end
it 'does not append link element for the public collection if status is not publicly visible' do it 'does not append link element for the public collection if status is not publicly visible' do
@ -371,8 +371,8 @@ RSpec.describe OStatus::AtomSerializer do
entry.nodes.each do |node| entry.nodes.each do |node|
if node.name == 'link' && if node.name == 'link' &&
node[:rel] == 'mentioned' && node[:rel] == 'mentioned' &&
node['ostatus:object-type'] == TagManager::TYPES[:collection] node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection]
expect(mentioned_collection[:href]).not_to eq TagManager::COLLECTIONS[:public] expect(mentioned_collection[:href]).not_to eq OStatus::TagManager::COLLECTIONS[:public]
end end
end end
end end
@ -506,7 +506,7 @@ RSpec.describe OStatus::AtomSerializer do
status = Fabricate(:status) status = Fabricate(:status)
entry = OStatus::AtomSerializer.new.entry(status.stream_entry) entry = OStatus::AtomSerializer.new.entry(status.stream_entry)
object_type = entry.nodes.find { |node| node.name == 'activity:object-type' } object_type = entry.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:note] expect(object_type.text).to eq OStatus::TagManager::TYPES[:note]
end end
it 'appends activity:verb element with object type' do it 'appends activity:verb element with object type' do
@ -515,7 +515,7 @@ RSpec.describe OStatus::AtomSerializer do
entry = OStatus::AtomSerializer.new.entry(status.stream_entry) entry = OStatus::AtomSerializer.new.entry(status.stream_entry)
object_type = entry.nodes.find { |node| node.name == 'activity:verb' } object_type = entry.nodes.find { |node| node.name == 'activity:verb' }
expect(object_type.text).to eq TagManager::VERBS[:post] expect(object_type.text).to eq OStatus::TagManager::VERBS[:post]
end end
it 'appends activity:object element with target if present' do it 'appends activity:object element with target if present' do
@ -739,8 +739,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(block_salmon.id.text).to( expect(block_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, block.id, 'Block')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
.or(eq(TagManager.instance.unique_tag(time_after.utc, block.id, 'Block'))) .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
) )
end end
@ -769,7 +769,7 @@ RSpec.describe OStatus::AtomSerializer do
block_salmon = OStatus::AtomSerializer.new.block_salmon(block) block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
object_type = block_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = block_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with block' do it 'appends activity:verb element with block' do
@ -778,7 +778,7 @@ RSpec.describe OStatus::AtomSerializer do
block_salmon = OStatus::AtomSerializer.new.block_salmon(block) block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
verb = block_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = block_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:block] expect(verb.text).to eq OStatus::TagManager::VERBS[:block]
end end
it 'appends activity:object element with target account' do it 'appends activity:object element with target account' do
@ -826,8 +826,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(unblock_salmon.id.text).to( expect(unblock_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, block.id, 'Block')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
.or(eq(TagManager.instance.unique_tag(time_after.utc, block.id, 'Block'))) .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
) )
end end
@ -856,7 +856,7 @@ RSpec.describe OStatus::AtomSerializer do
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
object_type = unblock_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = unblock_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with block' do it 'appends activity:verb element with block' do
@ -865,7 +865,7 @@ RSpec.describe OStatus::AtomSerializer do
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
verb = unblock_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = unblock_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:unblock] expect(verb.text).to eq OStatus::TagManager::VERBS[:unblock]
end end
it 'appends activity:object element with target account' do it 'appends activity:object element with target account' do
@ -934,7 +934,7 @@ RSpec.describe OStatus::AtomSerializer do
favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite)
verb = favourite_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = favourite_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:favorite] expect(verb.text).to eq OStatus::TagManager::VERBS[:favorite]
end end
it 'appends activity:object element with status' do it 'appends activity:object element with status' do
@ -1005,8 +1005,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(unfavourite_salmon.id.text).to( expect(unfavourite_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite'))
.or(eq(TagManager.instance.unique_tag(time_after.utc, favourite.id, 'Favourite'))) .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, favourite.id, 'Favourite')))
) )
end end
@ -1034,7 +1034,7 @@ RSpec.describe OStatus::AtomSerializer do
unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite)
verb = unfavourite_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = unfavourite_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:unfavorite] expect(verb.text).to eq OStatus::TagManager::VERBS[:unfavorite]
end end
it 'appends activity:object element with status' do it 'appends activity:object element with status' do
@ -1117,7 +1117,7 @@ RSpec.describe OStatus::AtomSerializer do
follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow)
object_type = follow_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = follow_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with follow' do it 'appends activity:verb element with follow' do
@ -1126,7 +1126,7 @@ RSpec.describe OStatus::AtomSerializer do
follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow)
verb = follow_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = follow_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:follow] expect(verb.text).to eq OStatus::TagManager::VERBS[:follow]
end end
it 'appends activity:object element with target account' do it 'appends activity:object element with target account' do
@ -1190,8 +1190,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(unfollow_salmon.id.text).to( expect(unfollow_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow'))
.or(eq(TagManager.instance.unique_tag(time_after.utc, follow.id, 'Follow'))) .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow.id, 'Follow')))
) )
end end
@ -1234,7 +1234,7 @@ RSpec.describe OStatus::AtomSerializer do
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
object_type = unfollow_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = unfollow_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with follow' do it 'appends activity:verb element with follow' do
@ -1244,7 +1244,7 @@ RSpec.describe OStatus::AtomSerializer do
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
verb = unfollow_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = unfollow_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:unfollow] expect(verb.text).to eq OStatus::TagManager::VERBS[:unfollow]
end end
it 'appends activity:object element with target account' do it 'appends activity:object element with target account' do
@ -1338,8 +1338,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(authorize_follow_request_salmon.id.text).to( expect(authorize_follow_request_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
.or(eq(TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest'))) .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest')))
) )
end end
@ -1359,7 +1359,7 @@ RSpec.describe OStatus::AtomSerializer do
authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)
object_type = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with authorize' do it 'appends activity:verb element with authorize' do
@ -1368,7 +1368,7 @@ RSpec.describe OStatus::AtomSerializer do
authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)
verb = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:authorize] expect(verb.text).to eq OStatus::TagManager::VERBS[:authorize]
end end
it 'returns element whose rendered view creates follow from follow request when processed' do it 'returns element whose rendered view creates follow from follow request when processed' do
@ -1407,8 +1407,8 @@ RSpec.describe OStatus::AtomSerializer do
time_after = Time.now time_after = Time.now
expect(reject_follow_request_salmon.id.text).to( expect(reject_follow_request_salmon.id.text).to(
eq(TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest')) eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
.or(TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest')) .or(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest'))
) )
end end
@ -1424,14 +1424,14 @@ RSpec.describe OStatus::AtomSerializer do
follow_request = Fabricate(:follow_request) follow_request = Fabricate(:follow_request)
reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)
object_type = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } object_type = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:activity] expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
end end
it 'appends activity:verb element with authorize' do it 'appends activity:verb element with authorize' do
follow_request = Fabricate(:follow_request) follow_request = Fabricate(:follow_request)
reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)
verb = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } verb = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
expect(verb.text).to eq TagManager::VERBS[:reject] expect(verb.text).to eq OStatus::TagManager::VERBS[:reject]
end end
it 'returns element whose rendered view deletes follow request when processed' do it 'returns element whose rendered view deletes follow request when processed' do
@ -1503,7 +1503,7 @@ RSpec.describe OStatus::AtomSerializer do
entry = OStatus::AtomSerializer.new.object(status) entry = OStatus::AtomSerializer.new.object(status)
object_type = entry.nodes.find { |node| node.name == 'activity:object-type' } object_type = entry.nodes.find { |node| node.name == 'activity:object-type' }
expect(object_type.text).to eq TagManager::TYPES[:note] expect(object_type.text).to eq OStatus::TagManager::TYPES[:note]
end end
it 'appends activity:verb element with verb' do it 'appends activity:verb element with verb' do
@ -1512,7 +1512,7 @@ RSpec.describe OStatus::AtomSerializer do
entry = OStatus::AtomSerializer.new.object(status) entry = OStatus::AtomSerializer.new.object(status)
object_type = entry.nodes.find { |node| node.name == 'activity:verb' } object_type = entry.nodes.find { |node| node.name == 'activity:verb' }
expect(object_type.text).to eq TagManager::VERBS[:post] expect(object_type.text).to eq OStatus::TagManager::VERBS[:post]
end end
it 'appends link element for an alternative' do it 'appends link element for an alternative' do

View File

@ -0,0 +1,70 @@
# frozen_string_literal: true
require 'rails_helper'
describe OStatus::TagManager do
describe '#unique_tag' do
it 'returns a unique tag' do
expect(OStatus::TagManager.instance.unique_tag(Time.utc(2000), 12, 'Status')).to eq 'tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status'
end
end
describe '#unique_tag_to_local_id' do
it 'returns the ID part' do
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status', 'Status')).to eql '12'
end
it 'returns nil if it is not local id' do
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:remote,2000-01-01:objectId=12:objectType=Status', 'Status')).to eq nil
end
it 'returns nil if it is not expected type' do
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Block', 'Status')).to eq nil
end
it 'returns nil if it does not have object ID' do
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectType=Status', 'Status')).to eq nil
end
end
describe '#local_id?' do
it 'returns true for a local ID' do
expect(OStatus::TagManager.instance.local_id?('tag:cb6e6126.ngrok.io;objectId=12:objectType=Status')).to be true
end
it 'returns false for a foreign ID' do
expect(OStatus::TagManager.instance.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
end
end
describe '#uri_for' do
subject { OStatus::TagManager.instance.uri_for(target) }
context 'comment object' do
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
it 'returns the unique tag for status' do
expect(target.object_type).to eq :comment
is_expected.to eq target.uri
end
end
context 'note object' do
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
it 'returns the unique tag for status' do
expect(target.object_type).to eq :note
is_expected.to eq target.uri
end
end
context 'person object' do
let(:target) { Fabricate(:account, username: 'alice') }
it 'returns the URL for account' do
expect(target.object_type).to eq :person
is_expected.to eq 'https://cb6e6126.ngrok.io/users/alice'
end
end
end
end

View File

@ -120,71 +120,6 @@ RSpec.describe TagManager do
end end
end end
describe '#unique_tag' do
it 'returns a unique tag' do
expect(TagManager.instance.unique_tag(Time.utc(2000), 12, 'Status')).to eq 'tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status'
end
end
describe '#unique_tag_to_local_id' do
it 'returns the ID part' do
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status', 'Status')).to eql '12'
end
it 'returns nil if it is not local id' do
expect(TagManager.instance.unique_tag_to_local_id('tag:remote,2000-01-01:objectId=12:objectType=Status', 'Status')).to eq nil
end
it 'returns nil if it is not expected type' do
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Block', 'Status')).to eq nil
end
it 'returns nil if it does not have object ID' do
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectType=Status', 'Status')).to eq nil
end
end
describe '#local_id?' do
it 'returns true for a local ID' do
expect(TagManager.instance.local_id?('tag:cb6e6126.ngrok.io;objectId=12:objectType=Status')).to be true
end
it 'returns false for a foreign ID' do
expect(TagManager.instance.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
end
end
describe '#uri_for' do
subject { TagManager.instance.uri_for(target) }
context 'comment object' do
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
it 'returns the unique tag for status' do
expect(target.object_type).to eq :comment
is_expected.to eq target.uri
end
end
context 'note object' do
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
it 'returns the unique tag for status' do
expect(target.object_type).to eq :note
is_expected.to eq target.uri
end
end
context 'person object' do
let(:target) { Fabricate(:account, username: 'alice') }
it 'returns the URL for account' do
expect(target.object_type).to eq :person
is_expected.to eq 'https://cb6e6126.ngrok.io/users/alice'
end
end
end
describe '#url_for' do describe '#url_for' do
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }

View File

@ -42,7 +42,7 @@ RSpec.describe AuthorizeFollowService do
it 'sends a follow request authorization salmon slap' do it 'sends a follow request authorization salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:authorize]) xml.match(OStatus::TagManager::VERBS[:authorize])
}).to have_been_made.once }).to have_been_made.once
end end
end end

View File

@ -50,14 +50,14 @@ RSpec.describe BatchedRemoveStatusService do
it 'sends PuSH update to PuSH subscribers' do it 'sends PuSH update to PuSH subscribers' do
expect(a_request(:post, 'http://example.com/push').with { |req| expect(a_request(:post, 'http://example.com/push').with { |req|
matches = req.body.match(TagManager::VERBS[:delete]) matches = req.body.match(OStatus::TagManager::VERBS[:delete])
}).to have_been_made.at_least_once }).to have_been_made.at_least_once
end end
it 'sends Salmon slap to previously mentioned users' do it 'sends Salmon slap to previously mentioned users' do
expect(a_request(:post, "http://example.com/salmon").with { |req| expect(a_request(:post, "http://example.com/salmon").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:delete]) xml.match(OStatus::TagManager::VERBS[:delete])
}).to have_been_made.once }).to have_been_made.once
end end

View File

@ -32,7 +32,7 @@ RSpec.describe BlockService do
it 'sends a block salmon slap' do it 'sends a block salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:block]) xml.match(OStatus::TagManager::VERBS[:block])
}).to have_been_made.once }).to have_been_made.once
end end
end end

View File

@ -34,7 +34,7 @@ RSpec.describe FavouriteService do
it 'sends a salmon slap' do it 'sends a salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:favorite]) xml.match(OStatus::TagManager::VERBS[:favorite])
}).to have_been_made.once }).to have_been_made.once
end end
end end

View File

@ -60,7 +60,7 @@ RSpec.describe FollowService do
it 'sends a follow request salmon slap' do it 'sends a follow request salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:request_friend]) xml.match(OStatus::TagManager::VERBS[:request_friend])
}).to have_been_made.once }).to have_been_made.once
end end
end end
@ -81,7 +81,7 @@ RSpec.describe FollowService do
it 'sends a follow salmon slap' do it 'sends a follow salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:follow]) xml.match(OStatus::TagManager::VERBS[:follow])
}).to have_been_made.once }).to have_been_made.once
end end

View File

@ -42,7 +42,7 @@ RSpec.describe RejectFollowService do
it 'sends a follow request rejection salmon slap' do it 'sends a follow request rejection salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:reject]) xml.match(OStatus::TagManager::VERBS[:reject])
}).to have_been_made.once }).to have_been_made.once
end end
end end

View File

@ -34,7 +34,7 @@ RSpec.describe RemoveStatusService do
it 'sends PuSH update to PuSH subscribers' do it 'sends PuSH update to PuSH subscribers' do
expect(a_request(:post, 'http://example.com/push').with { |req| expect(a_request(:post, 'http://example.com/push').with { |req|
req.body.match(TagManager::VERBS[:delete]) req.body.match(OStatus::TagManager::VERBS[:delete])
}).to have_been_made }).to have_been_made
end end
@ -45,7 +45,7 @@ RSpec.describe RemoveStatusService do
it 'sends Salmon slap to previously mentioned users' do it 'sends Salmon slap to previously mentioned users' do
expect(a_request(:post, "http://example.com/salmon").with { |req| expect(a_request(:post, "http://example.com/salmon").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:delete]) xml.match(OStatus::TagManager::VERBS[:delete])
}).to have_been_made.once }).to have_been_made.once
end end

View File

@ -34,7 +34,7 @@ RSpec.describe UnblockService do
it 'sends an unblock salmon slap' do it 'sends an unblock salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:unblock]) xml.match(OStatus::TagManager::VERBS[:unblock])
}).to have_been_made.once }).to have_been_made.once
end end
end end

View File

@ -34,7 +34,7 @@ RSpec.describe UnfollowService do
it 'sends an unfollow salmon slap' do it 'sends an unfollow salmon slap' do
expect(a_request(:post, "http://salmon.example.com/").with { |req| expect(a_request(:post, "http://salmon.example.com/").with { |req|
xml = OStatus2::Salmon.new.unpack(req.body) xml = OStatus2::Salmon.new.unpack(req.body)
xml.match(TagManager::VERBS[:unfollow]) xml.match(OStatus::TagManager::VERBS[:unfollow])
}).to have_been_made.once }).to have_been_made.once
end end
end end