queue-bus 0.6.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/.rubocop.yml +35 -0
  4. data/CHANGELOG.md +38 -0
  5. data/Gemfile +4 -2
  6. data/README.mdown +16 -0
  7. data/Rakefile +2 -0
  8. data/lib/queue-bus.rb +15 -13
  9. data/lib/queue_bus/adapters/base.rb +4 -2
  10. data/lib/queue_bus/adapters/data.rb +12 -11
  11. data/lib/queue_bus/application.rb +13 -15
  12. data/lib/queue_bus/config.rb +64 -66
  13. data/lib/queue_bus/dispatch.rb +14 -12
  14. data/lib/queue_bus/dispatchers.rb +12 -5
  15. data/lib/queue_bus/driver.rb +15 -10
  16. data/lib/queue_bus/heartbeat.rb +32 -30
  17. data/lib/queue_bus/local.rb +9 -9
  18. data/lib/queue_bus/matcher.rb +36 -27
  19. data/lib/queue_bus/publisher.rb +7 -5
  20. data/lib/queue_bus/publishing.rb +31 -24
  21. data/lib/queue_bus/rider.rb +26 -22
  22. data/lib/queue_bus/subscriber.rb +20 -14
  23. data/lib/queue_bus/subscription.rb +25 -15
  24. data/lib/queue_bus/subscription_list.rb +30 -12
  25. data/lib/queue_bus/task_manager.rb +18 -16
  26. data/lib/queue_bus/tasks.rb +27 -11
  27. data/lib/queue_bus/util.rb +11 -8
  28. data/lib/queue_bus/version.rb +3 -1
  29. data/lib/queue_bus/worker.rb +3 -2
  30. data/queue-bus.gemspec +19 -17
  31. data/spec/adapter/publish_at_spec.rb +28 -25
  32. data/spec/adapter/support.rb +7 -1
  33. data/spec/adapter_spec.rb +4 -2
  34. data/spec/application_spec.rb +97 -97
  35. data/spec/config_spec.rb +116 -40
  36. data/spec/dispatch_spec.rb +48 -51
  37. data/spec/driver_spec.rb +60 -58
  38. data/spec/heartbeat_spec.rb +26 -24
  39. data/spec/integration_spec.rb +41 -40
  40. data/spec/matcher_spec.rb +104 -102
  41. data/spec/publish_spec.rb +46 -46
  42. data/spec/publisher_spec.rb +3 -1
  43. data/spec/rider_spec.rb +16 -14
  44. data/spec/spec_helper.rb +12 -7
  45. data/spec/subscriber_spec.rb +227 -227
  46. data/spec/subscription_list_spec.rb +31 -31
  47. data/spec/subscription_spec.rb +37 -36
  48. data/spec/worker_spec.rb +17 -15
  49. metadata +21 -6
@@ -1,83 +1,159 @@
1
- require 'spec_helper'
2
-
3
- module QueueBus
4
- module Adapters
5
- class TestOne
1
+ # frozen_string_literal: true
6
2
 
7
- end
8
- end
9
- end
3
+ require 'spec_helper'
10
4
 
11
- describe "QueueBus config" do
12
- it "should set the default app key" do
5
+ describe 'QueueBus config' do
6
+ it 'sets the default app key' do
13
7
  expect(QueueBus.default_app_key).to eq(nil)
14
8
 
15
- QueueBus.default_app_key = "my_app"
16
- expect(QueueBus.default_app_key).to eq("my_app")
9
+ QueueBus.default_app_key = 'my_app'
10
+ expect(QueueBus.default_app_key).to eq('my_app')
17
11
 
18
- QueueBus.default_app_key = "something here"
19
- expect(QueueBus.default_app_key).to eq("something_here")
12
+ QueueBus.default_app_key = 'something here'
13
+ expect(QueueBus.default_app_key).to eq('something_here')
20
14
  end
21
15
 
22
- it "should set the default queue" do
16
+ it 'sets the default queue' do
23
17
  expect(QueueBus.default_queue).to eq(nil)
24
18
 
