queue-bus 0.8.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/CHANGELOG.md +31 -0
  4. data/Gemfile +4 -2
  5. data/README.mdown +15 -3
  6. data/Rakefile +2 -0
  7. data/lib/queue-bus.rb +16 -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 +23 -2
  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 +32 -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 +36 -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 +68 -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 +12 -10
data/spec/config_spec.rb CHANGED
@@ -53,6 +53,7 @@ describe 'QueueBus config' do
53
53
  end
54
54
 
55
55
  it 'resets to the original local mode after the block' do
56
+ expect(QueueBus.local_mode).to eq nil
56
57
  QueueBus.with_local_mode(:suppress) do
57
58
  expect(QueueBus.local_mode).to eq :suppress
58
59
  end
@@ -60,6 +61,41 @@ describe 'QueueBus config' do
60
61
  end
61
62
  end
62
63
 
64
+ describe '#in_context' do
65
+ it 'sets the context on the thread' do
66
+ QueueBus.in_context(:batch_processing) do
67
+ expect(QueueBus.context).to eq(:batch_processing)
68
+ Thread.new { expect(QueueBus.context).to eq nil }.join
69
+ end
70
+ end
71
+
72
+ it 'supports nesting' do
73
+ QueueBus.in_context(:batch_processing) do
74
+ expect(QueueBus.context).to eq :batch_processing
75
+ QueueBus.in_context(:processing) do
76
+ expect(QueueBus.context).to eq :processing
77
+ end
78
+ expect(QueueBus.context).to eq :batch_processing
79
+ end
80
+ end
81
+
82
+ it 'respects an override of nil' do
83
+ QueueBus.context = :batch_processing
84
+ QueueBus.in_context(nil) do
85
+ expect(QueueBus.context).to eq nil
86
+ end
87
+ QueueBus.context = :batch_processing
88
+ end
89
+
90
+ it 'resets to the original context after the block' do
91
+ expect(QueueBus.context).to eq nil
92
+ QueueBus.in_context(:batch_processing) do
93
+ expect(QueueBus.context).to eq :batch_processing
94
+ end
95
+ expect(QueueBus.context).to eq nil
96
+ end
97
+ end
98
+
63
99
  it 'sets the hostname' do
64
100
  expect(QueueBus.hostname).not_to eq(nil)
65
101
  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
-
data/spec/driver_spec.rb CHANGED
@@ -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