rb-inotify 0.9.10 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 69000e8c37c13a07c1435aa2cc5069c40e1bf162
4
- data.tar.gz: fdf9152bb595159f06f669b37244a1a6f7a77935
2
+ SHA256:
3
+ metadata.gz: 508d32162686edac9f8899476c72f067947853be3bf54636c03e8e26af5f1db6
4
+ data.tar.gz: 40ba36f43b4ddbc6659fdc60a23494fc0c3d3aea69e8da38100860b315410c10
5
5
  SHA512:
6
- metadata.gz: aaffecd5e2d7995d5a65939fd32adc8bfd06a114e560f490fef626cda14de3ffcd27d0909a49321c1a65b1aed4ad6dc3a7c099b7fec9243c64c8af8b4b603379
7
- data.tar.gz: c3a30a09b2e67ee8c1e99a24cbc11fb75fcf4e2a98681519837316e0df474433d8d895412d300344c80145a7b5cfe7e2f664a52a09eb4abbe102704d4828da26
6
+ metadata.gz: e6a89d3e902bd71ed29ae54023f0a54be8fa525fa062a272a4291b35072fe75b1d597ce1d095eda32df4b6d842ea73321e770a9c67bb1492248c74c226cfc2ab
7
+ data.tar.gz: 70abecd11f1ceee101444d6cbd35c086ad0604a847d48b79c9fbda0658e3bc1ddad16c6047c1df50d84bdf7fa854251da66ede2106158b124eabe7d0b47bff7f
data/.gitignore CHANGED
@@ -16,4 +16,6 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .tags*
19
- .rspec_status
19
+ .rspec_status
20
+ /guard/
21
+ /listen/
@@ -1,30 +1,21 @@
1
1
  language: ruby
2
- sudo: false
3
- dist: trusty
4
2
  cache: bundler
5
- rvm:
6
- - 1.8
7
- - 1.9
8
- - 2.0
9
- - 2.1
10
- - 2.2
11
- - 2.3
12
- - 2.4
13
- - jruby-head
14
- - ruby-head
15
- - jruby-9.1.8.0
16
- - jruby-head
17
- - rbx-3
3
+
18
4
  matrix:
5
+ include:
6
+ - rvm: 2.3
7
+ - rvm: 2.4
8
+ - rvm: 2.5
9
+ - rvm: 2.6
10
+ - rvm: jruby
11
+ - rvm: truffleruby
12
+ - rvm: jruby-head
13
+ - rvm: ruby-head
14
+ - rvm: rbx-3
19
15
  allow_failures:
16
+ - rvm: truffleruby
17
+ - rvm: jruby
20
18
  - rvm: ruby-head
21
19
  - rvm: jruby-head
22
20
  - rvm: rbx-3
23
21
  fast_finish: true
