Помощник Синатры в огурце
Вопрос
В настоящее время я пытаюсь избавиться от вспомогательного метода моего приложения Sinatra из огурца . Р>
У меня есть приложение Sinatra с простой аутентификацией сеанса (по файлам cookie), и я хочу отключить аутентификацию, отключив вспомогательный метод logged_in?
для моего Сценарии огурца .
С Синатрой и Огуреком, похоже, возникла проблема с сессиями, поэтому я подумал о том, чтобы просто использовать Мокко для решения этой проблемы.
Однако я не знаю, как получить доступ к экземпляру Sinatra :: Application
из Given
-Block, чтобы заглушить метод.
Решение
Вы можете получить правильный контекст, используя Sinatra :: Application.class_eval
Изменить: полный ответ см. в оригинальном ответе автора.
Другие советы
Похоже, мне нужно напрямую переопределить механизм аутентификации внутри Before do ... end
-block
Итак, я получил hooks.rb
, помещенный в файл features / support /
, перезаписывая мои logged_in?
и current_user
метод.
Before do
MySinatraApplicationClass.class_eval do
helpers do
def logged_in?
return true
end
def current_user
# This returns a certain Username usually stored
# in the session, returning it like
# that prohibits different user logins, but for
# now this is enough for me
"Walter"
end
end
end
end
Единственное, о чем мне нужно было позаботиться, это то, что никакие другие действия внутри приложения не читаются напрямую из session
, а скорее используют этих помощников.
К сожалению, я думаю, что этот способ обработки основанных на сеансах приложений Sinatra с помощью Cucumber уже описан где-то еще, и я просто подумал, моя проблема была другой .