refactors comment tree

This commit is contained in:
rgarcia
2016-01-07 15:18:45 +01:00
parent 816a95b7b7
commit 35704f2be9

View File

@@ -2,24 +2,34 @@ class CommentTree
ROOT_COMMENTS_PER_PAGE = 10 ROOT_COMMENTS_PER_PAGE = 10
attr_accessor :root_comments, :comments attr_accessor :root_comments, :comments, :commentable, :page, :order
def initialize(commentable, page, order = 'confidence_score') def initialize(commentable, page, order = 'confidence_score')
@root_comments = commentable.comments.roots.send("sort_by_#{order}").page(page).per(ROOT_COMMENTS_PER_PAGE).for_render @commentable = commentable
@page = page
root_descendants = @root_comments.each_with_object([]) do |root, col| @order = order
col.concat(Comment.descendants_of(root).send("sort_descendants_by_#{order}").for_render.to_a)
end
@comments = root_comments + root_descendants @comments = root_comments + root_descendants
end
@comments_by_parent_id = @comments.each_with_object({}) do |comment, col| def root_comments
(col[comment.parent_id] ||= []) << comment commentable.comments.roots.send("sort_by_#{order}").page(page).per(ROOT_COMMENTS_PER_PAGE).for_render
end
def root_descendants
root_comments.each_with_object([]) do |root, array|
array.concat(Comment.descendants_of(root).send("sort_descendants_by_#{order}").for_render.to_a)
end end
end end
def children_of(parent) def ordered_children_of(parent)
@comments_by_parent_id[parent.id] || [] comments_by_parent_id[parent.id] || []
end
def comments_by_parent_id
comments.each_with_object({}) do |comment, array|
(array[comment.parent_id] ||= []) << comment
end
end end
def comment_authors def comment_authors