queue-bus 0.7.0 → 0.10.0

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/CHANGELOG.md +30 -0
  4. data/Gemfile +4 -2
  5. data/README.mdown +16 -0
  6. data/Rakefile +2 -0
  7. data/lib/queue-bus.rb +15 -12
  8. data/lib/queue_bus/adapters/base.rb +4 -2
  9. data/lib/queue_bus/adapters/data.rb +12 -11
  10. data/lib/queue_bus/application.rb +24 -16
  11. data/lib/queue_bus/config.rb +31 -1
  12. data/lib/queue_bus/dispatch.rb +14 -12
  13. data/lib/queue_bus/dispatchers.rb +12 -5
  14. data/lib/queue_bus/driver.rb +15 -10
  15. data/lib/queue_bus/heartbeat.rb +32 -30
  16. data/lib/queue_bus/local.rb +9 -9
  17. data/lib/queue_bus/matcher.rb +36 -27
  18. data/lib/queue_bus/publisher.rb +7 -5
  19. data/lib/queue_bus/publishing.rb +31 -24
  20. data/lib/queue_bus/rider.rb +26 -22
  21. data/lib/queue_bus/subscriber.rb +20 -14
  22. data/lib/queue_bus/subscription.rb +25 -15
  23. data/lib/queue_bus/subscription_list.rb +30 -12
  24. data/lib/queue_bus/task_manager.rb +25 -16
  25. data/lib/queue_bus/tasks.rb +35 -11
  26. data/lib/queue_bus/util.rb +11 -8
  27. data/lib/queue_bus/version.rb +3 -1
  28. data/lib/queue_bus/worker.rb +3 -2
  29. data/queue-bus.gemspec +19 -18
  30. data/spec/adapter/publish_at_spec.rb +28 -25
  31. data/spec/adapter/support.rb +7 -1
  32. data/spec/adapter_spec.rb +4 -2
  33. data/spec/application_spec.rb +138 -96
  34. data/spec/config_spec.rb +35 -0
  35. data/spec/dispatch_spec.rb +48 -51
  36. data/spec/driver_spec.rb +60 -58
  37. data/spec/heartbeat_spec.rb +26 -24
  38. data/spec/integration_spec.rb +41 -40
  39. data/spec/matcher_spec.rb +104 -102
  40. data/spec/publish_spec.rb +46 -46
  41. data/spec/publisher_spec.rb +3 -1
  42. data/spec/rider_spec.rb +16 -14
  43. data/spec/spec_helper.rb +2 -2
  44. data/spec/subscriber_spec.rb +227 -227
  45. data/spec/subscription_list_spec.rb +57 -31
  46. data/spec/subscription_spec.rb +37 -36
  47. data/spec/worker_spec.rb +17 -15
  48. metadata +8 -8
@@ -26,6 +26,41 @@ describe 'QueueBus config' do
26
26
  expect(QueueBus.local_mode).to eq(:standalone)
27
27
  end
28
28
 
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
+
29
64
  it 'sets the hostname' do
30
65
  expect(QueueBus.hostname).not_to eq(nil)
31
66
  QueueBus.hostname = 'whatever'
@@ -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
@@ -1,42 +1,44 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module QueueBus
4
6
  describe Heartbeat do
5
7
  def now_attributes
6
8
  {
7
- "epoch_seconds" => (Time.now.to_i / 60) * 60, # rounded
8
- "epoch_minutes" => Time.now.to_i / 60,
9
- "epoch_hours" => Time.now.to_i / (60*60),
10
- "epoch_days" => Time.now.to_i / (60*60*24),
11
- "minute" => Time.now.min,
12
- "hour" => Time.now.hour,
13
- "day" => Time.now.day,
14
- "month" => Time.now.month,
15
- "year" => Time.now.year,
16
- "yday" => Time.now.yday,
17
- "wday" => Time.now.wday
9
+ 'epoch_seconds' => (Time.now.to_i / 60) * 60, # rounded
10
+ 'epoch_minutes' => Time.now.to_i / 60,
11
+ 'epoch_hours' => Time.now.to_i / (60 * 60),
12
+ 'epoch_days' => Time.now.to_i / (60 * 60 * 24),
13
+ 'minute' => Time.now.min,
14
+ 'hour' => Time.now.hour,
15
+ 'day' => Time.now.day,
16
+ 'month' => Time.now.month,
17
+ 'year' => Time.now.year,
18
+ 'yday' => Time.now.yday,
19
+ 'wday' => Time.now.wday
18
20
  }
19
21
  end
20
-
21
- it "should publish the current time once" do
22
- Timecop.freeze "12/12/2013 12:01:19" do
23
- expect(QueueBus).to receive(:publish).with("heartbeat_minutes", now_attributes)
22
+
23
+ it 'should publish the current time once' do
24
+ Timecop.freeze '12/12/2013 12:01:19' do
25
+ expect(QueueBus).to receive(:publish).with('heartbeat_minutes', now_attributes)
24
26
  Heartbeat.perform
25
27
  end
26
-
27
- Timecop.freeze "12/12/2013 12:01:40" do
28
+
29
+ Timecop.freeze '12/12/2013 12:01:40' do
28
30
  Heartbeat.perform
29
31
  end
30
32
  end
31
-
32
- it "should publish a minute later" do
33
- Timecop.freeze "12/12/2013 12:01:19" do
34
- expect(QueueBus).to receive(:publish).with("heartbeat_minutes", now_attributes)
33
+
34
+ it 'should publish a minute later' do
35
+ Timecop.freeze '12/12/2013 12:01:19' do
36
+ expect(QueueBus).to receive(:publish).with('heartbeat_minutes', now_attributes)
35
37
  Heartbeat.perform
