http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done

Rails 3.0: It's ready!

Posted by David August 29, 2010 @ 06:28 PM

Rails 3.0 has been underway for a good two years, so it’s with immense
pleasure that we can declare it’s finally here. We’ve brought the work
of more than 1,600 contributors together to make everything better,
faster, cleaner, and more beautiful.

This third generation of Rails has seen thousands of commits, so
picking what to highlight was always going to be tough and incomplete.
But here’s a choice selection of major changes for Rails 3:

New Active Record query engine
Active Record has adopted the ARel query engine to make scopes and
queries more consistent and composable. This makes it much easier to
build complex queries over several iterations. We also delay the
actual execution of the query until it’s needed. Here’s a simple
example:

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 }

Read more in new Active Record guide and watch the Dive into Rails 3:
ARel video.

New router for Action Controller
When we switched to a REST-based approach for controllers in Rails 2,
we patched on the syntax to the existing router while we were waiting
to see if the experiment panned out.

It did and for Rails 3 we’ve gone back and revamped the syntax
completely to favor the REST style with less noise and more
flexibility:

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

Read more in the new routing guide.

New Action Mailer
Action Mailer was born with a split-personality of half model, half
controller. In Rails 3, we’ve made the choice to make it all
controller. This means that the feel and functionality will be much
closer to Action Controller and in fact they now share a bunch of
underlying code. Here’s a taste of what it looks like now:

class Notifier < ActionMailer::Base
  default :from =>
    "Highrise <sys...@#{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

The new Action Mailer is built on top of the new Mail gem as well. Say
goodbye to TMail headaches.

Read more in new Action Mailer guide.

Manage dependencies with Bundler
Managing all the dependencies of a Rails application has long been a
hassle of patchworks. We had config.gem, Capistrano externals, custom
rake setup tasks, and other incomplete solutions.

Bundler cleans all that up and allows you to specify the libraries,
frameworks, and plugins that your application depends on. All Rails 3
applications are born with a Gemfile to control it all. See more on
the Bundler site.

XSS protection by default
The internet is a scary place and Rails 3 is watching out for you by
default. We’ve had CRSF protection with form signing for a while and
SQL-injection protection since the beginning, but Rails 3 ups the anté
with XSS protection as well (hat tip to Django for convincing us).

See the Railscast on XSS video and the Dive into Rails 3: Cross-site
scripting video for more.

Say goodbye to encoding issues
If you browse the Internet with any frequency, you will likely
encounter the � character. This problem is extremely pervasive, and is
caused by mixing and matching content with different encodings.

In a system like Rails, content comes from the database, your
templates, your source files, and from the user. Ruby 1.9 gives us the
raw tools to eliminate these problems, and in combination with Rails
3, � should be a thing of the past in Rails applications. Never
struggle with corrupted data pasted by a user from Microsoft Word
again!

Active Model: Validations, callbacks, etc for all models
We’ve extracted quite a bit of commonly requested Active Record
components into the new Active Model framework. This allows an ORM
like Mongoid to use Active Record’s validations, callbacks,
serialization, and i18n support.

Additionally, in the rewrite of Action Controller, we removed any
direct references to Active Record, defining a clean, simple API that
ORMs can implement. If you use an API-compliant ORM (like DataMapper,
Sequel, or Mongoid), you will be able to use features like form_for,
link_to and redirect_to with objects from those ORMs without any
additional work.

Official plugin APIs
We also rewrote Railties with the express goal of using the new plugin
API for all Rails frameworks like Active Record and Action Mailer.
This means that Rails plugins like the ones for DataMapper and RSpec
have access to all of the integration as the built-in support for
Active Record and Test::Unit.

The new Railtie API makes it possible to modify the built-in
generators, add rake tasks, configure default Rails options, and
specify code to run as early, or as late as you need. Rails plugins
like Devise were able to add much better integration in the Rails 3
version of their plugin. Expect to see a lot more of that in the
months ahead.

Rewritten internals
We rewrote the internals of Action Pack and Railties, making them much
more flexible and easier to extend. Instead of a single monolithic
ActionController::Base, Rails 3 exposes a number of modules, each with
defined APIs, that you can mix and match to create special-purpose
controllers for your own use. Both Action Mailer in Rails and the
Cells project make heavy use of this new functionality.

You can also take a look a this blog post by Yehuda (from last year)
to see how the new architecture makes it easy to implement Django-
style generic actions in Rails by leveraging Rack and
ActionController::Metal.

The Rails generator system is got a revamp as well. Instead of
monolithic generators that know about all of the Rails frameworks,
each generator calls a series of hooks, such as :test_framework
and :orm, that plugins can register handlers for. This means that
generating a scaffold when using rSpec, DataMapper and Haml will
generate a scaffold customized for those plugins.

Agnosticism with jQuery, rSpec, and Data Mapper
The rewritten internals and the new plugin APIs have brought true
agnosticism to Rails 3 for all components of the framework. Prefer
DataMapper to Active Record? No problem. Want to use jQuery instead of
Prototype? Go ahead. Eager to test with rSpec instead of test/unit?
You got it.

It’s never been easier to Have It Your Way™ with Rails 3. And at the
same time, we’ve made that happen without making using the excellent
default stack any more complicated.

Documentation
Rails 3 has had a long development cycle and while that might have
lead to some impatience, it has also given book and tutorial authors a
chance to catch up and be ready. There’s a wealth of great Rails 3
documentation available already and more is coming shortly.

The Agile Web Development with Rails 4th Ed book is almost ready and
there are plenty more books coming. Check out all the new guides, the
new official videos, new Railscasts, and a new tutorial. See the
recent recap of documentation sources for more.
Installation
gem install rails --version 3.0.0.

We also have a Rails v3.0.0 tag and a 3-0-stable branch.

Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and
JRuby 1.5.2+.

Gratitude and next steps
I’m personally incredibly proud of this release. I’ve been working on
Rails for more than 7 years and the quality of the framework we have
today is just astounding. This is only possible as a community effort
and Rails 3 has seen so many incredible developers step up and help
make this our best release ever (wink). Many thanks to all of you.

We’ll continue to develop Rails 3.0 with fixes and tweaks via the
stable branch and Rails 3.1 is already cooking on master.

UPDATE: We’re raising money for Charity:Water in the name of Rails
3.0. Please donate and help us bring clean water to 5,000 people in
the name of the Rails community.

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en.

Reply via email to