Class Spec::Translator
In: lib/spec/translator.rb
Parent: Object

Methods

Public Instance methods

[Source]

     # File lib/spec/translator.rb, line 88
 88:     def standard_matcher?(matcher)
 89:       patterns = [
 90:         /^be/, 
 91:         /^be_close/,
 92:         /^eql/, 
 93:         /^equal/, 
 94:         /^has/, 
 95:         /^have/, 
 96:         /^change/, 
 97:         /^include/,
 98:         /^match/, 
 99:         /^raise_error/, 
100:         /^respond_to/, 
101:         /^redirect_to/, 
102:         /^satisfy/, 
103:         /^throw_symbol/,
104:         # Extra ones that we use in spec_helper
105:         /^pass/,
106:         /^fail/,
107:         /^fail_with/,
108:       ]
109:       matched = patterns.detect{ |p| matcher =~ p }
110:       !matched.nil?
111:     end

[Source]

    # File lib/spec/translator.rb, line 5
 5:     def translate(from, to)
 6:       from = File.expand_path(from)
 7:       to = File.expand_path(to)
 8:       if File.directory?(from)
 9:         translate_dir(from, to)
10:       elsif(from =~ /\.rb$/)
11:         translate_file(from, to)
12:       end
13:     end

[Source]

    # File lib/spec/translator.rb, line 15
15:     def translate_dir(from, to)
16:       FileUtils.mkdir_p(to) unless File.directory?(to)
17:       Dir["#{from}/*"].each do |sub_from|
18:         path = sub_from[from.length+1..-1]
19:         sub_to = File.join(to, path)
20:         translate(sub_from, sub_to)
21:       end
22:     end

[Source]

    # File lib/spec/translator.rb, line 24
24:     def translate_file(from, to)
25:       translation = ""
26:       File.open(from) do |io|
27:         io.each_line do |line|
28:           translation << translate_line(line)
29:         end
30:       end
31:       File.open(to, "w") do |io|
32:         io.write(translation)
33:       end
34:     end

[Source]

    # File lib/spec/translator.rb, line 36
36:     def translate_line(line)
37:       # Translate deprecated mock constraints
38:       line.gsub!(/:any_args/, 'any_args')
39:       line.gsub!(/:anything/, 'anything')
40:       line.gsub!(/:boolean/, 'boolean')
41:       line.gsub!(/:no_args/, 'no_args')
42:       line.gsub!(/:numeric/, 'an_instance_of(Numeric)')
43:       line.gsub!(/:string/, 'an_instance_of(String)')
44: 
45:       return line if line =~ /(should_not|should)_receive/
46:       
47:       line.gsub!(/(^\s*)context([\s*|\(]['|"|A-Z])/, '\1describe\2')
48:       line.gsub!(/(^\s*)specify([\s*|\(]['|"|A-Z])/, '\1it\2')
49:       line.gsub!(/(^\s*)context_setup(\s*[do|\{])/, '\1before(:all)\2')
50:       line.gsub!(/(^\s*)context_teardown(\s*[do|\{])/, '\1after(:all)\2')
51:       line.gsub!(/(^\s*)setup(\s*[do|\{])/, '\1before(:each)\2')
52:       line.gsub!(/(^\s*)teardown(\s*[do|\{])/, '\1after(:each)\2')
53:       
54:       if line =~ /(.*\.)(should_not|should)(?:_be)(?!_)(.*)/m
55:         pre = $1
56:         should = $2
57:         post = $3
58:         be_or_equal = post =~ /(<|>)/ ? "be" : "equal"
59:         
60:         return "#{pre}#{should} #{be_or_equal}#{post}"
61:       end
62:       
63:       if line =~ /(.*\.)(should_not|should)_(?!not)\s*(.*)/m
64:         pre = $1
65:         should = $2
66:         post = $3
67:         
68:         post.gsub!(/^raise/, 'raise_error')
69:         post.gsub!(/^throw/, 'throw_symbol')
70:         
71:         unless standard_matcher?(post)
72:           post = "be_#{post}"
73:         end
74:         
75:         # Add parenthesis
76:         post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\'|\"|\:|@| ]+)(\})/, '\1(\2)\3') # inside a block
77:         post.gsub!(/^(redirect_to)\s+(.*)/, '\1(\2)') # redirect_to, which often has http:
78:         post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\{.*\}|\'|\"|\:|@| ]+)/, '\1(\2)')
79:         post.gsub!(/(\s+\))/, ')')
80:         post.gsub!(/\)\}/, ') }')
81:         post.gsub!(/^(\w+)\s+(\/.*\/)/, '\1(\2)') #regexps
82:         line = "#{pre}#{should} #{post}"
83:       end
84: 
85:       line
86:     end

[Validate]