asynchronic 3.0.2 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +1 -1
  4. data/asynchronic.gemspec +1 -1
  5. data/lib/asynchronic/data_store/in_memory.rb +21 -16
  6. data/lib/asynchronic/data_store/key.rb +3 -3
  7. data/lib/asynchronic/data_store/lazy_value.rb +5 -3
  8. data/lib/asynchronic/data_store/redis.rb +22 -14
  9. data/lib/asynchronic/data_store/scoped_store.rb +18 -19
  10. data/lib/asynchronic/environment.rb +3 -3
  11. data/lib/asynchronic/error.rb +2 -3
  12. data/lib/asynchronic/garbage_collector.rb +2 -1
  13. data/lib/asynchronic/job.rb +12 -12
  14. data/lib/asynchronic/notifier/broadcaster.rb +8 -4
  15. data/lib/asynchronic/process.rb +35 -32
  16. data/lib/asynchronic/queue_engine/in_memory.rb +17 -11
  17. data/lib/asynchronic/queue_engine/ost.rb +7 -5
  18. data/lib/asynchronic/queue_engine/synchronic.rb +21 -9
  19. data/lib/asynchronic/version.rb +1 -1
  20. data/lib/asynchronic/worker.rb +7 -10
  21. data/lib/asynchronic.rb +8 -0
  22. data/spec/data_store/data_store_examples.rb +17 -9
  23. data/spec/data_store/in_memory_spec.rb +0 -2
  24. data/spec/data_store/key_spec.rb +1 -1
  25. data/spec/data_store/lazy_value_examples.rb +7 -5
  26. data/spec/data_store/redis_spec.rb +4 -10
  27. data/spec/expectations.rb +2 -2
  28. data/spec/facade_spec.rb +3 -3
  29. data/spec/jobs.rb +10 -10
  30. data/spec/minitest_helper.rb +5 -12
  31. data/spec/process/life_cycle_examples.rb +24 -22
  32. data/spec/process/life_cycle_in_memory_spec.rb +0 -1
  33. data/spec/process/life_cycle_redis_spec.rb +0 -1
  34. data/spec/queue_engine/in_memory_spec.rb +1 -3
  35. data/spec/queue_engine/ost_spec.rb +1 -7
  36. data/spec/queue_engine/queue_engine_examples.rb +17 -9
  37. data/spec/queue_engine/synchronic_spec.rb +1 -1
  38. data/spec/worker/in_memory_spec.rb +1 -2
  39. data/spec/worker/redis_spec.rb +0 -6
  40. data/spec/worker/worker_examples.rb +6 -4
  41. metadata +9 -3
@@ -5,7 +5,7 @@ module Asynchronic
5
5
  attr_reader :stubs
6
6
 
7
7
  def initialize(options={})
8
- @environment = options[:environment]
8
+ @options = options
9
9
  @stubs = {}
10
10
  end
11
11
 
@@ -14,7 +14,7 @@ module Asynchronic
14
14
  end
15
15
 
16
16
  def environment
17
- @environment ||= Asynchronic.environment
17
+ @environment ||= options.fetch(:environment, Asynchronic.environment)
18
18
  end
19
19
 
20
20
  def [](name)
@@ -22,7 +22,7 @@ module Asynchronic
22
22
  end
23
23
 
24
24
  def stub(job, &block)
25
- @stubs[job] = block
25
+ stubs[job] = block
26
26
  end
27
27
 
28
28
  def asynchronic?
@@ -33,6 +33,10 @@ module Asynchronic
33
33
  [Asynchronic.connection_name]
34
34
  end
35
35
 
36
+ private
37
+
38
+ attr_reader :options
39
+
36
40
 
37
41
  class Queue
38
42
 
@@ -41,37 +45,45 @@ module Asynchronic
41
45
  end
42
46
 
43
47
  def push(message)
44
- process = @engine.environment.load_process(message)
48
+ process = engine.environment.load_process(message)
45
49
 
46
- if @engine.stubs[process.type]
50
+ if engine.stubs[process.type]
47
51
  job = process.job
48
- block = @engine.stubs[process.type]
52
+ block = engine.stubs[process.type]
49
53
  process.define_singleton_method :job do
50
- MockJob.new job, process, &block
54
+ MockJob.new job, process, block
51
55
  end
52
56
  end
53
57
 
54
58
  process.execute
55
59
  end
56
60
 
61
+ private
62
+
63
+ attr_reader :engine
64
+
57
65
  end
