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 +5 -5
- data/.gitignore +3 -1
- data/.travis.yml +13 -22
- data/Gemfile +13 -0
- data/LICENSE.md +10 -0
- data/README.md +1 -1
- data/lib/rb-inotify/native.rb +0 -3
- data/lib/rb-inotify/notifier.rb +33 -57
- data/lib/rb-inotify/version.rb +1 -1
- data/rb-inotify.gemspec +10 -12
- data/spec/{rb-inotify_spec.rb → inotify_spec.rb} +0 -0
- data/spec/notifier_spec.rb +170 -0
- data/spec/spec_helper.rb +17 -0
- metadata +34 -31
- data/spec/rb-inotify/errors_spec.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 508d32162686edac9f8899476c72f067947853be3bf54636c03e8e26af5f1db6
|
4
|
+
data.tar.gz: 40ba36f43b4ddbc6659fdc60a23494fc0c3d3aea69e8da38100860b315410c10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6a89d3e902bd71ed29ae54023f0a54be8fa525fa062a272a4291b35072fe75b1d597ce1d095eda32df4b6d842ea73321e770a9c67bb1492248c74c226cfc2ab
|
7
|
+
data.tar.gz: 70abecd11f1ceee101444d6cbd35c086ad0604a847d48b79c9fbda0658e3bc1ddad16c6047c1df50d84bdf7fa854251da66ede2106158b124eabe7d0b47bff7f
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,30 +1,21 @@
|
|
1
1
|
language: ruby
|
2
|
-
sudo: false
|
3
|
-
dist: trusty
|
4
2
|
cache: bundler
|
5
|
-
|
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
|
data/LICENSE.md
ADDED
@@ -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
|
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
|
data/lib/rb-inotify/native.rb
CHANGED
@@ -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
|
data/lib/rb-inotify/notifier.rb
CHANGED
@@ -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
|
-
|
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
|
-
@
|
52
|
+
@running = Mutex.new
|
53
|
+
@pipe = IO.pipe
|
54
|
+
|
55
55
|
@watchers = {}
|
56
|
-
|
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
|
-
|
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
|
-
@
|
225
|
-
|
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
|
-
|
254
|
-
|
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
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
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
|
data/lib/rb-inotify/version.rb
CHANGED
data/rb-inotify.gemspec
CHANGED
@@ -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 = '>=
|
23
|
-
|
24
|
-
spec.add_dependency
|
25
|
-
|
26
|
-
spec.add_development_dependency "rspec", "~> 3.
|
27
|
-
spec.add_development_dependency "bundler"
|
28
|
-
|
29
|
-
spec.add_development_dependency "
|
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
|
File without changes
|
@@ -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
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
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:
|
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: '
|
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: '
|
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.
|
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.
|
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: '
|
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: '
|
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:
|
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:
|
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: '
|
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/
|
106
|
-
- spec/
|
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: '
|
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.
|
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/
|
134
|
-
- spec/
|
136
|
+
- spec/inotify_spec.rb
|
137
|
+
- spec/notifier_spec.rb
|
135
138
|
- spec/spec_helper.rb
|