Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

イベント名がマークダウン記号から始まるのを禁止するバリデーションを設定 #8199

Merged
merged 3 commits into from
Nov 28, 2024

Conversation

hagiya0121
Copy link
Contributor

@hagiya0121 hagiya0121 commented Nov 17, 2024

Issue

概要

  • 定期イベントのタイトルはブートキャンプのアプリ側ではマークダウン記法は有効になりません。しかしDiscordの通知ではマークダウン記法が有効になる問題を修正しました。
  • issueに書かれているようにDiscord側のマークダウン機能は無効にできないのでイベントタイトルがマークダウン記号から始まらないようにするバリデーションを設定しました。

変更確認方法

  1. bug/validate-event-nameをローカルに取り込む
    1. git fetch origin pull/8199/head:bug/validate-event-name
    2. git checkout bug/validate-event-name
  2. foreman start -f Procfile.dev でローカルサーバーを立ち上げ
  3. 定期イベント作成ページに移動
  4. タイトル欄に# test(マークダウン記号から始まるタイトル)を入力してイベントを作成する
  5. タイトルには禁止されている記号が含まれていますというエラーメッセージが表示されることを確認

Screenshot

バリデーション設定後

image

@hagiya0121 hagiya0121 force-pushed the bug/validate-event-name branch from f43720f to ce07556 Compare November 17, 2024 07:51
@hagiya0121 hagiya0121 marked this pull request as ready for review November 17, 2024 09:01
@hagiya0121 hagiya0121 requested a review from sugiwe November 17, 2024 09:05
@hagiya0121
Copy link
Contributor Author

@sugiwe
お疲れ様です。
こちらのPRのレビューをお願いしたいです🙏
ご都合が悪いときは遠慮なくおっしゃってください🙇

@sugiwe
Copy link
Contributor

sugiwe commented Nov 18, 2024

@hagiya0121
お疲れ様です、レビューの件承知いたしました!
初レビューになりますので不慣れになるかもしれませんが是非やらせてください🙏
1週間ほどお時間いただければと思います、どうぞよろしくお願いいたします。

@sugiwe
Copy link
Contributor

sugiwe commented Nov 18, 2024

@hagiya0121
取り急ぎコード以外の部分になりますが、Assignees のところにご自身の設定をされていなかったようなので、設定しておくと良いかと思います👍

PR を作成したら自分をアサインする

@hagiya0121 hagiya0121 self-assigned this Nov 18, 2024
@hagiya0121 hagiya0121 changed the title イベント名にマークダウン記号を禁止するバリデーションを設定 イベント名がマークダウン記号から始まるのを禁止するバリデーションを設定 Nov 18, 2024
Copy link
Contributor

@sugiwe sugiwe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hagiya0121
お疲れ様です!
コード確認させていただきました、変更点が明確で確認もしやすかったです🙏

正規表現のところで気になることがいくつかあったのでコメントさせていただきました、ご確認よろしくお願いいたします!

また、コードの中身でない部分ですが、PR文章中の「変更確認方法」内に記載のあったgit fetch origin pull/7916/head:bug/validate-event-nameの番号がissueの番号になっておりfetchできず、PRの番号であるgit fetch origin pull/8199/head:bug/validate-event-nameにしたらfetchできましたので、併せてご報告いたします🙏


class MarkdownProhibitedValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
return unless /\A\s*\u3000*[#-*+>`]\s+/.match?(value)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらの正規表現について、いくつか改善できそうなところがありそうでした👀

  1. - タイトルがエラーにならないようです。
    • -が文字の途中にあるため「範囲指定(この場合#から*まで )」として解釈されているかもしれません。
      • #から*まで」というのはASCIIコードの順番によると$ % & ' ( )が該当するようです。試しに& タイトル( タイトルでイベントを作ろうとしたところエラーになったので、間違いなさそうです!
      • このような場合、-を冒頭に持ってくると良いみたいです。-#*にしてみたら、無事- タイトルがエラーになってくれました!
  2. 現状の正規表現ですと、「全角スペースが冒頭に1文字以上あった上で次に続くMarkdown用の記号が入力された場合」にもマッチしますが、全角スペースが冒頭にある場合はMarkdown表示されなくなると思います。「イベントタイトルとして冒頭に全角スペースがあるのはおかしい」という観点もありそうですが、今回のバリデーションには冒頭の全角スペースという条件は含めなくても良いのではと思いましたがいかがでしょうか?
  3. 現在の正規表現ですと、以下などのMarkdown記法がキャッチできないように思いました。どこまでカバーするのかというのはかなり悩ましそうですが、少なくとも元のissueに含まれていたコードブロック・h2以下のタイトルと、あと個人的には数値型リストについてもカバーしておくと良さそうに思いましたがいかがでしょうか?
    • コードブロック(```ruby``` など)
    • h2以下のタイトル(## タイトル### タイトルなど)
    • 数値型リスト(1. 10. など)
    • 水平線(---***

Comment on lines 18 to 27
test 'title is invalid when it starts with markdown symbols' do
regular_event = regular_events(:regular_event1)
regular_event.title = '# 無効なタイトル'
assert regular_event.invalid?
regular_event.title = ' # 先頭に半角スペースを含む無効なタイトル'
assert regular_event.invalid?
regular_event.title = ' # 先頭に全角スペースを含む無効なタイトル'
assert regular_event.invalid?
end

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

バリデーションの正規表現の修正に合わせて、テストも修正をお願いできればと思います🙏
どこまで網羅して書くのかかなり悩ましそうですが、issue #7916 で書かれていた例など参考にすると良いかもしれないと思いました。

@hagiya0121
Copy link
Contributor Author

hagiya0121 commented Nov 22, 2024

@sugiwe
今気づいたのですがURLのPR番号を間違っていました。申し訳ありません。
レビューありがとうございます🙇抜け漏れ見つけていただいて助かります。
以下が変更点になります。ご確認お願いします🙏

  • どこまで想定するか難しいですが冒頭に全角や半角の空白が来るのは考えづらいので両方条件から除外しました。
  • 指摘されたものと、新たに**強調**、~~取消線~~、__下線__、||伏せ字||もマッチするようにしました。伏せ字はDiscord特有のものです。
  • 変更に合わせてテストケースも増やしました。
  • 記号自体ではなく記法を禁じているのでバリデーションのメッセージとテスト名をそのように変更しました。
  • バリデーションのメッセージに違反箇所を表示するようにしました。

@sugiwe
Copy link
Contributor

sugiwe commented Nov 26, 2024

@hagiya0121
反応が遅れてしまい申し訳ありません、修正を確認いたしました!
マッチするMarkdownの内容も充実してテストもわかりやすくなり、良さそうに思います!
メッセージの変更や違反箇所の表示もわかりやすくて良いと思いました◎

こちらからはApproveとさせていただきます!

@hagiya0121
Copy link
Contributor Author

@sugiwe
お忙しいなかレビューありがとうございました🙇

@hagiya0121
Copy link
Contributor Author

@komagata
メンバーのレビュー完了したので確認お願いします🙇

@@ -0,0 +1,10 @@
# frozen_string_literal: true

class MarkdownProhibitedValidator < ActiveModel::EachValidator
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validatorクラスで実行するのいいですね!

@komagata komagata merged commit 6dc5e67 into main Nov 28, 2024
4 checks passed
@komagata komagata deleted the bug/validate-event-name branch November 28, 2024 10:08
@github-actions github-actions bot mentioned this pull request Nov 28, 2024
19 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants