build-files 0.2.9 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 130ed7e444f0f892eb13d423522cf1474f8dc08f
4
- data.tar.gz: 0807096d74e6d2cdb5d4d84edf6ea42490181048
3
+ metadata.gz: 227bf51c9e640d29bb54d2e1157d7e94e95cae97
4
+ data.tar.gz: e28a478dccda6e6778aee63e9844c99031daf442
5
5
  SHA512:
6
- metadata.gz: 05789c4a0450ec6fb506f9aa06dc31591e7fb1862ad686c55fe3265ddcd1e96a134fa6a6eb91d903c35213aa56fb9157b245371c77779084098741db5b694deb
7
- data.tar.gz: 4e3d50d571f258afae6f633c3e5c59766d8a5e4566d589d8c196cd12dd60c0fd0f98bb021ad72a598ec6c90261c5229b14bd5e81c33a1a7168af43f5115cbdb1
6
+ metadata.gz: a1b0cb776f992a16b9144eb568412b46dc53af59d59971b3a2e05eb0a6943b0129c290889c19cb075fa53b0707a72967ee2694a6d77e146bfeb1d5c091b40395
7
+ data.tar.gz: 51b6359b5e1e685b20d3193eafac6607b4cc2c490d5324fee3efbad21b2fb1ac0541f38aded40a2fa76f312aec8754c58c466db314cde8a34e1d42cd77f3fc48
data/.simplecov ADDED
@@ -0,0 +1,9 @@
1
+
2
+ SimpleCov.start do
3
+ add_filter "/spec/"
4
+ end
5
+
6
+ if ENV['TRAVIS']
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+ end
data/.travis.yml CHANGED
@@ -2,3 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - "2.0"
4
4
  - "2.1"
5
+ env: COVERAGE=true
data/Gemfile CHANGED
@@ -2,3 +2,11 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in build-files.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'simplecov'
8
+ gem 'coveralls', require: false
9
+
10
+ gem 'rb-fsevent'
11
+ gem 'rb-inotify'
12
+ end
data/README.md CHANGED
@@ -4,6 +4,7 @@ Build::Files is a set of idiomatic classes for dealing with paths and monitoring
4
4
 