25
- QueueBus.default_queue = "my_queue"
26
- expect(QueueBus.default_queue).to eq("my_queue")
19
+ QueueBus.default_queue = 'my_queue'
20
+ expect(QueueBus.default_queue).to eq('my_queue')
27
21
  end
28
22
 
29
- it "should set the local mode" do
23
+ it 'sets the local mode' do
30
24
  expect(QueueBus.local_mode).to eq(nil)
31
25
  QueueBus.local_mode = :standalone
32
26
  expect(QueueBus.local_mode).to eq(:standalone)
33
27
  end
34
28
 
35
- it "should set the hostname" do
29
+ describe '#with_local_mode' do
30
+ it 'sets the local mode on the thread' do
31
+ QueueBus.with_local_mode(:suppress) do
32
+ expect(QueueBus.local_mode).to eq :suppress
33
+ Thread.new { expect(QueueBus.local_mode).to eq nil }.join
34
+ end
35
+ end
36
+
37
+ it 'supports nesting' do
38
+ QueueBus.with_local_mode(:suppress) do
39
+ expect(QueueBus.local_mode).to eq :suppress
40
+ QueueBus.with_local_mode(:inline) do
41
+ expect(QueueBus.local_mode).to eq :inline
42
+ end
43
+ expect(QueueBus.local_mode).to eq :suppress
44
+ end
45
+ end
46
+
47
+ it 'respects an override of nil' do
48
+ QueueBus.local_mode = :suppress
49
+ QueueBus.with_local_mode(nil) do
50
+ expect(QueueBus.local_mode).to eq nil
51
+ end
52
+ QueueBus.local_mode = :suppress
53
+ end
54
+
55
+ it 'resets to the original local mode after the block' do
56
+ expect(QueueBus.local_mode).to eq nil
57
+ QueueBus.with_local_mode(:suppress) do
58
+ expect(QueueBus.local_mode).to eq :suppress
59
+ end
60
+ expect(QueueBus.local_mode).to eq nil
61
+ end
62
+ end
63
+
64
+ it 'sets the hostname' do
36
65
  expect(QueueBus.hostname).not_to eq(nil)
37
- QueueBus.hostname = "whatever"
38
- expect(QueueBus.hostname).to eq("whatever")
66
+ QueueBus.hostname = 'whatever'
67
+ expect(QueueBus.hostname).to eq('whatever')
39
68
  end
40
69
 
41
- it "should set before_publish callback" do
42
- QueueBus.before_publish = lambda {|attributes| 42 }
70
+ it 'sets before_publish callback' do
71
+ QueueBus.before_publish = ->(_attr) { 42 }
43
72
  expect(QueueBus.before_publish_callback({})).to eq(42)
44
73
  end
45
74
 
46
-
47
- it "should use the default Redis connection" do
75
+ it 'uses the default Redis connection' do
48
76
  expect(QueueBus.redis { |redis| redis }).not_to eq(nil)
49
77
  end
50
78
 
51
- it "should default to given adapter" do
79
+ it 'defaults to given adapter' do
52
80
  expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true)
53
81
 
54
82
  # and should raise if already set
55
- expect {
56
- QueueBus.adapter = :data
57
- }.to raise_error(RuntimeError, "Adapter already set to QueueBus::Adapters::Data")
83
+ expect { QueueBus.adapter = :data }
84
+ .to raise_error(RuntimeError, 'Adapter already set to QueueBus::Adapters::Data')
58
85
  end
59
86
 
60
- context "with a fresh load" do
87
+ context 'with a fresh load' do
61
88
  before(:each) do
62
89
  QueueBus.send(:reset)
63
90
  end
64
91
 
65
- it "should be able to be set to resque" do
66
- QueueBus.adapter = adapter_under_test_symbol
67
- expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true)
92
+ context 'when set to adapter under test' do
93
+ before do
94
+ QueueBus.adapter = adapter_under_test_symbol
95
+ end
68
96
 
