public
Rubygem
Description: Makes tests easy on the fingers and the eyes
Homepage: http://www.thoughtbot.com/projects/shoulda
Clone URL: git://github.com/thoughtbot/shoulda.git
shoulda / bin / convert_to_should_syntax
100755 41 lines (35 sloc) 1.254 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env ruby
require 'fileutils'
 
def usage(msg = nil)
  puts "Error: #{msg}" if msg
  puts if msg
  puts "Usage: #{File.basename(__FILE__)} normal_test_file.rb"
  puts
  puts "Will convert an existing test file with names like "
  puts
  puts " def test_should_do_stuff"
  puts " ..."
  puts " end"
  puts
  puts "to one using the new syntax: "
  puts
  puts " should \"be super cool\" do"
  puts " ..."
  puts " end"
  puts
  puts "A copy of the old file will be left under /tmp/ in case this script just seriously screws up"
  puts
  exit (msg ? 2 : 0)
end
 
usage("Wrong number of arguments.") unless ARGV.size == 1
usage("This system doesn't have a /tmp directory. wtf?") unless File.directory?('/tmp')
 
file = ARGV.shift
tmpfile = "/tmp/#{File.basename(file)}"
usage("File '#{file}' doesn't exist") unless File.exists?(file)
 
FileUtils.cp(file, tmpfile)
contents = File.read(tmpfile)
contents.gsub!(/def test_should_(.*)\s*$/, 'should "\1" do')
contents.gsub!(/def test_(.*)\s*$/, 'should "RENAME ME: test \1" do')
contents.gsub!(/should ".*" do$/) {|line| line.tr!('_', ' ')}
File.open(file, 'w') { |f| f.write(contents) }
 
puts "File '#{file}' has been converted to 'should' syntax. Old version has been stored in '#{tmpfile}'"