340 |
340 |
def quoted_by?
|
341 |
341 |
!quoted_by.empty? end
|
342 |
342 |
|
|
343 |
# 投稿の宛先になっている投稿を再帰的にさかのぼるような _Enumerator_ を返す。
|
|
344 |
# ==== Return
|
|
345 |
# Enumerator
|
|
346 |
def ancestors_enumerator(force_retrieve=false)
|
|
347 |
Enumerator.new do |yielder|
|
|
348 |
message = self
|
|
349 |
while message
|
|
350 |
yielder << message
|
|
351 |
message = message.receive_message(force_retrieve) end end end
|
|
352 |
private :ancestors_enumerator
|
|
353 |
|
343 |
354 |
# 投稿の宛先になっている投稿を再帰的にさかのぼり、それぞれを引数に取って
|
344 |
355 |
# ブロックが呼ばれる。
|
|
356 |
# ブロックが渡されていない場合、 _Enumerator_ を返す。
|
345 |
357 |
# _force_retrieve_ は、 Message#receive_message の引数にそのまま渡される
|
|
358 |
# ==== Return
|
|
359 |
# obj|Enumerator
|
346 |
360 |
def each_ancestors(force_retrieve=false, &proc)
|
347 |
|
proc.call(self)
|
348 |
|
parent = receive_message(force_retrieve)
|
349 |
|
parent.each_ancestors(force_retrieve, &proc) if parent
|
350 |
|
end
|
|
361 |
e = ancestors_enumerator(force_retrieve)
|
|
362 |
if block_given?
|
|
363 |
e.each(&proc)
|
|
364 |
else
|
|
365 |
e end end
|
351 |
366 |
|
352 |
367 |
# 投稿の宛先になっている投稿を再帰的にさかのぼり、それらを配列にして返す。
|
353 |
368 |
# 配列インデックスが大きいものほど、早く投稿された投稿になる。
|
354 |
369 |
# ([0]は[1]へのリプライ)
|
355 |
370 |
def ancestors(force_retrieve=false)
|
356 |
|
Enumerator.new do |yielder|
|
357 |
|
message = self
|
358 |
|
while message
|
359 |
|
yielder << message
|
360 |
|
message = message.receive_message(force_retrieve) end end end
|
|
371 |
ancestors_enumerator(force_retrieve).to_a end
|
361 |
372 |
|
362 |
373 |
# 投稿の宛先になっている投稿を再帰的にさかのぼり、何にも宛てられていない投稿を返す。
|
363 |
374 |
# つまり、一番祖先を返す。
|
364 |
375 |
def ancestor(force_retrieve=false)
|
365 |
|
ancestors(force_retrieve).to_a.last end
|
|
376 |
ancestors(force_retrieve).last end
|
366 |
377 |
|
367 |
|
# retweet元を再帰的に遡り、それらを配列にして返す。
|
368 |
|
# 配列の最初の要素は必ずselfになり、以降は直前の要素のリツイート元となる。
|
369 |
|
# ([0]は[1]へのリツイート)
|
|
378 |
# retweet元を再帰的にさかのぼるような _Enumerator_ を返す。
|
|
379 |
# この _Enumerator_ は最初にこの _Message_ 自身を yield し、以降は直前に yield した
|
|
380 |
# 要素のretweet元を yield する。
|
370 |
381 |
# ==== Return
|
371 |
382 |
# Enumerator
|
372 |
|
def retweet_ancestors(force_retrieve=false)
|
|
383 |
def retweet_ancestors_enumerator(force_retrieve=false)
|
373 |
384 |
Enumerator.new do |yielder|
|
374 |
385 |
message = self
|
375 |
386 |
while message
|
376 |
387 |
yielder << message
|
377 |
388 |
message = message.retweet_parent(force_retrieve)
|
378 |
389 |
end end end
|
|
390 |
private :retweet_ancestors_enumerator
|
|
391 |
|
|
392 |
# retweet元を再帰的にさかのぼり、それぞれを引数に取って
|
|
393 |
# ブロックが呼ばれる。
|
|
394 |
# ブロックが渡されていない場合、 _Enumerator_ を返す。
|
|
395 |
# _force_retrieve_ は、 Message#retweet_parent の引数にそのまま渡される
|
|
396 |
# ==== Return
|
|
397 |
# obj|Enumerator
|
|
398 |
def each_retweet_ancestors(force_retrieve=false, &proc)
|
|
399 |
e = retweet_ancestors_enumerator(force_retrieve)
|
|
400 |
if block_given?
|
|
401 |
e.each(&proc)
|
|
402 |
else
|
|
403 |
e end end
|
|
404 |
|
|
405 |
# retweet元を再帰的に遡り、それらを配列にして返す。
|
|
406 |
# 配列の最初の要素は必ずselfになり、以降は直前の要素のリツイート元となる。
|
|
407 |
# ([0]は[1]へのリツイート)
|
|
408 |
# ==== Return
|
|
409 |
# Enumerator
|
|
410 |
def retweet_ancestors(force_retrieve=false)
|
|
411 |
retweet_ancestors_enumerator(force_retrieve).to_a end
|
379 |
412 |
|
380 |
413 |
# リツイート元を再帰的に遡り、リツイートではないツイートを返す。
|
381 |
414 |
# selfがリツイートでない場合は、selfを返す。
|
... | ... | |
384 |
417 |
# ==== Return
|
385 |
418 |
# Message
|
386 |
419 |
def retweet_ancestor(force_retrieve=false)
|
387 |
|
retweet_ancestors(force_retrieve).to_a.last end
|
|
420 |
retweet_ancestors(force_retrieve).last end
|
388 |
421 |
|
389 |
422 |
# このMessageがリツイートなら、何のリツイートであるかを返す。
|
390 |
423 |
# 返される値の retweet? は常に false になる
|