69
- # and should raise if already set
70
- expect {
97
+ it 'sets to that adapter' do
98
+ expect(QueueBus.adapter).to be_a adapter_under_test_class
99
+ end
100
+ end
101
+
102
+ context 'when already set' do
103
+ before do
71
104
  QueueBus.adapter = :data
72
- }.to raise_error(RuntimeError, "Adapter already set to QueueBus::Adapters::Data")
105
+ end
106
+
107
+ it 'raises' do
108
+ expect { QueueBus.adapter = :data }
109
+ .to raise_error(RuntimeError, 'Adapter already set to QueueBus::Adapters::Data')
110
+ end
111
+
112
+ it 'knows the adapter is set' do
113
+ expect(QueueBus).to have_adapter
114
+ end
73
115
  end
74
116
 
75
- it "should be able to be set to something else" do
117
+ context 'with a symbol' do
118
+ before do
119
+ QueueBus.adapter = :data
120
+ end
76
121
 
77
- QueueBus.adapter = :test_one
78
- expect(QueueBus.adapter.is_a?(QueueBus::Adapters::TestOne)).to eq(true)
122
+ it 'looks up the known class' do
123
+ expect(QueueBus.adapter).to be_a QueueBus::Adapters::Data
124
+ end
125
+ end
126
+
127
+ context 'with a custom adapter' do
128
+ let(:klass) do
129
+ Class.new(QueueBus::Adapters::Base) do
130
+ def enabled!
131
+ # no op
132
+ end
133
+
134
+ def redis
135
+ # no op
136
+ end
137
+ end
138
+ end
139
+
140
+ before do
141
+ QueueBus.adapter = klass.new
142
+ end
143
+
144
+ it 'sets it to something else' do
145
+ expect(QueueBus.adapter).to be_a klass
146
+ end
79
147
  end
80
- end
81
148
 
149
+ context 'with a class' do
150
+ before do
151
+ QueueBus.adapter = QueueBus::Adapters::Data
152
+ end
82
153
 
154
+ it 'creates a new one' do
155
+ expect(QueueBus.adapter).to be_a QueueBus::Adapters::Data
156
+ end
157
+ end
158
+ end
83
159
  end
@@ -1,76 +1,73 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
2
4
 
3
5
  module QueueBus
4
6
  describe Dispatch do
5
- it "should not start with any applications" do
6
- expect(Dispatch.new("d").subscriptions.size).to eq(0)
7
+ it 'should not start with any applications' do
8
+ expect(Dispatch.new('d').subscriptions.size).to eq(0)
7
9
  end
8
-
9
- it "should register code to run and execute it" do
10
- dispatch = Dispatch.new("d")
11
- dispatch.subscribe("my_event") do |attrs|
10
+
11
+ it 'should register code to run and execute it' do
12
+ dispatch = Dispatch.new('d')
13
+ dispatch.subscribe('my_event') do |attrs|
12
14
  Runner1.run(attrs)
13
15
  end
14
- sub = dispatch.subscriptions.key("my_event")
16
+ sub = dispatch.subscriptions.key('my_event')
15
17
  expect(sub.send(:executor).is_a?(Proc)).to eq(true)
16
18
 
17
19
  expect(Runner.value).to eq(0)
18
- dispatch.execute("my_event", {"bus_event_type" => "my_event", "ok" => true})
20
+ dispatch.execute('my_event', 'bus_event_type' => 'my_event', 'ok' => true)
19
21
  expect(Runner1.value).to eq(1)
20
- expect(Runner1.attributes).to eq({"bus_event_type" => "my_event", "ok" => true})
21
-
22
+ expect(Runner1.attributes).to eq('bus_event_type' => 'my_event', 'ok' => true)
22
23
  end
23
-
24
- it "should not crash if not there" do
25
- expect {
26
- Dispatch.new("d").execute("fdkjh", "bus_event_type" => "fdkjh")
27
- }.not_to raise_error
24
+
25
+ it 'should not crash if not there' do
26
+ expect do
27
+ Dispatch.new('d').execute('fdkjh', 'bus_event_type' => 'fdkjh')
28
+ end.not_to raise_error
28
29
  end
