aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/tweet.rb
diff options
context:
space:
mode:
authorRhenium <rhenium@rhe.jp>2014-02-11 00:50:49 +0900
committerRhenium <rhenium@rhe.jp>2014-02-11 00:50:49 +0900
commit33689cbce02d01aa59aab7d2aaba9e7127aacd9f (patch)
treef9642a7f081d4360b38e0d5ce842ee3c1c6d3670 /app/models/tweet.rb
parent051a858e2cad2f09f70d0b221f508fc4f30db964 (diff)
downloadaclog-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.rb24
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])