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

в 5:39, , рубрики: rails, useful gems, метки: ,

В продолжении топика о разных и полезных гемах, хочу рассказать еще о нескольких, которые делают мою (а потом, надеюсь, что и вашу) работу с 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).

Страница на 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

Автор: tipugin


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js