名前空間で Sinatra を使用しています。条件を使用しようとすると、問題が発生しました。
これがコードのスニペットです
class MainApp < Sinatra::Base
register Sinatra::Namespace
set(:role) do |role|
condition{
### DETECT WHERE THIS IS CALLED
p role
true
}
end
namespace '/api', :role => :admin do
before do
p "before"
end
get '/hoo' do
p "hoo"
end
end
namespace '/api' do
get '/bar' do
p "bar"
end
end
end
上記のコードは、アクセス時にコンソールに次のメッセージを出力します/api/hoo
:admin
:admin
"before"
:admin
"hoo"
:admin
が3回表示される理由がわかりませんでした。ただし、1 つは からnamespace
、他の 2つは および からである可能性がbefore
ありget '/hoo'
ます。
一方、アクセス/api/bar
は:admin
2回表示されます。
の前にのみフィルタリングを行いたいだけですget '/hoo'
。アイデアはありますか?
/api/hoo
注: URLを次のように変更したくありません。/api/baz/hoo