diff options
author | Rhenium <rhenium@rhe.jp> | 2014-02-11 00:50:49 +0900 |
---|---|---|
committer | Rhenium <rhenium@rhe.jp> | 2014-02-11 00:50:49 +0900 |
commit | 33689cbce02d01aa59aab7d2aaba9e7127aacd9f (patch) | |
tree | f9642a7f081d4360b38e0d5ce842ee3c1c6d3670 /app/models/tweet.rb | |
parent | 051a858e2cad2f09f70d0b221f508fc4f30db964 (diff) | |
download | aclog-33689cbce02d01aa59aab7d2aaba9e7127aacd9f.tar.gz |
show reply tree on tweets/show (single tweet page)
Diffstat (limited to 'app/models/tweet.rb')
-rw-r--r-- | app/models/tweet.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/app/models/tweet.rb b/app/models/tweet.rb index c9c9c14..a89288c 100644 --- a/app/models/tweet.rb +++ b/app/models/tweet.rb @@ -42,6 +42,30 @@ class Tweet < ActiveRecord::Base end end + def reply_ancestors(max_level = Float::INFINITY) + nodes = [] + node = self + level = 0 + + while node.in_reply_to && level < max_level + nodes.unshift(node = node.in_reply_to) + level += 1 + end + nodes + end + + def reply_descendants(max_level = Float::INFINITY) + nodes = [] + c_nodes = [self] + level = 0 + + while c_nodes.size > 0 && level < max_level + nodes.concat(c_nodes.map! {|node| node.replies }.flatten!) + level += 1 + end + nodes.sort_by {|t| t.id } + end + def self.from_json(json) find_by(id: json[:id]) || begin user = User.from_json(json[:user]) |