#!/usr/bin/env ruby path = ARGV.first || ENV['TM_FILEPATH'] def search_backwards_for_method(text, line_no) (line_no - 1).downto(0) do |i| if text[i] =~ /^\s*def\s+(\w+)[\s\(]/ return $1 end end return nil end if path =~ %r{(.+)/controllers(.*)/(.+)_controller\.rb$} app_root = $1 directories = File.join($2, $3) directories = directories[1..-1] if directories[0..0] == "/" text = IO.read(path).to_a line_no = ENV['TM_LINE_NUMBER'].to_i if method = search_backwards_for_method(text, line_no) view_file = File.join(app_root, 'views', directories, method + ".rhtml") `mate #{view_file}` end elsif path =~ %r{(.+)/views/(.*)/(.+)\.(rhtml|rjs|rxml)$} app_root = $1 directories = $2.split('/') controller = directories.pop directories = directories.join('/') method = $3 controller_file = File.join(app_root, 'controllers', directories, controller + '_controller.rb') `mate #{controller_file}` end