Ruby Sinatraアプリがあり、いくつかの例外を除くすべてのルートで実行する必要があるコードがあります。これを行うにはどうすればよいですか?
選択したルート(ホワイトリストスタイル)でコードを実行したい場合は、次のようにします。
['/join', "/join/*", "/payment/*"].each do |path|
before path do
#some code
end
end
逆にどうやってそれを行うのですか(ブラックリストスタイル)? '/join'
、'/join/*'
、'/payment/*'
を除くすべてのルートを照合したい
否定先読みあり:
before /^(?!\/(join|payment))/ do
# ...
end
pass
の場合:
before do
pass if %w[join payment].include? request.path_info.split('/')[1]
# ...
end
または、 カスタムマッチャー を作成することもできます。
「すべてを除いて...」フィルターを作成するために私がしたことは、スプラットを使用し、スプラット条件でコードを実行することです。
before '/*' do
unless params[:splat] == 'nofilter' || params[:splat] == 'beta'
redirect '/beta'
end
end
これにより、リダイレクトループを作成しないリダイレクトでbeforeフィルターを作成できました
シナトラでのルーティングに正規表現を使用できます
例えば:
get %r{/hello/([\w]+)} do |c|
"Hello, #{c}!"
end
here から取得。そこには、さらに詳しい情報があります。
正規表現をビルドしてテストするには、次のように使用できます http://rubular.com/