プロジェクト

全般

プロフィール

機能 #795 » 795-ancestors-fix.patch

Osamu Koga, 2015-11-23 21:08

差分を表示:

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 になる
    (1-1/1)