Updated Rails to 2.1.0
[gitorious:georgyos-clone.git] / vendor / plugins / rspec / pre_commit / lib / pre_commit / pre_commit.rb
1 class PreCommit
2   attr_reader :actor
3   def initialize(actor)
4     @actor = actor
5   end
6
7   protected
8   def rake_invoke(task_name)
9     Rake::Task[task_name].invoke
10   end
11
12   def rake_sh(task_name, env_hash={})
13     env = env_hash.collect{|key, value| "#{key}=#{value}"}.join(' ')
14     rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
15     cmd = "#{rake} #{task_name} #{env} --trace"
16     output = silent_sh(cmd)
17     puts output
18     if shell_error?(output)
19       raise "ERROR while running rake: #{cmd}"
20     end
21   end
22
23   def silent_sh(cmd, &block)
24     output = nil
25     IO.popen(cmd) do |io|
26       output = io.read
27       output.each_line do |line|
28         block.call(line) if block
29       end
30     end
31     output
32   end
33
34   def shell_error?(output)
35     output =~ /ERROR/n || error_code?
36   end
37
38   def error_code?
39     $?.exitstatus != 0
40   end
41
42   def root_dir
43     dir = File.dirname(__FILE__)
44     File.expand_path("#{dir}/../../../..")
45   end  
46
47   def method_missing(method_name, *args, &block)
48     if actor.respond_to?(method_name)
49       actor.send(method_name, *args, &block)
50     else
51       super
52     end
53   end
54 end