Гемы, которые мы любим

Illustration of a person sitting on the floor, leaning against a wall while reading a tablet. They are wearing casual clothing with orange sneakers. Illustration of a person sitting on the floor, leaning against a wall while reading a tablet. They are wearing casual clothing with orange sneakers.

Для большинства проектов, будь то небольшое личное приложение или начало чего–то большого и многофункционального, свойственно использовать в работе многие гемы, которые, фактически, стали уже стандартом при работе с Ruby on Rails. Ниже я постараюсь перечислить те гемы, многие из которых используются практически в каждом нашем проекте, в том числе и mkdev.

Содержание

Авторизация и аутентификация

rolify

Rolify позволяет разделить пользователей по ролям и назначить ролям определенные права в приложении. Достаточно просто интегрируется в Cancancan и Devise, дополняя и расширяя их возможности по управлению пользователями.

cancancan

Cancancan – чрезвычайно удобный гем для создания и управления ролями и правами пользователей в приложении. Один файл ability.rb в директории моделей может хранить в себе понятную и читаемую инструкцию, описывающую права, которыми обладает каждая группа пользователей. Гармонично взаимодействует с гемами, предоставляющими аутентификацию пользователей.

pundit

Pundit позиционируется как альтернатива Cancancan, предлагая схожие возможности. Он позволяет создавать политики для пользователей, ограничивая или предоставляя им определенные права в системе. Гем достаточно гибкий, так что можно сравнить pundit и cancancan и выбрать для себя тот, что больше придется по вкусу.

devise

Devise – признаный лидер в создании аутентификации практически любой сложности. Это очень гибкий и мощный гем, с которым можно построить как простейшую аутентификацию пользователя через email и пароль, так и нестандартную систему с использованием приглашений и множеством пользовательских настроек.

sorcery

Менее "волшебный" и намного более простой, чем devise, этот гем, тем не менее, позволяет сделать очень гибкую систему аутентификации, в которой каждый элемент можно подогнать под свои нужды. Простота Sorcery делает его более легким в освоении и понимании того, как аутентификация работает в целом. Отлично подходит как для маленьких личных проектов, так и для крупных приложений, в которых необходимо контролировать каждый элемент аутентификации.

Тестирование и отладка

rspec

Rspec, а точнее rspec–rails, стал практически стандартом в тестировании приложений на Ruby on Rails. Предоставляет более читаемый DSL, чем стандартная библиотека тестирования TestUnit и легко интегрируется со множеством других гемов, облегчающих тестирование.

capybara

Capybara без нареканий работает в паре с rspec. Этот гем отвечает за написание интеграционных тестов, которые имитируют действия пользователя в браузере. Позволит в несколько строк описать сценарий авторизации (переход на главную, ввод логина и пароля, клик по кнопке "Войти") и предложит такие удобные методы для отладки тестов, как, например, save_and_open_page

factory_girl

"Фабрики", создаваемые при помощи гема factory_girl проще всего сравнить с фикстурами(fixtures) в TestUnit. Как и прочие, этот гем легко интегрируется с rspec и может использоваться в написании тестов, предоставляя разработчику удобный способ хранения и управления тестовыми экземплярами моделей.

database_cleaner

database_cleaner часто применяется в связке с rspec и используется для того, чтобы чистить тестовую базу данных при запуске тестов. Позволяет настроить момент очистки базы: до запуска тестов, после или до/после прогона каждого отдельного теста.

parallel_tests

Ускорение выполнения тестов, написанных на TestUnit, Rspec и Cucumber. Для ускорения задействуются все ядра системы, на которой запускаются тесты и используются дополнительные тестовые базы данных. Гем поддерживает как Rails, так и другие Ruby–проекты.

jazz_hands

Этот гем объединяет в себе толстую пачку других библиотек, общей чертой которых является облегчение работы в консоли Rails. В комплекте идут такие гемы, как pry, Awesome Print, Hirb и комплект расширений для pry. Все вместе они добавляют несколько полезных команд для консоли(например, показать все модели и их атрибуты в удобном виде), цветной вывод кода и логов и многое другое.

