rigor-dry-struct
Dry::Structのサブクラスにおけるdry-structのクラスレベルのattribute :name, Type / attribute? :name, Type DSLを認識し、それが生成するリーダーメソッドを合成します。これにより、別ファイル内の素のaddress.cityがcall.undefined-methodに落ちずに解決されます。
rigortypeにバンドルされて配布されます。有効化し、さらに正確なリーダー型のためにrigor-dry-typesと組み合わせます。
plugins: - rigor-dry-struct - rigor-dry-types # optional: resolves Types::String → String on the readersclass Address < Dry::Struct attribute :city, Types::String attribute? :postcode, Types::Stringend
address.city # resolves (synthesised reader)address.postcode # resolvesrigor-dry-typesも有効で、プロジェクトがmodule Types; include Dry.Types(); endを宣言している場合、リーダーの戻り値の型は属性の型引数を通じて解決されます(attribute :city, Types::String → cityはStringを返す)。dry-typesがロードされていない場合、または解決できないシェイプ(.constrained(...)チェーンやインラインの合成)の場合、リーダーはDynamic[Top]にフォールバックします。これは静かに行われ、diagnosticは出ません。
diagnosticもconfigもなし
Section titled “diagnosticもconfigもなし”このプラグインは、diagnosticではなく合成されたメソッドを提供し、configキーは持ちません。Dry::Structを継承するあらゆるクラスを扱います(字句的・推移的に、あるいはチェーンが上流で終端する場合はRBS環境を通じて)。その目に見える効果は、属性リーダーの呼び出しが型チェックを通ることです。
- リーダーのみ。
schema/to_h/[:key]/ キーワード引数の.new(name:)のシェイプはまだ合成されません。 - ネストしたブロック形式は非対応。
attribute :details do … end(兄弟のDry::Structサブクラスを生成する)は先送りされています。
プラグインの内部構造
Section titled “プラグインの内部構造”宣言的なHeredocTemplateマニフェスト、returns_from_argの精度パス(ADR-18)、そしてそれが乗っている合成メソッドの基盤についてはプラグインのREADMEに記載されています。プラグインを書くにはexamples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.