reactor 0.8.0 → 0.8.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.
- checksums.yaml +4 -4
- data/lib/reactor/event.rb +3 -3
- data/lib/reactor/testing/matchers.rb +11 -5
- data/lib/reactor/version.rb +1 -1
- data/reactor.gemspec +1 -1
- data/spec/controllers/concerns/resource_actionable_spec.rb +19 -19
- data/spec/event_spec.rb +30 -17
- data/spec/models/concerns/publishable_spec.rb +17 -17
- data/spec/models/concerns/subscribable_spec.rb +11 -11
- data/spec/models/subscriber_spec.rb +14 -4
- data/spec/reactor_spec.rb +4 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c458036301b887cea2e6e656cd94ed497750ebed
|
4
|
+
data.tar.gz: 706f502c1bbbac9172374b7b065ddb627f3de656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b5ebaf7f01782274bbd324789f138e6fc82af0de759d624d63e6c50f553783ff4be37b774d365086984e64ef11367777d4f98f108533a6b1ebc3a6532d64c65
|
7
|
+
data.tar.gz: e0f664ec820fcaa59c7a181bceffdb3b049799f841ccced731392e21b1e6453bacfafc2460b3010fca64ae083d17fcd0ae674484c0c955ecb5f208399c4d6487
|
data/lib/reactor/event.rb
CHANGED
@@ -64,9 +64,9 @@ class Reactor::Event
|
|
64
64
|
|
65
65
|
def enforce_serializable_model_keys!(event_signature)
|
66
66
|
event_signature = event_signature.stringify_keys
|
67
|
-
serializable_models = event_signature.keys.map(&:to_s).select { |k| k.
|
68
|
-
.map { |k| k.gsub(
|
69
|
-
.map { |k| k.gsub(
|
67
|
+
serializable_models = event_signature.keys.map(&:to_s).select { |k| k.end_with?('_id') || k.end_with?('_type') }
|
68
|
+
.map { |k| k.gsub(/_id\Z/, '') }
|
69
|
+
.map { |k| k.gsub(/_type\Z/, '') }
|
70
70
|
.uniq
|
71
71
|
|
72
72
|
serializable_models.each do |model_relation_name|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
RSpec::Matchers.define :publish_event do |name, data = {}|
|
2
|
+
supports_block_expectations
|
3
|
+
|
2
4
|
match do |block|
|
3
5
|
defaults = {:actor => anything}
|
4
|
-
Reactor::Event.
|
6
|
+
expect(Reactor::Event).to receive(:publish).with(name, hash_including(defaults.merge(data)))
|
5
7
|
|
6
8
|
begin
|
7
9
|
block.call
|
@@ -14,14 +16,16 @@ RSpec::Matchers.define :publish_event do |name, data = {}|
|
|
14
16
|
end
|
15
17
|
|
16
18
|
RSpec::Matchers.define :publish_events do |*events|
|
19
|
+
supports_block_expectations
|
20
|
+
|
17
21
|
match do |block|
|
18
|
-
Reactor::Event.
|
22
|
+
expect(Reactor::Event).to receive(:publish).exactly(events.count).times do |event, data|
|
19
23
|
match = events.select { |e| (e.is_a?(Hash) ? e.keys.first : e) == event }.first
|
20
|
-
match.
|
24
|
+
expect(match).to be_present
|
21
25
|
|
22
26
|
expected = match.is_a?(Hash) ? match.values.first : {match => {}}
|
23
27
|
expected.each do |key, value|
|
24
|
-
value.
|
28
|
+
expect(value).to eq(expected[key])
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
@@ -36,8 +40,10 @@ RSpec::Matchers.define :publish_events do |*events|
|
|
36
40
|
end
|
37
41
|
|
38
42
|
RSpec::Matchers.define :subscribe_to do |name, data = {}, &expectations|
|
43
|
+
supports_block_expectations
|
44
|
+
|
39
45
|
match do
|
40
46
|
expectations.call if expectations.present?
|
41
47
|
Reactor::Event.publish(name, data)
|
42
48
|
end
|
43
|
-
end
|
49
|
+
end
|
data/lib/reactor/version.rb
CHANGED
data/reactor.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
25
|
spec.add_development_dependency "rake"
|
26
|
-
spec.add_development_dependency "rspec", "~> 2.
|
26
|
+
spec.add_development_dependency "rspec", "~> 2.99.0"
|
27
27
|
spec.add_development_dependency "pry"
|
28
28
|
spec.add_development_dependency "sqlite3"
|
29
29
|
spec.add_development_dependency "test_after_commit"
|
@@ -30,7 +30,7 @@ describe Reactor::ResourceActionable do
|
|
30
30
|
|
31
31
|
describe "when action strategy class exists" do
|
32
32
|
it 'runs the strategy of the matching name' do
|
33
|
-
Reactor::ResourceActionable::CreateEvent.
|
33
|
+
expect(Reactor::ResourceActionable::CreateEvent).to receive(:perform_on).with(controller_stub)
|
34
34
|
controller_stub.create
|
35
35
|
end
|
36
36
|
end
|
@@ -38,7 +38,7 @@ describe Reactor::ResourceActionable do
|
|
38
38
|
describe "when action is non-standard rails CRUD action" do
|
39
39
|
it 'fires a basic action_event' do
|
40
40
|
controller_stub.action_name = 'do_thing'
|
41
|
-
controller_stub.
|
41
|
+
expect(controller_stub).to receive(:action_event).with("cat_do_thing")
|
42
42
|
controller_stub.create
|
43
43
|
end
|
44
44
|
end
|
@@ -47,41 +47,41 @@ end
|
|
47
47
|
describe "ActionEvents" do
|
48
48
|
let(:actionable_resource) { ArbitraryModel.create! }
|
49
49
|
let(:nested_resource) { Pet.create! }
|
50
|
-
let(:ctrl_stub) {
|
50
|
+
let(:ctrl_stub) { double(resource_name: "cat", actionable_resource: actionable_resource, nested_resource: nested_resource, params: {'cat' => {name: "Sasha"}} ) }
|
51
51
|
|
52
52
|
describe "ShowEvent" do
|
53
53
|
after { Reactor::ResourceActionable::ShowEvent.perform_on(ctrl_stub) }
|
54
|
-
specify { ctrl_stub.
|
54
|
+
specify { expect(ctrl_stub).to receive(:action_event).with("cat_viewed", target: actionable_resource) }
|
55
55
|
end
|
56
56
|
|
57
57
|
describe "EditEvent" do
|
58
58
|
after { Reactor::ResourceActionable::EditEvent.perform_on(ctrl_stub) }
|
59
|
-
specify { ctrl_stub.
|
59
|
+
specify { expect(ctrl_stub).to receive(:action_event).with("edit_cat_form_viewed", target: actionable_resource) }
|
60
60
|
end
|
61
61
|
|
62
62
|
describe "NewEvent" do
|
63
63
|
after { Reactor::ResourceActionable::NewEvent.perform_on(ctrl_stub) }
|
64
|
-
specify { ctrl_stub.
|
64
|
+
specify { expect(ctrl_stub).to receive(:action_event).with("new_cat_form_viewed", target: nested_resource) }
|
65
65
|
end
|
66
66
|
|
67
67
|
describe "IndexEvent" do
|
68
68
|
after { Reactor::ResourceActionable::IndexEvent.perform_on(ctrl_stub) }
|
69
|
-
specify { ctrl_stub.
|
69
|
+
specify { expect(ctrl_stub).to receive(:action_event).with("cats_indexed", target: nested_resource) }
|
70
70
|
end
|
71
71
|
|
72
72
|
describe "DestroyEvent" do
|
73
73
|
after { Reactor::ResourceActionable::DestroyEvent.perform_on(ctrl_stub) }
|
74
|
-
specify { ctrl_stub.
|
74
|
+
specify { expect(ctrl_stub).to receive(:action_event).with("cat_destroyed", last_snapshot: actionable_resource.as_json) }
|
75
75
|
end
|
76
76
|
|
77
77
|
describe "CreateEvent" do
|
78
78
|
after { Reactor::ResourceActionable::CreateEvent.perform_on(ctrl_stub) }
|
79
79
|
|
80
80
|
describe "when resource is valid" do
|
81
|
-
before { actionable_resource.
|
81
|
+
before { expect(actionable_resource).to receive(:valid?).and_return(true) }
|
82
82
|
|
83
83
|
specify do
|
84
|
-
ctrl_stub.
|
84
|
+
expect(ctrl_stub).to receive(:action_event)
|
85
85
|
.with("cat_created",
|
86
86
|
target: actionable_resource,
|
87
87
|
attributes: {name: "Sasha"})
|
@@ -90,12 +90,12 @@ describe "ActionEvents" do
|
|
90
90
|
|
91
91
|
describe "when resource is not valid" do
|
92
92
|
before do
|
93
|
-
actionable_resource.
|
94
|
-
actionable_resource.
|
93
|
+
expect(actionable_resource).to receive(:valid?).and_return(false)
|
94
|
+
expect(actionable_resource).to receive(:errors).and_return('awesomeness' => 'too awesome')
|
95
95
|
end
|
96
96
|
|
97
97
|
specify do
|
98
|
-
ctrl_stub.
|
98
|
+
expect(ctrl_stub).to receive(:action_event)
|
99
99
|
.with("cat_create_failed",
|
100
100
|
errors: {'awesomeness' => 'too awesome'},
|
101
101
|
target: nested_resource,
|
@@ -109,12 +109,12 @@ describe "ActionEvents" do
|
|
109
109
|
|
110
110
|
describe "when resource is valid" do
|
111
111
|
before do
|
112
|
-
actionable_resource.
|
113
|
-
actionable_resource.
|
112
|
+
expect(actionable_resource).to receive(:valid?).and_return(true)
|
113
|
+
expect(actionable_resource).to receive(:previous_changes).and_return({'name' => [nil, "Sasha"]})
|
114
114
|
end
|
115
115
|
|
116
116
|
specify do
|
117
|
-
ctrl_stub.
|
117
|
+
expect(ctrl_stub).to receive(:action_event)
|
118
118
|
.with("cat_updated",
|
119
119
|
target: actionable_resource,
|
120
120
|
changes: {'name' => [nil, "Sasha"]})
|
@@ -123,12 +123,12 @@ describe "ActionEvents" do
|
|
123
123
|
|
124
124
|
describe "when resource is not valid" do
|
125
125
|
before do
|
126
|
-
actionable_resource.
|
127
|
-
actionable_resource.
|
126
|
+
expect(actionable_resource).to receive(:valid?).and_return(false)
|
127
|
+
expect(actionable_resource).to receive(:errors).and_return('awesomeness' => 'too awesome')
|
128
128
|
end
|
129
129
|
|
130
130
|
specify do
|
131
|
-
ctrl_stub.
|
131
|
+
expect(ctrl_stub).to receive(:action_event)
|
132
132
|
.with("cat_update_failed",
|
133
133
|
target: actionable_resource,
|
134
134
|
errors: {'awesomeness' => 'too awesome'},
|
data/spec/event_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe Reactor::Event do
|
|
18
18
|
|
19
19
|
describe 'publish' do
|
20
20
|
it 'fires the first perform and sets message event_id' do
|
21
|
-
Reactor::Event.
|
21
|
+
expect(Reactor::Event).to receive(:perform_async).with(event_name, 'actor_id' => '1', 'actor_type' => 'Pet', 'event' => :user_did_this)
|
22
22
|
Reactor::Event.publish(:user_did_this, actor_id: '1', actor_type: 'Pet')
|
23
23
|
end
|
24
24
|
|
@@ -39,22 +39,22 @@ describe Reactor::Event do
|
|
39
39
|
before { Reactor::Subscriber.create(event_name: :user_did_this) }
|
40
40
|
after { Reactor::Subscriber.destroy_all }
|
41
41
|
it 'fires all subscribers' do
|
42
|
-
Reactor::Subscriber.
|
42
|
+
expect_any_instance_of(Reactor::Subscriber).to receive(:fire).with(hash_including(actor_id: '1'))
|
43
43
|
Reactor::Event.perform(event_name, actor_id: '1')
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'sets a fired_at key in event data' do
|
47
|
-
Reactor::Subscriber.
|
47
|
+
expect_any_instance_of(Reactor::Subscriber).to receive(:fire).with(hash_including(fired_at: anything))
|
48
48
|
Reactor::Event.perform(event_name, actor_id: '1')
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'works with the legacy .process method, too' do
|
52
|
-
Reactor::Subscriber.
|
52
|
+
expect_any_instance_of(Reactor::Subscriber).to receive(:fire).with(hash_including(actor_id: '1'))
|
53
53
|
Reactor::Event.perform(event_name, actor_id: '1')
|
54
54
|
end
|
55
55
|
|
56
56
|
describe 'when subscriber throws exception', :sidekiq do
|
57
|
-
let(:mock) {
|
57
|
+
let(:mock) { double(:thing, some_method: 3) }
|
58
58
|
let(:barfing_event) { Reactor::Event.perform('barfed', somethin: 'up') }
|
59
59
|
|
60
60
|
before do
|
@@ -63,7 +63,7 @@ describe Reactor::Event do
|
|
63
63
|
raise 'UNEXPECTED!'
|
64
64
|
end
|
65
65
|
Reactor::SUBSCRIBERS['barfed'] << Reactor::Subscribable::StaticSubscriberFactory.create('barfed') do |event|
|
66
|
-
|
66
|
+
double.some_method
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -80,12 +80,12 @@ describe Reactor::Event do
|
|
80
80
|
it 'can schedule and reschedule an event in the future' do
|
81
81
|
expect {
|
82
82
|
jid = Reactor::Event.publish :turtle_time, at: time
|
83
|
-
scheduled.find_job(jid).score.
|
83
|
+
expect(scheduled.find_job(jid).score).to eq(time.to_f)
|
84
84
|
}.to change { scheduled.size }.by(1)
|
85
85
|
|
86
86
|
expect {
|
87
87
|
jid = Reactor::Event.reschedule :turtle_time, at: (time + 2.hours), was: time
|
88
|
-
scheduled.find_job(jid).score.
|
88
|
+
expect(scheduled.find_job(jid).score).to eq((time + 2.hours).to_f)
|
89
89
|
}.to_not change { scheduled.size }
|
90
90
|
end
|
91
91
|
end
|
@@ -101,19 +101,32 @@ describe Reactor::Event do
|
|
101
101
|
|
102
102
|
describe 'getters' do
|
103
103
|
context 'basic key value' do
|
104
|
-
|
104
|
+
describe '#random' do
|
105
|
+
subject { super().random }
|
106
|
+
it { is_expected.to eq('data') }
|
107
|
+
end
|
105
108
|
end
|
106
109
|
|
107
110
|
context 'foreign key and foreign type' do
|
108
|
-
|
109
|
-
|
111
|
+
describe '#pet' do
|
112
|
+
subject { super().pet }
|
113
|
+
it { is_expected.to be_a MyModule::Cat }
|
114
|
+
end
|
115
|
+
|
116
|
+
describe '#pet' do
|
117
|
+
subject { super().pet }
|
118
|
+
describe '#id' do
|
119
|
+
subject { super().id }
|
120
|
+
it { is_expected.to eq(MyModule::Cat.last.id) }
|
121
|
+
end
|
122
|
+
end
|
110
123
|
end
|
111
124
|
end
|
112
125
|
|
113
126
|
describe 'setters' do
|
114
127
|
it 'sets simple keys' do
|
115
128
|
event.simple = 'key'
|
116
|
-
event.data[:simple].
|
129
|
+
expect(event.data[:simple]).to eq('key')
|
117
130
|
end
|
118
131
|
|
119
132
|
it 'sets active_record polymorphic keys' do
|
@@ -126,14 +139,14 @@ describe Reactor::Event do
|
|
126
139
|
|
127
140
|
describe 'data' do
|
128
141
|
let(:serialized_event) { event.data }
|
129
|
-
specify { serialized_event.
|
130
|
-
specify { serialized_event[:random].
|
142
|
+
specify { expect(serialized_event).to be_a Hash }
|
143
|
+
specify { expect(serialized_event[:random]).to eq('data') }
|
131
144
|
end
|
132
145
|
|
133
146
|
describe 'new' do
|
134
|
-
specify { event.
|
135
|
-
specify { event.pet_id.
|
136
|
-
specify { event.arbitrary_model_id.
|
147
|
+
specify { expect(event).to be_a Reactor::Event }
|
148
|
+
specify { expect(event.pet_id).to eq(cat.id) }
|
149
|
+
specify { expect(event.arbitrary_model_id).to eq(arbitrary_model.id) }
|
137
150
|
end
|
138
151
|
end
|
139
152
|
end
|
@@ -35,18 +35,18 @@ describe Reactor::Publishable do
|
|
35
35
|
|
36
36
|
it 'publishes an event with actor_id and actor_type set as self' do
|
37
37
|
auction
|
38
|
-
Reactor::Event.
|
39
|
-
name.
|
40
|
-
data[:what].
|
41
|
-
data[:actor].
|
38
|
+
expect(Reactor::Event).to receive(:publish) do |name, data|
|
39
|
+
expect(name).to eq(:an_event)
|
40
|
+
expect(data[:what]).to eq('the')
|
41
|
+
expect(data[:actor]).to eq(auction)
|
42
42
|
end
|
43
43
|
auction.publish(:an_event, {what: 'the'})
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'publishes an event with provided actor and target methods' do
|
47
|
-
Reactor::Event.
|
48
|
-
name.
|
49
|
-
data[:actor].
|
47
|
+
expect(Reactor::Event).to receive(:publish) do |name, data|
|
48
|
+
expect(name).to eq(:woof)
|
49
|
+
expect(data[:actor]).to eq(pet)
|
50
50
|
end
|
51
51
|
auction
|
52
52
|
end
|
@@ -54,8 +54,8 @@ describe Reactor::Publishable do
|
|
54
54
|
it 'reschedules an event when the :at time changes' do
|
55
55
|
start_at = auction.start_at
|
56
56
|
new_start_at = start_at + 1.week
|
57
|
-
Reactor::Event.
|
58
|
-
Reactor::Event.
|
57
|
+
expect(Reactor::Event).to receive(:reschedule).with :ring, anything
|
58
|
+
expect(Reactor::Event).to receive(:reschedule).with :begin,
|
59
59
|
hash_including(
|
60
60
|
at: new_start_at,
|
61
61
|
actor: auction,
|
@@ -70,8 +70,8 @@ describe Reactor::Publishable do
|
|
70
70
|
ring_time = auction.ring_timeout
|
71
71
|
new_start_at = auction.start_at + 1.week
|
72
72
|
new_ring_time = new_start_at + 30.seconds
|
73
|
-
Reactor::Event.
|
74
|
-
Reactor::Event.
|
73
|
+
expect(Reactor::Event).to receive(:reschedule).with :begin, anything
|
74
|
+
expect(Reactor::Event).to receive(:reschedule).with :ring,
|
75
75
|
hash_including(
|
76
76
|
at: new_ring_time,
|
77
77
|
actor: auction,
|
@@ -84,24 +84,24 @@ describe Reactor::Publishable do
|
|
84
84
|
it 'supports immediate events (on create) that get fired once' do
|
85
85
|
TestSubscriber.create! event_name: :bell
|
86
86
|
auction
|
87
|
-
TestSubscriber.class_variable_get(:@@called).
|
87
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_truthy
|
88
88
|
TestSubscriber.class_variable_set(:@@called, false)
|
89
89
|
auction.start_at = 1.day.from_now
|
90
90
|
auction.save
|
91
|
-
TestSubscriber.class_variable_get(:@@called).
|
91
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_falsey
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'does not publish an event scheduled for the past' do
|
95
95
|
TestSubscriber.create! event_name: :begin
|
96
96
|
auction
|
97
|
-
TestSubscriber.class_variable_get(:@@called).
|
97
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_falsey
|
98
98
|
end
|
99
99
|
|
100
100
|
it 'does publish an event scheduled for the future' do
|
101
101
|
TestSubscriber.create! event_name: :begin
|
102
102
|
Auction.create!(pet: pet, start_at: Time.current + 1.week)
|
103
103
|
|
104
|
-
TestSubscriber.class_variable_get(:@@called).
|
104
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_truthy
|
105
105
|
end
|
106
106
|
|
107
107
|
it 'can fire events onsave for any condition' do
|
@@ -110,11 +110,11 @@ describe Reactor::Publishable do
|
|
110
110
|
TestSubscriber.class_variable_set(:@@called, false)
|
111
111
|
auction.start_at = 1.day.from_now
|
112
112
|
auction.save
|
113
|
-
TestSubscriber.class_variable_get(:@@called).
|
113
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_falsey
|
114
114
|
auction.start_at = 2.days.from_now
|
115
115
|
auction.we_want_it = true
|
116
116
|
auction.save
|
117
|
-
TestSubscriber.class_variable_get(:@@called).
|
117
|
+
expect(TestSubscriber.class_variable_get(:@@called)).to be_truthy
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
@@ -33,7 +33,7 @@ describe Reactor::Subscribable do
|
|
33
33
|
|
34
34
|
describe 'on_event' do
|
35
35
|
it 'binds block of code statically to event being fired' do
|
36
|
-
Auction.
|
36
|
+
expect_any_instance_of(Auction).to receive(:update_column).with(:status, 'first_bid_made')
|
37
37
|
Reactor::Event.publish(:bid_made, target: Auction.create)
|
38
38
|
end
|
39
39
|
|
@@ -46,49 +46,49 @@ describe Reactor::Subscribable do
|
|
46
46
|
|
47
47
|
describe 'binding symbol of class method' do
|
48
48
|
it 'fires on event' do
|
49
|
-
Auction.
|
49
|
+
expect(Auction).to receive(:ring_bell)
|
50
50
|
Reactor::Event.publish(:puppy_delivered)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'can be delayed' do
|
54
|
-
Auction.
|
55
|
-
Auction.
|
54
|
+
expect(Auction).to receive(:pick_up_poop)
|
55
|
+
expect(Auction).to receive(:delay_for).with(5.minutes).and_return(Auction)
|
56
56
|
Reactor::Event.perform('pooped', {})
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'binds proc' do
|
61
|
-
Auction.
|
61
|
+
expect(Auction).to receive(:puppies!)
|
62
62
|
Reactor::Event.publish(:any_event)
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'accepts wildcard event name' do
|
66
|
-
Auction.
|
66
|
+
expect_any_instance_of(Auction).to receive(:more_puppies!)
|
67
67
|
Reactor::Event.publish(:another_event, actor: Auction.create)
|
68
68
|
end
|
69
69
|
|
70
70
|
describe 'in_memory flag' do
|
71
71
|
it 'doesnt fire perform_async when true' do
|
72
|
-
Auction.
|
73
|
-
Reactor::StaticSubscribers::CatDeliveredHandler0.
|
72
|
+
expect(Auction).to receive(:puppies!)
|
73
|
+
expect(Reactor::StaticSubscribers::CatDeliveredHandler0).not_to receive(:perform_async)
|
74
74
|
Reactor::Event.publish(:cat_delivered)
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'fires perform_async when falsey' do
|
78
|
-
Reactor::StaticSubscribers::WildcardHandler0.
|
78
|
+
expect(Reactor::StaticSubscribers::WildcardHandler0).to receive(:perform_async)
|
79
79
|
Reactor::Event.publish(:puppy_delivered)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
83
|
describe '#perform' do
|
84
84
|
it 'returns :__perform_aborted__ when Reactor is in test mode' do
|
85
|
-
Reactor::StaticSubscribers::TestPuppyDeliveredHandler0.new.perform({}).
|
85
|
+
expect(Reactor::StaticSubscribers::TestPuppyDeliveredHandler0.new.perform({})).to eq(:__perform_aborted__)
|
86
86
|
Reactor::Event.publish(:test_puppy_delivered)
|
87
87
|
end
|
88
88
|
|
89
89
|
it 'performs normally when specifically enabled' do
|
90
90
|
Reactor.enable_test_mode_subscriber(TestModeAuction)
|
91
|
-
Reactor::StaticSubscribers::TestPuppyDeliveredHandler0.new.perform({}).
|
91
|
+
expect(Reactor::StaticSubscribers::TestPuppyDeliveredHandler0.new.perform({})).not_to eq(:__perform_aborted__)
|
92
92
|
Reactor::Event.publish(:test_puppy_delivered)
|
93
93
|
end
|
94
94
|
end
|
@@ -13,11 +13,21 @@ describe Reactor::Subscriber do
|
|
13
13
|
describe 'fire' do
|
14
14
|
subject { MySubscriber.create(event_name: :you_name_it).fire some: 'random', event: 'data' }
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
describe '#event' do
|
17
|
+
subject { super().event }
|
18
|
+
it { is_expected.to be_a Reactor::Event }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#event' do
|
22
|
+
subject { super().event }
|
23
|
+
describe '#some' do
|
24
|
+
subject { super().some }
|
25
|
+
it { is_expected.to eq('random') }
|
26
|
+
end
|
27
|
+
end
|
18
28
|
|
19
29
|
it 'executes block given' do
|
20
|
-
subject.was_called.
|
30
|
+
expect(subject.was_called).to be_truthy
|
21
31
|
end
|
22
32
|
end
|
23
33
|
|
@@ -25,7 +35,7 @@ describe Reactor::Subscriber do
|
|
25
35
|
describe 'matcher' do
|
26
36
|
it 'can be set to star to bind to all events' do
|
27
37
|
MySubscriber.create!(event_name: '*')
|
28
|
-
MySubscriber.
|
38
|
+
expect_any_instance_of(MySubscriber).to receive(:fire).with(hash_including('random' => 'data', 'event' => 'this_event'))
|
29
39
|
Reactor::Event.publish(:this_event, {random: 'data'})
|
30
40
|
end
|
31
41
|
end
|
data/spec/reactor_spec.rb
CHANGED
@@ -12,9 +12,9 @@ describe Reactor do
|
|
12
12
|
|
13
13
|
describe '.test_mode!' do
|
14
14
|
it 'sets Reactor into test mode' do
|
15
|
-
Reactor.test_mode
|
15
|
+
expect(Reactor.test_mode?).to be_falsey
|
16
16
|
Reactor.test_mode!
|
17
|
-
Reactor.test_mode
|
17
|
+
expect(Reactor.test_mode?).to be_truthy
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -23,13 +23,13 @@ describe Reactor do
|
|
23
23
|
after { Reactor.disable_test_mode! }
|
24
24
|
|
25
25
|
it 'subscribers created in test mode are disabled' do
|
26
|
-
subscriber.
|
26
|
+
expect(subscriber).not_to receive :spy_on_me
|
27
27
|
Reactor::Event.publish :test_event
|
28
28
|
end
|
29
29
|
|
30
30
|
describe '.with_subscriber_enabled' do
|
31
31
|
it 'enables a subscriber during test mode' do
|
32
|
-
subscriber.
|
32
|
+
expect(subscriber).to receive :spy_on_me
|
33
33
|
Reactor.with_subscriber_enabled(subscriber) do
|
34
34
|
Reactor::Event.publish :test_event
|
35
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reactor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- winfred
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-
|
14
|
+
date: 2014-11-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: sidekiq
|
@@ -75,14 +75,14 @@ dependencies:
|
|
75
75
|
requirements:
|
76
76
|
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: 2.
|
78
|
+
version: 2.99.0
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
83
|
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version: 2.
|
85
|
+
version: 2.99.0
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: pry
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|