byebug

Byebug используется для дебага кода на Ruby. Быстрый и надежный, этот гем позволяет выполнять код построчно, делать паузы в выполнении и выполнять код, на лету изменяя значение переменных. Для использования в Rails достаточно просто поместить в нужное место метод byebug и запустить сервер. Когда начнет выполняться участок кода с этим методом, в консоли появится вывод для дебага.

Прочие гемы

prawn

Полноценная библиотека для генерации PDF–документов. Этот гем не занимается конвертацией HTML в PDF, но непосредственно создает PDF–документы с содержимым, которое вы передаете его методам. Удобная вещь если, например, вы строите сервис для удобного написания и публикации книг.

yard

YARD применяется в случаях, когда необходимо сгенерировать документацию по проекту на Ruby. Библиотека описывает каждый метод каждого класса и создает в директории проекта поддиректорию doc, в которую помещаются файлы документации. Файлы легко редактируются(это обычный HTML) и уже содержат в себе исходный код каждого метода.

redcarpet

Удобный гем для процессинга разметки markdown. Легко устанавливается, быстро настраивается и имеет набор настроек, которые позволят подогнать его возможности под собственные нужности.

russian

Незаменимый гем russian просто выполняет свою работу: успешно преобразовывает название месяцев на русский язык, склоняет их и помогает со склонением слов в сочетании с числами (например, 1 вещь, но 5 вещей). Однозначно необходим практически для всех проектов, в которых присутствует русский язык.

simple_form

Гем simple_form позволяет писать код форм проще и быстрее, чем стандартный хелпер form_for. В большинстве случаев не нужно явно указывать тип поля – гем распознает его по типу данных (string, text и так далее) и автоматически подставит подходящий html–тег (соответственно input, textarea и так далее).

aasm

Аббревиатура AASM разворачивается в Act As State Machine. Как можно понять из названия, используя этот гем, можно задавать состояния для экземпляров моделей и события, которые изменяют эти состояния. Например, у объекта модели User может быть состояние not_activated, activated, или любое другое в зависимости от потребностей приложения. События используются для перевода объекта из одного состояния в другое:

class User
  include AASM

  aasm do
    state :not_activated
    state :activated

    event :activate do
      transitions from: :not_activated, to: :activated
    end
  end
end

sidekiq

Sidekiq используется для обработки задач, занимающих длительное время, и, как следствие избавления пользователя от необходимости завершения запущенной задачи. При запуске задачи становятся в очередь и выполняются в фоне. В качестве примера можно привести отправку письма: выполняя метод отправки с использованием sidekiq, приложение не заставит пользователя ждать, пока письмо будет отправлено. Пользователь нажимает "Отправить", sidekiq получает задачу на отправку, а браузер показывает пользователю сообщение: "Ваше письмо отправляется". Сайдкик тем временем в фоне отправляет письмо.

friendly_id

Благодаря friendly_id ссылки в приложениях на Rails выглядят красиво и человечно. Этот гем помогает создавать адреса вида https://mkdev.me/posts/postgresql–zachem–i–kak вместо https://mkdev.me/posts/5.

papertrail

PaperTrail позволяет мониторить изменения в данных ваших моделей. Иными словами, если пользователь изменил профиль или запись в блоге, это сохранится в истории изменений и вы сможете увидеть кто сделал изменение, когда и откуда он авторизовался(например). Более того, при использовании PaperTrail появляется возможность отменить удаление записи, что бывает полезно для реализации функции "Undo". Прекрасно работает с гемом Rails_Admin, встраиваясь в главную страницу админки и показывая последние изменения в виде удобной таблички.

rails_admin

Удобная и простая в установке и настройке администраторская панель. Поддерживает интеграцию с devise для аутентификации, cancancan для управления правами доступа к администраторской зоне и PaperTrail для ведения прозрачно истории действий пользователей в приложении. Предоставляет полноценный функционал, присущий гемам подобного рода, начиная с редактирования записей и заканчивая поиском и экспортом данных.


Список гемов не окончательный и может пополняться, поскольку разработка не стоит на месте и появляются все более удобные инструменты.