24
- script:
25
- # Unit test
26
- - bundle exec rake
27
- # Install test
28
- - gem build rb-inotify.gemspec
29
- - gem install rb-inotify-*.gem
30
- - sh -c "gem list | grep rb-inotify"
data/Gemfile CHANGED
@@ -1,3 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ # Specify your gem's dependencies in utopia.gemspec
3
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry'
8
+ gem 'pry-coolline'
9
+
10
+ gem 'tty-prompt'
11
+ end
12
+
13
+ group :test do
14
+ gem 'simplecov'
15
+ gem 'coveralls', require: false
16
+ end
@@ -0,0 +1,10 @@
1
+ # The MIT License (MIT)
2
+
3
+ Copyright, 2009, by [Natalie Weizenbaum](https://github.com/nex3).
4
+ Copyright, 2017, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
7
+
8
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -81,7 +81,7 @@ so we can't use the notifier's file descriptor as a stand-in.
81
81
 
82
82
  Released under the MIT license.
83
83
 
84
- Copyright, 2009, by Nathan Weizenbaum.
84
+ Copyright, 2009, by [Natalie Weizenbaum](https://github.com/nex3).
85
85
  Copyright, 2017, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
86
86
 
87
87
  Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -29,8 +29,5 @@ module INotify
29
29
  attach_function :inotify_add_watch, [:int, :string, :uint32], :int
30
30
  attach_function :inotify_rm_watch, [:int, :uint32], :int
31
31
  attach_function :fpathconf, [:int, :int], :long
32
-
33
- attach_function :read, [:int, :pointer, :size_t], :ssize_t
34
- attach_function :close, [:int], :int
35
32
  end
36
33
  end
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  module INotify
2
4
  # Notifier wraps a single instance of inotify.
3
5
  # It's possible to have more than one instance,
@@ -38,12 +40,8 @@ module INotify
38
40
  # (except under JRuby -- see \{#to\_io}).
39
41
  #
40
42
  # @return [Fixnum]
41
- attr_reader :fd
42
-
43
- # @return [Boolean] Whether or not this Ruby implementation supports
44
- # wrapping the native file descriptor in a Ruby IO wrapper.
45
- def self.supports_ruby_io?
46
- RUBY_PLATFORM !~ /java/
43
+ def fd
44
+ @handle.fileno
47
45
  end
48
46
 
49
47
  # Creates a new {Notifier}.
@@ -51,9 +49,16 @@ module INotify
51
49
  # @return [Notifier]
52
50
  # @raise [SystemCallError] if inotify failed to initialize for some reason
53
51
  def initialize
54
- @fd = Native.inotify_init
52
+ @running = Mutex.new
53
+ @pipe = IO.pipe
54
+
55
55
  @watchers = {}
56
- return unless @fd < 0
56
+
57
+ fd = Native.inotify_init
58
+ unless fd < 0
59
+ @handle = IO.new(fd)
60
+ return
61
+ end
57
62
 
58
63
  raise SystemCallError.new(
59
64
  "Failed to initialize inotify" +
@@ -82,10 +87,7 @@ module INotify
82
87
  # @return [IO] An IO object wrapping the file descriptor
83
88
  # @raise [NotImplementedError] if this is being called in JRuby
84
89
  def to_io
85
- unless self.class.supports_ruby_io?
86
- raise NotImplementedError.new("INotify::Notifier#to_io is not supported under JRuby")
87
- end
88
- @io ||= IO.new(@fd)
90
+ @handle
89
91
  end
90
92
 
91
93
  # Watches a file or directory for changes,
@@ -221,8 +223,11 @@ module INotify
221
223
  #
222
224
  # @see #process
223
225
  def run
224
- @stop = false
225
- process until @stop
226
+ @running.synchronize do
227
+ @stop = false
228
+
229
+ process until @stop
230
+ end
226
231
  end
227
232
 
228
233
  # Stop watching for filesystem events.
@@ -230,6 +235,11 @@ module INotify
230
235
  # exit out as soon as we finish handling the events.
231
236
  def stop
232
237
  @stop = true
238
+ @pipe.last.write "."
239
+
240
+ @running.synchronize do
241
+ # no-op: we just needed to wait until the lock was available
242
+ end
233
243
  end
234
244
 
235
245
  # Blocks until there are one or more filesystem events
@@ -250,17 +260,8 @@ module INotify
250
260
  # @raise [SystemCallError] if closing the underlying file descriptor fails.
251
261
  def close
252
262
  stop
253
- if Native.close(@fd) == 0
254
- @watchers.clear
255
- return
256
- end
257
-
258
- raise SystemCallError.new("Failed to properly close inotify socket" +
259
- case FFI.errno
260
- when Errno::EBADF::Errno; ": invalid or closed file descriptior"
261
- when Errno::EIO::Errno; ": an I/O error occured"
262
- end,
263
- FFI.errno)
263
+ @handle.close
264
+ @watchers.clear
264
265
  end
265
266
 
266
267
  # Blocks until there are one or more filesystem events that this notifier
@@ -302,38 +303,13 @@ module INotify
302
303
 
303
304
  # Same as IO#readpartial, or as close as we need.
304
305
  def readpartial(size)
305
- # Use Ruby's readpartial if possible, to avoid blocking other threads.
306
- begin
307
- return to_io.readpartial(size) if self.class.supports_ruby_io?
308
- rescue Errno::EBADF, IOError
309
- # If the IO has already been closed, reading from it will cause
310
- # Errno::EBADF. In JRuby it can raise IOError with invalid or
311
- # closed file descriptor.
312
- return nil
313
- rescue IOError => ex
314
- return nil if ex.message =~ /stream closed/
315
- raise
316
- end
317
-
318
- tries = 0
319
- begin
320
- tries += 1
321
- buffer = FFI::MemoryPointer.new(:char, size)
322
- size_read = Native.read(fd, buffer, size)
323
- return buffer.read_string(size_read) if size_read >= 0
324
- end while FFI.errno == Errno::EINTR::Errno && tries <= 5
325
-
326
- raise SystemCallError.new("Error reading inotify events" +
327
- case FFI.errno
328
- when Errno::EAGAIN::Errno; ": no data available for non-blocking I/O"
329
- when Errno::EBADF::Errno; ": invalid or closed file descriptor"
330
- when Errno::EFAULT::Errno; ": invalid buffer"
331
- when Errno::EINVAL::Errno; ": invalid file descriptor"
332
- when Errno::EIO::Errno; ": I/O error"
333
- when Errno::EISDIR::Errno; ": file descriptor is a directory"
334
- else; ""
335
- end,
336
- FFI.errno)
306
+ readable, = select([@handle, @pipe.first])
307
+ return nil if readable.include?(@pipe.first)
308
+ @handle.readpartial(size)
309
+ rescue Errno::EBADF
310
+ # If the IO has already been closed, reading from it will cause
311
+ # Errno::EBADF.
312
+ nil
337
313
  end
338
314
  end
339
315
  end
@@ -20,5 +20,5 @@
20
20
  # THE SOFTWARE.
21
21
 
22
22
  module INotify
23
- VERSION = '0.9.10'
23
+ VERSION = '0.10.0'
24
24
  end
@@ -1,7 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
-
3
- $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
4
- require 'rb-inotify/version'
2
+ require_relative 'lib/rb-inotify/version'
5
3
 
6
4
  Gem::Specification.new do |spec|
7
5
  spec.name = 'rb-inotify'
@@ -18,13 +16,13 @@ Gem::Specification.new do |spec|
18
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
18
  spec.require_paths = ["lib"]
21
-
22
- spec.required_ruby_version = '>= 0'
23
-
24
- spec.add_dependency 'ffi', '>= 0.5.0', '< 2'
25
-
26
- spec.add_development_dependency "rspec", "~> 3.4"
27
- spec.add_development_dependency "bundler", "~> 1.3"
28
- # rake 11.x requires Ruby >= 1.9.3
29
- spec.add_development_dependency "rake", ">= 10.5.0", "< 13"
19
+
20
+ spec.required_ruby_version = '>= 2.2'
21
+
22
+ spec.add_dependency "ffi", "~> 1.0"
23
+
24
+ spec.add_development_dependency "rspec", "~> 3.6"
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "concurrent-ruby"
30
28
  end
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+ require 'tmpdir'
3
+ require 'concurrent'
4
+
5
+ describe INotify::Notifier do
6
+ describe "instance" do
7
+ around do |block|
8
+ Dir.mktmpdir do |dir|
9
+ @root = Pathname.new(dir)
10
+ @notifier = INotify::Notifier.new
11
+
12
+ begin
13
+ block.call
14
+ ensure
15
+ @notifier.close
16
+ end
17
+ end
18
+ end
19
+
20
+ let(:dir) do
21
+ @root.join("foo").tap(&:mkdir)
22
+ end
23
+
24
+ let(:another_dir) do
25
+ @root.join("bar").tap(&:mkdir)
26
+ end
27
+
28
+ it "stops" do
29
+ @notifier.stop
30
+ end
31
+
32
+ describe :process do
33
+ it "gets events" do
34
+ events = recording(dir, :create)
35
+ dir.join("test.txt").write("hello world")
36
+
37
+ @notifier.process
38
+
39
+ expect(events.size).to eq(1)
40
+ expect(events.first.name).to eq("test.txt")
41
+ expect(events.first.absolute_name).to eq(dir.join("test.txt").to_s)
42
+ end
43
+
44
+ it "gets simultaneous events" do
45
+ events = recording(dir, :create)
46
+
47
+ dir.join("one.txt").write("hello world")
48
+ dir.join("two.txt").write("hello world")
49
+
50
+ @notifier.process
51
+
52
+ expect(events.map(&:name)).to match_array(%w(one.txt two.txt))
53
+ end
54
+
55
+ it "separates events between watches" do
56
+ bar_events = nil
57
+
58
+ foo_events = recording(dir, :create)
59
+ bar_events = recording(another_dir, :create)
60
+
61
+ dir.join("test.txt").write("hello world")
62
+ another_dir.join("test_two.txt").write("hello world")
63
+
64
+ @notifier.process
65
+
66
+ expect(foo_events.size).to eq(1)
67
+ expect(foo_events.first.name).to eq("test.txt")
68
+ expect(foo_events.first.absolute_name).to eq(dir.join("test.txt").to_s)
69
+
70
+ expect(bar_events.size).to eq(1)
71
+ expect(bar_events.first.name).to eq("test_two.txt")
72
+ expect(bar_events.first.absolute_name).to eq(another_dir.join("test_two.txt").to_s)
73
+ end
74
+ end
75
+
76
+ describe :run do
77
+ it "processes repeatedly until stopped" do
78
+ barriers = Array.new(3) { Concurrent::Event.new }
79
+ barrier_queue = barriers.dup
80
+ events = recording(dir, :create) { barrier_queue.shift.set }
81
+
82
+ run_thread = Thread.new { @notifier.run }
83
+
84
+ dir.join("one.txt").write("hello world")
85
+ barriers.shift.wait(1) or raise "timeout"
86
+
87
+ expect(events.map(&:name)).to match_array(%w(one.txt))
88
+
89
+ dir.join("two.txt").write("hello world")
90
+ barriers.shift.wait(1) or raise "timeout"
91
+
92
+ expect(events.map(&:name)).to match_array(%w(one.txt two.txt))
93
+
94
+ @notifier.stop
95
+
96
+ dir.join("three.txt").write("hello world")
97
+ barriers.shift.wait(1)
98
+
99
+ dir.join("four.txt").write("hello world")
100
+ run_thread.join
101
+
102
+ expect(events.map(&:name)).to match_array(%w(one.txt two.txt))
103
+ end
104
+ end
105
+
106
+ describe :fd do
107
+ it "returns an integer" do
108
+ expect(@notifier.fd).to be_an(Integer)
109
+ end
110
+ end
111
+
112
+ describe :to_io do
113
+ it "returns a ruby IO" do
114
+ expect(@notifier.to_io).to be_an(::IO)
115
+ end
116
+
117
+ it "matches the fd" do
118
+ expect(@notifier.to_io.fileno).to eq(@notifier.fd)
119
+ end
120
+
121
+ it "caches its result" do
122
+ expect(@notifier.to_io).to be(@notifier.to_io)
123
+ end
124
+
125
+ it "is selectable" do
126
+ events = recording(dir, :create)
127
+ expect(select([@notifier.to_io], nil, nil, 0.2)).to be_nil
128
+
129
+ dir.join("test.txt").write("hello world")
130
+ expect(select([@notifier.to_io], nil, nil, 0.2)).to eq([[@notifier.to_io], [], []])
131
+
132
+ @notifier.process
133
+ expect(select([@notifier.to_io], nil, nil, 0.2)).to be_nil
134
+ end
135
+ end
136
+
137
+ private
138
+
139
+ def recording(dir, *flags, callback: nil)
140
+ events = []
141
+ @notifier.watch(dir.to_s, *flags) do |event|
142
+ events << event
143
+ yield if block_given?
144
+ end
145
+
146
+ events
147
+ end
148
+ end
149
+
150
+ describe "mixed instances" do
151
+ it "doesn't tangle fds" do
152
+ notifiers = Array.new(30) { INotify::Notifier.new }
153
+ notifiers.each(&:to_io)
154
+
155
+ one = Array.new(10) { IO.pipe.last }
156
+ notifiers.each(&:close)
157
+
158
+ two = Array.new(10) { IO.pipe.last }
159
+
160
+ notifiers = nil
161
+ GC.start
162
+
163
+ _, writable, _ = select(nil, one, nil, 1)
164
+ expect(writable).to match_array(one)
165
+
166
+ _, writable, _ = select(nil, two, nil, 1)
167
+ expect(writable).to match_array(two)
168
+ end
169
+ end
170
+ end
@@ -1,4 +1,21 @@
1
1
 
2
+ if ENV['COVERAGE'] || ENV['TRAVIS']
3
+ begin
4
+ require 'simplecov'
5
+
6
+ SimpleCov.start do
7
+ add_filter "/spec/"
8
+ end
9
+
10
+ if ENV['TRAVIS']
11
+ require 'coveralls'
12
+ Coveralls.wear!
13
+ end
14
+ rescue LoadError
15
+ warn "Could not load simplecov: #{$!}"
16
+ end
17
+ end
18
+
2
19
  require "bundler/setup"
3
20
  require "rb-inotify"
4
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rb-inotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natalie Weizenbaum
@@ -9,76 +9,78 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-17 00:00:00.000000000 Z
12
+ date: 2018-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: 0.5.0
21
- - - "<"
18
+ - - "~>"
22
19
  - !ruby/object:Gem::Version
23
- version: '2'
20
+ version: '1.0'
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: 0.5.0
31
- - - "<"
25
+ - - "~>"
32
26
  - !ruby/object:Gem::Version
33
- version: '2'
27
+ version: '1.0'
34
28
  - !ruby/object:Gem::Dependency
35
29
  name: rspec
36
30
  requirement: !ruby/object:Gem::Requirement
37
31
  requirements:
38
32
  - - "~>"
39
33
  - !ruby/object:Gem::Version
40
- version: '3.4'
34
+ version: '3.6'
41
35
  type: :development
42
36
  prerelease: false
43
37
  version_requirements: !ruby/object:Gem::Requirement
44
38
  requirements:
45
39
  - - "~>"
46
40
  - !ruby/object:Gem::Version
47
- version: '3.4'
41
+ version: '3.6'
48
42
  - !ruby/object:Gem::Dependency
49
43
  name: bundler
50
44
  requirement: !ruby/object:Gem::Requirement
51
45
  requirements:
52
- - - "~>"
46
+ - - ">="
53
47
  - !ruby/object:Gem::Version
54
- version: '1.3'
48
+ version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
52
  requirements:
59
- - - "~>"
53
+ - - ">="
60
54
  - !ruby/object:Gem::Version
61
- version: '1.3'
55
+ version: '0'
62
56
  - !ruby/object:Gem::Dependency
63
57
  name: rake
64
58
  requirement: !ruby/object:Gem::Requirement
65
59
  requirements:
66
60
  - - ">="
67
61
  - !ruby/object:Gem::Version
68
- version: 10.5.0
69
- - - "<"
70
- - !ruby/object:Gem::Version
71
- version: '13'
62
+ version: '0'
72
63
  type: :development
73
64
  prerelease: false
74
65
  version_requirements: !ruby/object:Gem::Requirement
75
66
  requirements:
76
67
  - - ">="
77
68
  - !ruby/object:Gem::Version
78
- version: 10.5.0
79
- - - "<"
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: concurrent-ruby
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
80
75
  - !ruby/object:Gem::Version
81
- version: '13'
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
82
84
  description:
83
85
  email:
84
86
  - nex342@gmail.com
@@ -91,6 +93,7 @@ files:
91
93
  - ".travis.yml"
92
94
  - ".yardopts"
93
95
  - Gemfile
96
+ - LICENSE.md
94
97
  - README.md
95
98
  - Rakefile
96
99
  - lib/rb-inotify.rb
@@ -102,8 +105,8 @@ files:
102
105
  - lib/rb-inotify/version.rb
103
106
  - lib/rb-inotify/watcher.rb
104
107
  - rb-inotify.gemspec
105
- - spec/rb-inotify/errors_spec.rb
106
- - spec/rb-inotify_spec.rb
108
+ - spec/inotify_spec.rb
109
+ - spec/notifier_spec.rb
107
110
  - spec/spec_helper.rb
108
111
  homepage: https://github.com/guard/rb-inotify
109
112
  licenses:
@@ -117,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
120
  requirements:
118
121
  - - ">="
119
122
  - !ruby/object:Gem::Version
120
- version: '0'
123
+ version: '2.2'
121
124
  required_rubygems_version: !ruby/object:Gem::Requirement
122
125
  requirements:
123
126
  - - ">="
@@ -125,11 +128,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
128
  version: '0'
126
129
  requirements: []
127
130
  rubyforge_project:
128
- rubygems_version: 2.6.10
131
+ rubygems_version: 2.7.8
129
132
  signing_key:
130
133
  specification_version: 4
131
134
  summary: A Ruby wrapper for Linux inotify, using FFI
132
135
  test_files:
133
- - spec/rb-inotify/errors_spec.rb
134
- - spec/rb-inotify_spec.rb
136
+ - spec/inotify_spec.rb
137
+ - spec/notifier_spec.rb
135
138
  - spec/spec_helper.rb
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe INotify do
4
- describe "QueueOverflowError" do
5
- it "exists" do
6
- expect(INotify::QueueOverflowError).to be_truthy
7
- end
8
- end
9
- end