rspactor 0.7.0.beta.1 → 0.7.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +27 -24
- data/bin/inotify_watch +27 -0
- data/ext/fsevent/extconf.rb +27 -27
- data/lib/formatters/rspec2/growl_formatter.rb +11 -0
- data/lib/formatters/rspec2/libnotify_formatter.rb +11 -0
- data/lib/{growl/growl_formatter.rb → formatters/rspec2_formatter.rb} +23 -18
- data/lib/rspactor/interactor.rb +3 -1
- data/lib/rspactor/listener.rb +9 -1
- data/lib/rspactor/runner.rb +10 -3
- data/lib/rspactor/version.rb +1 -1
- metadata +39 -22
- /data/{images → lib/formatters/images}/failed.png +0 -0
- /data/{images → lib/formatters/images}/pending.png +0 -0
- /data/{images → lib/formatters/images}/success.png +0 -0
data/README.rdoc
CHANGED
@@ -5,24 +5,26 @@ Version 0.7.x is a complete rewrite, RubyCocoa is no more needed, FSEvents are s
|
|
5
5
|
|
6
6
|
== Features
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
- FSEvent support on Mac OS X (without RubyCocoa!)
|
9
|
+
- Inotify support on Linux
|
10
|
+
- RSpec 2.0 support (from beta.14)
|
11
|
+
- Bundler support
|
12
|
+
- Super fast change detection
|
13
|
+
- Automatic _spec.rb files detection (even new file created, unlike watchr)
|
14
|
+
- Growl notification (please install {growlnotify}[http://growl.info/documentation/growlnotify.php])
|
15
|
+
- Libnotify notification
|
14
16
|
|
15
17
|
== Install
|
16
18
|
|
17
|
-
At the moment, only Mac OS X (10.5+)
|
19
|
+
At the moment, only Mac OS X (10.5+) & Linux are supported. Tested on ruby 1.8.7 & 1.9.2dev.
|
18
20
|
|
19
21
|
Install the gem:
|
20
22
|
|
21
|
-
gem install rspactor
|
23
|
+
gem install rspactor --pre
|
22
24
|
|
23
25
|
If you are using Bundler, please add it to your Gemfile (inside test group):
|
24
26
|
|
25
|
-
gem 'rspactor', '>= 0.7.beta.
|
27
|
+
gem 'rspactor', '>= 0.7.beta.2'
|
26
28
|
|
27
29
|
== Usage
|
28
30
|
|
@@ -36,22 +38,23 @@ Options list is available with:
|
|
36
38
|
|
37
39
|
Signal handlers are now used to interact with RSpactor:
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
+
- Ctrl-C - Quit RSpactor or quick abort running spec(s)
|
42
|
+
- Ctrl-\ - Running all specs
|
41
43
|
|
42
44
|
== TODO
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
- RSpec 1.3 support
|
47
|
+
- Specific files (spec_helper, factories, fixtures...) inspections
|
48
|
+
- Spork support (when {this issue}[http://github.com/timcharper/spork/issues#issue/37] will be resolved)
|
49
|
+
- {LiveReload}[http://github.com/mockko/livereload] support
|
50
|
+
- Cucumber support (You can use {Steak}[http://github.com/cavalle/steak] in the meantime)
|
51
|
+
- .rspec options file support
|
52
|
+
- Other ideas?
|
50
53
|
|
51
54
|
== Development
|
52
55
|
|
53
|
-
|
54
|
-
|
56
|
+
- Source hosted at {GitHub}[http://github.com/thibaudgg/rspactor]
|
57
|
+
- Report issues/Questions/Feature requests on {GitHub Issues}[http://github.com/thibaudgg/rspactor/issues]
|
55
58
|
|
56
59
|
Pull requests are very welcome! Make sure your patches are well tested. Please create a topic branch for every separate change
|
57
60
|
you make.
|
@@ -62,9 +65,9 @@ From version 0.7.x was completely rewritten by {Thibaud Guillaume-Gentil}[http:/
|
|
62
65
|
|
63
66
|
Older versions authors are:
|
64
67
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
68
|
+
- {Mislav Marohnić}[http://github.com/mislav]
|
69
|
+
- {Andreas Wolff}[http://github.com/phunkwork]
|
70
|
+
- {Pelle Braendgaard}[http://github.com/pelle]
|
71
|
+
- {Thibaud Guillaume-Gentil}[http://github.com/thibaudgg]
|
69
72
|
|
70
|
-
Thanks to {Giovanni Cangiani}[http://github.com/multiscan] for the IO.
|
73
|
+
Thanks to {Giovanni Cangiani}[http://github.com/multiscan] for the IO.popen/FSEvent trick & {Rémy Coutable}[http://github.com/rymai] for beta testing.
|
data/bin/inotify_watch
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rb-inotify'
|
5
|
+
|
6
|
+
folders = Array.new
|
7
|
+
notifier = INotify::Notifier.new
|
8
|
+
|
9
|
+
notifier.watch(ARGV.first || '.', :modify, :recursive) do |event|
|
10
|
+
dir = File.expand_path(File.dirname(event.absolute_name)) + '/'
|
11
|
+
if !folders.include?(dir)
|
12
|
+
folders << dir
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
while true do
|
17
|
+
notifier.process
|
18
|
+
|
19
|
+
if !folders.empty?
|
20
|
+
$stdout.puts folders.join(' ')
|
21
|
+
$stdout.flush
|
22
|
+
folders.clear
|
23
|
+
end
|
24
|
+
|
25
|
+
sleep(0.5)
|
26
|
+
end
|
27
|
+
|
data/ext/fsevent/extconf.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
def emulate_extension_install(extension_name)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
if `uname -s`.chomp == 'Darwin'
|
2
|
+
# Workaround to make Rubygems believe it builds a native gem
|
3
|
+
def emulate_extension_install(extension_name)
|
4
|
+
File.open('Makefile', 'w') { |f| f.write "all:\n\ninstall:\n\n" }
|
5
|
+
File.open('make', 'w') do |f|
|
6
|
+
f.write '#!/bin/sh'
|
7
|
+
f.chmod f.stat.mode | 0111
|
8
|
+
end
|
9
|
+
File.open(extension_name + '.so', 'w') {}
|
10
|
+
File.open(extension_name + '.dll', 'w') {}
|
11
|
+
File.open('nmake.bat', 'w') { |f| }
|
8
12
|
end
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
`CFLAGS='-isysroot /Developer/SDKs/MacOSX#{SDK_VERSION}.sdk -mmacosx-version-min=#{SDK_VERSION}' /usr/bin/gcc -framework CoreServices -o "#{GEM_ROOT}/bin/fsevent_watch" fsevent_watch.c`
|
27
|
-
|
28
|
-
raise "Compilation of fsevent_watch failed (see README)" unless File.executable?("#{GEM_ROOT}/bin/fsevent_watch")
|
13
|
+
|
14
|
+
emulate_extension_install('fsevent')
|
15
|
+
|
16
|
+
gem_root = File.expand_path(File.join('..', '..'))
|
17
|
+
darwin_verion = `uname -r`.to_i
|
18
|
+
sdk_verion = { 9 => '10.5', 10 => '10.6', 11 => '10.7' }[darwin_verion]
|
19
|
+
|
20
|
+
raise "Darwin #{darwin_verion} is not supported" unless sdk_verion
|
21
|
+
|
22
|
+
# Compile the actual fsevent_watch binary
|
23
|
+
system("CFLAGS='-isysroot /Developer/SDKs/MacOSX#{sdk_verion}.sdk -mmacosx-version-min=#{sdk_verion}' /usr/bin/gcc -framework CoreServices -o '#{gem_root}/bin/fsevent_watch' fsevent_watch.c")
|
24
|
+
|
25
|
+
unless File.executable?("#{gem_root}/bin/fsevent_watch")
|
26
|
+
raise "Compilation of fsevent_watch failed (see README)"
|
27
|
+
end
|
28
|
+
end
|
@@ -1,13 +1,22 @@
|
|
1
1
|
require 'rspec/core/formatters/base_formatter'
|
2
|
-
require 'growl'
|
3
2
|
|
4
|
-
class
|
3
|
+
class RSpec2Formatter < RSpec::Core::Formatters::ProgressFormatter
|
5
4
|
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
11
20
|
icon = if failure_count > 0
|
12
21
|
'failed'
|
13
22
|
elsif pending_count > 0
|
@@ -15,21 +24,17 @@ class GrowlFormatter < RSpec::Core::Formatters::ProgressFormatter
|
|
15
24
|
else
|
16
25
|
'success'
|
17
26
|
end
|
18
|
-
|
19
|
-
message = "#{@example_count} examples, #{failure_count} failures"
|
20
|
-
if pending_count > 0
|
21
|
-
message << " (#{pending_count} pending)"
|
22
|
-
end
|
23
|
-
message << "\nin #{format_seconds(duration)} seconds"
|
24
|
-
|
25
|
-
Growl.notify message, :title => "RSpec results", :icon => image_path(icon)
|
27
|
+
File.expand_path(File.dirname(__FILE__) + "/images/#{icon}.png")
|
26
28
|
end
|
27
29
|
|
28
30
|
private
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
-
|
32
|
+
def failure_count
|
33
|
+
failed_examples.size
|
34
|
+
end
|
35
|
+
|
36
|
+
def pending_count
|
37
|
+
pending_examples.size
|
33
38
|
end
|
34
39
|
|
35
40
|
end
|
data/lib/rspactor/interactor.rb
CHANGED
@@ -3,7 +3,7 @@ module RSpactor
|
|
3
3
|
class << self
|
4
4
|
|
5
5
|
def init_signal_traps
|
6
|
-
# Ctrl
|
6
|
+
# Ctrl-\
|
7
7
|
Signal.trap('QUIT') do
|
8
8
|
RSpactor.listener.stop
|
9
9
|
RSpactor.runner.start(:all => true)
|
@@ -11,9 +11,11 @@ module RSpactor
|
|
11
11
|
end
|
12
12
|
# Ctrl-C
|
13
13
|
Signal.trap('INT') do
|
14
|
+
RSpactor.listener.stop
|
14
15
|
if RSpactor.runner.run?
|
15
16
|
UI.info "RSpec run canceled", :reset => true, :clear => RSpactor.options[:clear]
|
16
17
|
RSpactor.runner.stop
|
18
|
+
RSpactor.listener.start
|
17
19
|
else
|
18
20
|
UI.info "Bye bye...", :reset => true
|
19
21
|
abort("\n")
|
data/lib/rspactor/listener.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'sys/uname'
|
2
|
+
|
1
3
|
module RSpactor
|
2
4
|
class Listener
|
3
5
|
EXTENSIONS = %w[rb erb builder haml yml]
|
@@ -13,7 +15,13 @@ module RSpactor
|
|
13
15
|
end
|
14
16
|
|
15
17
|
def start
|
16
|
-
@pipe =
|
18
|
+
@pipe = case Sys::Uname.sysname
|
19
|
+
when 'Darwin'
|
20
|
+
IO.popen("#{bin_path}/fsevent_watch .")
|
21
|
+
when 'Linux'
|
22
|
+
IO.popen("#{bin_path}/inotify_watch .")
|
23
|
+
end
|
24
|
+
|
17
25
|
watch_change
|
18
26
|
end
|
19
27
|
|
data/lib/rspactor/runner.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'growl'
|
2
|
-
|
3
1
|
module RSpactor
|
4
2
|
class Runner
|
5
3
|
attr_reader :pipe
|
@@ -40,7 +38,8 @@ module RSpactor
|
|
40
38
|
|
41
39
|
def rspec_command(paths)
|
42
40
|
cmd_parts = [paths.join(' ')]
|
43
|
-
cmd_parts.unshift "--require #{File.dirname(__FILE__)}/../
|
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?
|
44
43
|
cmd_parts.unshift "--color"
|
45
44
|
cmd_parts.unshift "rspec"
|
46
45
|
cmd_parts.unshift "bundle exec" if bundler?
|
@@ -51,5 +50,13 @@ module RSpactor
|
|
51
50
|
File.exist?("./Gemfile")
|
52
51
|
end
|
53
52
|
|
53
|
+
def growl_installed?
|
54
|
+
system 'which growlnotify > /dev/null 2>&1'
|
55
|
+
end
|
56
|
+
|
57
|
+
def notify_installed?
|
58
|
+
system 'which notify-send > /dev/null 2>&1'
|
59
|
+
end
|
60
|
+
|
54
61
|
end
|
55
62
|
end
|
data/lib/rspactor/version.rb
CHANGED
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:
|
4
|
+
hash: 62196439
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 0.7.0.beta.
|
11
|
+
- 2
|
12
|
+
version: 0.7.0.beta.2
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Thibaud Guillaume-Gentil
|
@@ -17,10 +17,13 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-07-12 00:00:00 +02:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
|
+
prerelease: false
|
25
|
+
type: :runtime
|
26
|
+
name: trollop
|
24
27
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
28
|
none: false
|
26
29
|
requirements:
|
@@ -32,29 +35,27 @@ dependencies:
|
|
32
35
|
- 16
|
33
36
|
- 2
|
34
37
|
version: 1.16.2
|
35
|
-
name: trollop
|
36
|
-
prerelease: false
|
37
38
|
requirement: *id001
|
38
|
-
type: :runtime
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
|
+
prerelease: false
|
41
|
+
type: :runtime
|
42
|
+
name: sys-uname
|
40
43
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
44
|
none: false
|
42
45
|
requirements:
|
43
46
|
- - ">="
|
44
47
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
48
|
+
hash: 55
|
46
49
|
segments:
|
47
|
-
- 2
|
48
50
|
- 0
|
49
|
-
-
|
50
|
-
-
|
51
|
-
|
52
|
-
version: 2.0.0.beta.14
|
53
|
-
name: rspec
|
54
|
-
prerelease: false
|
51
|
+
- 8
|
52
|
+
- 4
|
53
|
+
version: 0.8.4
|
55
54
|
requirement: *id002
|
56
|
-
type: :runtime
|
57
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
prerelease: false
|
57
|
+
type: :runtime
|
58
|
+
name: growl
|
58
59
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
59
60
|
none: false
|
60
61
|
requirements:
|
@@ -66,10 +67,23 @@ dependencies:
|
|
66
67
|
- 0
|
67
68
|
- 3
|
68
69
|
version: 1.0.3
|
69
|
-
name: growl
|
70
|
-
prerelease: false
|
71
70
|
requirement: *id003
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
prerelease: false
|
72
73
|
type: :runtime
|
74
|
+
name: libnotify
|
75
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 29
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
- 1
|
84
|
+
- 3
|
85
|
+
version: 0.1.3
|
86
|
+
requirement: *id004
|
73
87
|
description: RSpactor is a command line tool to automatically run your changed specs (much like autotest)
|
74
88
|
email:
|
75
89
|
- thibaud@thibaud.me
|
@@ -80,11 +94,14 @@ extensions:
|
|
80
94
|
extra_rdoc_files: []
|
81
95
|
|
82
96
|
files:
|
97
|
+
- bin/inotify_watch
|
83
98
|
- bin/rspactor
|
84
|
-
- images/failed.png
|
85
|
-
- images/pending.png
|
86
|
-
- images/success.png
|
87
|
-
- lib/
|
99
|
+
- lib/formatters/images/failed.png
|
100
|
+
- lib/formatters/images/pending.png
|
101
|
+
- lib/formatters/images/success.png
|
102
|
+
- lib/formatters/rspec2/growl_formatter.rb
|
103
|
+
- lib/formatters/rspec2/libnotify_formatter.rb
|
104
|
+
- lib/formatters/rspec2_formatter.rb
|
88
105
|
- lib/rspactor/inspector.rb
|
89
106
|
- lib/rspactor/interactor.rb
|
90
107
|
- lib/rspactor/listener.rb
|
File without changes
|
File without changes
|
File without changes
|