watchr 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ doc/
2
+ pkg/
3
+ bk/
4
+ .wiki
5
+ .yardoc
@@ -0,0 +1,32 @@
1
+
2
+ === v0.5.7
3
+
4
+ * Added manifest.watchr script
5
+ * Unix handler supports :deleted event type
6
+ * Unix handler supports :accessed (atime), :modified (mtime) and :changed
7
+ (ctime) event types (thanks gzuki[http://github.com/gzuki] for initial work)
8
+
9
+
10
+ === v0.5.6
11
+
12
+ * Rev gem optional in development (thanks TwP[http://github.com/TwP])
13
+ * Allow gems to bundle .watchr scripts (thanks foca[http://github.com/foca])
14
+
15
+ gemname/lib/gemname.watchr
16
+
17
+ is now automatically picked up with
18
+
19
+ $ watchr gemname.watchr
20
+
21
+ * Look for script in path
22
+ * debug msg when rev not found on *nix
23
+ * rake task for cross interpreter testing
24
+
25
+
26
+ === v0.5.5
27
+
28
+ * Rev gem is optional. Fixes issue #1
29
+ Install Rev to automatically get evented handler on *nix
30
+
31
+ gem install rev
32
+
@@ -0,0 +1,27 @@
1
+ .gitignore
2
+ History.txt
3
+ LICENSE
4
+ Manifest
5
+ README.rdoc
6
+ Rakefile
7
+ TODO.txt
8
+ bin/watchr
9
+ docs.watchr
10
+ gem.watchr
11
+ lib/watchr.rb
12
+ lib/watchr/controller.rb
13
+ lib/watchr/event_handlers/base.rb
14
+ lib/watchr/event_handlers/portable.rb
15
+ lib/watchr/event_handlers/unix.rb
16
+ lib/watchr/script.rb
17
+ manifest.watchr
18
+ specs.watchr
19
+ test/README
20
+ test/event_handlers/test_base.rb
21
+ test/event_handlers/test_portable.rb
22
+ test/event_handlers/test_unix.rb
23
+ test/test_controller.rb
24
+ test/test_helper.rb
25
+ test/test_script.rb
26
+ test/test_watchr.rb
27
+ watchr.gemspec
@@ -99,8 +99,10 @@ docs:: http://docs.github.com/mynyml/watchr
99
99
  wiki:: http://wiki.github.com/mynyml/watchr
100
100
  bugs:: http://github.com/mynyml/watchr/issues
101
101
 
102
- === Acknowledgement
102
+ === Contributions
103
+
104
+ macournoyer[http://github.com/macournoyer]:: suggested evented backend
105
+ foca[http://github.com/foca]:: suggested automatically picking up watchr scripts bundled in gems
106
+ TwP[http://github.com/TwP]:: patch, Rev gem optional in development
107
+ gzuki[http://github.com/gzuki]:: patch, recognize some event types
103
108
 
104
- * macournoyer[http://github.com/macournoyer] for the evented backend idea
105
- * foca[http://github.com/foca] for suggesting automatically picking up watchr
106
- scripts bundled in gems
data/TODO.txt CHANGED
@@ -4,6 +4,8 @@
4
4
  * sometimes an action is fired without a file being saved
5
5
  * buffer flushing issue?
6
6
  * libev issue?
7
+ * probably fixed with event type handling update, which ignores atime
8
+ updates by defaults
7
9
 
8
10
  * when a file is saved twice quickly, subsequent events are ignored.
9
11
  * seems like rev/libev drops the file watch
@@ -0,0 +1,32 @@
1
+ # Run me with:
2
+ #
3
+ # $ watchr gem.watchr
4
+
5
+ # --------------------------------------------------
6
+ # Convenience Methods
7
+ # --------------------------------------------------
8
+ def build(gemspec)
9
+ system "gem build %s" % gemspec
10
+ FileUtils.mv Dir['watchr-*.gem'], 'pkg/'
11
+ puts
12
+ end
13
+
14
+ # --------------------------------------------------
15
+ # Watchr Rules
16
+ # --------------------------------------------------
17
+ watch( '^watchr.gemspec$' ) { |m| build m[0] }
18
+
19
+ # --------------------------------------------------
20
+ # Signal Handling
21
+ # --------------------------------------------------
22
+ # Ctrl-\
23
+ Signal.trap('QUIT') do
24
+ puts " --- Building Gem ---\n\n"
25
+ build 'watchr.gemspec'
26
+ end
27
+
28
+ # Ctrl-C
29
+ Signal.trap('INT') { abort("\n") }
30
+
31
+
32
+ # vim:ft=ruby
@@ -13,6 +13,8 @@ require 'rbconfig'
13
13
  # See README for more details
14
14
  #
15
15
  module Watchr
16
+ VERSION = '0.5.7'
17
+
16
18
  begin
17
19
  require 'rev'
18
20
  HAVE_REV = true
@@ -29,8 +31,6 @@ module Watchr
29
31
  autoload :Portable, 'watchr/event_handlers/portable'
30
32
  end
31
33
 
32
- VERSION = '0.5.6'
33
-
34
34
  class << self
35
35
  attr_accessor :options
36
36
  attr_accessor :handler
@@ -48,14 +48,14 @@ module Watchr
48
48
  # path<Pathname, String>:: path that triggered event
49
49
  # event<Symbol>:: event type (ignored for now)
50
50
  #
51
- def update(path, event = nil)
51
+ def update(path, event_type = nil)
52
52
  path = Pathname(path).expand_path
53
53
 
54
54
  if path == @script.path
55
55
  @script.parse!
56
56
  @handler.refresh(monitored_paths)
57
57
  else
58
- @script.action_for(path).call
58
+ @script.action_for(path, event_type).call
59
59
  end
60
60
  end
61
61
 
@@ -13,13 +13,12 @@ module Watchr
13
13
  #
14
14
  # ===== Parameters
15
15
  # path<Pathname, String>:: full path or path relative to current working directory
16
- # event<Symbol>:: event type (not yet used).
17
- #
16
+ # event_type<Symbol>:: event type.
18
17
  #--
19
18
  # #changed and #notify_observers are Observable methods
20
- def notify(path, event = nil)
19
+ def notify(path, event_type = nil)
21
20
  changed(true)
22
- notify_observers(path, event)
21
+ notify_observers(path, event_type)
23
22
  end
24
23
 
25
24
  # Begin watching given paths and enter listening loop. Called by the controller.
@@ -45,7 +45,7 @@ module Watchr
45
45
 
46
46
  if path.mtime > @reference_mtime
47
47
  @reference_mtime = path.mtime
48
- [path, :changed]
48
+ [path, :modified]
49
49
  else
50
50
  nil
51
51
  end
@@ -12,10 +12,47 @@ module Watchr
12
12
  attr_accessor :handler
13
13
  end
14
14
 
15
+ def initialize(path)
16
+ super
17
+ update_reference_times
18
+ end
19
+
20
+ # File's path as a Pathname
21
+ def pathname
22
+ @pathname ||= Pathname(@path)
23
+ end
24
+
15
25
  # Callback. Called on file change event
16
26
  # Delegates to Controller#update, passing in path and event type
17
27
  def on_change
18
- self.class.handler.notify(path, :changed)
28
+ self.class.handler.notify(path, type)
29
+ update_reference_times unless type == :deleted
30
+ end
31
+
32
+ private
33
+
34
+ def update_reference_times
35
+ @reference_atime = pathname.atime
36
+ @reference_mtime = pathname.mtime
37
+ @reference_ctime = pathname.ctime
38
+ end
39
+
40
+ # Type of latest event.
41
+ #
42
+ # A single type is determined, even though more than one stat times may
43
+ # have changed on the file. The type is the first to match in the
44
+ # following hierarchy:
45
+ #
46
+ # :deleted, :modified (mtime), :accessed (atime), :changed (ctime)
47
+ #
48
+ # ===== Returns
49
+ # type<Symbol>:: latest event's type
50
+ #
51
+ def type
52
+ return :deleted if !pathname.exist?
53
+ return :modified if pathname.mtime > @reference_mtime
54
+ return :accessed if pathname.atime > @reference_atime
55
+ return :changed if pathname.ctime > @reference_ctime
19
56
  end
20
57
  end
21
58
 
@@ -8,6 +8,7 @@ module Watchr
8
8
  # script = Watchr::Script.new(path)
9
9
  #
10
10
  class Script
11
+ DEFAULT_EVENT_TYPE = :modified
11
12
 
12
13
  # Convenience type. Provides clearer and simpler access to rule properties.
13
14
  #
@@ -17,7 +18,7 @@ module Watchr
17
18
  # rule.pattern #=> 'lib/.*\.rb'
18
19
  # rule.action.call #=> 'ohaie'
19
20
  #
20
- Rule = Struct.new(:pattern, :action)
21
+ Rule = Struct.new(:pattern, :event_type, :action)
21
22
 
22
23
  # TODO eval context
23
24
  class API #:nodoc:
@@ -69,13 +70,18 @@ module Watchr
69
70
  #
70
71
  # ===== Parameters
71
72
  # pattern<~#match>:: pattern to match targetted paths
73
+ # event_type<Symbol>::
74
+ # Rule will only match events of this type. Accepted types are :accessed,
75
+ # :modified, :changed, :delete and nil (any), where the first three
76
+ # correspond to atime, mtime and ctime respectively. Defaults to
77
+ # :modified.
72
78
  # action<Block>:: action to trigger
73
79
  #
74
80
  # ===== Returns
75
81
  # rule<Rule>:: rule created by the method
76
82
  #
77
- def watch(pattern, &action)
78
- @rules << Rule.new(pattern, action || @default_action)
83
+ def watch(pattern, event_type = DEFAULT_EVENT_TYPE, &action)
84
+ @rules << Rule.new(pattern, event_type, action || @default_action)
79
85
  @rules.last
80
86
  end
81
87
 
@@ -120,24 +126,28 @@ module Watchr
120
126
  instance_eval(@path.read)
121
127
  end
122
128
 
123
- def reset
124
- @default_action = lambda {}
125
- @rules.clear
126
- end
127
-
128
- # Find an action corresponding to a path. The returned action is actually a
129
- # wrapper around the rule's action, with the match_data prepopulated.
129
+ # Find an action corresponding to a path and event type. The returned
130
+ # action is actually a wrapper around the rule's action, with the
131
+ # match_data prepopulated.
132
+ #
133
+ # ===== Params
134
+ # path<Pathnane,String>:: Find action that correspond to this path.
135
+ # event_type<Symbol>:: Find action only if rule's event if of this type.
130
136
  #
131
137
  # ===== Examples
132
138
  #
133
139
  # script.watch( 'test/test_.*\.rb' ) {|md| "ruby #{md[0]}" }
134
140
  # script.action_for('test/test_watchr.rb').call #=> "ruby test/test_watchr.rb"
135
141
  #
136
- def action_for(path)
142
+ def action_for(path, event_type = DEFAULT_EVENT_TYPE)
137
143
  path = rel_path(path).to_s
138
- rule = rule_for(path)
139
- data = path.match(rule.pattern)
140
- lambda { rule.action.call(data) }
144
+ rule = rules_for(path).detect {|rule| rule.event_type.nil? || rule.event_type == event_type }
145
+ if rule
146
+ data = path.match(rule.pattern)
147
+ lambda { rule.action.call(data) }
148
+ else
149
+ lambda {}
150
+ end
141
151
  end
142
152
 
143
153
  # Collection of all patterns defined in script.
@@ -161,17 +171,17 @@ module Watchr
161
171
 
162
172
  private
163
173
 
164
- # Rule corresponding to a given path. If more than one rule matches, then
165
- # the last defined rule takes precedence.
174
+ # Rules corresponding to a given path, in reversed order of precedence
175
+ # (latest one is most inportant).
166
176
  #
167
177
  # ===== Parameters
168
178
  # path<Pathname, String>:: path to look up rule for
169
179
  #
170
180
  # ===== Returns
171
- # rule<Rule>:: rule corresponding to <tt>path</tt>
181
+ # rules<Array(Rule)>:: rules corresponding to <tt>path</tt>
172
182
  #
173
- def rule_for(path)
174
- @rules.reverse.detect {|rule| path.match(rule.pattern) }
183
+ def rules_for(path)
184
+ @rules.reverse.select {|rule| path.match(rule.pattern) }
175
185
  end
176
186
 
177
187
  # Make a path relative to current working directory.
@@ -185,5 +195,11 @@ module Watchr
185
195
  def rel_path(path)
186
196
  Pathname(path).expand_path.relative_path_from(Pathname(Dir.pwd))
187
197
  end
198
+
199
+ # Reset script state
200
+ def reset
201
+ @default_action = lambda {}
202
+ @rules.clear
203
+ end
188
204
  end
189
205
  end
@@ -0,0 +1,70 @@
1
+ # Run me with:
2
+ #
3
+ # $ watchr manifest.watchr
4
+ #
5
+ # This script will remove a file from from the Manifest when it gets deleted,
6
+ # and will rebuild the Manifest on Ctrl-\
7
+ #
8
+ # Mostly serves as a demo for the :delete event type (and eventually for the
9
+ # :added event type). In reality this is much better implemented as a git
10
+ # post-commit script.
11
+ #
12
+
13
+ require 'pathname'
14
+ # --------------------------------------------------
15
+ # Helpers
16
+ # --------------------------------------------------
17
+ module Project
18
+ extend self
19
+ def files
20
+ `git ls-files --full-name`.strip.split($/).sort
21
+ end
22
+ end
23
+
24
+ class Manifest
25
+ attr_accessor :path
26
+
27
+ def initialize(path)
28
+ @path = Pathname(path).expand_path
29
+ create!
30
+ end
31
+
32
+ def remove(path)
33
+ paths = @path.read.strip.split($/)
34
+ @path.open('w') {|f| f << (paths - [path]).join("\n") }
35
+ end
36
+
37
+ def add(path)
38
+ paths = @path.read.strip.split($/)
39
+ @path.open('w') {|f| f << paths.push(path).sort.join("\n") }
40
+ end
41
+
42
+ private
43
+ def create!
44
+ File.open(@path.to_s, 'w') {} unless @path.exist?
45
+ end
46
+ end
47
+
48
+
49
+ @manifest = Manifest.new('Manifest')
50
+
51
+ # --------------------------------------------------
52
+ # Watchr Rules
53
+ # --------------------------------------------------
54
+ watch('.*', :deleted ) do |md|
55
+ @manifest.remove(md[0])
56
+ puts "removed #{md[0].inspect} from Manifest"
57
+ end
58
+
59
+ # --------------------------------------------------
60
+ # Signal Handling
61
+ # --------------------------------------------------
62
+ # Ctrl-\
63
+ Signal.trap('QUIT') do
64
+ puts " --- Updated Manifest ---\n"
65
+ @manifest.path.open('w') {|m| m << Project.files.join("\n").strip }
66
+ end
67
+
68
+ # Ctrl-C
69
+ Signal.trap('INT') { abort("\n") }
70
+
@@ -0,0 +1,11 @@
1
+
2
+ To use local watchr executable for dev work:
3
+
4
+ $ ruby -rubygems -Ilib ./bin/watchr -d specs.watchr
5
+
6
+ To force a specific handler:
7
+
8
+ $ HANDLER=protable watchr -d specs.watchr
9
+ $ HANDLER=unix watchr -d specs.watchr
10
+
11
+ (see Watchr.handler)
@@ -35,7 +35,7 @@ class PortableEventHandlerTest < Test::Unit::TestCase
35
35
  @foo.stubs(:mtime).returns(Time.now + 100) # fake event
36
36
 
37
37
  @handler.listen [ @foo, @bar ]
38
- @handler.expects(:notify).with(@foo, :changed)
38
+ @handler.expects(:notify).with(@foo, :modified)
39
39
  @handler.trigger
40
40
  end
41
41
 
@@ -1,6 +1,10 @@
1
+ require 'test/test_helper'
2
+
1
3
  if Watchr::HAVE_REV
2
4
 
3
- require 'test/test_helper'
5
+ class Watchr::EventHandler::Unix::SingleFileWatcher
6
+ public :type
7
+ end
4
8
 
5
9
  class UnixEventHandlerTest < Test::Unit::TestCase
6
10
  include Watchr
@@ -8,8 +12,17 @@ class UnixEventHandlerTest < Test::Unit::TestCase
8
12
  SingleFileWatcher = EventHandler::Unix::SingleFileWatcher
9
13
 
10
14
  def setup
15
+ @now = Time.now
16
+ pathname = Pathname.new('foo/bar')
17
+ pathname.stubs(:atime ).returns(@now)
18
+ pathname.stubs(:mtime ).returns(@now)
19
+ pathname.stubs(:ctime ).returns(@now)
20
+ pathname.stubs(:exist?).returns(true)
21
+ SingleFileWatcher.any_instance.stubs(:pathname).returns(pathname)
22
+
11
23
  @loop = Rev::Loop.default
12
24
  @handler = EventHandler::Unix.new
25
+ @watcher = SingleFileWatcher.new('foo/bar')
13
26
  @loop.stubs(:run)
14
27
  end
15
28
 
@@ -23,6 +36,60 @@ class UnixEventHandlerTest < Test::Unit::TestCase
23
36
  @handler.listen([])
24
37
  end
25
38
 
39
+ ## SingleFileWatcher
40
+
41
+ test "watcher pathname" do
42
+ @watcher.pathname.should be_kind_of(Pathname)
43
+ @watcher.pathname.to_s.should be(@watcher.path)
44
+ end
45
+
46
+ test "stores reference times" do
47
+ @watcher.pathname.stubs(:atime).returns(:time)
48
+ @watcher.pathname.stubs(:mtime).returns(:time)
49
+ @watcher.pathname.stubs(:ctime).returns(:time)
50
+
51
+ @watcher.send(:update_reference_times)
52
+ @watcher.instance_variable_get(:@reference_atime).should be(:time)
53
+ @watcher.instance_variable_get(:@reference_mtime).should be(:time)
54
+ @watcher.instance_variable_get(:@reference_ctime).should be(:time)
55
+ end
56
+
57
+ test "stores initial reference times" do
58
+ SingleFileWatcher.any_instance.expects(:update_reference_times)
59
+ SingleFileWatcher.new('foo')
60
+ end
61
+
62
+ test "updates reference times on change" do
63
+ @watcher.expects(:update_reference_times)
64
+ @watcher.on_change
65
+ end
66
+
67
+ test "detects event type" do
68
+ trigger_event @watcher, @now, :atime
69
+ @watcher.type.should be(:accessed)
70
+
71
+ trigger_event @watcher, @now, :mtime
72
+ @watcher.type.should be(:modified)
73
+
74
+ trigger_event @watcher, @now, :ctime
75
+ @watcher.type.should be(:changed)
76
+
77
+ trigger_event @watcher, @now, :atime, :mtime
78
+ @watcher.type.should be(:modified)
79
+
80
+ trigger_event @watcher, @now, :mtime, :ctime
81
+ @watcher.type.should be(:modified)
82
+
83
+ trigger_event @watcher, @now, :atime, :ctime
84
+ @watcher.type.should be(:accessed)
85
+
86
+ trigger_event @watcher, @now, :atime, :mtime, :ctime
87
+ @watcher.type.should be(:modified)
88
+
89
+ @watcher.pathname.stubs(:exist?).returns(false)
90
+ @watcher.type.should be(:deleted)
91
+ end
92
+
26
93
  ## monitoring file events
27
94
 
28
95
  test "listens for events on monitored files" do
@@ -33,11 +100,31 @@ class UnixEventHandlerTest < Test::Unit::TestCase
33
100
  end
34
101
 
35
102
  test "notifies observers on file event" do
36
- watcher = SingleFileWatcher.new('foo/bar')
37
- watcher.stubs(:path).returns('foo/bar')
103
+ @watcher.stubs(:path).returns('foo')
104
+ @handler.expects(:notify).with('foo', anything)
105
+ @watcher.on_change
106
+ end
38
107
 
108
+ test "notifies observers of event type" do
109
+ trigger_event @watcher, @now, :atime
110
+ @handler.expects(:notify).with('foo/bar', :accessed)
111
+ @watcher.on_change
112
+
113
+ trigger_event @watcher, @now, :mtime
114
+ @handler.expects(:notify).with('foo/bar', :modified)
115
+ @watcher.on_change
116
+
117
+ trigger_event @watcher, @now, :ctime
39
118
  @handler.expects(:notify).with('foo/bar', :changed)
40
- watcher.on_change
119
+ @watcher.on_change
120
+
121
+ trigger_event @watcher, @now, :atime, :mtime, :ctime
122
+ @handler.expects(:notify).with('foo/bar', :modified)
123
+ @watcher.on_change
124
+
125
+ @watcher.pathname.stubs(:exist?).returns(false)
126
+ @handler.expects(:notify).with('foo/bar', :deleted)
127
+ @watcher.on_change
41
128
  end
42
129
 
43
130
  ## on the fly updates of monitored files list
@@ -55,6 +142,21 @@ class UnixEventHandlerTest < Test::Unit::TestCase
55
142
  @loop.watchers.every.path.should exclude('foo')
56
143
  @loop.watchers.every.path.should exclude('bar')
57
144
  end
145
+
146
+ private
147
+
148
+ def trigger_event(watcher, now, *types)
149
+ watcher.pathname.stubs(:atime).returns(now)
150
+ watcher.pathname.stubs(:mtime).returns(now)
151
+ watcher.pathname.stubs(:ctime).returns(now)
152
+ watcher.instance_variable_set(:@reference_atime, now)
153
+ watcher.instance_variable_set(:@reference_mtime, now)
154
+ watcher.instance_variable_set(:@reference_ctime, now)
155
+
156
+ types.each do |type|
157
+ watcher.pathname.stubs(type).returns(now+10)
158
+ end
159
+ end
58
160
  end
59
161
 
60
162
  end # if Watchr::HAVE_REV
@@ -78,9 +78,9 @@ class TestController < Test::Unit::TestCase
78
78
 
79
79
  test "calls action for path" do
80
80
  path = to_p('abc')
81
- @script.expects(:action_for).with(path).returns(lambda {})
81
+ @script.expects(:action_for).with(path, :modified).returns(lambda {})
82
82
 
83
- @controller.update('abc')
83
+ @controller.update('abc', :modified)
84
84
  end
85
85
 
86
86
  test "parses script on script file update" do
@@ -97,7 +97,7 @@ class TestController < Test::Unit::TestCase
97
97
  @controller.stubs(:monitored_paths).returns %w( foo bar )
98
98
 
99
99
  @handler.expects(:refresh).with %w( foo bar )
100
- @controller.update('abc')
100
+ @controller.update(path)
101
101
  end
102
102
  end
103
103
 
@@ -12,6 +12,7 @@ class TestScript < Test::Unit::TestCase
12
12
 
13
13
  test "watch" do
14
14
  @script.watch('pattern')
15
+ @script.watch('pattern', :event_type)
15
16
  @script.watch('pattern') { nil }
16
17
  end
17
18
 
@@ -22,17 +23,40 @@ class TestScript < Test::Unit::TestCase
22
23
  ## functionality
23
24
 
24
25
  test "rule object" do
25
- rule = @script.watch('pattern') { nil }
26
+ rule = @script.watch('pattern', :modified) { nil }
26
27
  rule.pattern.should be('pattern')
28
+ rule.event_type.should be(:modified)
27
29
  rule.action.call.should be(nil)
28
30
  end
29
31
 
32
+ test "default event type" do
33
+ rule = @script.watch('pattern') { nil }
34
+ rule.event_type.should be(:modified)
35
+ end
36
+
30
37
  test "finds action for path" do
31
38
  @script.watch('abc') { :x }
32
39
  @script.watch('def') { :y }
33
40
  @script.action_for('abc').call.should be(:x)
34
41
  end
35
42
 
43
+ test "finds action for path with event type" do
44
+ @script.watch('abc', :accessed) { :x }
45
+ @script.watch('abc', :modified) { :y }
46
+ @script.action_for('abc', :accessed).call.should be(:x)
47
+ end
48
+
49
+ test "finds action for path with any event type" do
50
+ @script.watch('abc', nil) { :x }
51
+ @script.watch('abc', :modified) { :y }
52
+ @script.action_for('abc', :accessed).call.should be(:x)
53
+ end
54
+
55
+ test "no action for path" do
56
+ @script.watch('abc', :accessed) { :x }
57
+ @script.action_for('abc', :modified).call.should be(nil)
58
+ end
59
+
36
60
  test "collects patterns" do
37
61
  @script.watch('abc')
38
62
  @script.watch('def')
@@ -52,8 +76,7 @@ class TestScript < Test::Unit::TestCase
52
76
  test "resets state" do
53
77
  @script.default_action { 'x' }
54
78
  @script.watch('foo') { 'bar' }
55
- @script.reset
56
- @script.instance_variable_get(:@default_action).should be_kind_of(Proc)
79
+ @script.send(:reset)
57
80
  @script.instance_variable_get(:@default_action).call.should be(nil)
58
81
  @script.instance_variable_get(:@rules).should be([])
59
82
  end
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'watchr'
4
- s.version = '0.5.6'
4
+ s.version = '0.5.7'
5
5
  s.summary = "Modern continious testing (flexible alternative to autotest)"
6
6
  s.description = "Modern continious testing (flexible alternative to autotest)."
7
7
  s.author = "mynyml"
@@ -14,26 +14,32 @@ Gem::Specification.new do |s|
14
14
  s.bindir = "bin"
15
15
  s.executables = "watchr"
16
16
  s.files = %w[
17
- README.rdoc
17
+ .gitignore
18
+ History.txt
18
19
  LICENSE
19
- TODO.txt
20
+ Manifest
21
+ README.rdoc
20
22
  Rakefile
23
+ TODO.txt
21
24
  bin/watchr
25
+ docs.watchr
26
+ gem.watchr
22
27
  lib/watchr.rb
23
- lib/watchr/script.rb
24
28
  lib/watchr/controller.rb
25
29
  lib/watchr/event_handlers/base.rb
26
- lib/watchr/event_handlers/unix.rb
27
30
  lib/watchr/event_handlers/portable.rb
28
- test/test_helper.rb
29
- test/test_watchr.rb
30
- test/test_script.rb
31
- test/test_controller.rb
31
+ lib/watchr/event_handlers/unix.rb
32
+ lib/watchr/script.rb
33
+ manifest.watchr
34
+ specs.watchr
35
+ test/README
32
36
  test/event_handlers/test_base.rb
33
- test/event_handlers/test_unix.rb
34
37
  test/event_handlers/test_portable.rb
35
- specs.watchr
36
- docs.watchr
38
+ test/event_handlers/test_unix.rb
39
+ test/test_controller.rb
40
+ test/test_helper.rb
41
+ test/test_script.rb
42
+ test/test_watchr.rb
37
43
  watchr.gemspec
38
44
  ]
39
45
  s.test_files = %w[
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.5.6
4
+ version: 0.5.7
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: 2009-09-29 00:00:00 -04:00
12
+ date: 2009-10-02 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -71,26 +71,32 @@ extensions: []
71
71
  extra_rdoc_files:
72
72
  - README.rdoc
73
73
  files:
74
- - README.rdoc
74
+ - .gitignore
75
+ - History.txt
75
76
  - LICENSE
76
- - TODO.txt
77
+ - Manifest
78
+ - README.rdoc
77
79
  - Rakefile
80
+ - TODO.txt
78
81
  - bin/watchr
82
+ - docs.watchr
83
+ - gem.watchr
79
84
  - lib/watchr.rb
80
- - lib/watchr/script.rb
81
85
  - lib/watchr/controller.rb
82
86
  - lib/watchr/event_handlers/base.rb
83
- - lib/watchr/event_handlers/unix.rb
84
87
  - lib/watchr/event_handlers/portable.rb
85
- - test/test_helper.rb
86
- - test/test_watchr.rb
87
- - test/test_script.rb
88
- - test/test_controller.rb
88
+ - lib/watchr/event_handlers/unix.rb
89
+ - lib/watchr/script.rb
90
+ - manifest.watchr
91
+ - specs.watchr
92
+ - test/README
89
93
  - test/event_handlers/test_base.rb
90
- - test/event_handlers/test_unix.rb
91
94
  - test/event_handlers/test_portable.rb
92
- - specs.watchr
93
- - docs.watchr
95
+ - test/event_handlers/test_unix.rb
96
+ - test/test_controller.rb
97
+ - test/test_helper.rb
98
+ - test/test_script.rb
99
+ - test/test_watchr.rb
94
100
  - watchr.gemspec
95
101
  has_rdoc: true
96
102
  homepage: http://mynyml.com/ruby/flexible-continuous-testing