Я ищу способы DRY моего приложения Sinatra и столкнулся с некоторыми проблемами, связанными с определением области обзора - в частности, помощники и функции Sinatra недоступны внутри моих обработчиков. Может кто-нибудь, пожалуйста, скажите мне, есть ли способ исправить этот код и что еще более важно, что происходит?Sinatra, DRY и scoping
спасибо.
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
Ах очень хорошо, я не знал, что вы можете передать блок напрямую, чтобы получить/отправить! Огромное спасибо! – rebnoob