queue-bus 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -2
- data/lib/queue_bus/adapters/base.rb +3 -6
- data/lib/queue_bus/adapters/data.rb +4 -4
- data/lib/queue_bus/driver.rb +8 -3
- data/lib/queue_bus/heartbeat.rb +0 -1
- data/lib/queue_bus/local.rb +7 -2
- data/lib/queue_bus/publisher.rb +0 -1
- data/lib/queue_bus/publishing.rb +7 -4
- data/lib/queue_bus/rider.rb +1 -2
- data/lib/queue_bus/subscriber.rb +0 -1
- data/lib/queue_bus/version.rb +1 -1
- data/lib/queue_bus/worker.rb +14 -5
- data/spec/adapter/publish_at_spec.rb +9 -6
- data/spec/driver_spec.rb +22 -13
- data/spec/publish_spec.rb +11 -8
- data/spec/subscriber_spec.rb +33 -31
- data/spec/worker_spec.rb +32 -0
- metadata +4 -2
data/Gemfile
CHANGED
@@ -10,6 +10,7 @@ module QueueBus
|
|
10
10
|
def enabled!
|
11
11
|
# called the first time we know we are using this adapter
|
12
12
|
# it would be a good spot to require the libraries you're using
|
13
|
+
# and modify QueueBus::Worker as needed
|
13
14
|
raise NotImplementedError
|
14
15
|
end
|
15
16
|
|
@@ -18,12 +19,12 @@ module QueueBus
|
|
18
19
|
raise NotImplementedError
|
19
20
|
end
|
20
21
|
|
21
|
-
def enqueue(queue_name, klass,
|
22
|
+
def enqueue(queue_name, klass, json)
|
22
23
|
# enqueue the given class (Driver/Rider) in your queue
|
23
24
|
raise NotImplementedError
|
24
25
|
end
|
25
26
|
|
26
|
-
def enqueue_at(epoch_seconds, queue_name, klass,
|
27
|
+
def enqueue_at(epoch_seconds, queue_name, klass, json)
|
27
28
|
# enqueue the given class (Publisher) in your queue to run at given time
|
28
29
|
raise NotImplementedError
|
29
30
|
end
|
@@ -32,10 +33,6 @@ module QueueBus
|
|
32
33
|
# if possible, tell a recurring job system to publish every minute
|
33
34
|
raise NotImplementedError
|
34
35
|
end
|
35
|
-
|
36
|
-
def worker_included(base)
|
37
|
-
# optional method for including more modules in classes that work in the queue
|
38
|
-
end
|
39
36
|
end
|
40
37
|
end
|
41
38
|
end
|
@@ -15,12 +15,12 @@ module QueueBus
|
|
15
15
|
block.call(@redis)
|
16
16
|
end
|
17
17
|
|
18
|
-
def enqueue(queue_name, klass,
|
19
|
-
push(queue_name, :class => klass.to_s, :args => [
|
18
|
+
def enqueue(queue_name, klass, json)
|
19
|
+
push(queue_name, :class => klass.to_s, :args => [json])
|
20
20
|
end
|
21
21
|
|
22
|
-
def enqueue_at(epoch_seconds, queue_name, klass,
|
23
|
-
item = delayed_job_to_hash_with_queue(queue_name, klass, [
|
22
|
+
def enqueue_at(epoch_seconds, queue_name, klass, json)
|
23
|
+
item = delayed_job_to_hash_with_queue(queue_name, klass, [json])
|
24
24
|
delayed_push(epoch_seconds, item)
|
25
25
|
end
|
26
26
|
|
data/lib/queue_bus/driver.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module QueueBus
|
2
2
|
# fans out an event to multiple queues
|
3
3
|
class Driver
|
4
|
-
include ::QueueBus::Worker
|
5
4
|
|
6
5
|
class << self
|
7
6
|
def subscription_matches(attributes)
|
@@ -21,8 +20,14 @@ module QueueBus
|
|
21
20
|
subscription_matches(attributes).each do |sub|
|
22
21
|
::QueueBus.log_worker(" ...sending to #{sub.queue_name} queue with class #{sub.class_name} for app #{sub.app_key} because of subscription: #{sub.key}")
|
23
22
|
|
24
|
-
bus_attr = {"bus_driven_at" => Time.now.to_i,
|
25
|
-
|
23
|
+
bus_attr = { "bus_driven_at" => Time.now.to_i,
|
24
|
+
"bus_rider_queue" => sub.queue_name,
|
25
|
+
"bus_rider_app_key" => sub.app_key,
|
26
|
+
"bus_rider_sub_key" => sub.key,
|
27
|
+
"bus_rider_class_name" => sub.class_name}
|
28
|
+
bus_attr = bus_attr.merge(attributes || {})
|
29
|
+
bus_attr["bus_class_proxy"] = sub.class_name
|
30
|
+
::QueueBus.enqueue_to(sub.queue_name, ::QueueBus::Worker, bus_attr)
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
data/lib/queue_bus/heartbeat.rb
CHANGED
data/lib/queue_bus/local.rb
CHANGED
@@ -13,10 +13,15 @@ module QueueBus
|
|
13
13
|
|
14
14
|
# looking for subscriptions, not queues
|
15
15
|
subscription_matches(attributes).each do |sub|
|
16
|
-
|
16
|
+
bus_attr = { "bus_driven_at" => Time.now.to_i,
|
17
|
+
"bus_rider_queue" => sub.queue_name,
|
18
|
+
"bus_rider_app_key" => sub.app_key,
|
19
|
+
"bus_rider_sub_key" => sub.key,
|
20
|
+
"bus_rider_class_name" => sub.class_name,
|
21
|
+
"bus_class_proxy" => sub.class_name}
|
17
22
|
to_publish = bus_attr.merge(attributes || {})
|
18
23
|
if ::QueueBus.local_mode == :standalone
|
19
|
-
::QueueBus.enqueue_to(sub.queue_name,
|
24
|
+
::QueueBus.enqueue_to(sub.queue_name, ::QueueBus::Worker, bus_attr.merge(attributes || {}))
|
20
25
|
else # defaults to inline mode
|
21
26
|
sub.execute!(to_publish)
|
22
27
|
end
|
data/lib/queue_bus/publisher.rb
CHANGED
data/lib/queue_bus/publishing.rb
CHANGED
@@ -48,11 +48,13 @@ module QueueBus
|
|
48
48
|
|
49
49
|
def publish(event_type, attributes = {})
|
50
50
|
to_publish = publish_metadata(event_type, attributes)
|
51
|
+
to_publish["bus_class_proxy"] = ::QueueBus::Driver.name.to_s
|
52
|
+
|
51
53
|
::QueueBus.log_application("Event published: #{event_type} #{to_publish.inspect}")
|
52
54
|
if local_mode
|
53
55
|
::QueueBus::Local.perform(to_publish)
|
54
56
|
else
|
55
|
-
enqueue_to(::QueueBus.incoming_queue,
|
57
|
+
enqueue_to(::QueueBus.incoming_queue, ::QueueBus::Worker, to_publish)
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -60,17 +62,18 @@ module QueueBus
|
|
60
62
|
to_publish = publish_metadata(event_type, attributes)
|
61
63
|
to_publish["bus_delayed_until"] ||= timestamp_or_epoch.to_i
|
62
64
|
to_publish.delete("bus_published_at") unless attributes["bus_published_at"] # will be put on when it actually does it
|
65
|
+
to_publish["bus_class_proxy"] = ::QueueBus::Publisher.name.to_s
|
63
66
|
|
64
67
|
::QueueBus.log_application("Event published:#{event_type} #{to_publish.inspect} publish_at: #{timestamp_or_epoch.to_i}")
|
65
|
-
delayed_enqueue_to(timestamp_or_epoch.to_i, incoming_queue,
|
68
|
+
delayed_enqueue_to(timestamp_or_epoch.to_i, incoming_queue, ::QueueBus::Worker, to_publish)
|
66
69
|
end
|
67
70
|
|
68
71
|
def enqueue_to(queue_name, klass, hash)
|
69
|
-
::QueueBus.adapter.enqueue(queue_name, klass, hash)
|
72
|
+
::QueueBus.adapter.enqueue(queue_name, klass, ::QueueBus::Util.encode(hash || {}))
|
70
73
|
end
|
71
74
|
|
72
75
|
def delayed_enqueue_to(epoch_seconds, queue_name, klass, hash)
|
73
|
-
::QueueBus.adapter.enqueue_at(epoch_seconds, queue_name, klass, hash)
|
76
|
+
::QueueBus.adapter.enqueue_at(epoch_seconds, queue_name, klass, ::QueueBus::Util.encode(hash || {}))
|
74
77
|
end
|
75
78
|
|
76
79
|
def heartbeat!
|
data/lib/queue_bus/rider.rb
CHANGED
data/lib/queue_bus/subscriber.rb
CHANGED
data/lib/queue_bus/version.rb
CHANGED
data/lib/queue_bus/worker.rb
CHANGED
@@ -1,14 +1,23 @@
|
|
1
1
|
module QueueBus
|
2
|
-
|
2
|
+
class Worker
|
3
3
|
|
4
|
-
def self.
|
5
|
-
|
4
|
+
def self.perform(attributes)
|
5
|
+
klass = nil
|
6
|
+
begin
|
7
|
+
class_name = attributes["bus_class_proxy"]
|
8
|
+
klass = ::QueueBus::Util.constantize(class_name)
|
9
|
+
rescue NameError
|
10
|
+
# not there anymore
|
11
|
+
return
|
12
|
+
end
|
13
|
+
|
14
|
+
klass.perform(attributes)
|
6
15
|
end
|
7
16
|
|
8
17
|
# all our workers include this one
|
9
|
-
def perform(
|
18
|
+
def perform(attributes)
|
10
19
|
# instance method level support for sidekiq
|
11
|
-
self.class.perform(
|
20
|
+
self.class.perform(attributes)
|
12
21
|
end
|
13
22
|
end
|
14
23
|
end
|
@@ -9,7 +9,8 @@ describe "Publishing an event in the future" do
|
|
9
9
|
after(:each) do
|
10
10
|
Timecop.return
|
11
11
|
end
|
12
|
-
let(:delayed_attrs) { {
|
12
|
+
let(:delayed_attrs) { {
|
13
|
+
"bus_delayed_until" => future.to_i,
|
13
14
|
"bus_id" => "#{now.to_i}-idfhlkj",
|
14
15
|
"bus_app_hostname" => `hostname 2>&1`.strip.sub(/.local/,'')} }
|
15
16
|
|
@@ -29,20 +30,22 @@ describe "Publishing an event in the future" do
|
|
29
30
|
val = QueueBus.redis { |redis| redis.lpop("delayed:#{future.to_i}") }
|
30
31
|
hash = JSON.parse(val)
|
31
32
|
|
32
|
-
hash["class"].should == "QueueBus::
|
33
|
-
hash["args"].should ==
|
33
|
+
hash["class"].should == "QueueBus::Worker"
|
34
|
+
hash["args"].size.should == 1
|
35
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy"=>"QueueBus::Publisher", "bus_event_type"=>"event_name", "two"=>"here", "one"=>1, "id" => 12}.merge(delayed_attrs)
|
34
36
|
hash["queue"].should == "bus_incoming"
|
35
37
|
|
36
38
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
37
39
|
val.should == nil # nothing really added
|
38
40
|
|
39
41
|
Timecop.freeze(worktime)
|
40
|
-
QueueBus::Publisher.perform(
|
42
|
+
QueueBus::Publisher.perform(JSON.parse(hash["args"].first))
|
41
43
|
|
42
44
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
43
45
|
hash = JSON.parse(val)
|
44
|
-
hash["class"].should == "QueueBus::
|
45
|
-
hash["args"].should ==
|
46
|
+
hash["class"].should == "QueueBus::Worker"
|
47
|
+
hash["args"].size.should == 1
|
48
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy"=>"QueueBus::Driver", "bus_event_type"=>"event_name", "two"=>"here", "one"=>1, "id" => 12}.merge(bus_attrs)
|
46
49
|
end
|
47
50
|
|
48
51
|
end
|
data/spec/driver_spec.rb
CHANGED
@@ -12,7 +12,7 @@ module QueueBus
|
|
12
12
|
Timecop.return
|
13
13
|
end
|
14
14
|
|
15
|
-
let(:bus_attrs) { {"bus_driven_at" => Time.now.to_i, "bus_rider_class_name"=>"::QueueBus::Rider"} }
|
15
|
+
let(:bus_attrs) { {"bus_driven_at" => Time.now.to_i, "bus_rider_class_name"=>"::QueueBus::Rider", "bus_class_proxy" => "::QueueBus::Rider"} }
|
16
16
|
|
17
17
|
describe ".subscription_matches" do
|
18
18
|
it "return empty array when none" do
|
@@ -35,7 +35,7 @@ module QueueBus
|
|
35
35
|
end
|
36
36
|
|
37
37
|
describe ".perform" do
|
38
|
-
let(:attributes) { {"x" => "y"} }
|
38
|
+
let(:attributes) { {"x" => "y", "bus_class_proxy" => "ResqueBus::Driver"} }
|
39
39
|
|
40
40
|
before(:each) do
|
41
41
|
QueueBus.redis { |redis| redis.smembers("queues") }.should == []
|
@@ -55,8 +55,9 @@ module QueueBus
|
|
55
55
|
QueueBus.redis { |redis| redis.smembers("queues") }.should =~ ["default"]
|
56
56
|
|
57
57
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
|
58
|
-
hash["class"].should == "
|
59
|
-
hash["args"].should ==
|
58
|
+
hash["class"].should == "QueueBus::Worker"
|
59
|
+
hash["args"].size.should == 1
|
60
|
+
JSON.parse(hash["args"].first).should == {"bus_rider_app_key"=>"app1", "x" => "y", "bus_event_type" => "event1", "bus_rider_sub_key"=>"event1", "bus_rider_queue" => "default"}.merge(bus_attrs)
|
60
61
|
end
|
61
62
|
|
62
63
|
it "should queue up to multiple" do
|
@@ -64,12 +65,14 @@ module QueueBus
|
|
64
65
|
QueueBus.redis { |redis| redis.smembers("queues") }.should =~ ["default", "more"]
|
65
66
|
|
66
67
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:more") })
|
67
|
-
hash["class"].should == "
|
68
|
-
hash["args"].should ==
|
68
|
+
hash["class"].should == "QueueBus::Worker"
|
69
|
+
hash["args"].size.should == 1
|
70
|
+
JSON.parse(hash["args"].first).should == {"bus_rider_app_key"=>"app2", "x" => "y", "bus_event_type" => "event4", "bus_rider_sub_key"=>"event4", "bus_rider_queue" => "more"}.merge(bus_attrs)
|
69
71
|
|
70
72
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
|
71
|
-
hash["class"].should == "
|
72
|
-
hash["args"].should ==
|
73
|
+
hash["class"].should == "QueueBus::Worker"
|
74
|
+
hash["args"].size.should == 1
|
75
|
+
JSON.parse(hash["args"].first).should == {"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event4", "bus_rider_sub_key"=>"event[45]", "bus_rider_queue" => "default"}.merge(bus_attrs)
|
73
76
|
end
|
74
77
|
|
75
78
|
it "should queue up to the same" do
|
@@ -81,19 +84,25 @@ module QueueBus
|
|
81
84
|
pop1 = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
|
82
85
|
pop2 = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:default") })
|
83
86
|
|
84
|
-
|
87
|
+
pargs1 = JSON.parse(pop1["args"].first)
|
88
|
+
pargs2 = JSON.parse(pop2["args"].first)
|
89
|
+
if pargs1["bus_rider_sub_key"] == "event5"
|
85
90
|
hash1 = pop1
|
86
91
|
hash2 = pop2
|
92
|
+
args1 = pargs1
|
93
|
+
args2 = pargs2
|
87
94
|
else
|
88
95
|
hash1 = pop2
|
89
96
|
hash2 = pop1
|
97
|
+
args1 = pargs2
|
98
|
+
args2 = pargs2
|
90
99
|
end
|
91
100
|
|
92
|
-
hash1["class"].should == "
|
93
|
-
|
101
|
+
hash1["class"].should == "QueueBus::Worker"
|
102
|
+
args1.should == {"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event5", "bus_rider_sub_key"=>"event5", "bus_rider_queue" => "default"}.merge(bus_attrs)
|
94
103
|
|
95
|
-
hash2["class"].should == "
|
96
|
-
|
104
|
+
hash2["class"].should == "QueueBus::Worker"
|
105
|
+
args2.should == {"bus_rider_app_key"=>"app3", "x" => "y", "bus_event_type" => "event5", "bus_rider_sub_key"=>"event[45]", "bus_rider_queue" => "default"}.merge(bus_attrs)
|
97
106
|
end
|
98
107
|
end
|
99
108
|
end
|
data/spec/publish_spec.rb
CHANGED
@@ -9,7 +9,8 @@ describe "Publishing an event" do
|
|
9
9
|
after(:each) do
|
10
10
|
Timecop.return
|
11
11
|
end
|
12
|
-
let(:bus_attrs) { {"
|
12
|
+
let(:bus_attrs) { {"bus_class_proxy"=>"QueueBus::Driver",
|
13
|
+
"bus_published_at" => Time.now.to_i,
|
13
14
|
"bus_id"=>"#{Time.now.to_i}-idfhlkj",
|
14
15
|
"bus_app_hostname" => `hostname 2>&1`.strip.sub(/.local/,'')} }
|
15
16
|
|
@@ -24,8 +25,9 @@ describe "Publishing an event" do
|
|
24
25
|
|
25
26
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
26
27
|
hash = JSON.parse(val)
|
27
|
-
hash["class"].should == "QueueBus::
|
28
|
-
hash["args"].should ==
|
28
|
+
hash["class"].should == "QueueBus::Worker"
|
29
|
+
hash["args"].size.should == 1
|
30
|
+
JSON.parse(hash["args"].first).should == {"bus_event_type" => event_name, "two"=>"here", "one"=>1, "id" => 12}.merge(bus_attrs)
|
29
31
|
|
30
32
|
end
|
31
33
|
|
@@ -40,8 +42,9 @@ describe "Publishing an event" do
|
|
40
42
|
|
41
43
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
42
44
|
hash = JSON.parse(val)
|
43
|
-
hash["class"].should == "QueueBus::
|
44
|
-
hash["args"].should ==
|
45
|
+
hash["class"].should == "QueueBus::Worker"
|
46
|
+
hash["args"].size.should == 1
|
47
|
+
JSON.parse(hash["args"].first).should == {"bus_event_type" => event_name, "two"=>"here", "one"=>1}.merge(bus_attrs).merge("bus_id" => 'app-given')
|
45
48
|
end
|
46
49
|
|
47
50
|
it "should add metadata via callback" do
|
@@ -62,7 +65,7 @@ describe "Publishing an event" do
|
|
62
65
|
|
63
66
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
64
67
|
hash = JSON.parse(val)
|
65
|
-
att = hash["args"].first
|
68
|
+
att = JSON.parse(hash["args"].first)
|
66
69
|
att["mine"].should == 4
|
67
70
|
myval.should == 1
|
68
71
|
end
|
@@ -86,8 +89,8 @@ describe "Publishing an event" do
|
|
86
89
|
|
87
90
|
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
|
88
91
|
hash = JSON.parse(val)
|
89
|
-
hash["class"].should == "QueueBus::
|
90
|
-
att = hash["args"].first
|
92
|
+
hash["class"].should == "QueueBus::Worker"
|
93
|
+
att = JSON.parse(hash["args"].first)
|
91
94
|
att["bus_locale"].should == "jp"
|
92
95
|
att["bus_timezone"].should == "EST"
|
93
96
|
end
|
data/spec/subscriber_spec.rb
CHANGED
@@ -89,13 +89,14 @@ require 'spec_helper'
|
|
89
89
|
QueueBus::Driver.perform(attributes.merge("bus_event_type" => "something2", "value"=>"nice"))
|
90
90
|
|
91
91
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:test2_default") })
|
92
|
-
hash["class"].should == "
|
93
|
-
hash["args"].should
|
94
|
-
|
92
|
+
hash["class"].should == "QueueBus::Worker"
|
93
|
+
hash["args"].size.should == 1
|
94
|
+
JSON.parse(hash["args"].first).should eq({"bus_class_proxy" => "SubscriberTest2", "bus_rider_app_key"=>"test2", "bus_rider_sub_key"=>"SubscriberTest2.test2", "bus_rider_queue" => "test2_default", "bus_rider_class_name"=>"SubscriberTest2",
|
95
|
+
"bus_event_type" => "something2", "value"=>"nice", "x"=>"y"}.merge(bus_attrs))
|
95
96
|
|
96
97
|
QueueBus::Runner1.value.should == 0
|
97
98
|
QueueBus::Runner2.value.should == 0
|
98
|
-
QueueBus::Util.constantize(hash["class"]).perform(
|
99
|
+
QueueBus::Util.constantize(hash["class"]).perform(JSON.parse(hash["args"].first))
|
99
100
|
QueueBus::Runner1.value.should == 1
|
100
101
|
QueueBus::Runner2.value.should == 0
|
101
102
|
|
@@ -105,13 +106,14 @@ require 'spec_helper'
|
|
105
106
|
QueueBus::Driver.perform(attributes.merge("bus_event_type" => "something2", "value"=>"12"))
|
106
107
|
|
107
108
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:test2_default") })
|
108
|
-
hash["class"].should == "
|
109
|
-
hash["args"].should ==
|
110
|
-
|
109
|
+
hash["class"].should == "QueueBus::Worker"
|
110
|
+
hash["args"].size.should == 1
|
111
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "SubscriberTest2", "bus_rider_app_key"=>"test2", "bus_rider_sub_key"=>"SubscriberTest2.test2", "bus_rider_queue" => "test2_default", "bus_rider_class_name"=>"SubscriberTest2",
|
112
|
+
"bus_event_type" => "something2", "value"=>"12", "x"=>"y"}.merge(bus_attrs)
|
111
113
|
|
112
114
|
QueueBus::Runner1.value.should == 1
|
113
115
|
QueueBus::Runner2.value.should == 0
|
114
|
-
QueueBus::Util.constantize(hash["class"]).perform(
|
116
|
+
QueueBus::Util.constantize(hash["class"]).perform(JSON.parse(hash["args"].first))
|
115
117
|
QueueBus::Runner1.value.should == 2
|
116
118
|
QueueBus::Runner2.value.should == 0
|
117
119
|
|
@@ -151,24 +153,26 @@ require 'spec_helper'
|
|
151
153
|
QueueBus::Driver.perform(attributes.merge("bus_event_type" => "the_event"))
|
152
154
|
|
153
155
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:sub_queue1") })
|
154
|
-
hash["class"].should == "
|
155
|
-
hash["args"].should ==
|
156
|
-
|
156
|
+
hash["class"].should == "QueueBus::Worker"
|
157
|
+
hash["args"].size.should == 1
|
158
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "SubModule::SubscriberTest3", "bus_rider_app_key"=>"sub_module", "bus_rider_sub_key"=>"SubModule::SubscriberTest3.test3", "bus_rider_queue" => "sub_queue1", "bus_rider_class_name"=>"SubModule::SubscriberTest3",
|
159
|
+
"bus_event_type" => "the_event", "x" => "y"}.merge(bus_attrs)
|
157
160
|
|
158
161
|
QueueBus::Runner1.value.should == 0
|
159
162
|
QueueBus::Runner2.value.should == 0
|
160
|
-
QueueBus::Util.constantize(hash["class"]).perform(
|
163
|
+
QueueBus::Util.constantize(hash["class"]).perform(JSON.parse(hash["args"].first))
|
161
164
|
QueueBus::Runner1.value.should == 1
|
162
165
|
QueueBus::Runner2.value.should == 0
|
163
166
|
|
164
167
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:sub_queue2") })
|
165
|
-
hash["class"].should == "
|
166
|
-
hash["args"].should ==
|
167
|
-
|
168
|
+
hash["class"].should == "QueueBus::Worker"
|
169
|
+
hash["args"].size.should == 1
|
170
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "SubModule::SubscriberTest3", "bus_rider_app_key"=>"sub_module", "bus_rider_sub_key"=>"SubModule::SubscriberTest3.the_event", "bus_rider_queue" => "sub_queue2", "bus_rider_class_name"=>"SubModule::SubscriberTest3",
|
171
|
+
"bus_event_type" => "the_event", "x" => "y"}.merge(bus_attrs)
|
168
172
|
|
169
173
|
QueueBus::Runner1.value.should == 1
|
170
174
|
QueueBus::Runner2.value.should == 0
|
171
|
-
QueueBus::Util.constantize(hash["class"]).perform(
|
175
|
+
QueueBus::Util.constantize(hash["class"]).perform(JSON.parse(hash["args"].first))
|
172
176
|
QueueBus::Runner1.value.should == 1
|
173
177
|
QueueBus::Runner2.value.should == 1
|
174
178
|
end
|
@@ -203,23 +207,24 @@ require 'spec_helper'
|
|
203
207
|
hash2 = pop1
|
204
208
|
end
|
205
209
|
|
206
|
-
hash1["class"].should == "
|
207
|
-
hash1["args"].first.should eq({"bus_rider_app_key"=>"my_thing", "bus_rider_sub_key"=>"SubscriberTest1.thing_filter", "bus_rider_queue" => "myqueue", "bus_rider_class_name"=>"SubscriberTest1",
|
210
|
+
hash1["class"].should == "QueueBus::Worker"
|
211
|
+
JSON.parse(hash1["args"].first).should eq({"bus_class_proxy" => "SubscriberTest1", "bus_rider_app_key"=>"my_thing", "bus_rider_sub_key"=>"SubscriberTest1.thing_filter", "bus_rider_queue" => "myqueue", "bus_rider_class_name"=>"SubscriberTest1",
|
208
212
|
"bus_event_type" => "event_sub", "x" => "y"}.merge(bus_attrs))
|
209
213
|
|
210
214
|
QueueBus::Runner1.value.should == 0
|
211
215
|
QueueBus::Runner2.value.should == 0
|
212
|
-
QueueBus::Util.constantize(hash1["class"]).perform(
|
216
|
+
QueueBus::Util.constantize(hash1["class"]).perform(JSON.parse(hash1["args"].first))
|
213
217
|
QueueBus::Runner1.value.should == 0
|
214
218
|
QueueBus::Runner2.value.should == 1
|
215
219
|
|
216
|
-
hash2["class"].should == "
|
217
|
-
hash2["args"].should ==
|
218
|
-
|
220
|
+
hash2["class"].should == "QueueBus::Worker"
|
221
|
+
hash2["args"].size.should == 1
|
222
|
+
JSON.parse(hash2["args"].first).should == {"bus_class_proxy" => "SubscriberTest1", "bus_rider_app_key"=>"my_thing", "bus_rider_sub_key"=>"SubscriberTest1.event_sub", "bus_rider_queue" => "myqueue", "bus_rider_class_name"=>"SubscriberTest1",
|
223
|
+
"bus_event_type" => "event_sub", "x" => "y"}.merge(bus_attrs)
|
219
224
|
|
220
225
|
QueueBus::Runner1.value.should == 0
|
221
226
|
QueueBus::Runner2.value.should == 1
|
222
|
-
QueueBus::Util.constantize(hash2["class"]).perform(
|
227
|
+
QueueBus::Util.constantize(hash2["class"]).perform(JSON.parse(hash2["args"].first))
|
223
228
|
QueueBus::Runner1.value.should == 1
|
224
229
|
QueueBus::Runner2.value.should == 1
|
225
230
|
|
@@ -227,13 +232,14 @@ require 'spec_helper'
|
|
227
232
|
QueueBus.redis { |redis| redis.smembers("queues") }.should =~ ["myqueue"]
|
228
233
|
|
229
234
|
hash = JSON.parse(QueueBus.redis { |redis| redis.lpop("queue:myqueue") })
|
230
|
-
hash["class"].should == "
|
231
|
-
hash["args"].should ==
|
232
|
-
|
235
|
+
hash["class"].should == "QueueBus::Worker"
|
236
|
+
hash["args"].size.should == 1
|
237
|
+
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "SubscriberTest1", "bus_rider_app_key"=>"my_thing", "bus_rider_sub_key"=>"SubscriberTest1.thing_filter", "bus_rider_queue" => "myqueue", "bus_rider_class_name"=>"SubscriberTest1",
|
238
|
+
"bus_event_type" => "event_sub_other", "x" => "y"}.merge(bus_attrs)
|
233
239
|
|
234
240
|
QueueBus::Runner1.value.should == 1
|
235
241
|
QueueBus::Runner2.value.should == 1
|
236
|
-
QueueBus::Util.constantize(hash["class"]).perform(
|
242
|
+
QueueBus::Util.constantize(hash["class"]).perform(JSON.parse(hash["args"].first))
|
237
243
|
QueueBus::Runner1.value.should == 1
|
238
244
|
QueueBus::Runner2.value.should == 2
|
239
245
|
|
@@ -243,10 +249,6 @@ require 'spec_helper'
|
|
243
249
|
QueueBus.redis { |redis| redis.lpop("queue:myqueue") }.should be_nil
|
244
250
|
end
|
245
251
|
|
246
|
-
it "should have gotten the perform method from the ::Worker" do
|
247
|
-
SubscriberTest1.instance_methods.should include(:perform)
|
248
|
-
end
|
249
|
-
|
250
252
|
describe ".perform" do
|
251
253
|
let(:attributes) { {"bus_rider_sub_key"=>"SubscriberTest1.event_sub", "bus_locale" => "en", "bus_timezone" => "PST"} }
|
252
254
|
it "should call the method based on key" do
|
data/spec/worker_spec.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module QueueBus
|
4
|
+
describe Worker do
|
5
|
+
it "should proxy to given class" do
|
6
|
+
hash = {"bus_class_proxy" => "QueueBus::Driver", "ok" => true}
|
7
|
+
QueueBus::Driver.should_receive(:perform).with(hash)
|
8
|
+
QueueBus::Worker.perform(hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should use instance" do
|
12
|
+
hash = {"bus_class_proxy" => "QueueBus::Rider", "ok" => true}
|
13
|
+
QueueBus::Rider.should_receive(:perform).with(hash)
|
14
|
+
QueueBus::Worker.new.perform(hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not freak out if class not there anymore" do
|
18
|
+
hash = {"bus_class_proxy" => "QueueBus::BadClass", "ok" => true}
|
19
|
+
lambda {
|
20
|
+
QueueBus::Worker.perform(hash)
|
21
|
+
}.should_not raise_error
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should raise error if proxy raises error" do
|
25
|
+
hash = {"bus_class_proxy" => "QueueBus::Rider", "ok" => true}
|
26
|
+
QueueBus::Rider.should_receive(:perform).with(hash).and_raise("rider crash")
|
27
|
+
lambda {
|
28
|
+
QueueBus::Worker.perform(hash)
|
29
|
+
}.should raise_error
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queue-bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-01-
|
12
|
+
date: 2015-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- spec/subscriber_spec.rb
|
148
148
|
- spec/subscription_list_spec.rb
|
149
149
|
- spec/subscription_spec.rb
|
150
|
+
- spec/worker_spec.rb
|
150
151
|
homepage: ''
|
151
152
|
licenses: []
|
152
153
|
post_install_message:
|
@@ -189,4 +190,5 @@ test_files:
|
|
189
190
|
- spec/subscriber_spec.rb
|
190
191
|
- spec/subscription_list_spec.rb
|
191
192
|
- spec/subscription_spec.rb
|
193
|
+
- spec/worker_spec.rb
|
192
194
|
has_rdoc:
|