Ruby on Rails 0.13

Спустя 2 месяца кропотливой работы вышла новая версия Rails, которая является последним рубежом перед большим релизом 1.0.

В эту версию вошло множество(225 для точности) маленьких и больших фиксов, однозначно большая гора вкусностей и результат впечатляющей работы Stefan Kaes и Nicholas Seckar по улучшению производительности Rails в целом.
Вкратце о новом:

Ещё больше AJAX

Как всегда, с новым набором эффектов, поддержкой drag’n'drop и сортируемых списков Rails опять впереди планеты всей.
Текстовые поля а-ля Google Suggest в две строки:

# Controller
class BlogController < ApplicationController
auto_complete_for :post, :title
end
   
# View
<%= text_field_with_auto_complete :post, title %>

Отображение прогресса при закачивании файлов

Когда нибудь закачивали объёмный файл на сервер через веб-интерфейс? Раздражало, что никак нельзя понять сколько осталось? Thomas Fuchs и Sean Treadway разработали экспериментальную технологию Upload Progress Bar, которая позволяет при помощи AJAX отображать статус закачек. Демо можно посмотреть здесь.

Migrations - гибкое управление изменениями схемы базы данных

Этот код уже какое-то время был в репозитарии, но наконец то David нашёл время довести его до ума. Migrations (не рискну переводить) это инструмент созданный для того, что бы держать под контролем эволюционирующую схему базу данных. Судя по всему, процесс плавного перехода от Basecamp1 к Basecamp2 не обходится без его участия :-)

Производительность - быстрее, чем когда-либо

Благодаря обширной работе, которую провели новоиспечённые разработчики Rails, многие части системы стали значительно быстрее.
Например, Routes ускорились в 7 раз и следовательно диспетчеризация запросов будет происходить намного быстрее, чем раньше. Большая работа по оптимизации метода url_for позволила сильно уменьшить его аппетиты, что опять же скажется почти на всех Rails приложениях.

Новый API для рендеринга

Делая второй шаг после унификации методов ActiveRecord::Base#find*() в один “умный” метод find(), былы также переработаны методы render*() являющиеся частью ActionPack. Пример использования нового API в стиле до/после от Tobias Luetke. Меня лично этот метод порадовал возможностью включать/отключать отображение layout где я этого захочу. Также, очень удобно выглядит рендеринг Partials:

render :partial => 'основной_шаблон',
:collection => @posts,
:spacer_template => 'шаблон_разделитель'

Условные валидации - наконец-то!

Теперь каждому валидирующему методу можно передать аргумент :if, с условием при котором валидация должна быть запущена:

validates_confirmation_of :password,
:if => :new_password?
   
validates_presence_of :username,
:if => Proc.new { |user| user.signup_step > 1 }

Аттачи для email сообщений

Благодаря Jamis Buck теперь легко можно прикреплять к сообщениям отправляемым ActionMailer файлы и картинки.

Разное

Rails на FastCGI теперь ещё стабильней, а также стало намного легче дебаггить возникающие проблемы. Теперь роутам можно давать имена(то, что я делал вручную уже давным давно), например:

map.home '', :controller => 'main', :action => 'start'
....
redirect_to home_url()

Хочется также упомянуть полную обратную совместимость с предыдущими версиями, а также нарастающее сходство, по части примеров кода и API, с тем, что описано в книге Agile Web Development With Rails.

Поздравляю всех с этим релизом! Он является ещё одним наглядным подтверждением тому, что Rails это всеръёз и надолго.