Rails 0.11.1: More Ajax, Verifications, SQL Server updated, loads of fixes

The Ajax wave is sweeping across Rails. In this release, we’ve added a :position option to both link_to_remote and form_remote_tag that can be set to either :before, :top, :bottom, or :after. These options make it possible to add new DOM elements to existing lists without replacing the whole list. When working on big lists that are in a fixed order anyway, there’s a considerable speed increase to be had.

Yellow Fade Technique
Additionally, we’ve implemented the first in a hopefully long series of packaged effects. This is the 37signals’ Yellow Fade Technique that’s now available as Effect.Highlight(id) — perfect for highlighting a new element that was just added with Ajax. If you have the Javascript chops to do other effects, please do help out. The wiki discussion page for Ajax in Rails already has great ideas for slide, fadeout, and squish.

Verifications in a whole new module for Action Pack that allows you to specify preconditions for you actions. They come in the form of “verify that these parameters are part of the request or redirect the user somewhere else (possibly adding a message to the flash)”. Or said in code:

verify :params => "post", :only => [ :create, :update ], :redirect_to => { :action => "index" }

SQL Server adapter updated
The Micrsoft SQL Server adapter is back in top form supporting both file uploads (albeit still restricted by SQL Server’s 7KB limit) and the new limit style. Thanks to DeLynn Berry for the quick update. Now only the DB2 adapter is not supporting the new limit style.

Loads of fixes
Iconv is no longer required to install Rails (but you’ll want it if you need to send/receive UTF-8 with Action Mailer), you can clone Active Records with floats, the dispatch.fcgi has been fixed, and a bunch of other things. In total, this release has 30 new features, additions, tweaks, and fixes.

See all the changes in the changelogs for Rails, Active Record, Action Pack, Active Support, Action Mailer, and Action Web Service.

Update: No application changes should be required. Just make sure that you copy over the latest prototype.js if you’re using Ajax.

P.S.: Many thanks to Florian Gross for the wonderful code snippet that allows for uploads to RubyForge automatically. This saved me the headache of releasing 12 files by hand one more time. And many thanks to Jamis Buck for the new template used for the API documentation.

eXPlain Project Management Tool

eXtreme Programming and Ruby on Rails is a wonderful fit. Besides the most excellent support for test-driven development, XP works a whole lot better when your code base is so small that breakthroughs in knowledge about the domain can be executed in as few refactorings as possible.

But if you want to get into XP, you naturally also have to get into the planning game. And that’s where the newly released eXPlain Project Management Tool by John Wilger (with help from Jim Weirich and Quentin Baker) comes in. Through a simple interface, you can manage stories, iterations, and milestones.

Wilger and friends even had the good sense to put up a demo application (admin/adminadmin) for you to try out.

Rapid adoption of Rails as documented by ML and IRC

If you should have any doubts that Rails is experiencing rapid adoption, consider this graph plotting the number of messages per day (as a raising average, high mark was 141 messages in a single day) on the mailing list:

On IRC, we’ve high-marked at 225 people and have more people than the #ruby-lang channel on most evenings.

Welcome all who’ve recently joined us!

IE5/5.5 compatibility wizard wanted

Do you know how to make Javascript work for IE5/5.5? We’d love to get some help making the new Javascript helpers as compatible as possible. So if you got the chops, please take a look at making sure that the prototype.js library and the associated helpers work on IE5/5.5. For more information, get in touch with me (nextangle) on #rubyonrails.

Another pair of ThoughtWorkers pick up Rails

Obie Fernandez and Carlos Villela are ThoughtWorkers following the lead of other company programmers, like Aslak (who’s getting DamageControl on Rails) and John Wilkers, in exploring Rails further.

And while the first hit was free, the addiction is now setting in. Carlos writes:

…more often than not it’s hard to stop coding; more than once I’ve looked at the taskbar and gasped in disbelief – over the past month, I’ve coded way past 2 AM after having worked the whole day, and even though I needed to wake up early the next morning, I was not tired at all. So, to put it in another words, careful – this thing is addictive.

Obie takes a slightly more bullish approach and compares it with the woes of his day job in Java:

At work, as of this monday I started work on a project that would have most Java open-source fanatics salivating. Custom web app running on Java 5, Tomcat 5.5, Hibernate 3, Webwork… Cutting edge stuff, right? Right?

No way. Web development with Ruby leaves Java far, far behind.

Overall, the productivity loss is giving me withdrawal symptoms. I can’t wait to get back to my beloved Ruby this weekend.

ThoughtWorks is the company that employs Martin Fowler as their chief scientist. I asked him for an opinion on it all and got: “At the moment what I’m waiting for is to see if some us can use Rails on an actual project.” Very much looking forward to hear his and the rest of the firm’s evaluation once ThoughtWorks is able to land its first Ruby on Rails contract.

Maybe the client Obie Fernandez is working with would be a good prospect. In the comments to Obie’s withdrawal posting, Hank Roark writes:

I just happen to be the customer of the project Obie is working on. And I’m pretty happy with the team’s progress. I’m afraid that my expectations have been lowered by years and years of experience in the Java realm. Obie may convince me to use Ruby Rails, yet.

