A Fresh Cup is Mike Gunderloy's software development weblog, covering Ruby on Rails and whatever else I find interesting in the universe of software. I'm a full-time Rails developer and contributor, available for long- or short-term consulting, with solid experience in working as part of a distributed team. If you'd like to hire me, drop me a line. I'm also the author of Rails Rescue Handbook and Rails Freelancing Handbook.

Navigation
« Bug Trackers I Have Known | Main | Double Shot #346 »
Friday
Dec052008

A Little RAILS_ROOT Tidiness

Ever write code like this in Rails?

[sourcecode language='ruby']
if File.exists?(File.join(RAILS_ROOT, 'config', 's3.yml'))
has_attached_file :s3_image,
:storage => :s3,
:s3_credentials => File.join(RAILS_ROOT, 'config', 's3.yml')
end
[/sourcecode]

That particular snippet is from an application that optionally uses Amazon S3 to store images, if there is a configuration file for S3 supplied in the deployment. Well, you can clean that up a bit. First, although the RAILS_ROOT constant is still supported, we've had the prettier-looking Rails.root for months. Second, as of a recent commit to edge rails, Rails.root returns a Pathname object, so it directly supports the join method. Hence, the code snippet above can now be:

[sourcecode language='ruby']
if File.exists?(Rails.root.join('config', 's3.yml'))
has_attached_file :s3_image,
:storage => :s3,
:s3_credentials => Rails.root.join('config', 's3.yml')
end
[/sourcecode]

A tiny improvement, but of such tiny improvements are a pleasant framework made.

Reader Comments (4)

Nice tip. I'd stick Rails.root.join('config', 's3.yml') in a local variable instead of repeating it.

December 5, 2008 | Unregistered CommenterMark Wilden

Pathname is IMHO one of the more useful, but most underused libraries. It makes working work files alot simpler than using the File class directy.

Although I'd probably tend to write that example using the Pathname#exists? method instead of File.exists?, like this: http://pastie.org/332348

December 5, 2008 | Unregistered CommenterDan Kubb

The nicest thing about posting code samples: instant code review. Thanks, good changes both.

December 6, 2008 | Unregistered CommenterMike Gunderloy

1. File.join() - which all developers will only understand

or

2. Rails.root.join() - which will only make sense to rails developers

I think its a pointless change that makes it slightly cleaner, but less understandable overall.

March 9, 2009 | Unregistered CommenterChrisR

PostPost a New Comment

Enter your information below to add a new comment.
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>