2021-05-23

Railsプロジェクトで好んで使っている便利な処理

Railsプロジェクトで、自分が好んで使っている便利な処理をまとめてみました。

core_ext編

sort_byは安定ソートではないので、with_indexを組み合わせて安定ソートを行う

https://gist.github.com/alpaca-tc/ed793961f2db438abaae3c00b7e303fa

RSpec編

partial viewでインスタンス変数を呼び出していないことをチェックするテスト

https://gist.github.com/alpaca-tc/c19f00d583234a2c73eda6d8378b8c50

モデルが変更された際に、参照元・参照先の双方に関連が定義されていることをチェックするテスト

https://gist.github.com/alpaca-tc/d53dee5977746256717c7522988b13d8

テーブルが変更された際に、外部キーの定義漏れがないことをチェックするテスト

https://gist.github.com/alpaca-tc/6a6c024b11a2a0e09713b510362e6bd2

重複するインデックスが存在しないことをチェックするテスト

https://gist.github.com/alpaca-tc/6c3f63d8d4c560a23d703f9274e4453f

FactoryBotの定義一覧を読み込んで、定義漏れや不正な定義がないことをテスト

https://gist.github.com/alpaca-tc/ab80f0c5233068d3266548df87acda59

テーブルの追加・変更があった際に、i18nの定義漏れがないことをテスト

https://gist.github.com/alpaca-tc/8b9424285346e4c080e345146971a883

rake db:seedが壊れていないことを保証するテスト

https://gist.github.com/alpaca-tc/bf739f3806e7ed672ac01fd7730edbd3

sidekiq-cronの定義がvalidであることをチェックする

https://gist.github.com/alpaca-tc/78842345cefaa55a827da15091a9cde3

ActiveModel/ActiveRecord編

特定の条件下でのカラムの値を宣言的に定義する拡張

https://gist.github.com/alpaca-tc/fcf53b364f3bf24bba3b57d122e81ba9

クエリに呼び出し元を含める

marginaliaみたい処理のミニマム版 https://gist.github.com/alpaca-tc/97b875d63e0e798537e0e3d5c234e0b5

カラムの値がtrue/falseのいずれかであることを保証するvalidator

これデフォルトでRailsに欲しいんだけど。 presence: true だとnilを検知できないのよね。 https://gist.github.com/alpaca-tc/aa691507766dfde2474a4f2896df0bb7

別のユーザーのデータを紐づけないことを保証するvalidator

https://gist.github.com/alpaca-tc/174347329edec75e9e4d4f8bdd650834

余分な空白を除去するString型

https://gist.github.com/alpaca-tc/8b65ca576afafb70a19d0a5581fa0632

渡された値でクラスを初期化する型(ActiveModel用)

https://gist.github.com/alpaca-tc/80b9fd778b38695bae639006a803ecbf

渡された値から数値以外の文字列を削除する型(主に電話番号用)

https://gist.github.com/alpaca-tc/c105905c8f3c2b06c6c5428edf25fa72

ActiveModelでenum-likeな定義を使う拡張

https://gist.github.com/alpaca-tc/93ec316bdf7c7e764166d0fb44416de1

ActiveRecordでUSE INDEXを使うための拡張

https://gist.github.com/alpaca-tc/6c3dcd979e27547be688add4e1619294

ridgepole編

ridgepoleで定義するindex名をhashのランダム名で定義する拡張(古いRailsっぽい挙動)

https://gist.github.com/alpaca-tc/2ad519e91be5eb5067c8ff06c6c8a3d2

ridgepoleで定義する全ての主キー・外部キーをunsignedで定義する拡張

https://gist.github.com/alpaca-tc/322d86a2e48e3a9aa33655fd83b2671c