Rails 3.0: готов!

В статье "Rails 3.0: It's ready!" автор говорит об изменениях, вошедших в релиз Rails 3.0. Автор David

На создание Rails 3.0 ушло добрых два года, так что с огромным удовольствием мы можем объявить, что наконец он создан. Мы внесли в создание этого релиза работу около 1 600 участников для того, чтобы его улучшить, сделать быстрее, чище и красивее.

В Rails 3 вошло тысячи коммитов, таким образом перечислить все изменения и рассмотреть их не представляется возможным. Но мы постараемся рассмотреть самые важные из них:

Новый движок запроса Active Record
Active Record перенял движок запроса ARel чтобы возможности и запросы были более последовательными и компонуемыми. Таким образом, намного легче создавать сложные запросы по нескольким итерациям. Мы также задерживаем фактическое выполнение запроса, пока это нам не будет необходимо. Вот простой пример:

users = User.where(:name => "david").limit(20)
users = users.where("age > 29")

# SELECT * FROM users 
# WHERE name = "david" AND age > 29 
# ORDER BY name
# LIMIT 20
users.order(:name).each { |user| puts user.name }

Более подробно читайте в новом Active Record guide и в Dive into Rails 3: ARel video.

Новый маршрутизатор для Action Controller

Когда мы перешли на REST-подход для контроллеров в Rails 2, мы исправили синтаксис существующего маршрутизатора пока ждали, чтобы увидеть удался ли эксперимент.

Он удался и в Rails 3 мы вернулись и обновили синтаксис полностью в REST-стиле с меньшим шумом и большей гибкостью:

resources :people do
  resource :avatar

  collection do
    get :winners, :losers
  end
end

# /sd34fgh/rooms
scope ':token', :token => /\w{5,5}/ do
  resources :rooms
end

# /descriptions
# /pl/descriptions
# /en/descriptions
scope '(:locale)', :locale => /en|pl/ do
  resources :descriptions
  root :to => 'projects#index'
end

Более подробно читайте в новом routing guide.

Новый Action Mailer
Action Mailer родился то ли из полу модели, то ли из полу контроллера. В Rails 3, мы сделали выбор в пользу того, чтобы он был контроллером. Это означает, что его функциональные возможности будут намного ближе к Action Controller, и фактически они теперь делят кучу основного кода. Вот пример как он сейчас выглядит:

class Notifier < ActionMailer::Base
  default :from =>
    "Highrise <system@#{APPLICATION_DOMAIN}>" 

  def new_project(digest, project, person)
    @digest, @project, @person = digest, project, person

    attachments['digest.pdf'] = digest.to_pdf
    attachments['logo.jpg']   = File.read(project.logo_path)

    mail(
      :subject => "Your digest for #{project.name}",
      :to => person.email_address_with_name
    ) do |format|
      format.text { render :text => "Something texty" }
      format.html { render :text => "Something <i>texty</i>" }
    end
  end
end

Новый Action Mailer также построен на вершине нового Mail gem. Скажите до свидания головным болям с TMail.

Более подробно читайте в новом Action Mailer guide.

Управление зависимостями с помощью Bundler

Управление всеми зависимостями Rails-приложения давно создавало много хлопот и путаницы. У нас были config.gem, Capistrano externals, пользовательские rake setup tasks, и другие неполные решения.

Bundler чистит все это и позволяет Вам настроить библиотеки, фреймворки, и плагины, от которых зависит ваше приложение. Все приложения Rails 3 создаются с помощью Gemfile, чтобы все это держать под контролем. Более подробно смотри на сайте Bundler.

XSS-защита по умолчанию
Интернет - это страшное место, но по умолчанию Rails 3 охраняет Вас. С начала у нас была CRSF-защита с формой подписи на некоторое время с защитой SQL-injection, но Rails 3 поднялся до anté с помощью XSS-защиты (спасибо Django, что убедил нас).

Дополнительную информацию смотри здесь: Railscast on XSS video и the Dive into Rails 3: Cross-site scripting video.

Скажите "прощай" проблемам с кодировкой
Если Вы хотя бы иногда заглядываете в интернет, то наверняка встречаете значок �. Эта проблема чрезвычайно распространенная, и вызвана смешиванием и сопоставлением контента с разной кодировкой.

