Rake
rake spec:uncommitted August 23, 2007 02:43
なさそうなのでtest:uncommittedを移植してみた。 test:uncommittedを使った試しがないのでこれも使わない可能性大w
rspec_base = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec/lib')
$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
require 'spec/rake/spectask'
require 'spec/translator'
desc "Run specs changed since last checkin (only Subversion)"
Spec::Rake::SpecTask.new("spec:uncommitted" => "db:test:prepare") do |t|
changed_since_checkin = silence_stderr { `svn status` }.map {|path| path.chomp[7 .. -1] }
specs = changed_since_checkin.select {|path| path =~ %r{spec/.*_spec\.rb} }
specs += changed_since_checkin.select {|path| path =~ %r{(app/(models|controllers)|lib)/.*\.rb} } \
.map {|path| 'spec/' + path.sub(/\Aapp\//, '').sub(/(?=\.rb)/, '_spec') } \
.select {|path| File.exist?(path) }
t.spec_files = specs.uniq
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
end
これをrspec_uncommitted.rakeみたいな名前にしてlib/tasksに放りこむ。
ちなみにrake spec:recentはRSpec on Rails rake task for Recent Specs
にある。
spec:uncommittedの頭のrequireを追加しないと動かないと思うんだけど……。
あとspec/spec.optsを読むようにt.spec_optsのところを変更すると
ほかのタスクと同じになっていい感じ。
さて、特定のdescribeやitをvimから実行するのは確かに便利なんだけど、
その間vimが使えなくて困る。10秒くらい何もできないのが辛い……。
spec:recentがあればscreenの別のwindowで走らせてすかさずvimに戻れるなーと。 rake spec SPEC=spec/controllers/foo_controller_spec.rbなんて いちいち打つのは鬱で仕方ないですよね(ノ∀`)アチャー
あー、どうでもいいけどこのブログのオレオレ記法パーサがヘタレすぎる。 プログラム貼ると記法の記号とかぶってパースエラーになりやすいので 今までエラーになる箇所をいちいちエスケープしてたけど、 もうめんどいからHTML直接書いた。それでもあやしい。
大体なんでpreの中でタグ使うこと想定してんだろう、このオレオレ記法は。 YukiWikiの記法を拡張してるんだけど''なんか空文字列とモロかぶるし、 なまじエスケープなんかができるもんだから予期せぬところでエスケープされておかしなことに。 時々バックスラッシュの数とかおかしい場合があるかもしれないけどそのせいです。
指定したnamespace以下のタスクを全部実行 May 20, 2007 17:58
- Permalink
- Comments (2275)
- Trackbacks (0)
Rake
ほのぼのRake。
namespace :a do
desc "a:b"
task :b do
puts "a:b"
end
desc "a:c"
task :c do
puts "a:c"
end
namespace :d do
desc "a:d:e"
task :e do
puts "a:d:e"
end
desc "a:d:f"
task :f do
puts "a:d:f"
end
end
end
task :a => [ "a:b", "a:c", "a:d:e", "a:d:f" ]
task "a:d" => [ "a:d:e", "a:d:f" ]
新しいtask書くたびに最後のタスクまとめてるやつに追加していくのが めんどくさくなってきたのでnamespace指定して一括実行。
# 以下を追記
def invoke_all(*namespace)
task_name = namespace.map {|n| n.to_s }.join(':')
desc "invoke all #{task_name}"
task task_name => Rake::Task.tasks.select {|t| t.scope[0, namespace.size] == namespace }.map {|t| t.name }
end
invoke_all :a
invoke_all :a, :d # ネストしてるやつはこう書く
yazu@flora % rake -T (in /home/yazu) rake a # invoke all a rake a:b # a:b rake a:c # a:c rake a:d # invoke all a:d rake a:d:e # a:d:e rake a:d:f # a:d:f yazu@flora % rake a (in /home/yazu) a:b a:c a:d:e a:d:f yazu@flora % rake a:d (in /home/yazu) a:d:e a:d:f
(゚д゚)ウマー
