В продолжении топика о разных и полезных гемах, хочу рассказать еще о нескольких, которые делают мою (а потом, надеюсь, что и вашу) работу с RoR еще более приятной и удобной.
high_voltage
Гем от ребят из thoughtbot, который сильно упрощает работу со статичными страницами сайта.
Работает гем очень просто — добавляем нужные странички в папку app/views/pages. После этого страница становится доступна по адресу /pages/(название_файла). Так, например, страница, которая лежит в app/views/pages/about.haml, будет доступна по адресу <a rel="nofollow" href="http://example.com/pages/about.">example.com/pages/about.
Кроме того, гем добавляет url-хелпер page_path, которому в качестве аргумента нужно передать нужную страницу. Для примера выше это будет page_path(:about).
gon
Очень часто бывает необходимо передать данные из Rails в JS. Для этого есть несколько решений.
Например, можно загрузить их отдельно дополнительным ajax-запросом. В случае, когда данных не очень много и нет смысла плодить лишние вызовы — с этой задачей отлично справится gon — гем от отечественного производителя, который позволяет передавать данные прямиком из контроллера.
Для работы гема сначала добавьте в свой лейаут:
<html> <head> <title>Application Title</title> <%= include_gon %> <!-- Теперь можно подключать ваш JS --> …
Далее в контроллере передайте данные с помощью gon:
def show @user = User.find(params[:id]) gon.user = @user end
Теперь данные из @user доступны в вашем JS, и добраться до них можно через объект gon. Например:
$(function() { alert(gon.user); });
Гем можно настроить под себя — использовать camelCase вместо snake_case в названии экспортированных переменных, указать свой неймспейс, подружить с популярными JBuilder и RABL.
Gon @ Railscasts
Страница на Github
http_accept_language
Если перед вами стоит задача поддерживать несколько языков в rails-приложении — советую обратить внимание на гем http_accept_language. Он добавляет в объект request несколько методов, с помощью которые вы легко сможете определить, какой у пользователя предпочтительный язык. Например, вот так:
class ApplicationController < ActionController::Base before_filter :set_locale protected def set_locale allowed_locales = %w(ru-RU en-US) I18n.locale = request.preferred_language_from(allowed_locales) || I18n.default_locale end end
email_spec
Крайне полезно всегда быть в курсе того, как ведут себя ваши мейлеры, что и куда отправляют, содержат ли отправленные письма важную информацию (ссылки на активацию, логины/пароли и т.п.) Для этих целей крайне удобен email_spec — набор вкусностей для RSpec и Cucumber от автора гема database_cleaner, облегчающий тестирование ваших мейлеров.
Например, вы хотите быть уверены, что письмо с инструкциями по активации аккаунта будет отправлено по верному адресу, будет иметь верный заголовок и содержать ссылку на активацию. С email_spec это будет выглядеть примерно так:
describe UserMailer do let(:user) { create(:user) } describe '#confirmation_instructions' subject { UserMailer.confirmation_instructions(user.id) } it 'should be set to be delivered to the user email address' do subject.should deliver_to(user.email) # Письмо должно быть отправлено на e-mail пользователя. end it 'should have the correct subject' do subject.should have_subject(I18n.t('user_mailer.confirmation_instructions.subject')) # У письма должен быть верный заголовок. end it 'should contain the confirmation url' do subject.should have_body_text(/#{user_confirmation_url}/) # В тексте письма должна быть ссылка на активацию. end end end
heroku_san
Если вы активно используете Heroku, тогда вам точно стоит обратить внимание на этот гем. heroku_san делает процесс развертывания приложения еще более простым и быстрым.
Предположим, вы хотите, чтобы ваш проект имел несколько инстэнсов на Heroku — production и staging. Для этого, после установки гема, вызовите в консоле:
rake heroku:create_config
Это команда создаст файл с конфигурацией (config/heroku.yml), в котором описываются все ваши приложения на Heroku, связанные с данным проектом. Например, для production и staging окружений это выглядит так:
production: &defaults app: myfacebookkiller stack: cedar config: BUNDLE_WITHOUT: 'development:test' staging: <<: *defaults app: myfacebookkiller-staging
Теперь, если вы еще не создали этих приложений на Heroku — сделайте это сейчас:
rake all heroku:create
Теперь при помощи heroku_san вы можете деплоить свой проект сразу на несколько приложений:
rake all deploy
Либо только на конкретное приложение:
rake production deploy
heroku_san предлагает еще довольно много полезных в работе с Heroku вещей, подробнее можно ознакомиться на странице гема на Github.
Автор: tipugin