58
66
 
59
67
 
60
68
  class MockJob < TransparentProxy
61
69
 
62
- def initialize(job, process, &block)
70
+ def initialize(job, process, block)
63
71
  super job
64
72
  @process = process
65
73
  @block = block
66
74
  end
67
75
 
68
76
  def call
69
- @block.call @process
77
+ block.call process
70
78
  end
71
79
 
72
80
  def before_finalize
73
81
  end
74
82
 
83
+ private
84
+
85
+ attr_reader :process, :block
86
+
75
87
  end
76
88
 
77
89
  end
@@ -1,3 +1,3 @@
1
1
  module Asynchronic
2
- VERSION = '3.0.2'
2
+ VERSION = '4.0.2'
3
3
  end
@@ -1,24 +1,21 @@
1
1
  class Asynchronic::Worker
2
2
 
3
- attr_reader :queue
4
- attr_reader :queue_name
5
- attr_reader :env
6
- attr_reader :listener
3
+ attr_reader :queue, :queue_name, :environment, :listener
7
4
 
8
- def initialize(queue_name, env)
5
+ def initialize(queue_name, environment)
9
6
  @queue_name = queue_name
10
- @queue = env.queue_engine[queue_name]
11
- @env = env
12
- @listener = env.queue_engine.listener
7
+ @queue = environment.queue_engine[queue_name]
8
+ @environment = environment
9
+ @listener = environment.queue_engine.listener
13
10
  end
14
11
 
15
12
  def start
16
13
  Asynchronic.logger.info('Asynchronic') { "Starting worker of #{queue_name} (#{Process.pid})" }
17
14
 
18
15
  Signal.trap('QUIT') { stop }
19
-
16
+
20
17
  listener.listen(queue) do |pid|
21
- env.load_process(pid).execute
18
+ environment.load_process(pid).execute
22
19
  end
23
20
  end
24
21
 
data/lib/asynchronic.rb CHANGED
@@ -23,6 +23,8 @@ module Asynchronic
23
23
  attr_config :logger, Logger.new($stdout)
24
24
  attr_config :retry_timeout, 30
25
25
  attr_config :garbage_collector_timeout, 30
26
+ attr_config :redis_client, Redic
27
+ attr_config :redis_settings, 'redis://localhost:6379'
26
28
  attr_config :redis_data_store_sync_timeout, 0.01
27
29
  attr_config :keep_alive_timeout, 1
28
30
  attr_config :connection_name, "HOST=#{Socket.gethostname},PID=#{::Process.pid},UUID=#{SecureRandom.uuid}"
@@ -43,6 +45,12 @@ module Asynchronic
43
45
  @garbage_collector ||= GarbageCollector.new environment, garbage_collector_timeout
44
46
  end
45
47
 
48
+ def self.establish_redis_connection(options={})
49
+ redis_client = options.fetch(:redis_client, Asynchronic.redis_client)
50
+ redis_settings = options.fetch(:redis_settings, Asynchronic.redis_settings)
51
+ redis_client.new redis_settings
52
+ end
53
+
46
54
  def self.retry_execution(klass, message)
47
55
  begin
48
56
  result = yield
@@ -1,5 +1,11 @@
1
1
  module DataStoreExamples
2
-
2
+
3
+ extend Minitest::Spec::DSL
4
+
5
+ after do
6
+ data_store.clear
7
+ end
8
+
3
9
  it 'Get/Set value' do
4
10
  data_store[:key] = 123
5
11
  data_store[:key].must_equal 123
@@ -32,8 +38,8 @@ module DataStoreExamples
32
38
  data_store.delete_cascade Asynchronic::DataStore::Key[:key_1]
33
39
 
34
40
  data_store.keys.sort.must_equal [
35
- Asynchronic::DataStore::Key[:key_2],
36
- Asynchronic::DataStore::Key[:key_2][:key_2_1],
41
+ Asynchronic::DataStore::Key[:key_2],
42
+ Asynchronic::DataStore::Key[:key_2][:key_2_1],
37
43
  Asynchronic::DataStore::Key[:key_2][:key_2_2]
38
44
  ]
39
45
  end
@@ -110,18 +116,20 @@ module DataStoreExamples
110
116
 
111
117
  it 'Synchronization' do
112
118
  sum = 0
113
- threads = 1.upto(100).map do |i|
119
+
120
+ threads = 10.times.map do
114
121
  Thread.new do
115
- data_store.synchronize('xxx') do
122
+ data_store.synchronize('lock_key') do
116
123
  temp = sum
