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 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
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
- @path = glob
6
- @files = []
4
+
5
+ @glob = glob
6
+ @wait = wait
7
7
  @block = block
8
-
9
- @block.call
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
- @block.call if changed?
18
- setup
19
- sleep 0.5
19
+ if changes?
20
+ @block.call
21
+ snapshot!
22
+ end
23
+
24
+ sleep @wait
20
25
  end
21
26
  end
22
-
23
- def changed?
24
- file_list != @files
27
+
28
+ def changes?
29
+ @timestamps != timestamps
25
30
  end
26
-
27
- def setup
28
- @files = file_list
31
+
32
+ def snapshot!
33
+ @timestamps = timestamps
29
34
  end
30
-
31
- def file_list
32
- Dir[@path].map {|file| File.mtime(file) }
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.1.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
- date: 2010-01-01 00:00:00 +11:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
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
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.2.9
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
- extra_rdoc_files:
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
- - spec/spec.opts
43
- - spec/spec_helper.rb
44
- - spec/watcher_spec.rb
45
- - watch.gemspec
46
- has_rdoc: true
47
- homepage: http://github.com/benschwarz/watch
48
- licenses: []
49
-
50
- post_install_message:
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: "0"
60
- version:
61
- required_rubygems_version: !ruby/object:Gem::Requirement
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: "0"
66
- version:
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
67
70
  requirements: []
68
-
69
- rubyforge_project:
70
- rubygems_version: 1.3.5
71
- signing_key:
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
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
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
@@ -1,9 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'watch'
4
- require 'spec'
5
- require 'spec/autorun'
6
-
7
- Spec::Runner.configure do |config|
8
-
9
- end
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
-