concurrent_rails 0.3.0 → 0.3.1

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: fd75cf15aa7d7d0354bea478936bde3967d20a8e38daabff9e3fddf5c11bd5b6
4
- data.tar.gz: 8c5faee065ed6de8bb7fedf2b29c3bc371792f579c7a00e6195d4b4e18ee0a29
3
+ metadata.gz: 9d92e4343775ab47bf053ce94e272124a6b703e4bfb087483c0ff6aa45257744
4
+ data.tar.gz: 43c84651bafee307b178694a5a3113d9e21d1a8c6995daccc8ffee5963e62170
5
5
  SHA512:
6
- metadata.gz: 649cf84ed43e2b6c7e70f89840a3091fefea3ade9df62af7d50ee7e7ef309af24729912bd9dbc5adc4112da953d3964e8b0ac4d41b36d3eb256edd73813c979f
7
- data.tar.gz: 818ffd9287980e87473f9445b0424a5a006271b3ce4a070a4bd4b6fb08c4405576eff466e4def1c5ddce032614600f3d9a830951d20cfbb29823b7667545780a
6
+ metadata.gz: 23726c05ee5c47a4cdfa911ae6ff537b87bb72c70cf71cb0ede046682951405c14a0d960dccd4dae0d79921fad335013f0a2afd5ca12b1f949030bdfa1cf983f
7
+ data.tar.gz: 7b40732c370731530f7295d4f9cb4f40ef7f50c07d9ff3a11e17e9101d78622c5005750d1894b78244536c34fcc87266ab81c31283230ef670948d1ca09b7d3e
@@ -1,21 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ConcurrentRails::DelayAdapter
4
- extend ActiveSupport::Concern
3
+ module ConcurrentRails
4
+ module DelayAdapter
5
+ extend ActiveSupport::Concern
5
6
 
6
- class_methods do
7
- def delay(*args, &task)
8
- delay_on(:io, *args, &task)
9
- end
7
+ class_methods do
8
+ def delay(*args, &task)
9
+ delay_on(:io, *args, &task)
10
+ end
10
11
 
11
- def delay_on(executor, *args, &task)
12
- new(executor).delay_on_rails(*args, &task)
12
+ def delay_on(executor, *args, &task)
13
+ new(executor).delay_on_rails(*args, &task)
14
+ end
13
15
  end
14
- end
15
16
 
16
- def delay_on_rails(*args, &task)
17
- @instance = rails_wrapped { delay_on(executor, *args, &task) }
17
+ def delay_on_rails(*args, &task)
18
+ @instance = rails_wrapped { delay_on(executor, *args, &task) }
18
19
 
19
- self
20
+ self
21
+ end
20
22
  end
21
23
  end
@@ -1,47 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ConcurrentRails::Future
4
- def initialize(executor: :io, &block)
5
- @executor = executor
6
- @future = run_on_rails(block)
7
- ActiveSupport::Deprecation.warn('ConcurrentRails::Future is deprecated. See README for details')
8
- end
3
+ module ConcurrentRails
4
+ class Future
5
+ def initialize(executor: :io, &block)
6
+ @executor = executor
7
+ @future = run_on_rails(block)
8
+ ActiveSupport::Deprecation.warn('ConcurrentRails::Future is deprecated. See README for details')
9
+ end
9
10
 
10
- def execute
11
- future.execute
11
+ def execute
12
+ future.execute
12
13
 
13
- self
14
- end
14
+ self
15
+ end
15
16
 
16
- %i[value value!].each do |method_name|
17
- define_method method_name do
18
- permit_concurrent_loads do
19
- future.__send__(method_name)
17
+ %i[value value!].each do |method_name|
18
+ define_method method_name do
19
+ permit_concurrent_loads do
20
+ future.__send__(method_name)
21
+ end
20
22
  end
21
23
  end
22
- end
23
24
 