117
- sleep 0
124
+ sleep 0.01
118
125
  sum = temp + 1
119
126
  end
120
127
  end
121
128
  end
129
+
122
130
  threads.each(&:join)
123
-
124
- sum.must_equal 100
131
+
132
+ sum.must_equal threads.count
125
133
  end
126
-
134
+
127
135
  end
@@ -1,6 +1,4 @@
1
1
  require 'minitest_helper'
2
- require_relative './data_store_examples'
3
- require_relative './lazy_value_examples'
4
2
 
5
3
  describe Asynchronic::DataStore::InMemory do
6
4
 
@@ -56,5 +56,5 @@ describe Asynchronic::DataStore::Key do
56
56
  key.remove_last.must_equal 'foo|bar'
57
57
  key.remove_last(2).must_equal 'foo'
58
58
  end
59
-
59
+
60
60
  end
@@ -1,5 +1,7 @@
1
1
  module LazyValueExamples
2
2
 
3
+ extend Minitest::Spec::DSL
4
+
3
5
  def lazy_value(key)
4
6
  Asynchronic::DataStore::LazyValue.new data_store, key
5
7
  end
@@ -7,25 +9,25 @@ module LazyValueExamples
7
9
  it 'Get' do
8
10
  value = lazy_value :key
9
11
  value.must_be_nil
10
-
11
- data_store[:key] = 1
12
+
13
+ data_store[:key] = 1
12
14
  value.must_equal 1
13
15
  end
14
16
 
15
17
  it 'Reload' do
16
18
  value = lazy_value :key
17
19
 
18
- data_store[:key] = 1
20
+ data_store[:key] = 1
19
21
  value.must_equal 1
20
22
 
21
- data_store[:key] = 2
23
+ data_store[:key] = 2
22
24
  value.must_equal 1
23
25
  value.reload.must_equal 2
24
26
  end
25
27
 
26
28
  it 'Transparent proxy' do
27
29
  value = lazy_value :key
28
- data_store[:key] = 1
30
+ data_store[:key] = 1
29
31
  value.must_equal 1
30
32
  end
31
33
 
@@ -1,17 +1,15 @@
1
1
  require 'minitest_helper'
2
- require_relative './data_store_examples'
3
- require_relative './lazy_value_examples'
4
2
 
5
3
  describe Asynchronic::DataStore::Redis do
6
4
 
7
5
  let(:data_store) { Asynchronic::DataStore::Redis.new :asynchronic_test }
8
6
 
9
- after do
10
- data_store.clear
11
- end
12
-
13
7
  include DataStoreExamples
14
8
 
9
+ describe 'LazyValue' do
10
+ include LazyValueExamples
11
+ end
12
+
15
13
  it 'Safe deserialization' do
16
14
  SampleClass = Class.new
17
15
 
@@ -24,8 +22,4 @@ describe Asynchronic::DataStore::Redis do
24
22
  data_store[:instance].must_be_instance_of String
25
23
  end
26
24
 
27
- describe 'LazyValue' do
28
- include LazyValueExamples
29
- end
30
-
31
25
  end
data/spec/expectations.rb CHANGED
@@ -15,10 +15,10 @@ module MiniTest::Assertions
15
15
  def assert_be_initialized(process)
16
16
  process.must_be :pending?
17
17
  process.wont_be :finalized?
18
-
18
+
19
19
  process.processes.must_be_empty
20
20
  process.error.must_be_nil
21
-
21
+
22
22
  process.created_at.must_be_instance_of Time
23
23
  process.queued_at.must_be_nil
24
24
  process.started_at.must_be_nil
data/spec/facade_spec.rb CHANGED
@@ -6,7 +6,7 @@ describe Asynchronic, 'Facade' do
6
6
  Asynchronic.environment.data_store.clear
7
7
  Asynchronic.environment.queue_engine.clear
8
8
  end
9
-
9
+
10
10
  it 'Default queue' do
11
11
  Asynchronic.default_queue.must_equal :asynchronic_test
12
12
  end
@@ -40,7 +40,7 @@ describe Asynchronic, 'Facade' do
40
40
  end
41
41
 
42
42
  it 'List processes' do
43
- ids = 3.times.map do
43
+ ids = 3.times.map do
44
44
  process = Asynchronic.environment.create_process SequentialJob
45
45
  process.id
46
46
  end
@@ -51,7 +51,7 @@ describe Asynchronic, 'Facade' do
51
51
 
