Вы можете использовать текущую среду, чтобы решить, определяете ли вы действие. Например:
class MyApp < Sinatra::Application
if settings.development?
get '/admin' do
'VIPs only'
end
end
end
Если у вас есть много переключателей, вы можете изолировать их в одном файле, который вы можете решить требовать или нет:
# routes/init.rb
require_relative 'main'
require_relative 'debug' if settings.development?
# routes/main.rb
class MyApp < Sinatra::Application
get '/' do
'Hello!'
end
end
# routes/debug.rb
class MyApp < Sinatra::Application
get '/admin' do
'VIPs only'
end
end
Или, если вы хотите перечислить свои пути только для разработки в одном месте, вот версия фильтра:
class MyApp < Sinatra::Application
DEVELOPMENT_PATHS = %w[
/admin
]
before do
unless settings.development? || !DEVELOPMENT_PATHS.include?(request.path)
halt 404
end
end
end
Затем вы также можете создать некоторые методы, подобные декоратору, которые добавляются в список:
class MyApp < Sinatra::Application
def self.development_only(path)
DEVELOPMENT_PATHS << path
end
get '/admin' do
'VIPs only'
end
development_only '/admin
end
В целом, я бы рекомендовал проявлять осторожность при введении существенных различий между кодом, который выполняется в процессе разработки, и в рабочей среде. Неизбежно, код разработчика либо остается непроверенным, либо становится громоздким для правильной поддержки. В этом случае есть опасность, что вы пропустите маршрут, который намеревались скрыть, и он станет доступным для всех в рабочей среде. Я бы предпочел вообще не иметь этих маршрутов и манипулировать своей средой разработки с консоли или пройти весь путь до конца и создать полностью протестированные и готовые к эксплуатации разрешения пользователей с помощью чего-то вроде sinatra-authentication.
person
Kristján
schedule
27.09.2015