機能 #795 » 795-ancestors-fix.patch
core/message.rb | ||
---|---|---|
def quoted_by?
|
||
!quoted_by.empty? end
|
||
# 投稿の宛先になっている投稿を再帰的にさかのぼるような _Enumerator_ を返す。
|
||
# ==== Return
|
||
# Enumerator
|
||
def ancestors_enumerator(force_retrieve=false)
|
||
Enumerator.new do |yielder|
|
||
message = self
|
||
while message
|
||
yielder << message
|
||
message = message.receive_message(force_retrieve) end end end
|
||
private :ancestors_enumerator
|
||
# 投稿の宛先になっている投稿を再帰的にさかのぼり、それぞれを引数に取って
|
||
# ブロックが呼ばれる。
|
||
# ブロックが渡されていない場合、 _Enumerator_ を返す。
|
||
# _force_retrieve_ は、 Message#receive_message の引数にそのまま渡される
|
||
# ==== Return
|
||
# obj|Enumerator
|
||
def each_ancestors(force_retrieve=false, &proc)
|
||
proc.call(self)
|
||
parent = receive_message(force_retrieve)
|
||
parent.each_ancestors(force_retrieve, &proc) if parent
|
||
end
|
||
e = ancestors_enumerator(force_retrieve)
|
||
if block_given?
|
||
e.each(&proc)
|
||
else
|
||
e end end
|
||
# 投稿の宛先になっている投稿を再帰的にさかのぼり、それらを配列にして返す。
|
||
# 配列インデックスが大きいものほど、早く投稿された投稿になる。
|
||
# ([0]は[1]へのリプライ)
|
||
def ancestors(force_retrieve=false)
|
||
Enumerator.new do |yielder|
|
||
message = self
|
||
while message
|
||
yielder << message
|
||
message = message.receive_message(force_retrieve) end end end
|
||
ancestors_enumerator(force_retrieve).to_a end
|
||
# 投稿の宛先になっている投稿を再帰的にさかのぼり、何にも宛てられていない投稿を返す。
|
||
# つまり、一番祖先を返す。
|
||
def ancestor(force_retrieve=false)
|
||
ancestors(force_retrieve).to_a.last end
|
||
ancestors(force_retrieve).last end
|
||
# retweet元を再帰的に遡り、それらを配列にして返す。
|
||
# 配列の最初の要素は必ずselfになり、以降は直前の要素のリツイート元となる。
|
||
# ([0]は[1]へのリツイート)
|
||
# retweet元を再帰的にさかのぼるような _Enumerator_ を返す。
|
||
# この _Enumerator_ は最初にこの _Message_ 自身を yield し、以降は直前に yield した
|
||
# 要素のretweet元を yield する。
|
||
# ==== Return
|
||
# Enumerator
|
||
def retweet_ancestors(force_retrieve=false)
|
||
def retweet_ancestors_enumerator(force_retrieve=false)
|
||
Enumerator.new do |yielder|
|
||
message = self
|
||
while message
|
||
yielder << message
|
||
message = message.retweet_parent(force_retrieve)
|
||
end end end
|
||
private :retweet_ancestors_enumerator
|
||
# retweet元を再帰的にさかのぼり、それぞれを引数に取って
|
||
# ブロックが呼ばれる。
|
||
# ブロックが渡されていない場合、 _Enumerator_ を返す。
|
||
# _force_retrieve_ は、 Message#retweet_parent の引数にそのまま渡される
|
||
# ==== Return
|
||
# obj|Enumerator
|
||
def each_retweet_ancestors(force_retrieve=false, &proc)
|
||
e = retweet_ancestors_enumerator(force_retrieve)
|
||
if block_given?
|
||
e.each(&proc)
|
||
else
|
||
e end end
|
||
# retweet元を再帰的に遡り、それらを配列にして返す。
|
||
# 配列の最初の要素は必ずselfになり、以降は直前の要素のリツイート元となる。
|
||
# ([0]は[1]へのリツイート)
|
||
# ==== Return
|
||
# Enumerator
|
||
def retweet_ancestors(force_retrieve=false)
|
||
retweet_ancestors_enumerator(force_retrieve).to_a end
|
||
# リツイート元を再帰的に遡り、リツイートではないツイートを返す。
|
||
# selfがリツイートでない場合は、selfを返す。
|
||
... | ... | |
# ==== Return
|
||
# Message
|
||
def retweet_ancestor(force_retrieve=false)
|
||
retweet_ancestors(force_retrieve).to_a.last end
|
||
retweet_ancestors(force_retrieve).last end
|
||
# このMessageがリツイートなら、何のリツイートであるかを返す。
|
||
# 返される値の retweet? は常に false になる
|