Это свой метод. Можно создать его в базовом контроллере и указывать модель в каждом дочернем, с которой он будет работать, в данном примере он возвращает массив [model, provider] который как раз раскрывает функция list
Сергей Протько: на лицо подмена понятий. Middleware не обязательно быть адаптером, а Вы его сравниваете. Но, я соглашусь, если убрать адаптер из приложения - то оно, скорее всего, упадет, потому что интерфейс не соответствует. А вот декораторы должны быть взаимозаменяемы. От сюда вернемся к Вашему ответу. Вы предложили адаптерам делать то, для чего они не предназначены, оборачивать другие адаптеры бесконечное количество раз, называя декораторы адаптерами. Мне сразу вспоминается статья про ТТУКи. Собственно, поэтому я и придрался.
Middleware не обязательно является адаптером, более того, в большинстве случаев это совсем не адаптеры, скорее Chain of Responsibility. Для того они и подключаются через конфигурацию, чтобы добавить логику в Application Logic Layer, но их там может и не быть и приложение запустится, просто без той же аутентификации и авторизации.
Виктор Ablebeam: Ну да, на сколько я знаю, Class наследуется от Module в руби и модули встраиваются в классы, но, в то же время, модули используют для инкапсуляции классов, как, например, модуль ActiveRecord в Rails. Получается двусторонний функционал на уровне языка.
Сергей Протько: Да что Вы. Адаптер адаптирует реализацию под требуемый интерфейс через композицию адаптируемого объекта, в то время как декоратор оборачивает объекты с идентичным интерфейсом для изменения или дополнения поведения методов.
Адаптер не меняет поведение, декоратор же меняет или дополняет поведение вложенных объектов. Как раз Ваш случай.
Виктор Ablebeam: Никогда не работал с модулями в этих CMS, да и с ними тоже почти не работал, пронесло. Мое видение модуля исходит исключительно из опыта работы. Я привык к тому что могу оформить часть приложения в модуль, как модуль новостей или комментариев, так же, я привык, что могу вынести определенный обобщенный функционал в модуль, как перехватчик запроса или набор валидаторов, и создать тот же gem, на его основе.
Для меня пока не ясно зачем использовать модули для встраивания, как оно сделано в pure ruby и в concern RoR, но это, видимо, особенность языка.