29
-
30
- describe "Top Level" do
30
+
31
+ describe 'Top Level' do
31
32
  before(:each) do
32
- QueueBus.dispatch("testit") do
33
- subscribe "event1" do |attributes|
34
- Runner2.run(attributes)
35
- end
33
+ QueueBus.dispatch('testit') do
34
+ subscribe 'event1' do |attributes|
35
+ Runner2.run(attributes)
36
+ end
37
+
38
+ subscribe 'event2' do
39
+ Runner2.run({})
40
+ end
36
41
 
37
- subscribe "event2" do
38
- Runner2.run({})
39
- end
42
+ high 'event3' do
43
+ Runner2.run({})
44
+ end
40
45
 
41
- high "event3" do
42
- Runner2.run({})
43
- end
44
-
45
- low /^patt.+ern/ do
46
- Runner.run({})
47
- end
48
- end
49
- end
50
-
51
- it "should register and run" do
46
+ low /^patt.+ern/ do
47
+ Runner.run({})
48
+ end
49
+ end
50
+ end
51
+
52
+ it 'should register and run' do
52
53
  expect(Runner2.value).to eq(0)
53
- QueueBus.dispatcher_execute("testit", "event2", "bus_event_type" => "event2")
54
+ QueueBus.dispatcher_execute('testit', 'event2', 'bus_event_type' => 'event2')
54
55
  expect(Runner2.value).to eq(1)
55
- QueueBus.dispatcher_execute("testit", "event1", "bus_event_type" => "event1")
56
+ QueueBus.dispatcher_execute('testit', 'event1', 'bus_event_type' => 'event1')
56
57
  expect(Runner2.value).to eq(2)
57
- QueueBus.dispatcher_execute("testit", "event1", "bus_event_type" => "event1")
58
+ QueueBus.dispatcher_execute('testit', 'event1', 'bus_event_type' => 'event1')
58
59
  expect(Runner2.value).to eq(3)
59
60
  end
60
-
61
- it "should return the subscriptions" do
62
- dispatcher = QueueBus.dispatcher_by_key("testit")
61
+
62
+ it 'should return the subscriptions' do
63
+ dispatcher = QueueBus.dispatcher_by_key('testit')
63
64
  subs = dispatcher.subscriptions.all
64
- tuples = subs.collect{ |sub| [sub.key, sub.queue_name]}
65
- expect(tuples).to match_array([ ["event1", "testit_default"],
66
- ["event2", "testit_default"],
67
- ["event3", "testit_high"],
68
- [ "(?-mix:^patt.+ern)", "testit_low"]
69
- ])
65
+ tuples = subs.collect { |sub| [sub.key, sub.queue_name] }
66
+ expect(tuples).to match_array([%w[event1 testit_default],
67
+ %w[event2 testit_default],
68
+ %w[event3 testit_high],
69
+ ['(?-mix:^patt.+ern)', 'testit_low']])
70
70
  end
71
-
72
71
  end
73
72
  end
74
-
75
73
  end
76
-
@@ -1,92 +1,94 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module QueueBus
4
6
  describe Driver do
5
7
  before(:each) do
6
- Application.new("app1").subscribe(test_list(test_sub("event1"), test_sub("event2"), test_sub("event3")))
7
- Application.new("app2").subscribe(test_list(test_sub("event2","other"), test_sub("event4", "more")))
8
- Application.new("app3").subscribe(test_list(test_sub("event[45]"), test_sub("event5"), test_sub("event6")))
8
+ Application.new('app1').subscribe(test_list(test_sub('event1'), test_sub('event2'), test_sub('event3')))
9
+ Application.new('app2').subscribe(test_list(test_sub('event2', 'other'), test_sub('event4', 'more')))
10
+ Application.new('app3').subscribe(test_list(test_sub('event[45]'), test_sub('event5'), test_sub('event6')))
9
11
  Timecop.freeze
10
12
  end
11
13
  after(:each) do
12
14
  Timecop.return
13
15
  end
14
16
 
