watchr 0.5.9 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +2 -2
- data/README.md +113 -0
- data/Rakefile +1 -29
- data/TODO.md +29 -0
- data/bin/watchr +57 -11
- data/docs.watchr +20 -20
- data/gem.watchr +10 -20
- data/lib/watchr.rb +36 -32
- data/lib/watchr/controller.rb +29 -26
- data/lib/watchr/event_handlers/base.rb +24 -15
- data/lib/watchr/event_handlers/portable.rb +21 -7
- data/lib/watchr/event_handlers/unix.rb +39 -15
- data/lib/watchr/script.rb +89 -81
- data/specs.watchr +23 -24
- data/watchr.gemspec +1 -4
- metadata +8 -9
- data/README.rdoc +0 -104
- data/TODO.txt +0 -40
data/specs.watchr
CHANGED
@@ -1,38 +1,37 @@
|
|
1
1
|
# Run me with:
|
2
|
-
#
|
3
2
|
# $ watchr specs.watchr
|
4
3
|
|
5
4
|
# --------------------------------------------------
|
6
|
-
#
|
5
|
+
# Rules
|
7
6
|
# --------------------------------------------------
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def run_all_tests
|
14
|
-
# see Rakefile for the definition of the test:all task
|
15
|
-
system( "rake -s test:all VERBOSE=true" )
|
16
|
-
end
|
7
|
+
watch( '^test.*/test_.*\.rb' ) { |m| ruby m[0] }
|
8
|
+
watch( '^lib/(.*)\.rb' ) { |m| ruby "test/test_#{m[1]}.rb" }
|
9
|
+
watch( '^lib/watchr/(.*)\.rb' ) { |m| ruby "test/test_#{m[1]}.rb" }
|
10
|
+
watch( '^lib/watchr/event_handlers/(.*)\.rb' ) { |m| ruby "test/event_handlers/test_#{m[1]}.rb" }
|
11
|
+
watch( '^test/test_helper\.rb' ) { ruby tests }
|
17
12
|
|
18
13
|
# --------------------------------------------------
|
19
|
-
#
|
14
|
+
# Signal Handling
|
20
15
|
# --------------------------------------------------
|
21
|
-
|
22
|
-
|
23
|
-
watch( '^lib/watchr/(.*)\.rb' ) { |m| run( "ruby -rubygems -I.:lib test/test_%s.rb" % m[1] ) }
|
24
|
-
watch( '^lib/watchr/event_handlers/(.*)\.rb' ) { |m| run( "ruby -rubygems -I.:lib test/event_handlers/test_%s.rb" % m[1] ) }
|
25
|
-
watch( '^test/test_helper\.rb' ) { run_all_tests }
|
16
|
+
Signal.trap('QUIT') { ruby tests } # Ctrl-\
|
17
|
+
Signal.trap('INT' ) { abort("\n") } # Ctrl-C
|
26
18
|
|
27
19
|
# --------------------------------------------------
|
28
|
-
#
|
20
|
+
# Helpers
|
29
21
|
# --------------------------------------------------
|
30
|
-
|
31
|
-
|
32
|
-
puts " --- Running all tests ---\n\n"
|
33
|
-
run_all_tests
|
22
|
+
def ruby(*paths)
|
23
|
+
run "ruby #{gem_opt} -I.:lib:test -e'%w( #{paths.flatten.join(' ')} ).each {|p| require p }'"
|
34
24
|
end
|
35
25
|
|
36
|
-
|
37
|
-
|
26
|
+
def tests
|
27
|
+
Dir['test/**/test_*.rb'] - ['test/test_helper.rb']
|
28
|
+
end
|
38
29
|
|
30
|
+
def run( cmd )
|
31
|
+
puts cmd
|
32
|
+
system cmd
|
33
|
+
end
|
34
|
+
|
35
|
+
def gem_opt
|
36
|
+
defined?(Gem) ? "-rubygems" : ""
|
37
|
+
end
|
data/watchr.gemspec
CHANGED
@@ -8,9 +8,6 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.email = "mynyml@gmail.com"
|
9
9
|
s.homepage = "http://mynyml.com/ruby/flexible-continuous-testing"
|
10
10
|
s.rubyforge_project = "watchr"
|
11
|
-
s.has_rdoc = true
|
12
|
-
s.rdoc_options = %w( --main README.rdoc )
|
13
|
-
s.extra_rdoc_files = %w( README.rdoc )
|
14
11
|
s.require_path = "lib"
|
15
12
|
s.bindir = "bin"
|
16
13
|
s.executables = "watchr"
|
@@ -19,5 +16,5 @@ Gem::Specification.new do |s|
|
|
19
16
|
|
20
17
|
s.add_development_dependency 'minitest'
|
21
18
|
s.add_development_dependency 'mocha'
|
22
|
-
s.add_development_dependency 'every'
|
19
|
+
s.add_development_dependency 'every'
|
23
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watchr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.6"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mynyml
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-10 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -48,16 +48,16 @@ executables:
|
|
48
48
|
- watchr
|
49
49
|
extensions: []
|
50
50
|
|
51
|
-
extra_rdoc_files:
|
52
|
-
|
51
|
+
extra_rdoc_files: []
|
52
|
+
|
53
53
|
files:
|
54
54
|
- .gitignore
|
55
55
|
- History.txt
|
56
56
|
- LICENSE
|
57
57
|
- Manifest
|
58
|
-
- README.
|
58
|
+
- README.md
|
59
59
|
- Rakefile
|
60
|
-
- TODO.
|
60
|
+
- TODO.md
|
61
61
|
- bin/watchr
|
62
62
|
- contributions.txt
|
63
63
|
- docs.watchr
|
@@ -83,9 +83,8 @@ homepage: http://mynyml.com/ruby/flexible-continuous-testing
|
|
83
83
|
licenses: []
|
84
84
|
|
85
85
|
post_install_message:
|
86
|
-
rdoc_options:
|
87
|
-
|
88
|
-
- README.rdoc
|
86
|
+
rdoc_options: []
|
87
|
+
|
89
88
|
require_paths:
|
90
89
|
- lib
|
91
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/README.rdoc
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
=== Summary
|
2
|
-
|
3
|
-
Agile development tool that monitors a directory tree, and triggers a user
|
4
|
-
defined action whenever an observed file is modified. Its most typical use is
|
5
|
-
continuous testing, and as such it is a more flexible alternative to autotest.
|
6
|
-
|
7
|
-
|
8
|
-
=== Features
|
9
|
-
|
10
|
-
watchr is:
|
11
|
-
|
12
|
-
* Simple to use
|
13
|
-
* Highly flexible
|
14
|
-
* Evented ( Listens for filesystem events with native c libs )
|
15
|
-
* Portable ( Linux, *BSD, OSX, Solaris, Windows )
|
16
|
-
* Fast ( Immediately reacts to file changes )
|
17
|
-
|
18
|
-
Most importantly it allows running tests in an environment that is *agnostic* to:
|
19
|
-
|
20
|
-
* Web frameworks ( rails, merb, sinatra, camping, invisible, ... )
|
21
|
-
* Test frameworks ( test/unit, minitest, rspec, test/spec, expectations, ... )
|
22
|
-
* Ruby interpreters ( ruby1.8, ruby1.9, MRI, JRuby, Rubinius, ... )
|
23
|
-
* Package frameworks ( rubygems, rip, ... )
|
24
|
-
|
25
|
-
|
26
|
-
=== Usage
|
27
|
-
|
28
|
-
On the command line,
|
29
|
-
|
30
|
-
$ watchr path/to/script.file
|
31
|
-
|
32
|
-
will monitor files in the current directory tree, and react to events on those
|
33
|
-
files in accordance with the script.
|
34
|
-
|
35
|
-
|
36
|
-
=== Scripts
|
37
|
-
|
38
|
-
The script contains a set of simple rules that map observed files to an action.
|
39
|
-
Its DSL is a single method: watch(pattern, &action)
|
40
|
-
|
41
|
-
watch( 'a regexp pattern matching paths to observe' ) {|match_data_object| command_to_run }
|
42
|
-
|
43
|
-
So for example,
|
44
|
-
|
45
|
-
watch( 'test/test_.*\.rb' ) {|md| system("ruby #{md[0]}") }
|
46
|
-
|
47
|
-
will match any test file and run it whenever it is saved.
|
48
|
-
|
49
|
-
A continuous testing script for a basic project could be
|
50
|
-
|
51
|
-
watch( 'test/test_.*\.rb' ) {|md| system("ruby #{md[0]}") }
|
52
|
-
watch( 'lib/(.*)\.rb' ) {|md| system("ruby test/test_#{md[1]}.rb") }
|
53
|
-
|
54
|
-
which, in addition to running any saved test file as above, will also run a
|
55
|
-
lib file's associated test. This mimics the equivalent autotest behaviour.
|
56
|
-
|
57
|
-
It's easy to see why watchr is so flexible, since the whole command is custom.
|
58
|
-
The above actions could just as easily call "jruby", "ruby --rubygems", "ruby
|
59
|
-
-Ilib", "specrb", "rbx", ... or any combination of these. For the sake of
|
60
|
-
comparison, autotest runs with:
|
61
|
-
|
62
|
-
/usr/bin/ruby1.8 -I.:lib:test -rubygems -e "%w[test/unit test/test_helper.rb test/test_watchr.rb].each { |f| require f }"
|
63
|
-
|
64
|
-
locking the environment into ruby1.8, rubygems and test/unit for all tests.
|
65
|
-
|
66
|
-
And remember the scripts are pure ruby, so feel free to add methods,
|
67
|
-
Signal#trap calls, etc. Updates to script files are picked up on the fly (no
|
68
|
-
need to restart watchr) so experimenting is painless.
|
69
|
-
|
70
|
-
The wiki[http://wiki.github.com/mynyml/watchr] has more details and examples.
|
71
|
-
You might also want to take a look at watchr's own scripts,
|
72
|
-
specs.watchr[http://github.com/mynyml/watchr/blob/master/specs.watchr],
|
73
|
-
docs.watchr[http://github.com/mynyml/watchr/blob/master/docs.watchr] and
|
74
|
-
gem.watchr[http://github.com/mynyml/watchr/blob/master/gem.watchr], to get you
|
75
|
-
started.
|
76
|
-
|
77
|
-
|
78
|
-
=== Install
|
79
|
-
|
80
|
-
gem install watchr --source http://gemcutter.org
|
81
|
-
|
82
|
-
If you're on *nix and have the rev[http://github.com/tarcieri/rev/] gem
|
83
|
-
installed, Watchr will detect it and use it automatically. This will make
|
84
|
-
Watchr evented.
|
85
|
-
|
86
|
-
gem install rev
|
87
|
-
|
88
|
-
|
89
|
-
=== See Also
|
90
|
-
|
91
|
-
redgreen[http://github.com/mynyml/redgreen]:: Standalone redgreen eye candy for test results, ala autotest.
|
92
|
-
phocus[http://github.com/mynyml/phocus]:: Run focused tests when running the whole file/suite is unnecessary.
|
93
|
-
autowatchr[http://github.com/viking/autowatchr]:: Provides some autotest-like behavior for watchr
|
94
|
-
nestor[http://github.com/francois/nestor]:: Continuous testing server for Rails
|
95
|
-
|
96
|
-
|
97
|
-
=== Links
|
98
|
-
|
99
|
-
source:: http://github.com/mynyml/watchr
|
100
|
-
docs:: http://docs.github.com/mynyml/watchr
|
101
|
-
wiki:: http://wiki.github.com/mynyml/watchr
|
102
|
-
bugs:: http://github.com/mynyml/watchr/issues
|
103
|
-
group:: http://groups.google.com/group/watchr
|
104
|
-
|
data/TODO.txt
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
|
2
|
-
* 1.9 compatibility
|
3
|
-
|
4
|
-
* sometimes an action is fired without a file being saved
|
5
|
-
* buffer flushing issue?
|
6
|
-
* libev issue?
|
7
|
-
* probably fixed with event type handling update, which ignores atime
|
8
|
-
updates by defaults
|
9
|
-
|
10
|
-
* when a file is saved twice quickly, subsequent events are ignored.
|
11
|
-
* seems like rev/libev drops the file watch
|
12
|
-
|
13
|
-
* test on other platforms
|
14
|
-
x mswin
|
15
|
-
x cygwin
|
16
|
-
* bsd
|
17
|
-
* osx
|
18
|
-
* solaris
|
19
|
-
|
20
|
-
* write a few prepackaged scripts
|
21
|
-
* post on gists
|
22
|
-
* post links on wiki
|
23
|
-
* post main links in readme
|
24
|
-
|
25
|
-
* eval script within own context?
|
26
|
-
* use case: using <tt>path</tt> within script accesses Script#path
|
27
|
-
|
28
|
-
* respond to different file events?
|
29
|
-
* modified
|
30
|
-
* created
|
31
|
-
* deleted
|
32
|
-
* etc.
|
33
|
-
* watch(pattern, EVENT, &action)
|
34
|
-
* use case: a script updates a manifest file when a file is deleted
|
35
|
-
|
36
|
-
* memory profiling / benchmarks
|
37
|
-
|
38
|
-
* version.watchr
|
39
|
-
* sync versions (gemspec & Watchr::VERSION)
|
40
|
-
|