Pull to refresh

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

Reading time3 min
Views3.1K
В продолжении топика о разных и полезных гемах, хочу рассказать еще о нескольких, которые делают мою (а потом, надеюсь, что и вашу) работу с RoR еще более приятной и удобной.


high_voltage


Гем от ребят из thoughtbot, который сильно упрощает работу со статичными страницами сайта.
Работает гем очень просто — добавляем нужные странички в папку app/views/pages. После этого страница становится доступна по адресу /pages/(название_файла). Так, например, страница, которая лежит в app/views/pages/about.haml, будет доступна по адресу example.com/pages/about.
Кроме того, гем добавляет url-хелпер page_path, которому в качестве аргумента нужно передать нужную страницу. Для примера выше это будет page_path(:about).

Страница на Github

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


Страница на Github

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


Страница на Github

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.

Страница на Github
Tags:
Hubs:
Total votes 39: ↑34 and ↓5+29
Comments5

Articles