fssm 0.2.0 → 0.2.1
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.
- data/VERSION.yml +1 -1
- data/fssm.gemspec +5 -4
- data/lib/fssm/pathname.rb +69 -68
- data/profile/prof-pathname-rubinius.rb +35 -0
- metadata +76 -68
data/VERSION.yml
CHANGED
data/fssm.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fssm}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Travis Tilley"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-12-10}
|
13
13
|
s.description = %q{file system state monitor}
|
14
14
|
s.email = %q{ttilley@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/fssm/tree.rb",
|
39
39
|
"profile/prof-cache.rb",
|
40
40
|
"profile/prof-fssm-pathname.html",
|
41
|
+
"profile/prof-pathname-rubinius.rb",
|
41
42
|
"profile/prof-pathname.rb",
|
42
43
|
"profile/prof-plain-pathname.html",
|
43
44
|
"profile/prof.html",
|
@@ -52,7 +53,7 @@ Gem::Specification.new do |s|
|
|
52
53
|
]
|
53
54
|
s.homepage = %q{http://github.com/ttilley/fssm}
|
54
55
|
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version = %q{1.3.
|
56
|
+
s.rubygems_version = %q{1.3.7}
|
56
57
|
s.summary = %q{file system state monitor}
|
57
58
|
s.test_files = [
|
58
59
|
"spec/monitor_spec.rb",
|
@@ -65,7 +66,7 @@ Gem::Specification.new do |s|
|
|
65
66
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
66
67
|
s.specification_version = 3
|
67
68
|
|
68
|
-
if Gem::Version.new(Gem::
|
69
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
69
70
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
70
71
|
else
|
71
72
|
s.add_dependency(%q<rspec>, [">= 0"])
|
data/lib/fssm/pathname.rb
CHANGED
@@ -11,13 +11,13 @@ module FSSM
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def for(path)
|
14
|
-
path.is_a?(::FSSM::Pathname) ? path : new(
|
14
|
+
path.is_a?(::FSSM::Pathname) ? path : new(path.to_s)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def initialize(path)
|
19
|
-
raise ArgumentError, "path cannot contain ASCII NULLs" if path =~ %r{\0}
|
20
|
-
super(path)
|
19
|
+
raise ArgumentError, "path cannot contain ASCII NULLs" if path.to_s =~ %r{\0}
|
20
|
+
super(path.to_s)
|
21
21
|
end
|
22
22
|
|
23
23
|
def <=>(other)
|
@@ -183,16 +183,17 @@ module FSSM
|
|
183
183
|
end
|
184
184
|
|
185
185
|
def to_s
|
186
|
-
|
186
|
+
# this is required to work in rubinius
|
187
|
+
String.allocate.replace(self)
|
187
188
|
end
|
188
189
|
|
189
190
|
alias to_str to_s
|
190
191
|
|
191
192
|
def unlink
|
192
|
-
Dir.unlink(self)
|
193
|
+
Dir.unlink(self.to_s)
|
193
194
|
true
|
194
195
|
rescue Errno::ENOTDIR
|
195
|
-
File.unlink(self)
|
196
|
+
File.unlink(self.to_s)
|
196
197
|
true
|
197
198
|
end
|
198
199
|
end
|
@@ -207,19 +208,19 @@ module FSSM
|
|
207
208
|
end
|
208
209
|
|
209
210
|
def entries
|
210
|
-
Dir.entries(self).map! {|e| FSSM::Pathname.new(e) }
|
211
|
+
Dir.entries(self.to_s).map! {|e| FSSM::Pathname.new(e) }
|
211
212
|
end
|
212
213
|
|
213
214
|
def mkdir(mode = 0777)
|
214
|
-
Dir.mkdir(self, mode)
|
215
|
+
Dir.mkdir(self.to_s, mode)
|
215
216
|
end
|
216
217
|
|
217
218
|
def opendir(&blk)
|
218
|
-
Dir.open(self, &blk)
|
219
|
+
Dir.open(self.to_s, &blk)
|
219
220
|
end
|
220
221
|
|
221
222
|
def rmdir
|
222
|
-
Dir.rmdir(self)
|
223
|
+
Dir.rmdir(self.to_s)
|
223
224
|
end
|
224
225
|
|
225
226
|
def self.glob(pattern, flags = 0)
|
@@ -242,127 +243,127 @@ module FSSM
|
|
242
243
|
|
243
244
|
def chdir
|
244
245
|
blk = lambda { yield self } if block_given?
|
245
|
-
Dir.chdir(self, &blk)
|
246
|
+
Dir.chdir(self.to_s, &blk)
|
246
247
|
end
|
247
248
|
end
|
248
249
|
|
249
250
|
class Pathname
|
250
251
|
def blockdev?
|
251
|
-
FileTest.blockdev?(self)
|
252
|
+
FileTest.blockdev?(self.to_s)
|
252
253
|
end
|
253
254
|
|
254
255
|
def chardev?
|
255
|
-
FileTest.chardev?(self)
|
256
|
+
FileTest.chardev?(self.to_s)
|
256
257
|
end
|
257
258
|
|
258
259
|
def directory?
|
259
|
-
FileTest.directory?(self)
|
260
|
+
FileTest.directory?(self.to_s)
|
260
261
|
end
|
261
262
|
|
262
263
|
def executable?
|
263
|
-
FileTest.executable?(self)
|
264
|
+
FileTest.executable?(self.to_s)
|
264
265
|
end
|
265
266
|
|
266
267
|
def executable_real?
|
267
|
-
FileTest.executable_real?(self)
|
268
|
+
FileTest.executable_real?(self.to_s)
|
268
269
|
end
|
269
270
|
|
270
271
|
def exists?
|
271
|
-
FileTest.exists?(self)
|
272
|
+
FileTest.exists?(self.to_s)
|
272
273
|
end
|
273
274
|
|
274
275
|
def file?
|
275
|
-
FileTest.file?(self)
|
276
|
+
FileTest.file?(self.to_s)
|
276
277
|
end
|
277
278
|
|
278
279
|
def grpowned?
|
279
|
-
FileTest.grpowned?(self)
|
280
|
+
FileTest.grpowned?(self.to_s)
|
280
281
|
end
|
281
282
|
|
282
283
|
def owned?
|
283
|
-
FileTest.owned?(self)
|
284
|
+
FileTest.owned?(self.to_s)
|
284
285
|
end
|
285
286
|
|
286
287
|
def pipe?
|
287
|
-
FileTest.pipe?(self)
|
288
|
+
FileTest.pipe?(self.to_s)
|
288
289
|
end
|
289
290
|
|
290
291
|
def readable?
|
291
|
-
FileTest.readable?(self)
|
292
|
+
FileTest.readable?(self.to_s)
|
292
293
|
end
|
293
294
|
|
294
295
|
def readable_real?
|
295
|
-
FileTest.readable_real?(self)
|
296
|
+
FileTest.readable_real?(self.to_s)
|
296
297
|
end
|
297
298
|
|
298
299
|
def setgid?
|
299
|
-
FileTest.setgit?(self)
|
300
|
+
FileTest.setgit?(self.to_s)
|
300
301
|
end
|
301
302
|
|
302
303
|
def setuid?
|
303
|
-
FileTest.setuid?(self)
|
304
|
+
FileTest.setuid?(self.to_s)
|
304
305
|
end
|
305
306
|
|
306
307
|
def socket?
|
307
|
-
FileTest.socket?(self)
|
308
|
+
FileTest.socket?(self.to_s)
|
308
309
|
end
|
309
310
|
|
310
311
|
def sticky?
|
311
|
-
FileTest.sticky?(self)
|
312
|
+
FileTest.sticky?(self.to_s)
|
312
313
|
end
|
313
314
|
|
314
315
|
def symlink?
|
315
|
-
FileTest.symlink?(self)
|
316
|
+
FileTest.symlink?(self.to_s)
|
316
317
|
end
|
317
318
|
|
318
319
|
def world_readable?
|
319
|
-
FileTest.world_readable?(self)
|
320
|
+
FileTest.world_readable?(self.to_s)
|
320
321
|
end
|
321
322
|
|
322
323
|
def world_writable?
|
323
|
-
FileTest.world_writable?(self)
|
324
|
+
FileTest.world_writable?(self.to_s)
|
324
325
|
end
|
325
326
|
|
326
327
|
def writable?
|
327
|
-
FileTest.writable?(self)
|
328
|
+
FileTest.writable?(self.to_s)
|
328
329
|
end
|
329
330
|
|
330
331
|
def writable_real?
|
331
|
-
FileTest.writable_real?(self)
|
332
|
+
FileTest.writable_real?(self.to_s)
|
332
333
|
end
|
333
334
|
|
334
335
|
def zero?
|
335
|
-
FileTest.zero?(self)
|
336
|
+
FileTest.zero?(self.to_s)
|
336
337
|
end
|
337
338
|
end
|
338
339
|
|
339
340
|
class Pathname
|
340
341
|
def atime
|
341
|
-
File.atime(self)
|
342
|
+
File.atime(self.to_s)
|
342
343
|
end
|
343
344
|
|
344
345
|
def ctime
|
345
|
-
File.ctime(self)
|
346
|
+
File.ctime(self.to_s)
|
346
347
|
end
|
347
348
|
|
348
349
|
def ftype
|
349
|
-
File.ftype(self)
|
350
|
+
File.ftype(self.to_s)
|
350
351
|
end
|
351
352
|
|
352
353
|
def lstat
|
353
|
-
File.lstat(self)
|
354
|
+
File.lstat(self.to_s)
|
354
355
|
end
|
355
356
|
|
356
357
|
def mtime
|
357
|
-
File.mtime(self)
|
358
|
+
File.mtime(self.to_s)
|
358
359
|
end
|
359
360
|
|
360
361
|
def stat
|
361
|
-
File.stat(self)
|
362
|
+
File.stat(self.to_s)
|
362
363
|
end
|
363
364
|
|
364
365
|
def utime(atime, mtime)
|
365
|
-
File.utime(self, atime, mtime)
|
366
|
+
File.utime(self.to_s, atime, mtime)
|
366
367
|
end
|
367
368
|
end
|
368
369
|
|
@@ -374,118 +375,118 @@ module FSSM
|
|
374
375
|
end
|
375
376
|
|
376
377
|
def basename
|
377
|
-
self.class.new(File.basename(self))
|
378
|
+
self.class.new(File.basename(self.to_s))
|
378
379
|
end
|
379
380
|
|
380
381
|
def chmod(mode)
|
381
|
-
File.chmod(mode, self)
|
382
|
+
File.chmod(mode, self.to_s)
|
382
383
|
end
|
383
384
|
|
384
385
|
def chown(owner, group)
|
385
|
-
File.chown(owner, group, self)
|
386
|
+
File.chown(owner, group, self.to_s)
|
386
387
|
end
|
387
388
|
|
388
389
|
def dirname
|
389
|
-
self.class.new(File.dirname(self))
|
390
|
+
self.class.new(File.dirname(self.to_s))
|
390
391
|
end
|
391
392
|
|
392
393
|
def expand_path(from = nil)
|
393
|
-
self.class.new(File.expand_path(self, from))
|
394
|
+
self.class.new(File.expand_path(self.to_s, from))
|
394
395
|
end
|
395
396
|
|
396
397
|
def extname
|
397
|
-
File.extname(self)
|
398
|
+
File.extname(self.to_s)
|
398
399
|
end
|
399
400
|
|
400
401
|
def fnmatch?(pat, flags = 0)
|
401
|
-
File.fnmatch(pat, self, flags)
|
402
|
+
File.fnmatch(pat, self.to_s, flags)
|
402
403
|
end
|
403
404
|
|
404
405
|
def join(*parts)
|
405
|
-
self.class.join(self, *parts)
|
406
|
+
self.class.join(self.to_s, *parts)
|
406
407
|
end
|
407
408
|
|
408
409
|
def lchmod(mode)
|
409
|
-
File.lchmod(mode, self)
|
410
|
+
File.lchmod(mode, self.to_s)
|
410
411
|
end
|
411
412
|
|
412
413
|
def lchown(owner, group)
|
413
|
-
File.lchown(owner, group, self)
|
414
|
+
File.lchown(owner, group, self.to_s)
|
414
415
|
end
|
415
416
|
|
416
417
|
def link(to)
|
417
|
-
File.link(self, to)
|
418
|
+
File.link(self.to_s, to)
|
418
419
|
end
|
419
420
|
|
420
421
|
def open(mode = 'r', perm = nil, &blk)
|
421
|
-
File.open(self, mode, perm, &blk)
|
422
|
+
File.open(self.to_s, mode, perm, &blk)
|
422
423
|
end
|
423
424
|
|
424
425
|
def readlink
|
425
|
-
self.class.new(File.readlink(self))
|
426
|
+
self.class.new(File.readlink(self.to_s))
|
426
427
|
end
|
427
428
|
|
428
429
|
def rename(to)
|
429
|
-
File.rename(self, to)
|
430
|
+
File.rename(self.to_s, to)
|
430
431
|
replace(to)
|
431
432
|
end
|
432
433
|
|
433
434
|
def size
|
434
|
-
File.size(self)
|
435
|
+
File.size(self.to_s)
|
435
436
|
end
|
436
437
|
|
437
438
|
def size?
|
438
|
-
File.size?(self)
|
439
|
+
File.size?(self.to_s)
|
439
440
|
end
|
440
441
|
|
441
442
|
def split
|
442
|
-
File.split(self).map {|part| FSSM::Pathname.new(part) }
|
443
|
+
File.split(self.to_s).map {|part| FSSM::Pathname.new(part) }
|
443
444
|
end
|
444
445
|
|
445
446
|
def symlink(to)
|
446
|
-
File.symlink(self, to)
|
447
|
+
File.symlink(self.to_s, to)
|
447
448
|
end
|
448
449
|
|
449
|
-
def truncate
|
450
|
-
File.truncate(self)
|
450
|
+
def truncate(size)
|
451
|
+
File.truncate(self.to_s, size)
|
451
452
|
end
|
452
453
|
end
|
453
454
|
|
454
455
|
class Pathname
|
455
456
|
def mkpath
|
456
|
-
self.class.new(FileUtils.mkpath(self))
|
457
|
+
self.class.new(FileUtils.mkpath(self.to_s))
|
457
458
|
end
|
458
459
|
|
459
460
|
def rmtree
|
460
|
-
self.class.new(FileUtils.rmtree(self).first)
|
461
|
+
self.class.new(FileUtils.rmtree(self.to_s).first)
|
461
462
|
end
|
462
463
|
|
463
464
|
def touch
|
464
|
-
self.class.new(FileUtils.touch(self).first)
|
465
|
+
self.class.new(FileUtils.touch(self.to_s).first)
|
465
466
|
end
|
466
467
|
end
|
467
468
|
|
468
469
|
class Pathname
|
469
470
|
def each_line(sep = $/, &blk)
|
470
|
-
IO.foreach(self, sep, &blk)
|
471
|
+
IO.foreach(self.to_s, sep, &blk)
|
471
472
|
end
|
472
473
|
|
473
474
|
def read(len = nil, off = 0)
|
474
|
-
IO.read(self, len, off)
|
475
|
+
IO.read(self.to_s, len, off)
|
475
476
|
end
|
476
477
|
|
477
478
|
def readlines(sep = $/)
|
478
|
-
IO.readlines(self, sep)
|
479
|
+
IO.readlines(self.to_s, sep)
|
479
480
|
end
|
480
481
|
|
481
482
|
def sysopen(mode = 'r', perm = nil)
|
482
|
-
IO.sysopen(self, mode, perm)
|
483
|
+
IO.sysopen(self.to_s, mode, perm)
|
483
484
|
end
|
484
485
|
end
|
485
486
|
|
486
487
|
class Pathname
|
487
488
|
def find
|
488
|
-
Find.find(self) {|path| yield FSSM::Pathname.new(path) }
|
489
|
+
Find.find(self.to_s) {|path| yield FSSM::Pathname.new(path) }
|
489
490
|
end
|
490
491
|
end
|
491
492
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
$test_path = "#{Pathname.new('..').expand_path}"
|
6
|
+
$iterations = 900000
|
7
|
+
|
8
|
+
if ARGV.first == 'native'
|
9
|
+
puts "Using native Pathname"
|
10
|
+
|
11
|
+
class Pathname
|
12
|
+
# original segments implementation I was using with
|
13
|
+
# the plain ruby Pathname library.
|
14
|
+
def segments
|
15
|
+
prefix, names = split_names(@path)
|
16
|
+
names.unshift(prefix) unless prefix.empty?
|
17
|
+
names.shift if names[0] == '.'
|
18
|
+
names
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
$iterations.times do |num|
|
23
|
+
p = ::Pathname.new($test_path)
|
24
|
+
segments = p.segments
|
25
|
+
end
|
26
|
+
else
|
27
|
+
puts "Using FSSM::Pathname"
|
28
|
+
|
29
|
+
require 'fssm'
|
30
|
+
|
31
|
+
$iterations.times do |num|
|
32
|
+
p = FSSM::Pathname.new($test_path)
|
33
|
+
segments = p.segments
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,34 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fssm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 21
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
version: 0.2.
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
|
-
|
13
|
+
- Travis Tilley
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-12-10 00:00:00 -05:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
32
35
|
description: file system state monitor
|
33
36
|
email: ttilley@gmail.com
|
34
37
|
executables: []
|
@@ -36,41 +39,42 @@ executables: []
|
|
36
39
|
extensions: []
|
37
40
|
|
38
41
|
extra_rdoc_files:
|
39
|
-
|
40
|
-
|
42
|
+
- LICENSE
|
43
|
+
- README.markdown
|
41
44
|
files:
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
45
|
+
- .document
|
46
|
+
- LICENSE
|
47
|
+
- README.markdown
|
48
|
+
- Rakefile
|
49
|
+
- VERSION.yml
|
50
|
+
- example.rb
|
51
|
+
- fssm.gemspec
|
52
|
+
- lib/fssm.rb
|
53
|
+
- lib/fssm/backends/fsevents.rb
|
54
|
+
- lib/fssm/backends/inotify.rb
|
55
|
+
- lib/fssm/backends/polling.rb
|
56
|
+
- lib/fssm/backends/rubycocoa/fsevents.rb
|
57
|
+
- lib/fssm/monitor.rb
|
58
|
+
- lib/fssm/path.rb
|
59
|
+
- lib/fssm/pathname.rb
|
60
|
+
- lib/fssm/state/directory.rb
|
61
|
+
- lib/fssm/state/file.rb
|
62
|
+
- lib/fssm/support.rb
|
63
|
+
- lib/fssm/tree.rb
|
64
|
+
- profile/prof-cache.rb
|
65
|
+
- profile/prof-fssm-pathname.html
|
66
|
+
- profile/prof-pathname-rubinius.rb
|
67
|
+
- profile/prof-pathname.rb
|
68
|
+
- profile/prof-plain-pathname.html
|
69
|
+
- profile/prof.html
|
70
|
+
- spec/monitor_spec.rb
|
71
|
+
- spec/path_spec.rb
|
72
|
+
- spec/root/duck/quack.txt
|
73
|
+
- spec/root/file.css
|
74
|
+
- spec/root/file.rb
|
75
|
+
- spec/root/file.yml
|
76
|
+
- spec/root/moo/cow.txt
|
77
|
+
- spec/spec_helper.rb
|
74
78
|
has_rdoc: true
|
75
79
|
homepage: http://github.com/ttilley/fssm
|
76
80
|
licenses: []
|
@@ -79,30 +83,34 @@ post_install_message:
|
|
79
83
|
rdoc_options: []
|
80
84
|
|
81
85
|
require_paths:
|
82
|
-
|
86
|
+
- lib
|
83
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
84
89
|
requirements:
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
90
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
91
98
|
requirements:
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
97
105
|
requirements: []
|
98
106
|
|
99
107
|
rubyforge_project:
|
100
|
-
rubygems_version: 1.3.
|
108
|
+
rubygems_version: 1.3.7
|
101
109
|
signing_key:
|
102
110
|
specification_version: 3
|
103
111
|
summary: file system state monitor
|
104
112
|
test_files:
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
113
|
+
- spec/monitor_spec.rb
|
114
|
+
- spec/path_spec.rb
|
115
|
+
- spec/root/file.rb
|
116
|
+
- spec/spec_helper.rb
|