notified_tail 0.2.1 → 0.2.2

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: 0de79d0364ed841a57e4ceda6da11fbd9ae8ab27
4
- data.tar.gz: 15fa18f4bd0b73d769f404b5f540da291dfdc6e4
3
+ metadata.gz: 9aa8eddca759a4256d8851d8030427c2e0e6acd7
4
+ data.tar.gz: 2f8488e69e14240075c0e1addf5bf81a68d0b37a
5
5
  SHA512:
6
- metadata.gz: bfda4eecd072f4e105977d57e8d6243b695aa3551efe895a220929a58dd7bc06041ab6036a0daea8114c39fc5824939a13117a34f02b4733ca87c8ac42bd208b
7
- data.tar.gz: cdc766f181af75455dbd6e80313de323fd7c1e300d190c7a5f6604ad3a8d942b9e0679dde230dfc77e3923e6f9122230f10949162ae8b5cd41064488cf3008ab
6
+ metadata.gz: 8a00b5626010f98902847ddf6ee1e14148d94d3d2c07b7636aa49f1a5a3f52ef7ab139d1fb6b576397f1c4b0df2f3148118d4d368574bafd8eb6f7a54fc5de1e
7
+ data.tar.gz: 1d159c3305817fddf09c81dc6175bf65497647a94d9ba0923954223ee00430c5165a66c8a0785b7ec4f0a00c54f8016d115c1533208feac28273f023ffe8a0c2
@@ -16,7 +16,7 @@ class NotifiedTail
16
16
  new.tail(file_path, opts, &on_line)
17
17
  end
18
18
 
19
- def tail(file_path, opts, &on_line)
19
+ def tail(file_path, opts={}, &on_line)
20
20
  @file_path = file_path
21
21
  @stopped = false
22
22
  seek_end = opts.fetch(:seek_end, true)
@@ -64,12 +64,12 @@ class NotifiedTail
64
64
  require 'rb-kqueue'
65
65
  @queue = KQueue::Queue.new
66
66
  @queue.watch_file(file_path, :extend) { block.call }
67
- @queue.run
67
+ @queue.run unless @stopped
68
68
  when /linux/
69
69
  require 'rb-inotify'
70
70
  @queue = INotify::Notifier.new
71
71
  @queue.watch(file_path, :modify) { block.call }
72
- @queue.run
72
+ @queue.run unless @stopped
73
73
  else
74
74
  poll(file_path, &block)
75
75
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'notified_tail'
7
- spec.version = '0.2.1'
7
+ spec.version = '0.2.2'
8
8
  spec.authors = ['Peter Winton']
9
9
  spec.email = ['pwinton@indigobio.com']
10
10
  spec.summary = %q{Low latency file tailing in ruby}
@@ -1,16 +1,17 @@
1
1
  require 'rspec'
2
2
  require 'securerandom'
3
3
  require 'notified_tail'
4
+ require 'fileutils'
4
5
 
5
6
  describe NotifiedTail do
6
7
  describe '#tail' do
7
8
  let!(:seek_end) { false }
8
9
  let!(:force_poll) { false }
10
+ let!(:fn) { SecureRandom.uuid }
11
+ after(:each) { File.delete(fn) }
9
12
 
10
13
  shared_examples 'tail -f' do
11
14
  let!(:lines) { [] }
12
- let!(:fn) { SecureRandom.uuid }
13
- after(:each) { File.delete(fn) }
14
15
 
15
16
  it 'tails a growing file, line by line' do
16
17
 
@@ -35,11 +36,6 @@ describe NotifiedTail do
35
36
  append(fn, "line with words\n")
36
37
  watcher.join
37
38
  end
38
-
39
- def append(fn, text)
40
- File.open(fn, 'a') { |f| f.print(text) }
41
- sleep(0.1)
42
- end
43
39
  end
44
40
 
45
41
  shared_examples 'tail -f -n 9999PB' do
@@ -75,5 +71,52 @@ describe NotifiedTail do
75
71
  it_behaves_like 'tail -f -n 9999PB'
76
72
  end
77
73
 
74
+ it 'can be stopped before new data is tailed' do
75
+ File.write(fn, "hello\n")
76
+
77
+ thread = Thread.start do
78
+ notifier = NotifiedTail.new
79
+ notifier.tail(fn, seek_end: false) do |line|
80
+ print "saw #{line.inspect}\n"
81
+ if line == 'hello'
82
+ Thread.start do
83
+ expect(notifier.instance_variable_get(:@queue)).to be_nil
84
+ notifier.stop
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ thread.join
91
+ end
92
+
93
+ it 'can be stopped after new data is tailed (must write to the file)' do
94
+ thread = Thread.start do
95
+ notifier = NotifiedTail.new
96
+ notifier.tail(fn, seek_end: false) do |line|
97
+ print "saw #{line.inspect}\n"
98
+ if line == 'there'
99
+ Thread.start do
100
+ expect(notifier.instance_variable_get(:@queue)).to_not be_nil
101
+ notifier.stop
102
+ File.open(notifier.file_path, 'a'){|f| f.print("\n")}
103
+ end
104
+ end
105
+ end
106
+ end
107
+ sleep(0.25) # let the notifier start up
108
+
109
+ append(fn, "hello\n")
110
+ sleep(0.5)
111
+ append(fn, "there\n")
112
+
113
+ thread.join
114
+ end
115
+
116
+ def append(fn, text)
117
+ File.open(fn, 'a') { |f| f.print(text) }
118
+ sleep(0.1)
119
+ end
120
+
78
121
  end
79
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notified_tail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Winton