Posted by , May 23, 2010 @ 6:56 am in Releases

We’ve released Ruby on Rails 2.3.6: six months of bug fixes, a handful of new features, and a strong bridge to Rails 3.

We deprecated some obscure and ancient features in Rails 2.3.6 so we could cut them entirely from Rails 3. If your app runs on Rails 2.3.6 without deprecation warnings, you’re in good shape for a smooth sail onward.

This slow-cooked dish is brought to you some 87 committers from our all-volunteer kitchen.

Now, let’s open the goodie bag!

Action Pack

Upgrade Rack from 1.0.1 to 1.1.0.

XSS prevention: update to match Rails 3 and move to the official plugin at http://github.com/rails/rails_xss.

prevention: update to match Rails 3 and move to the official plugin at http://github.com/rails/rails_xss. Cookies: convenient cookie jar add-ons to set permanent or signed cookies, or both at once: cookies.permanent.signed[:remember_me] = current_user.id . Read more.

. Read more. Flash: promote alert and notice , the most common flash keys in many apps, to self.alert = '...' and self.notice = '...' . Add redirect_to url, :alert => '...' and :notice => '...' . Read more.

and , the most common flash keys in many apps, to and . Add and . Read more. i18n: localize the label helper.

Active Record

Namespacing: support optional table name prefixes on modules by defining self.table_name_prefix . Read more.

. Read more. Destroy uses optimistic locking.

Counter cache: use Post.reset_counters(1234, :comments) to count the number of comments for post 1234 and reset its comments_count cache.

to count the number of comments for post 1234 and reset its comments_count cache. PostgreSQL: always use standard-conforming strings, if supported.

MySQL: add index length support. Read more.

MySQL: add_ and change_column support column positioning using :first => true and :after => :other_column .

Active Support

Upgrade i18n from 1.3.3 to 1.3.7.

Upgrade TZInfo from 0.3.12 to 0.3.16.

Multibyte: speed up string verification and cleaning.

JSON : use YAJL for JSON decoding, if available. gem install yajl-ruby

: use for decoding, if available. Testing: add assert_blank and assert_present . Read more.

and . Read more. Core: backport Object#singleton_class from Ruby 1.8.8, deprecating our Object#metaclass .

from Ruby 1.8.8, deprecating our . Core: add Object#presence that returns the object if it’s #present? otherwise returns nil . Example: region = params[:state].presence || params[:country].presence || 'US'

that returns the object if it’s otherwise returns . Example: Core: add Enumerable#exclude? to match include? .

to match . Core: rename Array#rand to Array#random_element to avoid collision with Kernel#rand .

to to avoid collision with . Core: rename Date# and Time#last_(month|year) to #prev_(month|year) for Ruby 1.9 forward compatibility.

Active Resource

JSON : set ActiveResource::Base.include_root_in_json = true to serialize as a hash of model name → attributes instead of a bare attributes hash. Defaults to false.

Action Mailer

Upgrade TMail from 1.2.3 to 1.2.7.

Railties

Silence RubyGems 1.3.6 deprecation warnings.

Peruse the commit log for the full story.