- PVSM.RU - https://www.pvsm.ru -

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

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

high_voltage

Гем от ребят из thoughtbot [2], который сильно упрощает работу со статичными страницами сайта.
Работает гем очень просто — добавляем нужные странички в папку 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).

Страница на Github [3]

gon

Очень часто бывает необходимо передать данные из Rails в JS. Для этого есть несколько решений.
Например, можно загрузить их отдельно дополнительным ajax-запросом. В случае, когда данных не очень много и нет смысла плодить лишние вызовы — с этой задачей отлично справится gon [4] — гем от отечественного производителя [5], который позволяет передавать данные прямиком из контроллера.
Для работы гема сначала добавьте в свой лейаут:

<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 [6] и RABL [7].

Gon @ Railscasts [8]
Страница на Github [9]

http_accept_language

Если перед вами стоит задача поддерживать несколько языков в rails-приложении — советую обратить внимание на гем http_accept_language [10]. Он добавляет в объект 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 [10]

email_spec

Крайне полезно всегда быть в курсе того, как ведут себя ваши мейлеры, что и куда отправляют, содержат ли отправленные письма важную информацию (ссылки на активацию, логины/пароли и т.п.) Для этих целей крайне удобен email_spec [11] — набор вкусностей для RSpec и Cucumber от автора гема database_cleaner [12], облегчающий тестирование ваших мейлеров.
Например, вы хотите быть уверены, что письмо с инструкциями по активации аккаунта будет отправлено по верному адресу, будет иметь верный заголовок и содержать ссылку на активацию. С 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 [11]

heroku_san

Если вы активно используете Heroku [13], тогда вам точно стоит обратить внимание на этот гем. heroku_san [14] делает процесс развертывания приложения еще более простым и быстрым.
Предположим, вы хотите, чтобы ваш проект имел несколько инстэнсов на 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 [14]

Автор: tipugin


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/rails/2614

Ссылки в тексте:

[1] топика о разных и полезных гемах: http://habrahabr.ru/blogs/ror/137783/

[2] thoughtbot: http://thoughtbot.com/

[3] Страница на Github: https://github.com/thoughtbot/high_voltage

[4] gon: https://github.com/gazay/gon

[5] отечественного производителя: https://github.com/gazay

[6] JBuilder: https://github.com/rails/jbuilder

[7] RABL: https://github.com/nesquena/rabl

[8] Gon @ Railscasts: http://railscasts.com/episodes/324-passing-data-to-javascript

[9] Страница на Github: https://github.coСсылкаgon

[10] http_accept_language: https://github.com/iain/http_accept_language

[11] email_spec: https://github.com/bmabey/email-spec

[12] database_cleaner: https://github.com/bmabey/database_cleaner

[13] Heroku: http://heroku.com

[14] heroku_san: https://github.com/fastestforward/heroku_san