rspactor 0.7.0.beta.3 → 0.7.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,13 +1,13 @@
1
1
  = RSpactor
2
2
 
3
3
  RSpactor allows to automatically & intelligently launch your specs when your files are modified.
4
- Version 0.7.x is a complete rewrite, RubyCocoa is no more needed, FSEvents are supported from scratch.
4
+ Version 0.7.x is a complete rewrite, RubyCocoa is no more needed, FSEvents & Inotify are supported from scratch.
5
5
 
6
6
  == Features
7
7
 
8
8
  - FSEvent support on Mac OS X (without RubyCocoa!)
9
9
  - Inotify support on Linux
10
- - RSpec 2.0 support (from beta.14)
10
+ - RSpec 1.x & 2.x (from beta.14) support
11
11
  - Bundler support
12
12
  - Super fast change detection
13
13
  - Automatic _spec.rb files detection (even new file created, unlike watchr)
@@ -16,7 +16,7 @@ Version 0.7.x is a complete rewrite, RubyCocoa is no more needed, FSEvents are s
16
16
 
17
17
  == Install
18
18
 
19
- At the moment, only Mac OS X (10.5+) & Linux are supported. Tested on ruby 1.8.7 & 1.9.2dev.
19
+ Only Mac OS X (10.5+) & Linux are supported. Tested on Ruby 1.8.7 & 1.9.2dev.
20
20
 
21
21
  Install the gem:
22
22
 
@@ -39,11 +39,10 @@ Options list is available with:
39
39
  Signal handlers are now used to interact with RSpactor:
40
40
 
41
41
  - Ctrl-C - Quit RSpactor or quick abort running spec(s)
42
- - Ctrl-\ - Running all specs
42
+ - Ctrl-\ - Running all specs
43
43
 
44
44
  == TODO
45
45
 
46
- - RSpec 1.3 support
47
46
  - Specific files (spec_helper, factories, fixtures...) inspections
