watch 0.1.0 → 0.2.0
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.
- checksums.yaml +7 -0
- data/README.md +29 -0
- data/VERSION +1 -1
- data/lib/watch.rb +30 -21
- metadata +55 -57
- data/.document +0 -5
- data/.gitignore +0 -21
- data/Rakefile +0 -45
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -9
- data/spec/watcher_spec.rb +0 -31
- data/watch.gemspec +0 -55
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 139939cce511392cc1c3172230654f39f2d15bf88f624185e1543e31e6750df7
|
|
4
|
+
data.tar.gz: eb852ac92d9187981d6622b9aca55648b2d222b6e848da09764929e97f8829cd
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 24abf286cd6a02c038d4f23fb1408507c9d4b5a1582d9cb00296c90c3054a84e229cd903184666575374bd22a5a224694dad7df58e04d6f0e9be6d9375a5240d
|
|
7
|
+
data.tar.gz: 7da08315e9cb05d6a34bbc914ac59b881f438b7701f9b0abd09e4e05f0c8243ef9427b05bee9a866496cb1f9078802fb01cf3bd378b607352cec2ffb3fe0126a
|
data/README.md
CHANGED
|
@@ -5,6 +5,35 @@ be executed when something changes
|
|
|
5
5
|
|
|
6
6
|
Watch.new("**/*") { puts "file added, removed or changed" }
|
|
7
7
|
|
|
8
|
+
### Options
|
|
9
|
+
|
|
10
|
+
`prefire` (default `true`) runs the block once at startup, before anything has
|
|
11
|
+
changed. Pass `false` to only run it on an actual change.
|
|
12
|
+
|
|
13
|
+
Watch.new("**/*", prefire: false) { puts "something changed" }
|
|
14
|
+
|
|
15
|
+
`wait` (default `0.5`) is the number of seconds to sleep between checks.
|
|
16
|
+
|
|
17
|
+
Watch.new("**/*", wait: 2) { puts "checked every two seconds" }
|
|
18
|
+
|
|
19
|
+
## Why write another directory watcher?
|
|
20
|
+
|
|
21
|
+
Simplicity.
|
|
22
|
+
|
|
23
|
+
If you've checked already, there are many implementations of the same kind of code.
|
|
24
|
+
[kicker](http://github.com/alloy/kicker/), [watchr](http://github.com/mynyml/watchr/) and [directory_watcher](http://github.com/TwP/directory_watcher/) are all pretty awesome, only the code bases are lengthy.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
| Library | SLOC |
|
|
28
|
+
|:-----------------:|:--------:|
|
|
29
|
+
|kicker | 676 |
|
|
30
|
+
|directory_watcher | 478 |
|
|
31
|
+
|watchr | 268 |
|
|
32
|
+
|watch | 34 |
|
|
33
|
+
|
|
34
|
+
All three of these libraries of course had far different goals than I did for watch. They're all well tested and pretty awesome too. Use them if watch isn't enough for you.
|
|
35
|
+
|
|
36
|
+
|
|
8
37
|
## Note on Patches/Pull Requests
|
|
9
38
|
|
|
10
39
|
* Fork the project.
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|
data/lib/watch.rb
CHANGED
|
@@ -1,34 +1,43 @@
|
|
|
1
1
|
class Watch
|
|
2
|
-
def initialize(glob, &block)
|
|
2
|
+
def initialize(glob, prefire: true, wait: 0.5, &block)
|
|
3
3
|
raise "must pass a block" unless block_given?
|
|
4
|
-
|
|
5
|
-
@
|
|
6
|
-
@
|
|
4
|
+
|
|
5
|
+
@glob = glob
|
|
6
|
+
@wait = wait
|
|
7
7
|
@block = block
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
|
|
9
|
+
snapshot!
|
|
10
|
+
@block.call if prefire
|
|
11
|
+
|
|
11
12
|
run_loop
|
|
12
13
|
end
|
|
13
|
-
|
|
14
|
+
|
|
14
15
|
private
|
|
16
|
+
|
|
15
17
|
def run_loop
|
|
16
18
|
loop do
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
if changes?
|
|
20
|
+
@block.call
|
|
21
|
+
snapshot!
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
sleep @wait
|
|
20
25
|
end
|
|
21
26
|
end
|
|
22
|
-
|
|
23
|
-
def
|
|
24
|
-
|
|
27
|
+
|
|
28
|
+
def changes?
|
|
29
|
+
@timestamps != timestamps
|
|
25
30
|
end
|
|
26
|
-
|
|
27
|
-
def
|
|
28
|
-
@
|
|
31
|
+
|
|
32
|
+
def snapshot!
|
|
33
|
+
@timestamps = timestamps
|
|
29
34
|
end
|
|
30
|
-
|
|
31
|
-
def
|
|
32
|
-
Dir[@
|
|
35
|
+
|
|
36
|
+
def timestamps
|
|
37
|
+
Dir[@glob].map do |file|
|
|
38
|
+
File.mtime(file)
|
|
39
|
+
rescue Errno::ENOENT
|
|
40
|
+
nil
|
|
41
|
+
end
|
|
33
42
|
end
|
|
34
|
-
end
|
|
43
|
+
end
|
metadata
CHANGED
|
@@ -1,76 +1,74 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: watch
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
|
-
authors:
|
|
6
|
+
authors:
|
|
7
7
|
- Ben Schwarz
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rake
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '13.0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '13.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
16
27
|
name: rspec
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.13'
|
|
17
33
|
type: :development
|
|
18
|
-
|
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
20
|
-
requirements:
|
|
21
|
-
- - "
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version:
|
|
24
|
-
version:
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.13'
|
|
25
40
|
description: A dirt simple mechanism to tell if files have changed
|
|
26
41
|
email: ben.schwarz@gmail.com
|
|
27
42
|
executables: []
|
|
28
|
-
|
|
29
43
|
extensions: []
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- LICENSE
|
|
33
|
-
- README.md
|
|
34
|
-
files:
|
|
35
|
-
- .document
|
|
36
|
-
- .gitignore
|
|
44
|
+
extra_rdoc_files: []
|
|
45
|
+
files:
|
|
37
46
|
- LICENSE
|
|
38
47
|
- README.md
|
|
39
|
-
- Rakefile
|
|
40
48
|
- VERSION
|
|
41
49
|
- lib/watch.rb
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
rdoc_options:
|
|
52
|
-
- --charset=UTF-8
|
|
53
|
-
require_paths:
|
|
50
|
+
homepage: https://github.com/benschwarz/watch
|
|
51
|
+
licenses:
|
|
52
|
+
- MIT
|
|
53
|
+
metadata:
|
|
54
|
+
source_code_uri: https://github.com/benschwarz/watch
|
|
55
|
+
bug_tracker_uri: https://github.com/benschwarz/watch/issues
|
|
56
|
+
changelog_uri: https://github.com/benschwarz/watch/releases
|
|
57
|
+
rdoc_options: []
|
|
58
|
+
require_paths:
|
|
54
59
|
- lib
|
|
55
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
|
-
requirements:
|
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
|
+
requirements:
|
|
57
62
|
- - ">="
|
|
58
|
-
- !ruby/object:Gem::Version
|
|
59
|
-
version:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
requirements:
|
|
63
|
+
- !ruby/object:Gem::Version
|
|
64
|
+
version: '3.0'
|
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
63
67
|
- - ">="
|
|
64
|
-
- !ruby/object:Gem::Version
|
|
65
|
-
version:
|
|
66
|
-
version:
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
67
70
|
requirements: []
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
specification_version: 3
|
|
73
|
-
summary: A simple directory
|
|
74
|
-
test_files:
|
|
75
|
-
- spec/spec_helper.rb
|
|
76
|
-
- spec/watcher_spec.rb
|
|
71
|
+
rubygems_version: 4.0.16
|
|
72
|
+
specification_version: 4
|
|
73
|
+
summary: A simple directory watcher
|
|
74
|
+
test_files: []
|
data/.document
DELETED
data/.gitignore
DELETED
data/Rakefile
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'rake'
|
|
3
|
-
|
|
4
|
-
begin
|
|
5
|
-
require 'jeweler'
|
|
6
|
-
Jeweler::Tasks.new do |gem|
|
|
7
|
-
gem.name = "watch"
|
|
8
|
-
gem.summary = %Q{A simple directory}
|
|
9
|
-
gem.description = %Q{A dirt simple mechanism to tell if files have changed}
|
|
10
|
-
gem.email = "ben.schwarz@gmail.com"
|
|
11
|
-
gem.homepage = "http://github.com/benschwarz/watch"
|
|
12
|
-
gem.authors = ["Ben Schwarz"]
|
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
|
14
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
15
|
-
end
|
|
16
|
-
Jeweler::GemcutterTasks.new
|
|
17
|
-
rescue LoadError
|
|
18
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
require 'spec/rake/spectask'
|
|
22
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
|
23
|
-
spec.libs << 'lib' << 'spec'
|
|
24
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
|
28
|
-
spec.libs << 'lib' << 'spec'
|
|
29
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
|
30
|
-
spec.rcov = true
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
task :spec => :check_dependencies
|
|
34
|
-
|
|
35
|
-
task :default => :spec
|
|
36
|
-
|
|
37
|
-
require 'rake/rdoctask'
|
|
38
|
-
Rake::RDocTask.new do |rdoc|
|
|
39
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
|
40
|
-
|
|
41
|
-
rdoc.rdoc_dir = 'rdoc'
|
|
42
|
-
rdoc.title = "watch #{version}"
|
|
43
|
-
rdoc.rdoc_files.include('README*')
|
|
44
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
45
|
-
end
|
data/spec/spec.opts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
--color
|
data/spec/spec_helper.rb
DELETED
data/spec/watcher_spec.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
class BlockRun
|
|
4
|
-
def self.call
|
|
5
|
-
end
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe "watch" do
|
|
9
|
-
before :all do
|
|
10
|
-
@watch = Watch.new("tmp/**/*") { BlockRun.call }
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'should run the block on startup' do
|
|
14
|
-
BlockRun.should_receive(:call)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'should run the block when a file is added' do
|
|
18
|
-
BlockRun.should_receive(:call)
|
|
19
|
-
File.open("tmp/file", "w+") {|f| f << "abc"}
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'should run the block on a file modification' do
|
|
23
|
-
BlockRun.should_receive(:call)
|
|
24
|
-
File.open("tmp/file", "w+") {|f| f << "def"}
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'should run the block when a file is removed' do
|
|
28
|
-
BlockRun.should_receive(:call)
|
|
29
|
-
File.delete("tmp/file")
|
|
30
|
-
end
|
|
31
|
-
end
|
data/watch.gemspec
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Generated by jeweler
|
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
|
4
|
-
# -*- encoding: utf-8 -*-
|
|
5
|
-
|
|
6
|
-
Gem::Specification.new do |s|
|
|
7
|
-
s.name = %q{watch}
|
|
8
|
-
s.version = "0.1.0"
|
|
9
|
-
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
-
s.authors = ["Ben Schwarz"]
|
|
12
|
-
s.date = %q{2010-01-01}
|
|
13
|
-
s.description = %q{A dirt simple mechanism to tell if files have changed}
|
|
14
|
-
s.email = %q{ben.schwarz@gmail.com}
|
|
15
|
-
s.extra_rdoc_files = [
|
|
16
|
-
"LICENSE",
|
|
17
|
-
"README.md"
|
|
18
|
-
]
|
|
19
|
-
s.files = [
|
|
20
|
-
".document",
|
|
21
|
-
".gitignore",
|
|
22
|
-
"LICENSE",
|
|
23
|
-
"README.md",
|
|
24
|
-
"Rakefile",
|
|
25
|
-
"VERSION",
|
|
26
|
-
"lib/watch.rb",
|
|
27
|
-
"spec/spec.opts",
|
|
28
|
-
"spec/spec_helper.rb",
|
|
29
|
-
"spec/watcher_spec.rb",
|
|
30
|
-
"watch.gemspec"
|
|
31
|
-
]
|
|
32
|
-
s.homepage = %q{http://github.com/benschwarz/watch}
|
|
33
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
|
34
|
-
s.require_paths = ["lib"]
|
|
35
|
-
s.rubygems_version = %q{1.3.5}
|
|
36
|
-
s.summary = %q{A simple directory}
|
|
37
|
-
s.test_files = [
|
|
38
|
-
"spec/spec_helper.rb",
|
|
39
|
-
"spec/watcher_spec.rb"
|
|
40
|
-
]
|
|
41
|
-
|
|
42
|
-
if s.respond_to? :specification_version then
|
|
43
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
44
|
-
s.specification_version = 3
|
|
45
|
-
|
|
46
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
47
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
|
48
|
-
else
|
|
49
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
|
50
|
-
end
|
|
51
|
-
else
|
|
52
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|