52
52
  it 'Enqueue' do
53
53
  id = BasicJob.enqueue input: 100
54
-
54
+
55
55
  Asynchronic.environment.tap do |env|
56
56
  process = env.load_process id
57
57
  process.type.must_equal BasicJob
data/spec/jobs.rb CHANGED
@@ -9,8 +9,8 @@ class SequentialJob < Asynchronic::Job
9
9
 
10
10
  def call
11
11
  async Step1, input: params[:input]
12
-
13
- async Step2, dependency: Step1,
12
+
13
+ async Step2, dependency: Step1,
14
14
  input: params[:input]
15
15
 
16
16
  nil
@@ -32,7 +32,7 @@ end
32
32
 
33
33
 
34
34
  class GraphJob < Asynchronic::Job
35
-
35
+
36
36
  def call
37
37
  async Sum, input: params[:input]
38
38
 
@@ -113,13 +113,13 @@ class AliasJob < Asynchronic::Job
113
113
  def call
114
114
  async Write, alias: :word_1,
115
115
  text: 'Take'
116
-
117
- async Write, alias: :word_2,
118
- text: 'it',
116
+
117
+ async Write, alias: :word_2,
118
+ text: 'it',
119
119
  prefix: result(:word_1)
120
-
121
- async Write, alias: :word_3,
122
- text: 'easy',
120
+
121
+ async Write, alias: :word_3,
122
+ text: 'easy',
123
123
  prefix: result(:word_2)
124
124
 
125
125
  result :word_3
@@ -402,4 +402,4 @@ class BeforeFinalizeExceptionOnAbortedJob < Asynchronic::Job
402
402
  def before_finalize
403
403
  raise 'Before finalize error'
404
404
  end
405
- end
405
+ end
@@ -9,9 +9,11 @@ require 'expectations'
9
9
  require 'timeout'
10
10
  require 'pry-nav'
11
11
 
12
- class Module
13
- include Minitest::Spec::DSL
14
- end
12
+ require_relative 'data_store/data_store_examples'
13
+ require_relative 'data_store/lazy_value_examples'
14
+ require_relative 'process/life_cycle_examples'
15
+ require_relative 'queue_engine/queue_engine_examples'
16
+ require_relative 'worker/worker_examples'
15
17
 
16
18
  Asynchronic.logger.level = Logger::FATAL
17
19
 
@@ -20,13 +22,4 @@ class Minitest::Spec
20
22
  Asynchronic.restore_default_configuration
21
23
  Asynchronic.default_queue = :asynchronic_test
22
24
  end
23
- end
24
-
25
- module Asynchronic::DataStore::Helper
26
- def dump
27
- puts 'DataStore:'
28
- each do |k,v|
29
- puts "#{k}: #{v}"
30
- end
31
- end
32
25
  end
@@ -1,5 +1,7 @@
1
1
  module LifeCycleExamples
2
-
2
+
3
+ extend Minitest::Spec::DSL
4
+
3
5
  let(:env) { Asynchronic::Environment.new queue_engine, data_store, notifier }
4
6
 
5
7
  let(:queue) { env.default_queue }
@@ -29,7 +31,7 @@ module LifeCycleExamples
29
31
 
30
32
  process.must_have_connection_name
31
33
  process.wont_be :dead?
32
-
34
+
33
35
  process.send(:connected?).must_be_true
34
36
 
35
37
  env.queue_engine.stub(:active_connections, ->() { raise 'Forced error' }) do
@@ -138,7 +140,7 @@ module LifeCycleExamples
138
140
  process[GraphJob::Total].must_be_pending
139
141
  process[GraphJob::Total].must_have_params '10%' => nil, '20%' => nil
140
142
  queue.must_enqueued process[GraphJob::Sum]
141
-
143
+
142
144
  execute queue
143
145
 
144
146
  process.must_be_waiting
@@ -294,7 +296,7 @@ module LifeCycleExamples
294
296
  process[:word_3].result.must_equal 'Take it easy'
295
297
  queue.must_be_empty
296
298
  end
297
-
299
+
298
300
  it 'Custom queue' do
299
301
  process = create CustomQueueJob, input: 'hello'
300
302
 
@@ -308,7 +310,7 @@ module LifeCycleExamples
308
310
 
309
311
  process.must_be_queued
310
312
  process.processes.must_be_empty
311
-
313
+
312
314
  env.queue(:queue_1).must_enqueued process
313
315
  env.queue(:queue_2).must_be_empty
