file_worker 0.1.0 → 0.2.0
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/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
|