Refactor comment tree calculation using a PORO

This commit is contained in:
kikito
2015-10-30 17:00:32 +01:00
parent bfd89ed15a
commit 60b3c65b05
6 changed files with 42 additions and 22 deletions

28
lib/comment_tree.rb Normal file
View File

@@ -0,0 +1,28 @@
class CommentTree
ROOT_COMMENTS_PER_PAGE = 10
attr_accessor :root_comments, :comments
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
root_descendants = @root_comments.each_with_object([]) do |root, col|
col += Comment.descendants_of(root).send("sort_by_#{order}").for_render.to_a
end
@comments = root_comments + root_descendants
@comments_by_parent_id = @comments.each_with_object({}) do |comment, col|
(col[comment.parent_id] ||= []) << comment
end
end
def children_of(parent)
@comments_by_parent_id[parent.id] || []
end
def comment_authors
comments.map(&:author)
end
end