コンテンツにスキップ

rigor-sinatra

Sinatra::Baseのサブクラス上でSinatraのクラスレベルのルートDSL(get / post / put / delete / head / options / patch / link / unlink)を認識し、ルートブロックのselfをナローイング(narrowing)します。これにより、素のヘルパー ── paramsredirecthaltsessionheaderscontent_typeerbstatusbody、… ── が未解決のままにならず、Sinatra::BaseのRBSを通じて解決されます。

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

plugins:
- rigor-sinatra
class MyApp < Sinatra::Base
get "/users/:id" do
halt 404 unless params["id"]
redirect "/users/#{params['id']}/profile"
end
end

ルートブロックの内側ではselfMyAppSinatra::Baseを継承)にナローイングされるため、params / redirect / haltは通常のRBSチェーンを通じて解決されます。このプラグインがないと、ブロック本体はSingleton[MyApp]として型付けされ、ブロックごとの解決が失われます。

ヘルパーが解決されるには、Sinatra自身のRBSが利用可能である必要があります ── RigorのBundler認識、ベンダリングしたsig、または(デモでは)ローカルのスタブを通じて。

このプラグインはルートのシェイプ(shape)を認識してselfをナローイングするだけです。diagnosticは発行せず、設定キーも持ちません(verbのマッチテーブルはマニフェストで固定されています)。

  • ルーティングのdiagnosticはなし ── パスパターンの一意性、衝突検出、名前付きルートの逆引きは対象外です。
  • helpers do … endブロック(インスタンスメソッドを注入する)は扱われません(これはこのTier AのシェイプではなくTier B / Cの作業です)。
  • configure / setの設定DSLは扱われません。
  • クラシックスタイルのトップレベルルート ── class < Sinatra::Baseで囲まれていない素のget '/x' do … end ── は先送りされています。認識には呼び出し箇所でレシーバーのクラスが可視である必要があります。

宣言的なBlockAsMethodマニフェストと、それが乗っているマクロ基盤のselfナローイングはプラグインのREADMEに記述されています。プラグインの書き方はexamples/rigor-plugin-authorスキルを参照してください。

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