It’s great to see so many ThoughtWorkers getting into Rails. I had the good fortunes to hang with their JAOO 2003 delegation shortly after I had picked up Ruby, while Rails was still a mere twinkle in my eye, and thoroughly enjoyed it. Rock on.

Obfuscated Ruby Code Contest

While Ruby is usually praised as being one of the most readable programming languages around, it’s certainly also possibly to make it obfuscated. It just takes a good dose of dedication to cause. And if that kind of dedication is flowing through your veins, consider signing up of the Obfuscated Ruby Code Contest. A competition on doing something useful with unreadable code and to win prices in the process.

Craig Walls: 'Honestly, I'm quite impressed'

Craig Walls is the coauthor of both Spring in Action and XDoclet in Action. Recently, he had “…come to the conclusion that I could not ignore Rails any longer”. This is what he found:

Honestly, I’m quite impressed. I found that the productivity claims surrounding Rails to be quite accurate. After writing only a single line of code, I had a reasonably functional application. Adding a couple of more lines, I had a one-to-many relationship between two model objects. The biggest chunk of work comes in customizing the view, but that’s to be expected because there’s no way that Rails can anticipate your desired look-and-feel. All in all, I spent 15 minutes putting together a simple application that might have taken me several hours with any of the other frameworks that I’m familiar with.

My emphasis. This is the same conclusion that Bruce Tate has been talking about. It actually does rapidly improve your ability to deliver working software. Is the factor 2, 5, or 10 times? Who knows (and cares?). How about we just settle it at it’s enough of an improvement that you ought to try it out for size.

Patching Ruby-FastCGI for leaks and exceptions

Apparently, Ruby-FastCGI is one leaky pipe. It’s currently happily disposing of up to 16K per request. Not particularly helpful for the long-running processes like FastCGIs. But have no fear, Kirk Haines is near. And plugged the holes, he has.

Read all about the patch and get it from Kirk’s FCGI Patch for Ruby FCGI 0.8.5 page.

Additionally, 0.8.5 isn’t raising the original exception when it dies, which makes it pretty hard to debug. But luckily, Aredridel made a patch to get the original exception bubbled up a while back. Apply that while you’re at it.

Note: As Ruby-FastCGI has temporarily disappeared from the RAA listing, you might like to know that the direct link is http://www.moonwolf.com/ruby/archive/ruby-fcgi-0.8.5.tar.gz

Rails 0.11.0: Ajax, Pagination, Non-vhost, Incoming mail

With the inclusion of Ajax helpers in Rails 0.11.0, we’ve addressed the most important concern holding back large scale Ajax use: Writing DHTML by hand. Manipulating the DOM by hand is a labor-intensive and error-prone process rife with frustration and cross-browser compatibility. With the Ajax support in Rails, writing manual Javascript/DHTML is (almost) a thing of the past.

Through a handful of helper tags, we’ve exposed an approach that relies on a bare minimum of support on the client-side (XMLHttpRequest and innerHTML) while offloading the generation of page fragments to familiar constructs like ERb and Builder templates. This means that you’ll build your Ajax integration using all the tools you’re familiar with and safely let the Javascript/DOM magic be off-loaded to the Rails helper and library.

Sam Stephenson (hire this guy!) has been the architect behind transforming my meager Javascript attempts into a fully object-oriented library that the Rails helper calls to do its dirty work. He has also done a video demonstrating how he can turn a create form into Ajax in just a few minutes. While this may appear a bit complicated, its mostly because the application Sam’s integrating with lets the controller generate the URL, which normally isn’t the case.

While the Ajax support is certainly the star of this release, we have much more. Another Sam Stephenson goodie is Pagination support, which lets you seamlessly spread the results of a list across multiple pages by combining controller-side and view-side support for pages and navigation.

Also of note is that Rails applications no longer require their own virtual host to be easy to setup. It’s now possible to symlink the public directory from underneath an existing hierarchy, so your application can live under hieraki in /community/hieraki. This should make it considerably easier to install and distribute applications that need to live on shared servers. If you want to make your own application vhost agnostic, have a look at the AssetTagHelper that’ll automatically create the proper paths for images, stylesheets, and the likes.

The Action Mailer gained inbound capabilities in this release. By implementing the receive(email) method, you can target your Action Mailer from fx postfix and have it process incoming emails. We’ve even enhanced TMail to make it easy to process international emails (auto converting to UTF-8) and handling file attachments. See the example in the README and checkout the Howto.

On top of all that there’s a new script/runner for making it easy to call your Rails domain model from CRON, there’s a new Flash module, there’s database indifferent limit/offset, and a truckload of fixes, enhancements, and tweaks.

See all the changes in the changelogs for Rails, Active Record, Action Pack, Active Support, Action Mailer, and Action Web Service.

Updating: If you’re coming from Rails 0.10.1, just run rails . --skip in the root of your application to get the new files. You shouldn’t need to change any code. You will need to clear out all your sessions, though, because of the Flash module upgrade!