24
- delegate :state, :reason, :rejected?, :complete?, :add_observer, to: :future
25
+ delegate :state, :reason, :rejected?, :complete?, :add_observer, to: :future
25
26
 
26
- private
27
+ private
27
28
 
28
- def run_on_rails(block)
29
- @future = rails_wrapped do
30
- Concurrent::Future.new(executor: executor) do
31
- rails_wrapped(&block)
29
+ def run_on_rails(block)
30
+ @future = rails_wrapped do
31
+ Concurrent::Future.new(executor: executor) do
32
+ rails_wrapped(&block)
33
+ end
32
34
  end
33
35
  end
34
- end
35
36
 
36
- def rails_wrapped(&block)
37
- Rails.application.executor.wrap(&block)
38
- end
37
+ def rails_wrapped(&block)
38
+ Rails.application.executor.wrap(&block)
39
+ end
39
40
 
40
- def permit_concurrent_loads(&block)
41
- rails_wrapped do
42
- ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
41
+ def permit_concurrent_loads(&block)
42
+ rails_wrapped do
43
+ ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
44
+ end
43
45
  end
44
- end
45
46
 
46
- attr_reader :executor, :future
47
+ attr_reader :executor, :future
48
+ end
47
49
  end
@@ -1,21 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ConcurrentRails::FutureAdapter
4
- extend ActiveSupport::Concern
3
+ module ConcurrentRails
4
+ module FutureAdapter
5
+ extend ActiveSupport::Concern
5
6
 
6
- class_methods do
7
- def future(*args, &task)
8
- future_on(:io, *args, &task)
9
- end
7
+ class_methods do
8
+ def future(*args, &task)
9
+ future_on(:io, *args, &task)
10
+ end
10
11
 
11
- def future_on(executor, *args, &task)
12
- new(executor).future_on_rails(*args, &task)
12
+ def future_on(executor, *args, &task)
13
+ new(executor).future_on_rails(*args, &task)
14
+ end
13
15
  end
14
- end
15
16
 
16
- def future_on_rails(*args, &task)
17
- @instance = rails_wrapped { future_on(executor, *args, &task) }
17
+ def future_on_rails(*args, &task)
18
+ @instance = rails_wrapped { future_on(executor, *args, &task) }
18
19
 
19
- self
20
+ self
21
+ end
20
22
  end
21
23
  end
@@ -1,49 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ConcurrentRails::Multi
4
- def self.enqueue(*actions, executor: :io)
5
- raise ArgumentError, '#enqueue accepts `Proc`s only' unless actions.all?(Proc)
3
+ module ConcurrentRails
4
+ class Multi
5
+ def self.enqueue(*actions, executor: :io)
6
+ raise ArgumentError, '#enqueue accepts `Proc`s only' unless actions.all?(Proc)
6
7
 
7
- new(actions, executor).enqueue
8
- end
8
+ new(actions, executor).enqueue
9
+ end
9
10
 
10
- def initialize(actions, executor)
11
- @actions = actions
12
- @executor = executor
13
- @exceptions = Concurrent::Array.new
14
- end
11
+ def initialize(actions, executor)
12
+ @actions = actions
13
+ @executor = executor
14
+ @exceptions = Concurrent::Array.new
15
+ end
15
16
 
16
- def enqueue
17
- @futures = actions.map do |action|
18
- f = ConcurrentRails::Future.new(executor: executor, &action)
19
- f.add_observer(self)
20
- f.execute
17
+ def enqueue
18
+ @futures = actions.map do |action|
19
+ f = ConcurrentRails::Future.new(executor: executor, &action)
20
+ f.add_observer(self)
21
+ f.execute
22
+ end
23
+
24
+ self
21
25
  end
22
26
 
23
- self
24
- end
27
+ def compute
28
+ futures.map(&:value)
29
+ end
25
30
 
