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.
@@ -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