48
47
  - Spork support (when {this issue}[http://github.com/timcharper/spork/issues#issue/37] will be resolved)
49
48
  - {LiveReload}[http://github.com/mockko/livereload] support
data/bin/inotify_watch CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  require 'rubygems'
4
3
  require 'rb-inotify'
5
4
 
@@ -15,13 +14,12 @@ end
15
14
 
16
15
  while true do
17
16
  notifier.process
18
-
17
+
19
18
  if !folders.empty?
20
19
  $stdout.puts folders.join(' ')
21
20
  $stdout.flush
22
21
  folders.clear
23
22
  end
24
-
23
+
25
24
  sleep(0.5)
26
- end
27
-
25
+ end
data/bin/rspactor CHANGED
@@ -7,6 +7,9 @@ options = Trollop::options do
7
7
  version RSpactor::VERSION
8
8
 
9
9
  opt :clear, "Clear the console beetween each spec(s) run"
10
+ opt :rspec_version, "Force RSpec Version (1 or 2), normally it should be automatically detected", :type => :int
10
11
  end
11
12
 
13
+ Trollop::die :rspec_version, "not supported" unless [nil, 1, 2].include?(options[:rspec_version])
14
+
12
15
  RSpactor.start(options)
@@ -0,0 +1,28 @@
1
+ module RSpecFormatter
2
+
3
+ def rspactor_title
4
+ "RSpec results"
5
+ end
6
+
7
+ def rspactor_message(example_count, failure_count, pending_count, duration)
8
+ message = "#{example_count} examples, #{failure_count} failures"
9
+ if pending_count > 0
10
+ message << " (#{pending_count} pending)"
11
+ end
12
+ message << "\nin #{duration} seconds"
13
+ message
14
+ end
15
+
16
+ # failed | pending | success
17
+ def rspactor_image_path(failure_count, pending_count)
18
+ icon = if failure_count > 0
19
+ 'failed'
20
+ elsif pending_count > 0
21
+ 'pending'
22
+ else
23
+ 'success'
24
+ end
25
+ File.expand_path(File.dirname(__FILE__) + "/images/#{icon}.png")
26
+ end
27
+
28
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec/runner/formatter/base_formatter'
2
+ require "#{File.dirname(__FILE__)}/rspec_formatter"
3
+ require "#{File.dirname(__FILE__)}/../rspactor/notifier"
4
+
5
+ class RSpecOneFormatter < Spec::Runner::Formatter::BaseFormatter
6
+ include RSpecFormatter
7
+
8
+ def dump_summary(duration, total, failures, pending)
9
+ message = rspactor_message(total, failures, pending, duration)
10
+ image_path = rspactor_image_path(failures, pending)
11
+
12
+ RSpactor::Notifier.notify(message, rspactor_title, image_path)
13
+ end
14
+
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'rspec/core/formatters/base_formatter'
2
+ require "#{File.dirname(__FILE__)}/rspec_formatter"
3
+ require "#{File.dirname(__FILE__)}/../rspactor/notifier"
4
+
5
+ class RSpecTwoFormatter < RSpec::Core::Formatters::ProgressFormatter
6
+ include RSpecFormatter
7
+
8
+ def dump_summary
9
+ super
10
+ message = rspactor_message(@example_count, failure_count, pending_count, format_seconds(duration))
11
+ image_path = rspactor_image_path(failure_count, pending_count)
12
+
13
+ RSpactor::Notifier.notify(message, rspactor_title, image_path)
14
+ end
15
+
16
+ private
17
+
18
+ def failure_count
19
+ failed_examples.size
20
+ end
21
+
22
+ def pending_count
23
+ pending_examples.size
24
+ end
25
+
26
+ end
@@ -0,0 +1,23 @@
1
+ require 'sys/uname'
2
+
3
+ case Sys::Uname.sysname
4
+ when 'Darwin'
5
+ require 'growl'
6
+ when 'Linux'
7
+ require 'libnotify'
8
+ end
9
+
10
+ module RSpactor
11
+ module Notifier
12
+
13
+ def self.notify(message, title, image_path)
14
+ case Sys::Uname.sysname
15
+ when 'Darwin'
16
+ Growl.notify message, :title => title, :icon => image_path, :name => "RSpactor"
17
+ when 'Linux'
18
+ Libnotify.show :body => message, :summary => title, :icon_path => image_path
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -1,6 +1,10 @@
1
1
  module RSpactor
2
2
  class Runner
3
- attr_reader :pipe
3
+ attr_reader :pipe, :rspec_version
4
+
5
+ def initialize
6
+ @rspec_version = RSpactor.options[:rspec_version] || determine_rspec_version
7
+ end
4
8
 
5
9
  def start(options = {})
6
10
  if options[:all]
@@ -25,29 +29,55 @@ module RSpactor
25
29
  private
26
30
 
27
31
  def run_rspec(command, message)
28
- @pipe = IO.popen(command)
29
32
  UI.info message, :reset => true, :clear => RSpactor.options[:clear]
30
- while pipe && !pipe.eof?
31
- if pipe && char = pipe.read(8)
32
- print char
33
- $stdout.flush if pipe
33
+ case rspec_version
34
+ when 1
35
+ # problem with color if launched via popen
36
+ system(command)
37
+ when 2
38
+ @pipe = IO.popen(command)
39
+ while pipe && !pipe.eof?
40
+ if pipe && char = pipe.read(32)
41
+ print char
42
+ $stdout.flush if pipe
43
+ end
34
44
  end
45
+ @pipe = nil
35
46
  end
36
- @pipe = nil
37
47
  end
38
48
 
39
49
  def rspec_command(paths)
40
- cmd_parts = [paths.join(' ')]
41
- cmd_parts.unshift "--require #{File.dirname(__FILE__)}/../formatters/rspec2/growl_formatter.rb --format GrowlFormatter" if growl_installed?
42
- cmd_parts.unshift "--require #{File.dirname(__FILE__)}/../formatters/rspec2/libnotify_formatter.rb --format LibnotifyFormatter" if notify_installed?
43
- cmd_parts.unshift "--color"
44
- cmd_parts.unshift "rspec"
50
+ cmd_parts = []
51
+ cmd_parts << (rspec_version == 1 ? "spec" : "rspec")
52
+ cmd_parts << "--color"
53
+ if growl_installed? || notify_installed?
54
+ case rspec_version
55
+ when 1
56
+ cmd_parts << "-f progress --require #{File.dirname(__FILE__)}/../formatters/rspec_one_formatter.rb --format RSpecOneFormatter:STDOUT"
57
+ when 2
58
+ cmd_parts << "--require #{File.dirname(__FILE__)}/../formatters/rspec_two_formatter.rb --format RSpecTwoFormatter"
59
+ end
60
+ end
61
+ cmd_parts << paths.join(' ')
45
62
  cmd_parts.unshift "bundle exec" if bundler?
46
63
  cmd_parts.join(" ")
47
64
  end
48
65
 
49
66
  def bundler?
50
- File.exist?("./Gemfile")
67
+ File.exist?("#{Dir.pwd}/Gemfile")
68
+ end
69
+
70
+ def determine_rspec_version
71
+ UI.info "Determine rspec_version... (can be forced with -r <i> option)"
72
+ if bundler?
73
+ # Allow RSpactor to be tested with RSpactor (bundle show inside a bundle exec)
74
+ ENV['BUNDLE_GEMFILE'] = "#{Dir.pwd}/Gemfile"
75
+ `bundle show rspec`.include?("/rspec-1.") ? 1 : 2
76
+ elsif File.exist?("#{Dir.pwd}/spec/spec_helper.rb")
77
+ File.new("#{Dir.pwd}/spec/spec_helper.rb").read.include?("Spec::Runner") ? 1 : 2
78
+ else
79
+ 2
80
+ end
51
81
  end
52
82
 
53
83
  def growl_installed?
@@ -1,3 +1,3 @@
1
1
  module RSpactor
2
- VERSION = "0.7.0.beta.3"
2
+ VERSION = "0.7.0.beta.4"
3
3
  end
data/lib/rspactor.rb CHANGED
@@ -18,7 +18,7 @@ module RSpactor
18
18
  Inspector.determine_spec_paths(files)
19
19
  runner.start if Inspector.spec_paths?
20
20
  end
21
- UI.info "RSpactor is now watching at '#{Dir.pwd}'"
21
+ UI.info "RSpactor is now watching at '#{Dir.pwd}' using RSpec #{runner.rspec_version}.x"
22
22
  listener.start
23
23
  end
24
24
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspactor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196437
4
+ hash: 62196443
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
9
  - 0
10
10
  - beta
11
- - 3
12
- version: 0.7.0.beta.3
11
+ - 4
12
+ version: 0.7.0.beta.4
13
13
  platform: ruby
14
14
  authors:
15
15
  - Thibaud Guillaume-Gentil
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-07-13 00:00:00 +02:00
20
+ date: 2010-07-14 00:00:00 +02:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -113,12 +113,13 @@ files:
113
113
  - lib/formatters/images/failed.png
114
114
  - lib/formatters/images/pending.png
115
115
  - lib/formatters/images/success.png
116
- - lib/formatters/rspec2/growl_formatter.rb
117
- - lib/formatters/rspec2/libnotify_formatter.rb
118
- - lib/formatters/rspec2_formatter.rb
116
+ - lib/formatters/rspec_formatter.rb
117
+ - lib/formatters/rspec_one_formatter.rb
118
+ - lib/formatters/rspec_two_formatter.rb
119
119
  - lib/rspactor/inspector.rb
120
120
  - lib/rspactor/interactor.rb
121
121
  - lib/rspactor/listener.rb
122
+ - lib/rspactor/notifier.rb
122
123
  - lib/rspactor/runner.rb
123
124
  - lib/rspactor/ui.rb
124
125
  - lib/rspactor/version.rb
@@ -1,11 +0,0 @@
1
- require 'formatters/rspec2_formatter'
2
- require 'growl'
3
-
4
- class GrowlFormatter < RSpec2Formatter
5
-
6
- def dump_summary
7
- super
8
- Growl.notify rspactor_message, :title => rspactor_title, :icon => rspactor_image_path
9
- end
10
-
11
- end
@@ -1,11 +0,0 @@
1
- require 'formatters/rspec2_formatter'
2
- require 'libnotify'
3
-
4
- class LibnotifyFormatter < RSpec2Formatter
5
-
6
- def dump_summary
7
- super
8
- Libnotify.show :body => rspactor_message, :summary => rspactor_title, :icon_path => rspactor_image_path
9
- end
10
-
11
- end
@@ -1,40 +0,0 @@
1
- require 'rspec/core/formatters/base_formatter'
2
-
3
- class RSpec2Formatter < RSpec::Core::Formatters::ProgressFormatter
4
-
5
- def rspactor_title
6
- "RSpec results"
7
- end
8
-
9
- def rspactor_message
10
- message = "#{@example_count} examples, #{failure_count} failures"
11
- if pending_count > 0
12
- message << " (#{pending_count} pending)"
13
- end
14
- message << "\nin #{format_seconds(duration)} seconds"
15
- message
16
- end
17
-
18
- # failed | pending | success
19
- def rspactor_image_path
20
- icon = if failure_count > 0
21
- 'failed'
22
- elsif pending_count > 0
23
- 'pending'
24
- else
25
- 'success'
26
- end
27
- File.expand_path(File.dirname(__FILE__) + "/images/#{icon}.png")
28
- end
29
-
30
- private
31
-
32
- def failure_count
33
- failed_examples.size
34
- end
35
-
36
- def pending_count
37
- pending_examples.size
38
- end
39
-
40
- end