aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/vim-rspec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vim/plugin/vim-rspec.rb')
-rw-r--r--vim/plugin/vim-rspec.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/vim/plugin/vim-rspec.rb b/vim/plugin/vim-rspec.rb
new file mode 100644
index 0000000..4d7f4c3
--- /dev/null
+++ b/vim/plugin/vim-rspec.rb
@@ -0,0 +1,32 @@
+require "rubygems"
+require "hpricot"
+
+doc = Hpricot(STDIN.read)
+h1 = (doc/"h1")
+classes = {"spec passed"=>"+","spec failed"=>"-","spec not_implemented"=>"#"}
+
+puts "* #{h1.inner_html}"
+
+stats = (doc/"script").select {|script| script.innerHTML =~ /duration|totals/ }.map {|script| script.inner_html.scan(/".*"/).first.gsub(/<\/?strong>/,"") }
+stats.each do |stat|
+ puts "* #{stat.gsub(/\"/,'')}"
+end
+puts "* Parsed with Hpricot (http://wiki.github.com/why/hpricot)"
+puts " "
+
+(doc/"div[@class='example_group']").each do |example|
+ puts "[#{(example/"dl/dt").inner_html}]"
+ (example/"dd").each do |dd|
+ txt = (dd/"span:first").inner_html
+ puts "#{classes[dd[:class]]} #{txt}"
+ next if dd[:class]!="spec failed"
+ failure = (dd/"div[@class='failure']")
+ msg = (failure/"div[@class='message']/pre").inner_html
+ back = (failure/"div[@class='backtrace']/pre").inner_html
+ ruby = (failure/"pre[@class='ruby']/code").inner_html.scan(/(<span class="linenum">)(\d+)(<\/span>)([^<]+)/).map {|elem| " "+elem[1]+": "+elem[3].chomp+"\n"}.join
+ puts " #{msg}"
+ puts " #{back}"
+ puts ruby
+ end
+ puts " "
+end