pwork 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 249a3ee4b5ad1dd558bcdae10f0309404ec9841693c1f22714904cc8c70f43fb
4
- data.tar.gz: 260de7aa9d02fad3f92faf0b00c70bb61689e8a03db64a9bac491c6566b900b3
3
+ metadata.gz: 5bddce5bdc79b8eb693f8a9ce38dfb2e0e81dbb4fe60b3f0b3a8d92cd72138b9
4
+ data.tar.gz: c3de3dcc22eb731e4686ae3ee402747653e8c4f6e6e1c4a758abae4e1f705464
5
5
  SHA512:
6
- metadata.gz: 9da793781dfdfa26129d40240783b5c0b7a923ac6ee42297c9632e02308ad5fa5fee4fecb0b5a8ffc887d5df9f76dafe72739cf6ca4eacdae2637af27930024d
7
- data.tar.gz: 0833eacb1192ca4fce94848b952aa151f0c92767e077c85573f15c4acc544133c974c6522e8900b82d85c94be170115e9e6dc5e062b8c888147b4016be10fa78
6
+ metadata.gz: be9d97bb3d642aac3f4cc8991f319b68056b21b61ffd81f761f1808af1696b35c9e91b13d8fe17d2d5d04739e25370dfd235ba776f23e79b629ba5f3143960fc
7
+ data.tar.gz: b51e7f88bd67d1c3827e084c4377a58be95579c89c6320ade0b0f0f7f545aadad8e2256b31524861c6612aa9d0d93b871e845f3abafb1b8ddc6890b94fe4801d
data/lib/pwork/async.rb CHANGED
@@ -4,14 +4,12 @@ require_relative 'async/manager'
4
4
 
5
5
  module PWork
6
6
  module Async
7
- def async(options = nil, &block)
7
+ def async(options = {}, &block)
8
8
  if block_given?
9
+ options[:caller] = self
9
10
  PWork::Async.add_task(options, &block)
10
11
  else
11
- raise PWork::Async::Exceptions::InvalidOptionsError.new(
12
- 'Unknown async option.'
13
- ) unless options == :wait
14
- PWork::Async.wait_for_tasks
12
+ PWork::Async.wait_for_tasks({ caller: self, command: options })
15
13
  end
16
14
  end
17
15
 
@@ -22,9 +20,9 @@ module PWork
22
20
  def self.add_task(options, &block)
23
21
  manager.start unless manager.running
24
22
 
25
- options = {} if options == nil
26
23
  task = PWork::Async::Task.new.tap do |e|
27
24
  e.block = block
25
+ e.caller = options[:caller]
28
26
  end
29
27
 
30
28
  unless options[:wait] == false
@@ -40,11 +38,20 @@ module PWork
40
38
  Thread.current[:pwork_async_tasks] ||= []
41
39
  end
42
40
 
43
- def self.wait_for_tasks
44
- until tasks.detect { |t| t.state == :pending || t.state == :active }.nil?
41
+ def self.wait_for_tasks(options)
42
+ case options[:command]
43
+ when :wait
44
+ task_list = tasks
45
+ when :wait_local
46
+ task_list = tasks.select { |t| t.caller == options[:caller] }
47
+ end
48
+
49
+ until task_list.detect { |t| t.state == :pending || t.state == :active }.nil?
45
50
  sleep(async_wait_sleep_iteration)
46
51
  end
52
+
47
53
  handle_errors
54
+
48
55
  ensure
49
56
  Thread.current[:pwork_async_tasks] = []
50
57
  end
@@ -54,7 +61,9 @@ module PWork
54
61
  tasks.select { |t| t.state == :error }.each do |t|
55
62
  error_messages << "Error: #{t.error.message}, #{t.error.backtrace}"
56
63
  end
57
- raise PWork::Async::Exceptions::TaskError.new("1 or more async errors occurred. #{error_messages.join(' | ')}") if error_messages.length > 0
64
+ raise PWork::Async::Exceptions::TaskError.new(
65
+ "1 or more async errors occurred. #{error_messages.join(' | ')}"
66
+ ) if error_messages.length > 0
58
67
  true
59
68
  end
60
69
 
@@ -7,6 +7,7 @@ module PWork
7
7
  attr_accessor :thread_local_storage
8
8
  attr_accessor :error
9
9
  attr_accessor :block
10
+ attr_accessor :caller
10
11
  def initialize
11
12
  self.id = SecureRandom.uuid
12
13
  self.state = :pending
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwork
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughanbrittonsage