Refactor comment tree calculation using a PORO
This commit is contained in:
28
lib/comment_tree.rb
Normal file
28
lib/comment_tree.rb
Normal 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
|
||||
Reference in New Issue
Block a user