Sinatra アプリを DRY する方法を探していて、いくつかのスコーピングの問題に遭遇しました。特に、ヘルパーと Sinatra 関数がハンドラー内で利用できません。このコードを修正する方法があれば教えてください。さらに重要なことに、何が起こっているのでしょうか?
ありがとうございました。
require 'sinatra'
require 'pp'
helpers do
def h(txt)
"<h1>#{txt}</h1>"
end
end
before do
puts request.path
end
def r(url, get_handler, post_handler = nil)
get(url){ get_handler.call } if get_handler
post(url){ post_handler.call } if post_handler
end
routes_composite_hash = {
'/' => lambda{ h('index page'); pp params }, #can't access h nor params!!!
'/login' => [lambda{'login page'}, lambda{'login processing'}],
'/postonly' => [nil, lambda{'postonly processing'}],
}
routes_composite_hash.each_pair do |k,v|
r(k, *v)
end