eventmachine-tail 0.5.20110118081348 → 0.6.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/lib/em/filetail.rb +8 -3
- data/test/alltests.rb +3 -0
- data/test/test_filetail.rb +20 -0
- metadata +10 -6
data/lib/em/filetail.rb
CHANGED
@@ -38,6 +38,8 @@ class EventMachine::FileTail
|
|
38
38
|
CHUNKSIZE = 65536
|
39
39
|
|
40
40
|
#MAXSLEEP = 2
|
41
|
+
|
42
|
+
FORCE_ENCODING = !! (defined? Encoding)
|
41
43
|
|
42
44
|
# The path of the file being tailed
|
43
45
|
attr_reader :path
|
@@ -151,7 +153,7 @@ class EventMachine::FileTail
|
|
151
153
|
# EOF handler is to do nothing.
|
152
154
|
public
|
153
155
|
def eof
|
154
|
-
|
156
|
+
@logger.debug { 'EOF' }
|
155
157
|
# do nothing, subclassers should implement this.
|
156
158
|
end # def eof
|
157
159
|
|
@@ -159,7 +161,7 @@ class EventMachine::FileTail
|
|
159
161
|
# modified or otherwise needs to be acted on.
|
160
162
|
private
|
161
163
|
def notify(status)
|
162
|
-
@logger.
|
164
|
+
@logger.debug { "notify: #{status} on #{path}" }
|
163
165
|
if status == :modified
|
164
166
|
schedule_next_read
|
165
167
|
elsif status == :moved
|
@@ -179,6 +181,7 @@ class EventMachine::FileTail
|
|
179
181
|
def open
|
180
182
|
return if @closed
|
181
183
|
@file.close if @file
|
184
|
+
return unless File.exists?(@path)
|
182
185
|
begin
|
183
186
|
@logger.debug "Opening file #{@path}"
|
184
187
|
@file = File.open(@path, "r")
|
@@ -188,7 +191,7 @@ class EventMachine::FileTail
|
|
188
191
|
end
|
189
192
|
|
190
193
|
@naptime = 0
|
191
|
-
|
194
|
+
@logger.debug { 'EOF' }
|
192
195
|
@position = 0
|
193
196
|
schedule_next_read
|
194
197
|
end # def open
|
@@ -207,6 +210,7 @@ class EventMachine::FileTail
|
|
207
210
|
def watch
|
208
211
|
@watch.stop_watching if @watch
|
209
212
|
@symlink_timer.cancel if @symlink_timer
|
213
|
+
return unless File.exists?(@path)
|
210
214
|
|
211
215
|
@logger.debug "Starting watch on #{@path}"
|
212
216
|
callback = proc { |what| notify(what) }
|
@@ -254,6 +258,7 @@ class EventMachine::FileTail
|
|
254
258
|
@logger.debug "#{self}: Reading..."
|
255
259
|
begin
|
256
260
|
data = @file.sysread(CHUNKSIZE)
|
261
|
+
data.force_encoding(@file.external_encoding) if FORCE_ENCODING
|
257
262
|
|
258
263
|
# Won't get here if sysread throws EOF
|
259
264
|
@position += data.length
|
data/test/alltests.rb
CHANGED
data/test/test_filetail.rb
CHANGED
@@ -208,5 +208,25 @@ class TestFileTail < Test::Unit::TestCase
|
|
208
208
|
File.delete(f.path)
|
209
209
|
end
|
210
210
|
end # def test_filetail_tracks_renames
|
211
|
+
|
212
|
+
def test_encoding
|
213
|
+
return if RUBY_VERSION < '1.9.0'
|
214
|
+
tmp = Tempfile.new("testfiletail")
|
215
|
+
data = DATA.clone
|
216
|
+
EM.run do
|
217
|
+
abort_after_timeout(1)
|
218
|
+
|
219
|
+
EM::file_tail(tmp.path) do |filetail, line|
|
220
|
+
assert_equal(Encoding.default_external, line.encoding,
|
221
|
+
"Expected the read data to have the encoding specified in Encoding.default_external (#{Encoding.default_external}, but was #{line.encoding})")
|
222
|
+
finish
|
223
|
+
end
|
224
|
+
|
225
|
+
EM.next_tick do
|
226
|
+
tmp.puts(data.shift)
|
227
|
+
tmp.flush
|
228
|
+
end
|
229
|
+
end # EM.run
|
230
|
+
end # def test_encoding
|
211
231
|
end # class TestFileTail
|
212
232
|
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine-tail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 5
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 6
|
9
|
+
- 1
|
10
|
+
version: 0.6.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Jordan Sissel
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-
|
18
|
+
date: 2011-02-22 00:00:00 -08:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,6 +26,7 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
version: "0"
|
@@ -69,6 +71,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
71
|
requirements:
|
70
72
|
- - ">="
|
71
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
72
75
|
segments:
|
73
76
|
- 0
|
74
77
|
version: "0"
|
@@ -77,13 +80,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
80
|
requirements:
|
78
81
|
- - ">="
|
79
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
80
84
|
segments:
|
81
85
|
- 0
|
82
86
|
version: "0"
|
83
87
|
requirements: []
|
84
88
|
|
85
89
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.
|
90
|
+
rubygems_version: 1.5.0
|
87
91
|
signing_key:
|
88
92
|
specification_version: 3
|
89
93
|
summary: eventmachine tail - a file tail implementation with glob support
|