314
316
  env.queue(:queue_3).must_be_empty
@@ -318,7 +320,7 @@ module LifeCycleExamples
318
320
  process.must_be_waiting
319
321
  process[CustomQueueJob::Reverse].must_be_queued
320
322
  process[CustomQueueJob::Reverse].must_have_params input: 'hello'
321
-
323
+
322
324
  env.queue(:queue_1).must_be_empty
323
325
  env.queue(:queue_2).must_enqueued process[CustomQueueJob::Reverse]
324
326
  env.queue(:queue_3).must_be_empty
@@ -329,7 +331,7 @@ module LifeCycleExamples
329
331
  process.result.must_equal 'olleh'
330
332
  process[CustomQueueJob::Reverse].must_be_completed
331
333
  process[CustomQueueJob::Reverse].result.must_equal 'olleh'
332
-
334
+
333
335
  env.queue(:queue_1).must_be_empty
334
336
  env.queue(:queue_2).must_be_empty
335
337
  env.queue(:queue_3).must_be_empty
@@ -485,7 +487,7 @@ module LifeCycleExamples
485
487
 
486
488
  it 'Data' do
487
489
  process = create DataJob, input: 1
488
-
490
+
489
491
  process.enqueue
490
492
  execute queue
491
493
 
@@ -497,7 +499,7 @@ module LifeCycleExamples
497
499
  it 'Nested job with error in child' do
498
500
  process = create NestedJobWithErrorInChildJob
499
501
 
500
- process.enqueue
502
+ process.enqueue
501
503
 
502
504
  Timeout.timeout(1) do
503
505
  until process.status == :aborted
@@ -511,17 +513,17 @@ module LifeCycleExamples
511
513
  it 'Nested job with error in parent' do
512
514
  process = create NestedJobWithErrorInParentJob
513
515
 
514
- process.enqueue
516
+ process.enqueue
515
517
 
516
518
  execute queue
517
-
519
+
518
520
  process.real_error.must_equal "Error in parent"
519
521
  end
520
522
 
521
523
  it 'Abort queued After error' do
522
524
  process = create AbortQueuedAfterErrorJob
523
525
 
524
- process.enqueue
526
+ process.enqueue
525
527
 
526
528
  execute queue
527
529
 
@@ -602,27 +604,27 @@ module LifeCycleExamples
602
604
 
603
605
  execute queue
604
606
 
605
- process.full_status.must_equal 'NestedJob' => :waiting,
607
+ process.full_status.must_equal 'NestedJob' => :waiting,
606
608
  'NestedJob::Level1' => :queued
607
609
 
608
610
  execute queue
609
611
 
610
- process.full_status.must_equal 'NestedJob' => :waiting,
611
- 'NestedJob::Level1' => :waiting,
612
+ process.full_status.must_equal 'NestedJob' => :waiting,
613
+ 'NestedJob::Level1' => :waiting,
612
614
  'NestedJob::Level1::Level2' => :queued
613
615
 
614
616
  process.cancel!
615
617
 
616
618
  process.real_error.must_equal Asynchronic::Process::CANCELED_ERROR_MESSAGE
617
619
 
618
- process.full_status.must_equal 'NestedJob' => :aborted,
619
- 'NestedJob::Level1' => :waiting,
620
+ process.full_status.must_equal 'NestedJob' => :aborted,
621
+ 'NestedJob::Level1' => :waiting,
620
622
  'NestedJob::Level1::Level2' => :queued
621
623
 
622
624
  execute queue
623
625
 
624
- process.full_status.must_equal 'NestedJob' => :aborted,
625
- 'NestedJob::Level1' => :aborted,
626
+ process.full_status.must_equal 'NestedJob' => :aborted,
627
+ 'NestedJob::Level1' => :aborted,
626
628
  'NestedJob::Level1::Level2' => :aborted
627
629
  end
628
630
 
@@ -650,7 +652,7 @@ module LifeCycleExamples
650
652
  process_1 = create AliasJob
651
653
  process_1.enqueue
652
654
  4.times { execute queue }
653
-
655
+
654
656
  process_2 = create AliasJob
655
657
  process_2.enqueue
656
658
  execute queue
@@ -670,7 +672,7 @@ module LifeCycleExamples
670
672
  data_store.keys.select { |k| k.start_with? pid_3 }.count.must_equal 7
671
673
 
672
674
  gc = Asynchronic::GarbageCollector.new env, 0.001
