Не так давно, 18 декабря, состоялся релиз очередной версии Rails. Забавно, что существует пост, датированный 17-м декабря, и ссылающийся на статью из будущего. Из очередных полезностей новой версии:
- Ускорение загрузки с помощью Spring
- Единое место для хранения разнообразных ключей API, секретов и прочего: config/secrets.yml
- Предпросмотр email'ов: Action Mailer Previews
- Удобная генерация различного контента в зависимости от конкретного request с помощью Action Pack Variants
- Добавление enum-атрибутов в Active Record
Установка
Чтобы прицениться к новой версии рельс, для начала ее нужно установить. Так как беты нет на rubygems.org, устанавливать будем прямо с github-репозитория. Для этого в нужной директории создадим Gemfile со следующим содержимым:
source 'http://rubygems.org'
gem 'rails', :git => 'git://github.com/rails/rails.git'
После этого в консоли:
bundle # сокращение для bundle install
rails new ./
Соглашаемся с перезаписью гемфайла, и ждем установки всех зависимостей (кстати, если вас не устраивает слишком долгое время bundle, можно попробовать параллельный bunlder).
Spring
Spring — это гем, служащий для ускорения загрузки Rails-окружения. После первоначальной загрузки ваше приложение крутится где-то в фоне, сильно ускоряя загрузку всех команд, требующих загрузки Rails: прогона миграций, запуска консоли и, конечно же, тестов. Крайне радостной для меня новостью стало внедрение Spring в сами рельсы. Проверьте сами: rails c; exit; rails c. Повторный запуск происходит практически мгновенно, что не может не радовать.
config/secrets.yml
Теперь секретные ключи стоит хранить в этом файле, и получать к ним доступ с помощью Rails.application.secrets. Пример config/secrets.yml:
development:
secret_key_base: '3b7cd727ee24e8444053437c36cc66c3'
some_api_key: 'SOMEKEY'
Action Pack Variants
Данная функциональность пригодится в том случае, если нам необходимо рендерить разные представления в зависимости от различных характеристик запроса. В release_notes приводится следующий пример (я немножко изменил его):
before_action :set_variants
def show
respond_to do |format|
format.html.tablet # renders app/views/projects/show.html+tablet.erb
format.html.phone { extra_setup; render ... }
end
end
private
def set_variants
request.variant = :tablet if request.user_agent =~ /iPad/
request.variant = :phone if request.user_agent =~ /iPhone/
end
Это требует дополнительных файлов представлений:
app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb
Action Mailer Preview
Теперь не нужно отправлять письмо самому себе, чтобы посмотреть, как оно отформатировано (или, быть может, я один отправлял его себе, а все крутые сеньоры давным давно используют спец. инструменты?). Допустим, у нас есть следующий mailer:
class NotifierPreview < ActionMailer::Preview
def welcome
Notifier.welcome(User.first)
end
end
Тогда предпросмотр будет доступен по адресу localhost:3000/rails/mailers/notifier/welcome.
Active Record enums
Пример, выложенный в release_notes, очень радует мой взор:
# Declare an enum attribute where the values map to integers in the database, but can be queried by name.
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
conversation.archived!
conversation.active? # => false
conversation.status # => "archived"
Conversation.archived # => Relation for all archived Conversations
Ложка дегтя: ссылка на документацию битая, но достаточно подробно тема в уже упомянутой выше статье.
Заключение
DHH вдохновляет нас на использование Rails 4.1.0 beta заявлением, что Basecamp уже использует эту версию. Думаю, что свой небольшой личный проектик я запущу именно на этой версии фреймворка.
Автор: HedgeSky