26
- def compute
27
- futures.map(&:value)
28
- end
31
+ def compute!
32
+ futures.map(&:value!)
33
+ end
29
34
 
30
- def compute!
31
- futures.map(&:value!)
32
- end
35
+ def complete?
36
+ futures.all?(&:complete?)
37
+ end
33
38
 
34
- def complete?
35
- futures.all?(&:complete?)
36
- end
39
+ def errors
40
+ @exceptions
41
+ end
37
42
 
38
- def errors
39
- @exceptions
40
- end
43
+ private
41
44
 
42
- private
45
+ def update(_time, _value, reason)
46
+ @exceptions << reason if reason
47
+ end
43
48
 
44
- def update(_time, _value, reason)
45
- @exceptions << reason if reason
49
+ attr_reader :actions, :futures, :exceptions, :executor
46
50
  end
47
-
48
- attr_reader :actions, :futures, :exceptions, :executor
49
51
  end
@@ -3,79 +3,81 @@
3
3
  require 'concurrent_rails/future_adapter'
4
4
  require 'concurrent_rails/delay_adapter'
5
5
 
6
- class ConcurrentRails::Promises
7
- include Concurrent::Promises::FactoryMethods
8
- include ConcurrentRails::DelayAdapter
9
- include ConcurrentRails::FutureAdapter
10
-
11
- def initialize(executor)
12
- @executor = executor
13
- end
6
+ module ConcurrentRails
7
+ class Promises
8
+ include Concurrent::Promises::FactoryMethods
9
+ include ConcurrentRails::DelayAdapter
10
+ include ConcurrentRails::FutureAdapter
11
+
12
+ def initialize(executor)
13
+ @executor = executor
14
+ end
14
15
 
15
- %i[value value!].each do |method_name|
16
- define_method(method_name) do |timeout = nil, timeout_value = nil|
17
- permit_concurrent_loads do
18
- instance.public_send(method_name, timeout, timeout_value)
16
+ %i[value value!].each do |method_name|
17
+ define_method(method_name) do |timeout = nil, timeout_value = nil|
18
+ permit_concurrent_loads do
19
+ instance.public_send(method_name, timeout, timeout_value)
20
+ end
19
21
  end
20
22
  end
21
- end
22
23
 
23
- %i[then chain].each do |chainable|
24
- define_method(chainable) do |*args, &task|
25
- method = "#{chainable}_on"
26
- @instance = rails_wrapped do
27
- instance.public_send(method, executor, *args, &task)
24
+ %i[then chain].each do |chainable|
25
+ define_method(chainable) do |*args, &task|
26
+ method = "#{chainable}_on"
27
+ @instance = rails_wrapped do
28
+ instance.public_send(method, executor, *args, &task)
29
+ end
30
+
31
+ self
28
32
  end
33
+ end
34
+
35
+ def touch
36
+ @instance = rails_wrapped { instance.touch }
29
37
 
30
38
  self
31
39
  end
32
- end
33
-
34
- def touch
35
- @instance = rails_wrapped { instance.touch }
36
40
 
37
- self
38
- end
41
+ def wait(timeout = nil)
42
+ result = permit_concurrent_loads { instance.__send__(:wait_until_resolved, timeout) }
39
43
 
40
- def wait(timeout = nil)
41
- result = permit_concurrent_loads { instance.__send__(:wait_until_resolved, timeout) }
44
+ timeout ? result : self
45
+ end
42
46
 
43
- timeout ? result : self
44
- end
47
+ %i[on_fulfillment on_rejection on_resolution].each do |method|
48
+ define_method(method) do |*args, &callback_task|
49
+ rails_wrapped do
50
+ @instance = instance.__send__("#{method}_using", executor, *args, &callback_task)
51
+ end
45
52
 
46
- %i[on_fulfillment on_rejection on_resolution].each do |method|
47
- define_method(method) do |*args, &callback_task|
48
- rails_wrapped do
49
- @instance = instance.__send__("#{method}_using", executor, *args, &callback_task)
53
+ self
50
54
  end
