コンテンツにスキップ

rigor-actionpack

他のRailsプラグインが公開するファクト(fact)を消費することで(ADR-9)、コントローラー側のAction Packコードを4つの領域にわたってチェックします:

  • ルートヘルパー呼び出し ── redirect_to user_path(@user)を、rigor-rails-routes:helper_tableに対して照合します。
  • フィルタチェーン ── before_action :nameを、コントローラー(およびその親)に定義されたメソッドに対して照合します。
  • レンダーターゲット ── render :showrender partial:を、view_search_paths下のビューテンプレートに対して照合します。
  • ストロングパラメータ ── params.require(:user).permit(:name, …)のキーを、モデルのカラム(rigor-activerecord:model_index経由)に対して照合します。

このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で、それが消費するファクトのプロデューサーと並べて有効化します:

plugins:
- rigor-rails-routes # publishes :helper_table (optional)
- rigor-activerecord # publishes :model_index (optional)
- rigor-actionpack

どちらの依存もoptionalとして宣言されています ── プロデューサーを省略したプロジェクトでも引き続きロードされます。そのファクトを必要としていた領域は、エラーになる代わりにno-opへと縮退します。

ルール重大度発火するとき
plugin.actionpack.helper-callinfo*_path*_url呼び出しがヘルパーテーブルに対して解決された
plugin.actionpack.unknown-helpererrorヘルパー名がテーブルにない(「もしかして」付き)
plugin.actionpack.wrong-helper-arityerror呼び出しの位置引数の個数がヘルパーの記録されたアリティ(arity)と一致しない
plugin.actionpack.filter-callinfoフィルタ参照(before_action :nameskip_around_action、…)が定義済みメソッドに解決された
plugin.actionpack.unknown-filter-methoderrorフィルタ参照がコントローラーまたは親に定義されていないメソッドを指している(「もしかして」付き)
plugin.actionpack.render-targetinfo明示的なrender :symbol"string"partial:がビューテンプレートに解決された
plugin.actionpack.missing-templateerror明示的なrenderが、いずれのview_search_paths下にも存在しないビューパスに解決された
plugin.actionpack.permit-callinfoparams.require(:m).permit(:key, …)チェーンが既知のモデルに解決された。キーはそのカラムに対して照合された
plugin.actionpack.unknown-permit-keyerrorリテラルのpermit(:key)がモデル上のカラムでない(「もしかして」付き)

フィルタとレンダーの解決は、ネストしたモジュールによるコントローラーの修飾(module Admin; class WidgetsControlleradmin/widgets/…下のビューを解決する)を尊重し、参照できないgem提供の親クラスについては沈黙します。

plugins:
- gem: rigor-actionpack
config:
controller_search_paths: ["app/controllers"] # default
view_search_paths: ["app/views"] # default
  • 暗黙のselfヘルパーのみ。明示的なレシーバーを持つ*_path*_url呼び出し(Rails.application.routes.url_helpers.x_path)は素通りします。
  • パスベースのファイルフィルタcontroller_search_paths下のファイルはクラス階層にかかわらずチェックされます。そこに置かれた非コントローラーファイル(まれ)もスキャンされてしまいます。
  • カバレッジはアップストリームのファクトに従う。ヘルパーの検証はrigor-rails-routesが公開したものだけを把握し、permitの検証はrigor-activerecordが公開したものだけを把握します ── これらのプロデューサーを有効化すると、このプラグインがチェックできる範囲が広がります。

プラグイン横断のファクト契約(:helper_table:model_index)、コントローラー/ビューの発見プロデューサー、デモ、そしてこのプラグインが行使する契約サーフェスは、プラグインのREADMEにあります。プラグインを書くには、examples/rigor-plugin-authorスキルを参照してください。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.