changelog shortlog tags changeset manifest revisions annotate raw

vendor/plugins/rspec/pre_commit/lib/pre_commit/pre_commit.rb

changeset 15: 64acf98d15f4
author: moriq@moriq.com
date: Mon Mar 10 10:12:58 2008 +0900 (16 years ago)
permissions: -rw-r--r--
description: add plugins rspec
1class 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
54end