Rails ユーザー管理機能のコードレビュー指摘事項メモ

TECH CAMP最終課題のユーザー管理機能のコードレビューで指摘いただいた箇所を自分の備忘録としてメモ。

今回はバリデーションと単体テストコードで苦戦しました。

コードレビュー1回目


長音記号も許可される様に修正しておきましょう!

    validates :last_name
    validates :first_name
  end
  with_options presence: true, format: { with: /\A[ァ-ン]+\z/, message: 'Please use full-width katakana characters.' } do

/\A[ァ-ン]+\z/ 
→  /\A[ァ-ヶー]+\z/ に修正

参考:正規表現について学習ノート(2)


こちらの記述ですと、稀に英字のみもしくは数値のみの値が生成される場合があります。英数字をそれぞれ少なくとも1文字ずつ含む様な形に修正しておきましょう!

password              { Faker::Internet.password(min_length: 6) }

下記に修正

 password              { '1a' + Faker::Internet.password(min_length: 6) }

passwordが半角英数字混合であることを確かめるテストでは、以下のように3つのテストに分けておきましょう!

・半角英字のみでは登録できないこと
・半角数字のみでは登録できないこと
・全角文字を含むと登録できないこと

下記に修正

      it 'passwordは半角英字のみでは登録できない' do
        @user.password = 'aaaaaa'
        @user.valid?
        expect(@user.errors.full_messages).to include('Password must include both letters and numbers')
      end
      it 'passwordは半角数字のみでは登録できない' do
        @user.password = '123456'
        @user.valid?
        expect(@user.errors.full_messages).to include('Password must include both letters and numbers')
      end
      it 'passwordは全角文字を含むと登録できない' do
        @user.password = '1a5aaa'
        @user.valid?
        expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password")
      end

  def password_complexity
    return if password.blank? || password =~ /^(?=.*[a-zA-Z])(?=.*\d).+$/

上記ですと、以下の可能性がございます。
「英数字が含まれていればそれ以外の文字もOK」
より網羅的に実装条件を満たす正規表現に修正いたしましょう!

下記に修正

  def password_complexity
    return if password.blank? || password =~ /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i 

コードレビュー2回目

なし!1回の修正でLGTMいただきました。
が、昨日は正規表現についてきちんと学習していない状態でレビュー出ししてしまっていたので、本日に学習後、自主的に修正してLGTMいただきました。

修正前; [a-zA-Z]
修正後: [a-z] ・・・/i

最後にiオプションを加えることで大文字・小文字を区別せずに検索する

学習って大切!


TECH CAMPの金曜日のアウトプットの時間に、正規表現が解読できる気がしませんってSOSを発したら、チームの仲間から参考カリキュラムを送ってもらって今日学習したらそれなりに読めるようになりました。
ありがたいことです。


この記事が気に入ったらサポートをしてみませんか?