Sinatraでリクエストパラメータを検証するなら、sinatra-paramが有名です。 ただ、すでに何からの手段でパラメータのバリエーション機構を使っているが、Rails4のStrong Parametersのような 検証を追加したい!といった要件のみを満たすだけだと少々大げさでした。

そこで見つけたのがSinatra::StrongParams。 ソースは短い上にSinatraのConditionsに則って実装されているので読みやすく、プロダクトコードにも安心して利用することができました。

使い方はいたって簡単。以下の2つのフィルタが利用可能となります。 また両方を一度に使うことも可能です。

許可フィルタ(許可パラメータの登録)

利用可能なパラメータをホワイトリストで登録します。登録にないパラメータは単に無視されます。 必要に応じて、@_paramsでオリジナルのパラメータにアクセス可能です。

以下の場合は、id, actionパラメータだけ値の取得が可能です。

get '/', allows: [:id, :action] do
erb :index
end

必須フィルタ(必須パラメータの登録)

登録されたパラメータがない場合はRequiredParamMissing例外を発生させるフィルタです。 こちらは既存のバリデーション機構で大体実装されているので、許可フィルタほどは使う機会がないかもしれません。

こちらも非常にシンプルな機能で、以下の場合はid, actionパラメータがリクエストパラメータに存在しない場合は RequiredParamMissingが発生します。

get '/', needs: [:id, :action] do
erb :index
end

結論

プロダクトコードの場合は、利用するライブラリの選定に気を使いますが、そんな時に小回りのきく小さなライブラリは非常に助かります。 Sinatraで作られた既存アプリに Strong Parameters 機能をお気軽に追加したい場合にはオススメです!