673
-
675
+
674
676
  gc.add_condition('Finalized', &:finalized?)
675
677
  gc.add_condition('Waiting', &:waiting?)
676
678
  gc.add_condition('Exception') { raise 'Invalid condition' }
@@ -678,7 +680,7 @@ module LifeCycleExamples
678
680
  gc.conditions_names.must_equal ['Finalized', 'Waiting', 'Exception']
679
681
 
680
682
  gc.remove_condition 'Waiting'
681
-
683
+
682
684
  gc.conditions_names.must_equal ['Finalized', 'Exception']
683
685
 
684
686
  Thread.new do
@@ -1,5 +1,4 @@
1
1
  require 'minitest_helper'
2
- require_relative './life_cycle_examples.rb'
3
2
 
4
3
  describe Asynchronic::Process, 'Life cycle - InMemory' do
5
4
 
@@ -1,5 +1,4 @@
1
1
  require 'minitest_helper'
2
- require_relative './life_cycle_examples.rb'
3
2
 
4
3
  describe Asynchronic::Process, 'Life cycle - Redis' do
5
4
 
@@ -1,11 +1,9 @@
1
1
  require 'minitest_helper'
2
- require_relative './queue_engine_examples'
3
2
 
4
3
  describe Asynchronic::QueueEngine::InMemory do
5
4
 
6
5
  let(:engine) { Asynchronic::QueueEngine::InMemory.new }
7
- let(:listener) { Asynchronic::QueueEngine::InMemory::Listener.new }
8
6
 
9
7
  include QueueEngineExamples
10
-
8
+
11
9
  end
@@ -1,19 +1,13 @@
1
1
  require 'minitest_helper'
2
- require_relative './queue_engine_examples'
3
2
 
4
3
  describe Asynchronic::QueueEngine::Ost do
5
4
 
6
5
  let(:engine) { Asynchronic::QueueEngine::Ost.new }
7
- let(:listener) { Asynchronic::QueueEngine::Ost::Listener.new }
8
6
 
9
- before do
10
- engine.clear
11
- end
12
-
13
7
  include QueueEngineExamples
14
8
 
15
9
  it 'Engine and queues use same redis connection' do
16
10
  engine.redis.must_equal queue.redis
17
11
  end
18
-
12
+
19
13
  end
@@ -1,26 +1,34 @@
1
1
  module QueueEngineExamples
2
-
2
+
3
+ extend Minitest::Spec::DSL
4
+
3
5
  let(:queue) { engine[:test_queue] }
4
6
 
7
+ let(:listener) { engine.listener }
8
+
9
+ after do
10
+ engine.clear
11
+ end
12
+
5
13
  it 'Engine' do
6
- engine.queues.must_be_empty
7
-
14
+ engine.queue_names.must_be_empty
15
+
8
16
  queue = engine[:test_engine]
9
17
  queue.must_be_instance_of engine.class.const_get(:Queue)
10
- engine.queues.must_equal [:test_engine]
11
-
18
+ engine.queue_names.must_equal [:test_engine]
19
+
12
20
  engine[:test_engine].must_equal queue
13
-
21
+
14
22
  engine.clear
15
- engine.queues.must_be_empty
23
+ engine.queue_names.must_be_empty
16
24
  end
17
25
 
18
26
  it 'Queue (push/pop)' do
19
27
  queue.must_be_empty
20
-
28
+
21
29
  queue.push 'msg_1'
22
30
  queue.push 'msg_2'
23
-
31
+
24
32
  queue.size.must_equal 2
25
33
  queue.to_a.must_equal %w(msg_1 msg_2)
26
34
 
@@ -22,7 +22,7 @@ describe Asynchronic::QueueEngine::Synchronic do
22
22
  Asynchronic.queue_engine.stub BasicJob do |process|
23
23
  process.params[:input] + 19
24
24
  end
25
-
25
+
26
26
  pid = BasicJob.enqueue input: 1
27
27
  process = Asynchronic[pid]
28
28
  process.result.must_equal 20
@@ -1,5 +1,4 @@
1
1
  require 'minitest_helper'
2
- require_relative './worker_examples'
3
2
 
4
3
  describe Asynchronic::Worker, 'InMemory' do
5
4
 
@@ -8,5 +7,5 @@ describe Asynchronic::Worker, 'InMemory' do
8
7
  let(:notifier) { Asynchronic::Notifier::InMemory.new }
9
8
 
10
9
  include WorkerExamples
11
-
10
+
12
11
  end