コンテンツにスキップ

rigor-dry-validation

class T < Dry::Validation::Contractのサブクラスを認識し、契約(contract)クラス名の集合をクロスプラグインのファクト(fact、:dry_validation_contracts)として公開します。さらに、契約の結果API(Contract#call → Result、続いてResult#success? / #failure? / #to_h / #errors / #[])に型を付けるRBSオーバーレイを同梱します。

rigortypeにバンドルされて配布されます。plugins:の下で有効化します。

plugins:
- rigor-dry-validation
class NewUserContract < Dry::Validation::Contract
params do
required(:email).filled(:string)
required(:age).value(:integer)
end
end

このプラグインは、フルパスのDry::Validation::Contractと、字句的なDryの形Validation::Contractの両方を認識し、発見した契約名をソートしたリストを公開します。

RBSオーバーレイをロードした状態では(下記参照)、次のようになります。

result = NewUserContract.new.call(input) # Dry::Validation::Result
result.success? # bool
result.to_h # Hash[Symbol, untyped]

このプラグインは、上記の結果APIに型を付けるRBSオーバーレイ(sig/dry_validation.rbs)を同梱しており、それを自動的に提供します——プラグインのマニフェストがsignature_paths: ["sig"]を宣言する(ADR-25)ので、rigor-dry-validationを有効化するだけで十分です;プロジェクト側のsignature_paths:配線は不要です。

このプラグインは、契約リストとオーバーレイを公開します。diagnosticは一切出さず、configキーも受け付けません。(将来のスライス(slice)で、組み合わせたrigor-dry-schemaparamsブロックからのresult.to_hの型付けと、契約ごとのruleキーのdiagnosticが追加されます。)

prepare(services)のスキャン、:dry_validation_contractsファクト、RBSオーバーレイ、そしてスライスのfloor/ceilingについてはプラグインのREADMEに記載されています。プラグインを書くにはexamples/rigor-plugin-authorスキルを参照してください。

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