操作
提案 #1241
未完了Scoreの初期値をModelが提供できるようにする
プラグイン名:
ブランチ:
説明
TwitterのEntityや、(Worldonにおける)mastodonのhyperlink情報は、プレーンテキスト化した後のdescriptionだけからは復元できず、テキスト全体に対する位置に強く依存しています。そのため、score_filterの初回処理で選ばれない場合、後段の再帰では処理することができず、情報が失われてしまいます。 cf. #1239
また別の問題として、Twitterが返してくるHTML実体参照を含むテキストは、TextNote化する際にunescapeする必要がありますが、
- Entityが含まれていない場合はTextNote1つだけを返すしかない(TextNoteとは別の(全く同機能な)クラスを使う方法もありますが……)
- TextNoteだけが含まれるScoreはscore_by_scoreに無視される
の2つの仕様により、unescapeしたTextNoteを返しても採用されない、という問題があります。 cf. #1233
これらを解決する案として、Modelが :score
というメソッドを持つならば、まずそれを呼んでScoreの初期値とし、そこに含まれるTextNoteに対してscore_by_scoreを走らせればいいのではないかと考えました。
Pros
- twemojiのようなプラグインを入れるとEntityが効かなくなる問題は生じなくなる。
- テキストのみを持つようなものに対しても細工したTextNoteを返すことができるようになる。
- サードパーティプラグインで挙動を変更する場合、フィルタでは上書きが困難ですが、インスタンスメソッドであればモンキーパッチできるためわかりやすい。
Cons
- フィルタの積み重ねと単純な再帰で構成されていたscoreがとっちらかった構造になる
叩き台として試作したパッチを添付します。
ファイル
関連するチケット
操作