#!/usr/bin/env ruby if ARGV.empty? puts "usage: #{File.basename($0)} string" puts " Scans related Rails directories for " + "files begining with string " puts " and opens them in vi." exit end files = [] ignore = [/CVS$/] # Find models or controllers that match args ARGV.each do |arg| models = Dir["app/models/#{arg}*"] controllers = Dir["app/controllers/#{arg}*"] files += models + controllers end # Remove duplicates files.sort!.uniq! # Add unit tests for models files.grep(%r{app/models/(.*?).rb}) do tests = Dir["test/unit/#{$1}_test.rb"] files += tests end # Add views and functional tests for controllers files.grep(%r{app/controllers/(.*?)_controller.rb}) do views = Dir["app/views/#{$1}/*"] tests = Dir["test/functional/#{$1}_controller_test.rb"] files += views + tests end # Add views and fixtures for mailers files.grep(%r{app/models/(.*?_mailer).rb}) do views = Dir["app/views/#{$1}/*"] fixtures = Dir["test/fixtures/#{$1}/*"] files += views + fixtures end # Again remove duplicates files.sort!.uniq! # Remove files that match ignore list files.delete_if do |filename| result = false ignore.each do |i| if filename =~ i result = true break end end result end system "vi -o #{files.join(' ')}"
Drop it in a file called "edit" in your path and you can open related rails files with a few key strokes:
# open AccountController and related tests and views: edit account_c # open AccountMailer and related tests, views, and fixtures: edit account_m # open everything related to accounts: edit account
A detailed explanation here: http://wiseheartdesign.com/articles/2006/07/27/rails-and-vim/.