51
55
 
52
- self
53
- end
56
+ define_method("#{method}!") do |*args, &callback_task|
57
+ rails_wrapped do
58
+ @instance = instance.__send__(:add_callback, "callback_#{method}", args, callback_task)
59
+ end
54
60
 
55
- define_method("#{method}!") do |*args, &callback_task|
56
- rails_wrapped do
57
- @instance = instance.__send__(:add_callback, "callback_#{method}", args, callback_task)
61
+ self
58
62
  end
59
-
60
- self
61
63
  end
62
- end
63
64
 
64
- delegate :state, :reason, :rejected?, :resolved?, :fulfilled?, to: :instance
65
+ delegate :state, :reason, :rejected?, :resolved?, :fulfilled?, to: :instance
65
66
 
66
- attr_reader :executor
67
+ attr_reader :executor
67
68
 
68
- private
69
+ private
69
70
 
70
- def rails_wrapped(&block)
71
- Rails.application.executor.wrap(&block)
72
- end
71
+ def rails_wrapped(&block)
72
+ Rails.application.executor.wrap(&block)
73
+ end
73
74
 
74
- def permit_concurrent_loads(&block)
75
- rails_wrapped do
76
- ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
75
+ def permit_concurrent_loads(&block)
76
+ rails_wrapped do
77
+ ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
78
+ end
77
79
  end
78
- end
79
80
 
80
- attr_reader :instance
81
+ attr_reader :instance
82
+ end
81
83
  end
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ConcurrentRails::Railtie < ::Rails::Railtie
3
+ module ConcurrentRails
4
+ class Railtie < ::Rails::Railtie
5
+ end
4
6
  end
@@ -1,39 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ConcurrentRails::Testing
4
- class << self
5
- attr_reader :execution_mode
3
+ module ConcurrentRails
4
+ class Testing
5
+ class << self
6
+ attr_reader :execution_mode
6
7
 
7
- %w[immediate fake real].each do |test_mode|
8
- define_method(test_mode) do |&task|
9
- @execution_mode = test_mode
10
- result = task.call
11
- @execution_mode = :real
8
+ %w[immediate fake real].each do |test_mode|
9
+ define_method(test_mode) do |&task|
10
+ @execution_mode = test_mode
11
+ result = task.call
12
+ @execution_mode = :real
12
13
 
13
- result
14
- end
14
+ result
15
+ end
15
16
 
16
- define_method("#{test_mode}!") do
17
- @execution_mode = test_mode
18
- end
17
+ define_method("#{test_mode}!") do
18
+ @execution_mode = test_mode
19
+ end
19
20
 
20
- define_method("#{test_mode}?") do
21
- execution_mode == test_mode
21
+ define_method("#{test_mode}?") do
22
+ execution_mode == test_mode
23
+ end
22
24
  end
23
25
  end
24
- end
25
26
 
26
- module TestingFuture
27
- def future(*args, &task)
28
- if ConcurrentRails::Testing.immediate?
29
- future_on(:immediate, *args, &task)
30
- elsif ConcurrentRails::Testing.fake?
31
- yield
32
- else
33
- super
27
+ module TestingFuture
28
+ def future(*args, &task)
29
+ if ConcurrentRails::Testing.immediate?
30
+ future_on(:immediate, *args, &task)
31
+ elsif ConcurrentRails::Testing.fake?
32
+ yield
33
+ else
34
+ super
35
+ end
34
36
  end
35
37
  end
36
- end
37
38
 
38
- ConcurrentRails::Promises.extend(TestingFuture)
39
+ ConcurrentRails::Promises.extend(TestingFuture)
40
+ end
39
41
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ConcurrentRails
4
- VERSION = '0.3.0'
4
+ VERSION = '0.3.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concurrent_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luiz Eduardo Kowalski