36
38
  end
37
-
38
- Timecop.freeze "12/12/2013 12:02:01" do
39
- expect(QueueBus).to receive(:publish).with("heartbeat_minutes", now_attributes)
39
+
40
+ Timecop.freeze '12/12/2013 12:02:01' do
41
+ expect(QueueBus).to receive(:publish).with('heartbeat_minutes', now_attributes)
40
42
  Heartbeat.perform
41
43
  end
42
44
  end
@@ -1,53 +1,54 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module QueueBus
4
- describe "Integration" do
5
- it "should round trip attributes" do
6
- write1 = Subscription.new("default", "key1", "MyClass1", {"bus_event_type" => "event_one"})
7
- write2 = Subscription.new("else_ok", "key2", "MyClass2", {"bus_event_type" => /^[ab]here/}) #regex
8
-
9
- expect(write1.matches?("bus_event_type" => "event_one")).to eq(true)
10
- expect(write1.matches?("bus_event_type" => "event_one1")).to eq(false)
11
- expect(write1.matches?("bus_event_type" => "aevent_one")).to eq(false)
12
-
13
- expect(write2.matches?("bus_event_type" => "ahere")).to eq(true)
14
- expect(write2.matches?("bus_event_type" => "bhere")).to eq(true)
15
- expect(write2.matches?("bus_event_type" => "qhere")).to eq(false)
16
- expect(write2.matches?("bus_event_type" => "abhere")).to eq(false)
17
- expect(write2.matches?("bus_event_type" => "[ab]here")).to eq(false)
18
-
6
+ describe 'Integration' do
7
+ it 'should round trip attributes' do
8
+ write1 = Subscription.new('default', 'key1', 'MyClass1', 'bus_event_type' => 'event_one')
9
+ write2 = Subscription.new('else_ok', 'key2', 'MyClass2', 'bus_event_type' => /^[ab]here/) # regex
10
+
11
+ expect(write1.matches?('bus_event_type' => 'event_one')).to eq(true)
12
+ expect(write1.matches?('bus_event_type' => 'event_one1')).to eq(false)
13
+ expect(write1.matches?('bus_event_type' => 'aevent_one')).to eq(false)
14
+
15
+ expect(write2.matches?('bus_event_type' => 'ahere')).to eq(true)
16
+ expect(write2.matches?('bus_event_type' => 'bhere')).to eq(true)
17
+ expect(write2.matches?('bus_event_type' => 'qhere')).to eq(false)
18
+ expect(write2.matches?('bus_event_type' => 'abhere')).to eq(false)
19
+ expect(write2.matches?('bus_event_type' => '[ab]here')).to eq(false)
20
+
19
21
  write = SubscriptionList.new
20
22
  write.add(write1)
21
23
  write.add(write2)
22
-
23
- app = Application.new("test")
24
+
25
+ app = Application.new('test')
24
26
  app.subscribe(write)
25
-
26
- reset_test_adapter # reset to make sure we read from redis
27
- app = Application.new("test")
27
+
28
+ reset_test_adapter # reset to make sure we read from redis
29
+ app = Application.new('test')
28
30
  read = app.send(:subscriptions)
29
-
31
+
30
32
  expect(read.size).to eq(2)
31
- read1 = read.key("key1")
32
- read2 = read.key("key2")
33
+ read1 = read.key('key1')
34
+ read2 = read.key('key2')
33
35
  expect(read1).not_to be_nil
34
36
  expect(read2).not_to be_nil
35
-
36
- expect(read1.queue_name).to eq("default")
37
- expect(read1.class_name).to eq("MyClass1")
38
- expect(read2.queue_name).to eq("else_ok")
39
- expect(read2.class_name).to eq("MyClass2")
40
-
41
- expect(read1.matches?("bus_event_type" => "event_one")).to eq(true)
42
- expect(read1.matches?("bus_event_type" => "event_one1")).to eq(false)
43
- expect(read1.matches?("bus_event_type" => "aevent_one")).to eq(false)
44
-
45
- expect(read2.matches?("bus_event_type" => "ahere")).to eq(true)
46
- expect(read2.matches?("bus_event_type" => "bhere")).to eq(true)
47
- expect(read2.matches?("bus_event_type" => "qhere")).to eq(false)
48
- expect(read2.matches?("bus_event_type" => "abhere")).to eq(false)
49
- expect(read2.matches?("bus_event_type" => "[ab]here")).to eq(false)
50
-
37
+
38
+ expect(read1.queue_name).to eq('default')
39
+ expect(read1.class_name).to eq('MyClass1')
40
+ expect(read2.queue_name).to eq('else_ok')
41
+ expect(read2.class_name).to eq('MyClass2')
42
+
43
+ expect(read1.matches?('bus_event_type' => 'event_one')).to eq(true)
44
+ expect(read1.matches?('bus_event_type' => 'event_one1')).to eq(false)
45
+ expect(read1.matches?('bus_event_type' => 'aevent_one')).to eq(false)
46
+
47
+ expect(read2.matches?('bus_event_type' => 'ahere')).to eq(true)
48
+ expect(read2.matches?('bus_event_type' => 'bhere')).to eq(true)
49
+ expect(read2.matches?('bus_event_type' => 'qhere')).to eq(false)
50
+ expect(read2.matches?('bus_event_type' => 'abhere')).to eq(false)
51
+ expect(read2.matches?('bus_event_type' => '[ab]here')).to eq(false)
51
52
  end
52
53
  end
53
- end
54
+ end