Разработчики приложений на Ruby on Rails однозначно знают и используют гемы -  библиотеки, которые являются частью фреймворка RubyGems, механизма управления библиотеками или пакетами в Ruby. Однако мало кто из них прибегает к использованию плагинов.  В этой статье мы хотим рассказать вам: Что такое плагины Для чего их используют Как их создавать Программисты всегда готовы применять существующие решения для возникающих проблем, не тратя слишком много времени. Особенно, когда речь идёт о Ruby on Rails, где гибкость является нормой, и использование существующих решений для различных задач считается само собой разумеющимся. Благодаря повторному использованию кода программист может сэкономить время и усилия, не изобретая при этом велосипед.  Ни один язык программирования не идеален, и команда Ruby не может добавить всё, что пожелает каждый из разработчиков. Поэтому в Rails 1.0 появилась система плагинов, чтобы сделать Rails действительно гибким, позволяющим программистам делиться готовыми решениями с другими разработчиками. Плагин — отличный способ упаковать часто применяемые решения общих проблем и повторно использовать код.  Команда Rails рекомендует публиковать все популярные плагины в RubyGems. Первый шаг перед тем, как вы сможете создать плагин, — понимание, является ли ваш плагин специфичным только для приложения, над которым вы работаете, или его можно использовать в различных приложениях. Если подключаемый модуль, который вы создаёте, зависит от приложения, он будет рассматриваться как vendor specific plugin. Если ваш плагин можно применять в различных приложениях, он считается гемифицированным плагином (gem plugin). В наших проектах мы неоднократно использовали регистрацию с помощью учётных записей социальных сетей, поэтому для дальнейших проектов мы решили разработать гем, где регистрация для каждой социальной сети (Вконтакте, Одноклассники, Google, Apple) является отдельным плагином.  Для начала мы описали модуль Plugins:  Данный модуль позволил загружать и конфигурировать плагины.  Далее рассмотрим реализацию самих плагинов на примере Вконтакте и Одноклассники.  Для настройки регистрации через Вконтакте мы описали метод register, который выполняет все необходимые операции, а затем зарегистрировали данный плагин для того, чтобы в дальнейшем мы смогли его загрузить и использовать в нашем приложении:  Для запроса на API Одноклассники нужны дополнительные опции, поэтому в данном модуле мы определили метод configure:  И наконец, базовый модуль OauthClient выглядит следующим образом:  С помощью метода plugin после установки гема в конфигурации config/initializers/oauth_client.rb появляется возможность загрузить плагины, необходимые тому или иному приложению. Пример конфигурации для гема в приложении: Данная настройка позволила нам подгружать только необходимые плагины. Например, если в приложении требуется регистрация через Вконтакте и Одноклассники, то использование плагинов для регистрации через Google или Apple недоступно. Так как они не были загружены ранее, то при их вызове появляется следующая ошибка: Плагины - это хорошее решение для кода, которое вам можно будет использовать в других пакетах или приложениях. Он расширяет функциональность уже существующего приложения и добавляет функциональность для создания нового приложения с нуля. Ссылка на гит с исходным кодом.  Backend-разработчик