5
5
  [![Build Status](https://secure.travis-ci.org/ioquatix/build-files.png)](http://travis-ci.org/ioquatix/build-files)
6
6
  [![Code Climate](https://codeclimate.com/github/ioquatix/build-files.png)](https://codeclimate.com/github/ioquatix/build-files)
7
+ [![Coverage Status](https://coveralls.io/repos/ioquatix/build-files/badge.svg)](https://coveralls.io/r/ioquatix/build-files)
7
8
 
8
9
  ## Installation
9
10
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ RSpec::Core::RakeTask.new(:spec) do |task|
5
+ task.rspec_opts = ["--require", "simplecov"] if ENV['COVERAGE']
6
+ end
5
7
 
6
8
  task :default => :spec
@@ -82,28 +82,61 @@ module Build
82
82
  end
83
83
 
84
84
  def run(options = {}, &block)
85
- Files::run_with_polling(self, options, &block)
85
+ default_driver = case RUBY_PLATFORM
86
+ when /linux/i; :inotify
87
+ when /darwin/i; :fsevent
88
+ else; :polling
89
+ end
90
+
91
+ if driver = options.fetch(:driver, default_driver)
92
+ method_name = "run_with_#{driver}"
93
+ Files.send(method_name, self, options, &block)
94
+ end
95
+ end
96
+ end
97
+
98
+ def self.run_with_inotify(monitor, options = {}, &block)
99
+ require 'rb-inotify'
100
+
101
+ notifier = INotify::Notifier.new
102
+
103
+ catch(:interrupt) do
104
+ while true
105
+ monitor.roots.each do |root|
106
+ notifier.watch root, :create, :modify, :delete do |event|
107
+ monitor.update([root])
108
+
109
+ yield
110
+
111
+ if monitor.updated
112
+ notifier.stop
113
+ end
114
+ end
115
+ end
116
+
117
+ notifier.run
118
+ end
86
119
  end
87
120
  end
88
121
 
89
122
  def self.run_with_fsevent(monitor, options = {}, &block)
90
123
  require 'rb-fsevent'
91
124
 
92
- fsevent ||= FSEvent.new
125
+ notifier = FSEvent.new
93
126
 
94
127
  catch(:interrupt) do
95
128
  while true
96
- fsevent.watch monitor.roots do |directories|
129
+ notifier.watch monitor.roots do |directories|
97
130
  monitor.update(directories)
98
-
131
+
99
132
  yield
100
-
133
+
101
134
  if monitor.updated
102
- fsevent.stop
135
+ notifier.stop
103
136
  end
104
137
  end
105
138
 
106
- fsevent.run
139
+ notifier.run
107
140
  end
108
141
  end
109
142
  end
@@ -112,10 +145,10 @@ module Build
112
145
  catch(:interrupt) do
113
146
  while true
114
147
  monitor.update(monitor.roots)
115
-
148
+
116
149
  yield
117
-
118
- sleep(options[:latency] || 5.0)
150
+
151
+ sleep(options[:latency] || 1.0)
119
152
  end
120
153
  end
121
154
  end
@@ -39,6 +39,10 @@ module Build
39
39
  end
40
40
  end
41
41
 
42
+ def touch
43
+ FileUtils.touch self
44
+ end
45
+
42
46
  def exist?
43
47
  File.exist? self
44
48
  end
@@ -54,6 +58,10 @@ module Build
54
58
  def mkpath
55
59
  FileUtils.mkpath self
56
60
  end
61
+
62
+ def rmpath
63
+ FileUtils.rm_rf self
64
+ end
57
65
  end
58
66
  end
59
67
  end
@@ -42,7 +42,7 @@ module Build
42
42
  root_components = Path.components(root)
43
43
 
44
44
  # Find the common prefix:
45
- i = prefix_length(path_components, root_components)
45
+ i = prefix_length(path_components, root_components) || 0
46
46
 
47
47
  # The difference between the root path and the required path, taking into account the common prefix:
48
48
  up = root_components.size - i
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Build
22
22
  module Files
23
- VERSION = "0.2.9"
23
+ VERSION = "0.3.0"
24
24
  end
25
25
  end
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env rspec
2
+
3
+ # Copyright, 2015, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require 'build/files/monitor'
24
+ require 'build/files/path'
25
+ require 'build/files/path/filesystem'
26
+ require 'build/files/directory'
27
+
28
+ module Build::Files::MonitorSpec
29
+ include Build::Files
30
+
31
+ ROOT = File.expand_path('../tmp', __FILE__)
32
+
33
+ describe Build::Files::Monitor do
34
+ let(:path) {Path.new(ROOT) + "test.txt"}
35
+
36
+ before(:all) do
37
+ Path.new(ROOT).mkpath
38
+ end
39
+
40
+ after(:all) do
41
+ Path.new(ROOT).rmpath
42
+ end
43
+
44
+ it 'should detect additions' do
45
+ directory = Build::Files::Directory.new(ROOT)
46
+ monitor = Build::Files::Monitor.new
47
+
48
+ changed = false
49
+
50
+ monitor.track_changes(directory) do |state|
51
+ changed = state.added.include? path
52
+ end
53
+
54
+ thread = Thread.new do
55
+ sleep 1.0
56
+
57
+ path.touch
58
+ end
59
+
60
+ triggered = 0
61
+
62
+ monitor.run do
63
+ triggered += 1
64
+
65
+ throw :interrupt
66
+ end
67
+
68
+ thread.join
69
+
70
+ expect(changed).to be true
71
+ expect(triggered).to be == 1
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: build-files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,6 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".simplecov"
62
63
  - ".travis.yml"
63
64
  - Gemfile
64
65
  - README.md
@@ -76,6 +77,7 @@ files:
76
77
  - spec/build/files/directory_spec.rb
77
78
  - spec/build/files/glob_spec.rb
78
79
  - spec/build/files/list_spec.rb
80
+ - spec/build/files/monitor_spec.rb
79
81
  - spec/build/files/path_spec.rb
80
82
  - spec/build/files/state_spec.rb
81
83
  homepage: ''
@@ -107,5 +109,6 @@ test_files:
107
109
  - spec/build/files/directory_spec.rb
108
110
  - spec/build/files/glob_spec.rb
109
111
  - spec/build/files/list_spec.rb
112
+ - spec/build/files/monitor_spec.rb
110
113
  - spec/build/files/path_spec.rb
111
114
  - spec/build/files/state_spec.rb