В такой системе как Rails, контент поступает из базы данных, шаблонов, исходных файлов и от пользователя. Ruby 1.9 предоставляет нам инструменты для устранения этих проблем, и в сочетании с Rails 3, в приложениях Rails не должны появляться такие значки, как � Никогда больше не придется бороться с поврежденными данными, пренесенными пользователем из Microsoft Word!

Active Model: Валидации, калбэки и т.д для всех моделей
Мы перенесли совсем немного обычно требуемых компонентов Active Record в новый фреймворк Active Model. Это позволяет такому ORM как Mongoid использовать Active Record-валидации, калбэки, сериализацию и i18n-поддержку.

Кроме того, в Action Controller, мы убрали прямые ссылки на Active Record, определив чистый, простой API, который могут выполнить ORMs. Если Вы используете API-совместимый ORM (такой как DataMapper, Sequel или Mongoid), то Вы сможете использовать такие функции, как form_for, link_to и redirect_to с объектами из этих ORMs без каких-либо дополнительных действий.

Официальные API для плагина
Мы также переделали Railties с целью использования нового API-плагина для всех фреймворков Rails, таких, как Active Record и Action Mailer. Это означает, что Rails-плагины, подобно плагинам для DataMapper и RSpec имеют доступ ко всей интеграции, такой как встроенная поддержка Active Record и Test:Unit.

Новый Railtie API позволяет изменить встроенные генераторы, добавлять rake tasks, настраивать опции Rails по умолчанию и настраивать код для более легкого и управляемого запуска. Rails-плагины, такие как Devise смогли добавить намного эффективную интеграцию в версию Rails 3 своего плагина. Ждите намного большего в ближайшие месяцы.

Переработанное ядро
Мы переработали Action Pack и Railties, сделав их более гибкими и легко расширяемыми. Вместо одного монолитного ActionController:: Base, Rails 3 содержит ряд модулей, каждый из которых имеет определенные API, которые можно комбинировать для создания специальных контроллеров для собственного использования. И Action Mailer in Rails и Cells project широко используют эту новую функциональность.

Вы также можете посмотреть этот блог от Yehuda (с прошлого года), чтобы узнать, как новая архитектура позволяет легко реализовать общие действия Django-стиля в Rails благодаря использованию Rack и ActionController::Metal.

Система генератора Rails также обновилась. Вместо монолитных генераторов, которые знают обо всех фреймворках Rails, каждый генератор вызывает ряд хуков, таких как: test_framework и :orm, для которых плагины могут регистрировать обработчики. Это означает, что генерация скафолда (scaffold) при использовании rSpec, DataMapper и Haml создаст скафолд, заточенный под эти плагины.

Агностицизм с jQuery, rSpec, и Data Mapper
Переписанное ядро и новый плагин API внесли истинный агностицизм в Rails 3 для всех компонентов фреймворка. Отдаёте предпочтение DataMapper, а не Active Record? Нет проблем. Хотите использовать jQuery вместо Prototype? Вперед. Нетерпится сделать тест с помощью rSpec вместо test/unit? Вы сможете это сделать.

Никогда ещё не было так легко быть самим собой, как с Rails 3.

Документация
Rails 3 прошел очень длинный путь развития, прежде чем выйти и, хотя это могло привести к некоторому нетерпению, это дало авторам книг и учебных пособий возможность наверстать упущенное, и вот, наконец, он вышел. Уже есть большое количество информации о Rails 3, и в ближайшее время выйдет ещё.

Книга Agile Web Development with Rails 4th Ed уже почти готова и на подходе еще большое количество книг. Проверяйте все new guides, new official videos, new Railscasts, и new tutorial. Дополнительную информацию смотри здесь: recap of documentation sources.

Установка

gem install rails --version 3.0.0  

У нас также есть v3.0.0 tag и 3-0-stable branch.

Rails 3.0 был разработан для работы с Ruby 1.8.7, Ruby 1.9.2, и JRuby 1.5.2 +.

Благодарность и последующие действия

Лично я очень горжусь этим релизом. Я работаю над Rails вот уже более 7 лет и качество фреймворка, который мы имеем сегодня, просто поразительно. Это стало возможно лишь благодаря усилиям сообщества и Rails 3 увидел невероятное количество действий со стороны разработчиков. Большое спасибо всем Вам.

Мы продолжим развивать Rails 3.0 с помощью разного рода исправлений через стабильную ветку и Rails 3.1 уже готовится в главной ветке.

 

Оригинал статьи на  www.weblog.rubyonrails.org

Перевод хостинг КОМТЕТ komtet.ru