Rick Olson joins the Rails core

Rick Olson aka technoweenie has been granted the rank of core and will join the new 12-strong group of developers with commit rights to the Rails source.

Rick has long been a prominent figure in the Rails community with ton of great plugins to his name, but it has been his work on Rails 1.1 that made us realize that he was an obvious fit.

From the upgraded calculations, to enumeration support for RJS, to his work on eager loading, and a ton of other minor issues, Rick has shown strong knowledge and ability across the code base. When Rails 1.1 is released shortly, you’ll be using a lot of Rick’s code.

So congratulations, Rick! You’ve joined the exclusive club of Rails core committers.

Sneak peak at effortless deployment with Rails Machine

SwitchTower author Jamis Buck has provided an excellent manual documenting how to use it. Those who’ve taken the plunge are loving how easy it makes deployment, as well as myriad other tasks. But I’m still always hearing, “We haven’t setup SwitchTower yet but are really looking forward to”.

Enter Rails Machine. It sets out to lower the barrier to using SwitchTower by taking care of all the setup and maintenance. They are scheduling to open their doors in April. For now take a look at the short movie they’ve made showing how easy they’ve made it for you to get going with SwitchTower. They get you up and running in under 5 minutes. No more excuse to not realize how much you love SwitchTower.

RubyConf 2006 location announced

Hot on the heals of the fervor behind the upcoming RailsConf, the location of RubyConf 2006 has been announced. This fall it’s going to be in Denver, Colorado from October 20-22, 2006.

Two years ago we had about 70 people at RubyConf. This past year we stopped accepting signups months before the event when 200 tickets were sold. This year’s conference promises to have huge demand.

Venue, schedule and registration should be opening up in the Spring. Keep an eye on the RubyConf site as more details trickle out.

Big thanks to David Black and the others behind RubyCentral for their tireless work setting all this up.

Annotated models

Ever working with a model and you forget what all of its columns are? Ever find yourself with your schema.rb open in a separate window so you can see what the structure is of your tables?

Dave Thomas, of Rails Pragmatic Studio fame (among a brazillion other things), hacked up a plugin that adds a comment block to the top of all of your model classes documenting the current schema for the given model. It ends up looking something like this:

  1. Schema as of Sun Feb 26 21:58:32 CST 2006 (schema version 7)
  2. id :integer(11) not null
  3. quantity :integer(11)
  4. product_id :integer(11)
  5. unit_price :float
  6. order_id :integer(11)
class LineItem < ActiveRecord::Base belongs_to :product

When the schema is updated, the comment is updated to reflect the new schema.

Install it with the plugin script:

script/plugin install http://svn.pragprog.com/Public/plugins/annotate_models

Run it with a custom rake task:

rake annotate_models

Check out the caveats in the README.

Thanks for sharing Dave.

Getting Real: How to build web apps like 37s

So now that we’ve forced our technology of web applications upon the world with Ruby on Rails, we decided to get opinionated about everything else involved too. Getting Real, the book is a 171-paged PDF that sells for $19 and tries to explain the guiding principles behind Basecamp, Backpack, Writeboard, Ta-da List, and Campfire. The why’s and the how’s.

If you’re doing web application work for yourself or others, there should at least be a handful of essays that gives you a bright idea or the motivation to make a change. And we’re giving away four of the 91 essays for you to sample first. Yay, free stuff!

New in Rails: Enumerable#group_by and Array#in_groups_of

Changeset 3726 adds two little methods to ActiveSupport: Enumerable#group_by and @ Array#in_groups_of@.

Enumerable#group_by is for collecting an enumerable into sets, grouped by the result of a block. Useful, for example, for grouping records by date.

     latest_transcripts.group_by(&:day).each do |day, transcripts| 
       p "#{day} -> #{transcripts.map(&:class) * ', '}"
     "2006-03-01 -> Transcript"
     "2006-02-28 -> Transcript"
     "2006-02-27 -> Transcript, Transcript"
     "2006-02-26 -> Transcript, Transcript"

Enumerable#group_by will be baked right into Ruby in the future, and currently lives in the 1.9 branch.

Array#in_groups_of let’s you iterate over an array in groups of a certain size, optionally padding any remaining
slots with a specified value (nil by default).

     %w(1 2 3 4 5 6 7).in_groups_of(3) {|g| p g}
     ["1", "2", "3"]
     ["4", "5", "6"]
     ["7", nil, nil]

You gotta love the elegant encapsulation afforded by blocks! Yield.

Two Ruby articles in the latest ObjectiveView

ObjectiveView, a journal for software developers that focuses each issue on a specific topic, has two Ruby related articles in their latest issue, New Technologies Focus.

The first is an introduction to Ruby by Amy Hoy. She brings her quirky right-brained ebullience to bear, providing a thorough yet accessible tour of Ruby. She emphasizes that one of its most salient characteristics is that it makes you happy. If her writing style is any indication, she’s loving life.

ThoughtWorker Obie Fernandez serves up the other article which demonstrats what DHH’s often cited phrase “opinionated software” means and how it relates to Rails. Keep an eye out for Obie’s upcoming book, Extending Ruby on Rails (Into the Enterprise) which is expected out in Fall 2006 by Addison-Wesley.

These two tutorials provide a nice introduction to both Ruby and Rails.

Past issues of ObjectView which focus on such topics as agile development, use cases and componentized development, are also available, so check out the rest of the back issues on their website.

New for Rails 1.1: Integration Tests

If you’ve ever tried to properly test complex scenarios involving multiple controller actions, you will notice that the Rails Functional Tests fall flat. The new Integration Tests, which have just been introduced into the Rails trunk, will solve that. From the documentation:

An IntegrationTest is one that spans multiple controllers and actions, tying them all together to ensure they work together as expected. It tests more completely than either unit or functional tests do, exercising the entire stack, from the dispatcher to the database.

The provided example also shows a glimpse into the testing DSL that is used in Campfire:

class AdvancedTest < ActionController::IntegrationTest
  fixtures :people, :rooms

  def test_login_and_speak
    jamis, david = login(:jamis), login(:david)
    room = rooms(:office)

    jamis.speak(room, "anybody home?")

    david.speak(room, "hello!")

Integration Tests will be included with Rails 1.1. Get ready!

Jim Weirich on the Rails podcast

Jim Weirich has been using Ruby for ages. He’s one of the early-adopter all-stars from the days before Rails. Rails programmers will be familiar with his wildly popular and influencial Rake and Builder projects. He’s also one of the main developers of RubyGems, which is scheduled to be included with Ruby in an upcoming release.

The enthusiasm he brings to his work and talking about his work make it clear that he has a genuine love for programming. On top of it all, cliches aside, he’s one of the nicest people you’ll ever meet.

So what a treat to have him on the
Ruby on Rails podcast. Have a listen.

Cheers to Geoffrey Grosenbach for snagging yet another great guest.