15
- let(:bus_attrs) { {"bus_driven_at" => Time.now.to_i, "bus_rider_class_name"=>"::QueueBus::Rider", "bus_class_proxy" => "::QueueBus::Rider"} }
17
+ let(:bus_attrs) { { 'bus_driven_at' => Time.now.to_i, 'bus_rider_class_name' => '::QueueBus::Rider', 'bus_class_proxy' => '::QueueBus::Rider' } }
16
18
 
17
- describe ".subscription_matches" do
18
- it "return empty array when none" do
19
- expect(Driver.subscription_matches("bus_event_type" => "else").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to eq([])
20
- expect(Driver.subscription_matches("bus_event_type" => "event").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to eq([])
19
+ describe '.subscription_matches' do
20
+ it 'return empty array when none' do
21
+ expect(Driver.subscription_matches('bus_event_type' => 'else').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to eq([])
22
+ expect(Driver.subscription_matches('bus_event_type' => 'event').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to eq([])
21
23
  end
22
- it "should return a match" do
23
- expect(Driver.subscription_matches("bus_event_type" => "event1").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to match_array([["app1", "event1", "default", "::QueueBus::Rider"]])
24
- expect(Driver.subscription_matches("bus_event_type" => "event6").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to match_array([["app3", "event6", "default", "::QueueBus::Rider"]])
24
+ it 'should return a match' do
25
+ expect(Driver.subscription_matches('bus_event_type' => 'event1').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to match_array([['app1', 'event1', 'default', '::QueueBus::Rider']])
26
+ expect(Driver.subscription_matches('bus_event_type' => 'event6').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to match_array([['app3', 'event6', 'default', '::QueueBus::Rider']])
25
27
  end
26
- it "should match multiple apps" do
27
- expect(Driver.subscription_matches("bus_event_type" => "event2").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to match_array([["app1", "event2", "default", "::QueueBus::Rider"], ["app2", "event2", "other", "::QueueBus::Rider"]])
28
+ it 'should match multiple apps' do
29
+ expect(Driver.subscription_matches('bus_event_type' => 'event2').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to match_array([['app1', 'event2', 'default', '::QueueBus::Rider'], ['app2', 'event2', 'other', '::QueueBus::Rider']])
28
30
  end
29
- it "should match multiple apps with patterns" do
30
- expect(Driver.subscription_matches("bus_event_type" => "event4").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to match_array([["app3", "event[45]", "default", "::QueueBus::Rider"], ["app2", "event4", "more", "::QueueBus::Rider"]])
31
+ it 'should match multiple apps with patterns' do
32
+ expect(Driver.subscription_matches('bus_event_type' => 'event4').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to match_array([['app3', 'event[45]', 'default', '::QueueBus::Rider'], ['app2', 'event4', 'more', '::QueueBus::Rider']])
31
33
  end
32
- it "should match multiple events in same app" do
33
- expect(Driver.subscription_matches("bus_event_type" => "event5").collect{|s| [s.app_key, s.key, s.queue_name, s.class_name]}).to match_array([["app3", "event[45]", "default", "::QueueBus::Rider"], ["app3", "event5", "default", "::QueueBus::Rider"]])
34
+ it 'should match multiple events in same app' do
35
+ expect(Driver.subscription_matches('bus_event_type' => 'event5').collect { |s| [s.app_key, s.key, s.queue_name, s.class_name] }).to match_array([['app3', 'event[45]', 'default', '::QueueBus::Rider'], ['app3', 'event5', 'default', '::QueueBus::Rider']])
34
36
  end
35
37
  end
36
38
 
37
- describe ".perform" do
38
- let(:attributes) { {"x" => "y", "bus_class_proxy" => "ResqueBus::Driver"} }
39
+ describe '.perform' do
40
+ let(:attributes) { { 'x' => 'y', 'bus_class_proxy' => 'ResqueBus::Driver' } }
39
41
 
40
42
  before(:each) do
41
- expect(QueueBus.redis { |redis| redis.smembers("queues") }).to eq([])
42
- expect(QueueBus.redis { |redis| redis.lpop("queue:app1_default") }).to be_nil
43
- expect(QueueBus.redis { |redis| redis.lpop("queue:app2_default") }).to be_nil
44
- expect(QueueBus.redis { |redis| redis.lpop("queue:app3_default") }).to be_nil
43
+ expect(QueueBus.redis { |redis| redis.smembers('queues') }).to eq([])
44
+ expect(QueueBus.redis { |redis| redis.lpop('queue:app1_default') }).to be_nil
45
+ expect(QueueBus.redis { |redis| redis.lpop('queue:app2_default') }).to be_nil
46
+ expect(QueueBus.redis { |redis| redis.lpop('queue:app3_default') }).to be_nil
45
47
  end
46
48
 
47
- it "should do nothing when empty" do
48
- Driver.perform(attributes.merge("bus_event_type" => "else"))
49
- expect(QueueBus.redis { |redis| redis.smembers("queues") }).to eq([])
49
+ it 'should do nothing when empty' do
50
+ Driver.perform(attributes.merge('bus_event_type' => 'else'))
51
+ expect(QueueBus.redis { |redis| redis.smembers('queues') }).to eq([])
50
52
  end
51
53
 
52
- it "should queue up the riders in redis" do
53
- expect(QueueBus.redis { |redis| redis.lpop("queue:app1_default") }).to be_nil
54
- Driver.perform(attributes.merge("bus_event_type" => "event1"))
55
- expect(QueueBus.redis { |redis| redis.smembers("queues") }).to match_array(["default"])
54
+ it 'should queue up the riders in redis' do
55
+ expect(QueueBus.redis { |redis| redis.lpop('queue:app1_default') }).to be_nil
56
+ Driver.perform(attributes.merge('bus_event_type' => 'event1'))
57
+ expect(QueueBus.redis { |redis| redis.smembers('queues') }).to match_array(['default'])
56
58
 
57
- hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
58
- expect(hash["class"]).to eq("QueueBus::Worker")
59
- expect(hash["args"].size).to eq(1)
60
- expect(JSON.parse(hash["args"].first)).to eq({"bus_rider_app_key"=>"app1", "x" => "y", "bus_event_type" => "event1", "bus_rider_sub_key"=>"event1", "bus_rider_queue" => "default"}.merge(bus_attrs))
59
+ hash = JSON.parse(QueueBus.redis { |redis| redis.lpop('queue:default') })
60
+ expect(hash['class']).to eq('QueueBus::Worker')
61
+ expect(hash['args'].size).to eq(1)
62
+ expect(JSON.parse(hash['args'].first)).to eq({ 'bus_rider_app_key' => 'app1', 'x' => 'y', 'bus_event_type' => 'event1', 'bus_rider_sub_key' => 'event1', 'bus_rider_queue' => 'default' }.merge(bus_attrs))
61
63
  end
62
64
 
63
- it "should queue up to multiple" do
64
- Driver.perform(attributes.merge("bus_event_type" => "event4"))
65
- expect(QueueBus.redis { |redis| redis.smembers("queues") }).to match_array(["default", "more"])
65
+ it 'should queue up to multiple' do
66
+ Driver.perform(attributes.merge('bus_event_type' => 'event4'))
67
+ expect(QueueBus.redis { |redis| redis.smembers('queues') }).to match_array(%w[default more])
66
68
 
67
- hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:more") })
68
- expect(hash["class"]).to eq("QueueBus::Worker")
69
- expect(hash["args"].size).to eq(1)
70
- expect(JSON.parse(hash["args"].first)).to eq({"bus_rider_app_key"=>"app2", "x" => "y", "bus_event_type" => "event4", "bus_rider_sub_key"=>"event4", "bus_rider_queue" => "more"}.merge(bus_attrs))
69
+ hash = JSON.parse(QueueBus.redis { |redis| redis.lpop('queue:more') })
70
+ expect(hash['class']).to eq('QueueBus::Worker')
71
+ expect(hash['args'].size).to eq(1)
72
+ expect(JSON.parse(hash['args'].first)).to eq({ 'bus_rider_app_key' => 'app2', 'x' => 'y', 'bus_event_type' => 'event4', 'bus_rider_sub_key' => 'event4', 'bus_rider_queue' => 'more' }.merge(bus_attrs))
71
73
 
72
- hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
73
- expect(hash["class"]).to eq("QueueBus::Worker")
74
- expect(hash["args"].size).to eq(1)
75
- expect(JSON.parse(hash["args"].first)).to eq({"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event4", "bus_rider_sub_key"=>"event[45]", "bus_rider_queue" => "default"}.merge(bus_attrs))
74
+ hash = JSON.parse(QueueBus.redis { |redis| redis.lpop('queue:default') })
75
+ expect(hash['class']).to eq('QueueBus::Worker')
76
+ expect(hash['args'].size).to eq(1)
77
+ expect(JSON.parse(hash['args'].first)).to eq({ 'bus_rider_app_key' => 'app3', 'x' => 'y', 'bus_event_type' => 'event4', 'bus_rider_sub_key' => 'event[45]', 'bus_rider_queue' => 'default' }.merge(bus_attrs))
76
78
  end
77
79
 
78
- it "should queue up to the same" do
79
- Driver.perform(attributes.merge("bus_event_type" => "event5"))
80
- expect(QueueBus.redis { |redis| redis.smembers("queues") }).to match_array(["default"])
80
+ it 'should queue up to the same' do
81
+ Driver.perform(attributes.merge('bus_event_type' => 'event5'))
82
+ expect(QueueBus.redis { |redis| redis.smembers('queues') }).to match_array(['default'])
81
83
 
82
- expect(QueueBus.redis { |redis| redis.llen("queue:default") }).to eq(2)
84
+ expect(QueueBus.redis { |redis| redis.llen('queue:default') }).to eq(2)
83
85
 
84
- pop1 = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
85
- pop2 = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
86
+ pop1 = JSON.parse(QueueBus.redis { |redis| redis.lpop('queue:default') })
87
+ pop2 = JSON.parse(QueueBus.redis { |redis| redis.lpop('queue:default') })
86
88
 
87
- pargs1 = JSON.parse(pop1["args"].first)
88
- pargs2 = JSON.parse(pop2["args"].first)
89
- if pargs1["bus_rider_sub_key"] == "event5"
89
+ pargs1 = JSON.parse(pop1['args'].first)
90
+ pargs2 = JSON.parse(pop2['args'].first)
91
+ if pargs1['bus_rider_sub_key'] == 'event5'
90
92
  hash1 = pop1
91
93
  hash2 = pop2
92
94
  args1 = pargs1
@@ -98,11 +100,11 @@ module QueueBus
98
100
  args2 = pargs1
99
101
  end
100
102
 
101
- expect(hash1["class"]).to eq("QueueBus::Worker")
102
- expect(args1).to eq({"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event5", "bus_rider_sub_key"=>"event5", "bus_rider_queue" => "default"}.merge(bus_attrs))
103
+ expect(hash1['class']).to eq('QueueBus::Worker')
104
+ expect(args1).to eq({ 'bus_rider_app_key' => 'app3', 'x' => 'y', 'bus_event_type' => 'event5', 'bus_rider_sub_key' => 'event5', 'bus_rider_queue' => 'default' }.merge(bus_attrs))
103
105
 
104
- expect(hash2["class"]).to eq("QueueBus::Worker")
105
- expect(args2).to eq({"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event5", "bus_rider_sub_key"=>"event[45]", "bus_rider_queue" => "default"}.merge(bus_attrs))
106
+ expect(hash2['class']).to eq('QueueBus::Worker')
107
+ expect(args2).to eq({ 'bus_rider_app_key' => 'app3', 'x' => 'y', 'bus_event_type' => 'event5', 'bus_rider_sub_key' => 'event[45]', 'bus_rider_queue' => 'default' }.merge(bus_attrs))
106
108
  end
107
109
  end
108
110
  end