Pull to refresh

5 гемов на все случаи жизни

Reading time 3 min
Views 9.3K
В блоге про Django я периодически вижу посты с обзорами интересных расширений для этого фреймворка. Идея мне понравилась, и я решил, что было бы неплохо сделать похожий цикл заметок и о Ruby on Rails.

За последние 9 месяцев работы с RoR у меня накопился небольшой список гемов, которые существенно упрощают жизнь разработчику, и которые я бы мог посоветовать для решения тех или иных задач. В этой статье я хочу рассказать о пяти из них.

foreigner


Небольшой, но очень полезный гем для создания внешних ключей у таблиц. Он добавляет к миграциям два новых метода — add_foreign_key и remove_foreign_key.

Так, например, если нужно добавить ключ от таблицы comments к таблице users, нужно сделать следующее:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      # …
      t.references :user
      # ...
    end
  
    # …
    add_foreign_key :comments, :users
  end
end


Страница на Github

pacecar


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

Предположим, у вас есть модель Post, у которой есть поля в таблице: title, content, created_at, updated_at. И есть связь has_many :comments. Добавим Pacecar в нашу модель:

class Post << ActiveRecord::Base
  include Pacecar
  has_many :comments, :dependent => :destroy
end


После этого нам станут доступны, например, такие скоупы:

Post.title_matches('Some title') # LIKE "%term%"
Post.created_at_before(5.days.ago) # Посты, созданные не позднее 5 дней назад 
Post.maximum_comments # Пост наибольшим количеством комментариев


Гем добавляет довольно много полезных методов, более подробно можно ознакомиться на Github.

Страница на Github

settingslogic


Существует довольно большое кол-во гемов, решающих проблему настроек в приложении. Cамой удачной, на мой взгляд, реализацией, является Settingslogic от небезызвестного Бена Джонсона. Простой, легковесный, использует YML-файл.

Автор гема предлагает использовать класс Settings и хранить его рядом с моделями (app/models/settings.rb).

class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml"
  namespace Rails.env
end


Файл настройками в данном случае хранится в config/application.yml:

defaults: &defaults
  default_email: admin@example.com

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults


Настройки будут вызываться относительно текущего Rails-окружения. Обращаться к ним мы можем через класс Settings.

Settings.default_email # admin@example.com


Страница на Github
Документация

letter_opener


Гем-заглушка за авторством Райна Бейтса, без которого я уже никак не могу обходиться. Смысл работы крайне прост — мы указываем в конфиге приложения (например, в config/enviroments/development.rb), что в качестве способа доставки почты хотим использовать letter_opener.

config.action_mailer.delivery_method = :letter_opener


После этого вся исходящая почта начинает складываться в папке /tmp/letter_opener, а каждое письмо после сразу после отправки открывается в новой вкладке браузера. Просто и удобно.

Страница на Github

immortal


Гем от разработчиков Teambox, который позволяет вместо удаления записи помечать ее как 'deleted'. Бывает очень полезно, если мы хотим оградить неосторожного пользователя от потери данных.

Для использования гема нужно добавить поле deleted к таблице, записи которой хотим сделать «бессмертными»:

class AddDeletedToTasks << ActiveRecord::Migration
  def change
    add_column :tasks, :deleted, :boolean
  end
end


Затем подключить его в нужной модели:

class Task << ActiveRecord::Base
  include Immortal
end


Теперь каждая запись в модели Task вместо полного удаления из бд будет помечена как удаленная.

Страница на Github

That's all!


На этом я заканчиваю эту заметку, надеюсь вы нашли в ней что-то полезное для себя.
Tags:
Hubs:
+39
Comments 41
Comments Comments 41

Articles