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.
@@ -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
- @state.extend JRuby::Synchronized
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
- @state.delete(file_name)
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
- @state[file_name] = {:time => Time.now, :status => :enqueued}
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 = Dir.glob(@glob_path) - @state.keys
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
- file_names[0,max_items].each do |file_name|
80
- enqueue(file_name)
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
 
@@ -1,3 +1,3 @@
1
1
  module FileWorker
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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[file_name] = {:time => Time.now, :status => :working}
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.1.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-26 00:00:00 Z
13
+ date: 2012-01-27 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake