rigor-sinatra
Sinatra::Baseのサブクラス上でSinatraのクラスレベルのルートDSL(get / post / put / delete / head / options / patch / link / unlink)を認識し、ルートブロックのselfをナローイング(narrowing)します。これにより、素のヘルパー ── params、redirect、halt、session、headers、content_type、erb、status、body、… ── が未解決のままにならず、Sinatra::BaseのRBSを通じて解決されます。
これはrigortypeにバンドルされて配布されます。plugins:の下で有効化してください。
plugins: - rigor-sinatraclass MyApp < Sinatra::Base get "/users/:id" do halt 404 unless params["id"] redirect "/users/#{params['id']}/profile" endendルートブロックの内側ではselfがMyApp(Sinatra::Baseを継承)にナローイングされるため、params / redirect / haltは通常のRBSチェーンを通じて解決されます。このプラグインがないと、ブロック本体はSingleton[MyApp]として型付けされ、ブロックごとの解決が失われます。
ヘルパーが解決されるには、Sinatra自身のRBSが利用可能である必要があります ── RigorのBundler認識、ベンダリングしたsig、または(デモでは)ローカルのスタブを通じて。
diagnosticなし、設定なし
Section titled “diagnosticなし、設定なし”このプラグインはルートのシェイプ(shape)を認識してselfをナローイングするだけです。diagnosticは発行せず、設定キーも持ちません(verbのマッチテーブルはマニフェストで固定されています)。
- ルーティングのdiagnosticはなし ── パスパターンの一意性、衝突検出、名前付きルートの逆引きは対象外です。
helpers do … endブロック(インスタンスメソッドを注入する)は扱われません(これはこのTier AのシェイプではなくTier B / Cの作業です)。configure/setの設定DSLは扱われません。- クラシックスタイルのトップレベルルート ──
class < Sinatra::Baseで囲まれていない素のget '/x' do … end── は先送りされています。認識には呼び出し箇所でレシーバーのクラスが可視である必要があります。
プラグイン内部
Section titled “プラグイン内部”宣言的なBlockAsMethodマニフェストと、それが乗っているマクロ基盤のselfナローイングはプラグインのREADMEに記述されています。プラグインの書き方はexamples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.