file_worker 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/file_worker/directory_scanner.rb +20 -11
- data/lib/file_worker/version.rb +1 -1
- data/test/directory_scanner_test.rb +1 -1
- metadata +2 -2
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'girl_friday'
|
2
2
|
require 'fileutils'
|
3
|
-
require 'jruby/synchronized'
|
4
3
|
require 'pathname'
|
5
4
|
|
6
5
|
module FileWorker
|
@@ -20,8 +19,9 @@ module FileWorker
|
|
20
19
|
|
21
20
|
@worker_class = DefaultWorker
|
22
21
|
|
23
|
-
@state =
|
24
|
-
@
|
22
|
+
@state = []
|
23
|
+
@state_lock = Mutex.new
|
24
|
+
|
25
25
|
@queue_name = "file_worker"
|
26
26
|
|
27
27
|
@error_handlers = []
|
@@ -29,19 +29,19 @@ module FileWorker
|
|
29
29
|
|
30
30
|
# This method is called by the worker threads, so remember to keep it thread safe
|
31
31
|
def process(file_name)
|
32
|
-
@state[file_name] = {:time => Time.now, :status => :working}
|
33
|
-
|
34
32
|
begin
|
35
33
|
@worker_class.new(file_name, @options).process
|
36
34
|
|
37
35
|
done_file_name = file_name.sub(@in_path, @done_path)
|
38
36
|
FileUtils.mkdir_p(File.dirname(done_file_name))
|
39
|
-
FileUtils.mv(file_name, done_file_name)
|
37
|
+
FileUtils.mv(file_name, done_file_name, :secure => true)
|
40
38
|
rescue Exception => e
|
41
39
|
handle_error(file_name, e)
|
42
40
|
end
|
43
41
|
|
44
|
-
@
|
42
|
+
@state_lock.synchronize do
|
43
|
+
@state.delete(file_name)
|
44
|
+
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def queue
|
@@ -55,7 +55,9 @@ module FileWorker
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def enqueue(file_name)
|
58
|
-
@
|
58
|
+
@state_lock.synchronize do
|
59
|
+
@state << file_name
|
60
|
+
end
|
59
61
|
|
60
62
|
queue.push(file_name)
|
61
63
|
end
|
@@ -71,13 +73,20 @@ module FileWorker
|
|
71
73
|
end
|
72
74
|
|
73
75
|
def scan
|
74
|
-
file_names =
|
76
|
+
file_names = nil
|
77
|
+
|
78
|
+
@state_lock.synchronize do
|
79
|
+
file_names = Dir.glob(@glob_path) - @state
|
80
|
+
end
|
81
|
+
|
75
82
|
file_names.reject! { |file_name| File.directory?(file_name) }
|
76
83
|
|
77
84
|
max_items = @max_queue_size - queue_size
|
78
85
|
|
79
|
-
|
80
|
-
|
86
|
+
if max_items > 0
|
87
|
+
file_names[0,max_items].each do |file_name|
|
88
|
+
enqueue(file_name)
|
89
|
+
end
|
81
90
|
end
|
82
91
|
end
|
83
92
|
|
data/lib/file_worker/version.rb
CHANGED
@@ -92,7 +92,7 @@ describe "the directory scanner" do
|
|
92
92
|
describe "when a file is already enqueued" do
|
93
93
|
before do
|
94
94
|
file_name = Dir.glob(@file_worker.in_path + '*').first
|
95
|
-
@file_worker.state
|
95
|
+
@file_worker.state << file_name
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should not enqueue the file again" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: file_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mick Staugaard
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-01-
|
13
|
+
date: 2012-01-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|