This week’s report covers changes from 24 Mar 2008 to 30 Mar 2008 (the day the corresponding Rails Envy podcast was recorded).

There're lots of big exciting changes this week on edge. Smells like 2.1 soon!

has_finder gem merged into Rails

Ryan Daigle has the scoop on the new has_finder-like functionality in Rails so head on over (I won't repeat it here in the interests of DRY).

Credit goes to Nick Kallen for coming up with the has_finder gem.

Related changeset:

ActiveRecord: Unsaved attribute changes are now tracked

You can now ask an ActiveRecord model whether its attributes have been changed (and is unsaved) using the {attr_name}_changed? (magic) method. The {attr_name}_was method will return the original value of the attribute, and the {attr_name}_change method will return an array with 2 members, the 1st being the original value, the 2nd being the changed (and unsaved) value.

# Change person's name. = 'Jason Seifer'
person.changed?       # => true
person.name_changed?  # => true
person.name_was       # => 'jseifer'
person.name_change    # => ['jseifer', 'Jason Seifer'] = 'Ceiling Cat'
person.name_change    # => ['jseifer', 'Ceiling Cat']

Credit goes to Rails core team member Jeremy Kemper (bitsweat) for this patch (which originated from Jeremy's very own Dirty plugin).

Related changeset:


Now you can do:

Post.all.each { |post| # something }

Kinda like how some other ORMs do (like DataMapper).

Credit: thechrisoshow and again, Nick Kallen for has_finder.

Related changeset:

Timestamped Migrations

This is more useful than it sounds: migrations are now timestamped instead of using incremental numbers in your db/migrate folder. This eliminates the problem of migrations having the same version number when working on a multi-developer Rails app.

Two new Rake tasks, rake db:migrate:up/down, have been added to allow running of the up and down methods of individual migrations.

Credit goes to John Barnette, the guy who gave you foxy fixtures.

Related changeset:

New config.gem option for specifying which gems are required by the application + rake tasks for installing and freezing gems

Specify which gems are required by your Rails app in your Rails environment.rb! "Vendor everything" supported right in Rails :). An example: do |config| 
  config.gems 'chronic'
  config.gems "hpricot", :version => '0.6', :source => ""
  config.gems "aws-s3", :lib => "aws/s3"

There are also new Rake tasks:

# List required gems. 
rake gems 

# Install all required gems: 
rake gems:install 

# Unpack specified gem to vendor/gems/gem_name-x.x.x 
rake gems:unpack GEM=chronic

Credit goes to the prolific Rick Olson for this gem of a patch.

Related changeset:

ActiveResource #clone

You can now clone an existing resource:

gregg = Person.find(1)
borg = gregg.clone

This doesn't clone child ActiveResource members though, just the straight up attributes of resource.

Contribors: Ryan Daigle and thechrisoshow.

Related changeset:

Big documentation patch

A big doc patch consisting of all the efforts going on in the doc-rails repository on Github has been committed. Check out Pratik's post for more info on what doc-rails is. Though with Rails moving to Git soon, doc-rails may no longer be necessary!

Related changeset: