class Github::Subject

Included Modules

Defined in:

github/models.cr

Constant Summary

BODY_TYPES = {Type::PULL_REQUEST, Type::ISSUE}

subject.url / latest_comment_url を取得すると本文(body)付きのオブジェクトが 返る type。Commit / CheckSuite 等は body が無くコメントとして解釈できないため、 コメント URL が無ければ本文取得の対象にしない(CI 完了通知等に本文を付けない)。

NUMBERED_TYPES = {Type::PULL_REQUEST, Type::ISSUE, Type::DISCUSSION}

subject.url 末尾が GitHub 上の番号として意味を持つ type。Release / CheckSuite のように末尾が数値 ID でも #番号 表示は誤解を招くため、これらに限定する。

UPDATE_TYPES = {Type::PULL_REQUEST, Type::ISSUE, Type::COMMIT, Type::DISCUSSION}

Constructors

Instance Method Summary

Constructor Detail

def self.new(pull : JSON::PullParser) #

[View source]

Instance Method Detail

def color : String #

[View source]
def comment_url : String #

本文取得に使う URL。コメントがあればその URL、無ければ本文を持つ type に 限り subject.url にフォールバックする。対象外(CI 等)は空文字を返し、 呼び出し側で本文なし扱いにする(issue #96)。


[View source]
def commented? : Bool #

スレッドにコメントが 1 件以上付いているか。latest_comment_url はスレッドの 最新コメントの URL だが、コメントがまだ無いスレッドでは subject.url と同じ 値が入る。よって url と異なる値のときだけコメントありと判断できる。

あくまで「コメントが存在するか」であって「今回の通知の起点がコメントか」では ない点に注意。通知 payload にイベント種別が無く、追加の API 呼び出し無しでは 区別できないので、これを「初回ではない=その後の動き」の目安として使い、 文言側はコメントに限定しない表現にしている(issue #104 / PR #106 レビュー指摘)。

ただし真になるのは片道で、これが偽でもコメントが無いとは限らない。 latest_comment_url は通知を発生させたイベント側を反映することがあり、 コメント済みでも push などが起点の通知では subject.url に戻る。よって 「コメントが無い」側の確定には使えず、Notification#followup? では subject 本体のコメント数と併用する(issue #116)。


[View source]
def latest_comment_url : String #

[View source]
def number : String | Nil #

subject.url 末尾の PR / Issue / Discussion 番号。番号が意味を持つ type に 限り、末尾セグメントが数値なら返す。Commit(末尾が SHA)や末尾スラッシュ、 URL が無い場合などは nil を返す(issue #96)。


[View source]
def title : String | Nil #

[View source]
def type : String #

[View source]
def update? : Bool #

[View source]
def url : String #

[View source]