Skip to content
Snippets Groups Projects
Commit 35aafdba authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Ancestors and descendants of statuses

parent 7e00a21e
No related branches found
No related tags found
No related merge requests found
......@@ -76,6 +76,14 @@ class Status < ActiveRecord::Base
m
end
def ancestors
Status.where(id: Status.find_by_sql(['WITH RECURSIVE search_tree(id, in_reply_to_id, path) AS (SELECT id, in_reply_to_id, ARRAY[id] FROM statuses WHERE id = ? UNION ALL SELECT statuses.id, statuses.in_reply_to_id, path || statuses.id FROM search_tree JOIN statuses ON statuses.id = search_tree.in_reply_to_id WHERE NOT statuses.id = ANY(path)) SELECT id FROM search_tree ORDER BY path DESC', self.id]) - [self])
end
def descendants
Status.where(id: Status.find_by_sql(['WITH RECURSIVE search_tree(id, path) AS (SELECT id, ARRAY[id] FROM statuses WHERE id = ? UNION ALL SELECT statuses.id, path || statuses.id FROM search_tree JOIN statuses ON statuses.in_reply_to_id = search_tree.id WHERE NOT statuses.id = ANY(path)) SELECT id FROM search_tree ORDER BY path', self.id]) - [self])
end
after_create do
self.account.stream_entries.create!(activity: self)
end
......
- if status.reply? && include_threads
= render partial: 'status', locals: { status: status.thread, include_threads: false, is_predecessor: true, is_successor: false }
- status.ancestors.with_includes.with_counters.each do |status|
= render partial: 'status', locals: { status: status, include_threads: false, is_predecessor: true, is_successor: false }
.entry{ class: entry_classes(status, is_predecessor, is_successor, include_threads) }
- if status.reblog?
......@@ -32,5 +33,5 @@
= status.reblog? ? (status.reblog.local? ? linkify(status.reblog) : status.reblog.content.html_safe) : (status.local? ? linkify(status) : status.content.html_safe)
- if include_threads
- status.replies.each do |status|
- status.descendants.with_includes.with_counters.each do |status|
= render partial: 'status', locals: { status: status, include_threads: false, is_successor: true, is_predecessor: false }
......@@ -5,7 +5,7 @@ RSpec.describe Api::SubscriptionsController, type: :controller do
describe 'GET #show' do
before do
get :show, id: account.id, 'hub.topic': 'topic_url', 'hub.verify_token': 123, 'hub.challenge': '456'
get :show, :id => account.id, 'hub.topic' => 'topic_url', 'hub.verify_token' => 123, 'hub.challenge' => '456'
end
it 'returns http success' do
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment