concurrent_rails 0.3.0 → 0.3.1

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