rspactor 0.7.0.beta.1 → 0.7.0.beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|