Инструменты
- Pundit Авторизация; экспериментируя с этим запросом на перенос, связанным с официальным Pundit README;
- Объекты службы домена ActiveInteraction ( "DSO" );
- RSpec 2.99.1
** Проект **
Репо-проект находится на Github; что находится под контролем в разделе pundit-1
.
Я следил за учебником Pundit и получил авторизацию, используя "традиционные" пухлые контроллеры; см
-
PostsController#new
action и его спецификация; - класс Pundit
ApplicationPolicy
; и -
PostDataPolicy
, управляющий авторизацией для экземпляров экземпляров Rails в сообщениях.
Все хорошо и хорошо. И затем мы переходим к SessionController
, чьи действия #new
и #destroy
, соответственно, управляют входом и выходом журнала.
текущий код и spec Работает Just Fine с использованием логики контроллера традиционного типа (см. #new
вызывает частные методы, которые используют Pundit для авторизации активного (текущего) пользователя с помощью SessionDataPolicy
..
Затем я пытаюсь инкапсулировать эту логику в ActiveInteraction DSO (см. код с комментариями в SessionsController#new
), и все ад разрывается.
В частности, версия SessionsController
spec в этом Gist вызывает Pundit::AuthorizationNotPerformedError
в точке, где spec вызывает метод #new
.
Виски. Танго. FOX?!?!?
Кто-нибудь смог получить аналогичный код, работающий без Pundit, живущего прямо внутри кода контроллера, в идеале используя @billychan pull request (лучший альтернативный вариант будет с радостью рассмотрен)
Это меня полностью смущает.