event_aggregator 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +1 -1
- data/lib/event_aggregator/aggregator.rb +116 -20
- data/lib/event_aggregator/listener.rb +35 -1
- data/lib/event_aggregator/message.rb +7 -0
- data/lib/event_aggregator/version.rb +1 -1
- data/spec/lib/event_aggregator/aggregator_spec.rb +374 -44
- data/spec/lib/event_aggregator/listener_spec.rb +59 -19
- data/spec/lib/event_aggregator/message_spec.rb +47 -31
- metadata +26 -42
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9cb0b49b83b8a1b106aaa26fa5f58a3e9741bc7d
|
4
|
+
data.tar.gz: ec7a28b676d35655d1aa390add1a407a9e0ae372
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed2b5c2c8a43be676afb59a532dc876f203b04889c7d0a4cdde32fd33b6f296f5db78c4b313f94ef5a3f4a9d976f1ce29f4e6b9898e44a8a4474474aecc4ccab
|
7
|
+
data.tar.gz: ae05cc002ecbbc2558c8372b1ca092958635aedf616d1e17bbfcc51f0f1367349172b960178876714eb3eed71836ac3b2e9ea335a996acc6bd45a740c77c84b0
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/event_aggregator.png)][gem]
|
5
|
-
[![Build Status](https://travis-ci.org/stephan-nordnes-eriksen/event_aggregator.png?branch=
|
5
|
+
[![Build Status](https://travis-ci.org/stephan-nordnes-eriksen/event_aggregator.png?branch=master)][travis]
|
6
6
|
[![Dependency Status](https://gemnasium.com/stephan-nordnes-eriksen/event_aggregator.png)][gemnasium]
|
7
7
|
[![Code Climate](https://codeclimate.com/github/stephan-nordnes-eriksen/event_aggregator.png)][codeclimate]
|
8
8
|
[![Coverage Status](https://coveralls.io/repos/stephan-nordnes-eriksen/event_aggregator/badge.png)][coveralls]
|
@@ -12,39 +12,63 @@ module EventAggregator
|
|
12
12
|
class Aggregator
|
13
13
|
class <<self; private :new; end
|
14
14
|
|
15
|
-
@@listeners = Hash.new{|h, k| h[k] =
|
16
|
-
|
17
|
-
|
15
|
+
@@listeners = Hash.new{|h, k| h[k] = Hash.new }
|
16
|
+
@@listeners_all = Hash.new
|
17
|
+
@@message_translation = Hash.new{|h, k| h[k] = Hash.new }
|
18
|
+
@@producers = Hash.new
|
19
|
+
# Public: Register an EventAggregator::Listener to receive
|
18
20
|
# a specified message type
|
19
21
|
#
|
20
|
-
# listener - An EventAggregator::Listener which should
|
22
|
+
# listener - An EventAggregator::Listener which should receive
|
21
23
|
# the messages.
|
22
|
-
# message_type - The message type to
|
24
|
+
# message_type - The message type to receive. Can be anything except nil.
|
23
25
|
# Often it is preferable to use a string eg. "Message Type".
|
26
|
+
# callback - The callback that will be executed when messages of type equal
|
27
|
+
# message_type is published. Is executed with message.data as parameter.
|
28
|
+
#
|
24
29
|
def self.register( listener, message_type, callback )
|
30
|
+
raise "Illegal listener" unless listener.class < EventAggregator::Listener
|
31
|
+
raise "Illegal message_type" if message_type == nil
|
32
|
+
raise "Illegal callback" unless callback.respond_to?(:call)
|
33
|
+
|
34
|
+
@@listeners[message_type][listener] = callback
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# Public: Register an EventAggregator::Listener to receive
|
39
|
+
# every single message that is published.
|
40
|
+
#
|
41
|
+
# listener - An EventAggregator::Listener which should receive
|
42
|
+
# the messages.
|
43
|
+
# callback - The callback that will be executed every time a message is published.
|
44
|
+
# will execute with the message as parameter.
|
45
|
+
#
|
46
|
+
def self.register_all( listener, callback )
|
47
|
+
raise "Illegal listener" unless listener.class < EventAggregator::Listener
|
25
48
|
raise "Illegal callback" unless callback.respond_to?(:call)
|
26
|
-
@@
|
49
|
+
@@listeners_all[listener] = callback
|
27
50
|
end
|
28
51
|
|
29
52
|
# Public: Unegister an EventAggregator::Listener to a
|
30
53
|
# specified message type. The listener will no
|
31
54
|
# longer get messages of this type.
|
32
55
|
#
|
33
|
-
# listener - The EventAggregator::Listener which should no longer
|
56
|
+
# listener - The EventAggregator::Listener which should no longer receive
|
34
57
|
# the messages.
|
35
58
|
# message_type - The message type to unregister for.
|
36
59
|
def self.unregister( listener, message_type )
|
37
|
-
@@listeners[message_type].
|
60
|
+
@@listeners[message_type].delete(listener)
|
38
61
|
end
|
39
62
|
|
40
63
|
# Public: As Unregister, but will unregister listener from all message types.
|
41
|
-
|
64
|
+
#!
|
42
65
|
# listener - The listener who should no longer get any messages at all,
|
43
66
|
# regardless of type.
|
44
67
|
def self.unregister_all( listener )
|
45
|
-
@@listeners.each do |
|
46
|
-
|
68
|
+
@@listeners.each do |key,value|
|
69
|
+
value.delete(listener)
|
47
70
|
end
|
71
|
+
@@listeners_all.delete(listener)
|
48
72
|
end
|
49
73
|
|
50
74
|
# Public: Will publish the specified message to all listeners
|
@@ -55,15 +79,87 @@ module EventAggregator
|
|
55
79
|
# consisten_data - true => the same object will be sent to all recievers. Default false
|
56
80
|
def self.message_publish ( message )
|
57
81
|
raise "Invalid message" unless message.respond_to?(:message_type) && message.respond_to?(:data)
|
58
|
-
@@listeners[message.message_type].each do |
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
82
|
+
@@listeners[message.message_type].each do |listener, callback|
|
83
|
+
perform_message_job(message.data, callback, message.async, message.consisten_data)
|
84
|
+
end
|
85
|
+
@@listeners_all.each do |listener,callback|
|
86
|
+
perform_message_job(message, callback, message.async, message.consisten_data)
|
87
|
+
end
|
88
|
+
@@message_translation[message.message_type].each do |message_type_new, callback|
|
89
|
+
EventAggregator::Message.new(message_type_new, callback.call(message.data)).publish
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
# Public: Resets the Aggregator to the initial state. This removes all registered listeners.
|
95
|
+
# Use EventAggregator::Aggregator.reset before each test when doing unit testing.
|
96
|
+
#
|
97
|
+
def self.reset
|
98
|
+
@@listeners = Hash.new{|h, k| h[k] = Hash.new}
|
99
|
+
@@listeners_all = Hash.new
|
100
|
+
@@message_translation = Hash.new{|h, k| h[k] = Hash.new }
|
101
|
+
@@producers = Hash.new
|
102
|
+
end
|
103
|
+
|
104
|
+
# Public: Will produce another message when a message type is published.
|
105
|
+
#
|
106
|
+
# message_type - Type of the message that will trigger a new message to be published.
|
107
|
+
# message_type_new - The type of the new message that will be published
|
108
|
+
# callback=lambda{|data| data} - The callback that will transform the data from message_type to message_type_new. Default: copy.
|
109
|
+
#
|
110
|
+
def self.translate_message_with(message_type, message_type_new, callback=lambda{|data| data})
|
111
|
+
raise "Illegal parameters" if message_type == nil || message_type_new == nil || !callback.respond_to?(:call) || callback.parameters.count != 1
|
112
|
+
raise "Illegal parameters, equal message_type and message_type_new" if message_type == message_type_new || message_type.eql?(message_type_new)
|
113
|
+
|
114
|
+
@@message_translation[message_type][message_type_new] = callback unless @@message_translation[message_type][message_type_new] == callback
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
# Public: Registering a producer with the Aggregator. A producer will respond to message requests, a
|
119
|
+
# request for a certain piece of data.
|
120
|
+
#
|
121
|
+
# message_type - The message type that this callback will respond to.
|
122
|
+
# callback - The callback that returns data to the requester. Must have one parameter.
|
123
|
+
#
|
124
|
+
# Example:
|
125
|
+
#
|
126
|
+
# EventAggregator::Aggregator.register_producer("GetMultipliedByTwo", lambda{|data| data*2})
|
127
|
+
#
|
128
|
+
def self.register_producer(message_type, callback)
|
129
|
+
raise "Illegal message_type" if message_type == nil
|
130
|
+
raise "Illegal callback" unless callback.respond_to?(:call) && callback.parameters.count == 1
|
131
|
+
raise "Already defined producer" if @@producers[message_type]
|
132
|
+
|
133
|
+
@@producers[message_type] = callback
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
# Public: Will remove a producer.
|
138
|
+
#
|
139
|
+
# message_type - The message type which will no longer respond to message requests.
|
140
|
+
#
|
141
|
+
def self.unregister_producer(message_type)
|
142
|
+
@@producers.delete(message_type)
|
143
|
+
end
|
144
|
+
|
145
|
+
|
146
|
+
# Public: Request a piece of information.
|
147
|
+
#
|
148
|
+
# message - The message that will be requested based on its message type and data.
|
149
|
+
#
|
150
|
+
# Returns The data provided by a producer registered for this specific message type, or nil.
|
151
|
+
#
|
152
|
+
def self.message_request(message)
|
153
|
+
@@producers[message.message_type] ? @@producers[message.message_type].call(message.data) : nil
|
154
|
+
end
|
155
|
+
|
156
|
+
private
|
157
|
+
def self.perform_message_job(data, callback, async, consisten_data)
|
158
|
+
case [async, consisten_data]
|
159
|
+
when [true, true] then EventAggregator::MessageJob.new.async.perform(data, callback)
|
160
|
+
when [true, false] then EventAggregator::MessageJob.new.async.perform(data.clone, callback)
|
161
|
+
when [false, true] then EventAggregator::MessageJob.new .perform(data, callback)
|
162
|
+
when [false, false] then EventAggregator::MessageJob.new .perform(data.clone, callback)
|
67
163
|
end
|
68
164
|
end
|
69
165
|
end
|
@@ -31,10 +31,20 @@ module EventAggregator
|
|
31
31
|
Aggregator.register( self, message_type, callback)
|
32
32
|
end
|
33
33
|
|
34
|
+
|
35
|
+
# Public: Used to register listener for all message types. Every time a message is published
|
36
|
+
# the provided callback will be executed with the message as the content.
|
37
|
+
#
|
38
|
+
# callback - The method that will be invoked every time this message type is received. Must have: callback.respond_to? :call #=> true
|
39
|
+
#
|
40
|
+
def message_type_register_all(callback)
|
41
|
+
Aggregator.register_all(self, callback)
|
42
|
+
end
|
43
|
+
|
34
44
|
# Public: Used to remove a certain type of message from your listening types. Messages of this specific type will no longer
|
35
45
|
# invoke any callbacks.
|
36
46
|
#
|
37
|
-
# message_type -A string indicating the message type you no longer want to receive.
|
47
|
+
# message_type - A string indicating the message type you no longer want to receive.
|
38
48
|
#
|
39
49
|
# Examples
|
40
50
|
#
|
@@ -43,5 +53,29 @@ module EventAggregator
|
|
43
53
|
def message_type_unregister( message_type )
|
44
54
|
Aggregator.unregister(self, message_type)
|
45
55
|
end
|
56
|
+
|
57
|
+
|
58
|
+
# Public: Will unregister the listener from all message types as well as the message_type_register_all.
|
59
|
+
# Listener will no longer recieve any callbacks when messages of any kind are published.
|
60
|
+
#
|
61
|
+
def message_type_unregister_all
|
62
|
+
Aggregator.unregister_all(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
# Public: Duplicate some text an arbitrary number of times.
|
68
|
+
#
|
69
|
+
# message_type - A string indicating the the message type the callback will respond to
|
70
|
+
# callback - The callback returning data whenever a message requests the message_type.
|
71
|
+
#
|
72
|
+
# Excample:
|
73
|
+
# listener.producer_register("MultiplyByTwo", lambda{|data| return data*2})
|
74
|
+
# number = EventAggregator::Message.new("MultiplyByTwo", 3)
|
75
|
+
# # => 6
|
76
|
+
#
|
77
|
+
def producer_register(message_type, callback)
|
78
|
+
Aggregator.register_producer(message_type, callback)
|
79
|
+
end
|
46
80
|
end
|
47
81
|
end
|
@@ -47,5 +47,12 @@ module EventAggregator
|
|
47
47
|
def publish
|
48
48
|
Aggregator.message_publish( self )
|
49
49
|
end
|
50
|
+
|
51
|
+
# Public: Will provide data if a producer of this message_type is present.
|
52
|
+
#
|
53
|
+
# Returns Requested data if a producer is present. Nil otherwise.
|
54
|
+
def request
|
55
|
+
Aggregator.message_request( self )
|
56
|
+
end
|
50
57
|
end
|
51
58
|
end
|
@@ -6,37 +6,48 @@ describe EventAggregator::Aggregator do
|
|
6
6
|
let(:message_type) { Faker::Name.name }
|
7
7
|
let(:data) { Faker::Name.name }
|
8
8
|
let(:callback) { lambda{ |data| } }
|
9
|
-
|
9
|
+
let(:random_string) { Faker::Internet.password }
|
10
|
+
let(:random_number) { Faker::Number.number(rand(9)) }
|
11
|
+
|
10
12
|
before(:each) do
|
11
|
-
EventAggregator::Aggregator.
|
13
|
+
EventAggregator::Aggregator.reset
|
12
14
|
end
|
13
15
|
describe "self.register" do
|
14
16
|
describe 'legal parameters' do
|
15
|
-
it
|
16
|
-
EventAggregator::Aggregator.register(listener, message_type, callback)
|
17
|
-
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to include([listener, callback])
|
17
|
+
it "no errors" do
|
18
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, callback)}.to_not raise_error
|
18
19
|
end
|
19
|
-
|
20
|
-
|
20
|
+
it "is stored" do
|
21
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, callback)}.to change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
|
22
|
+
end
|
23
|
+
it "overwrite previous callback" do
|
24
|
+
callback2 = lambda { |data| }
|
21
25
|
EventAggregator::Aggregator.register(listener, message_type, callback)
|
22
|
-
EventAggregator::Aggregator.
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
26
|
+
EventAggregator::Aggregator.register(listener, message_type, callback2)
|
27
|
+
|
28
|
+
expect(callback).to_not receive(:call)
|
29
|
+
expect(callback2).to receive(:call)
|
30
|
+
|
31
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type, data))
|
29
32
|
end
|
30
33
|
end
|
31
34
|
describe 'illegal parameters' do
|
32
|
-
it '
|
33
|
-
expect{EventAggregator::Aggregator.register(
|
35
|
+
it 'message_type raise error' do
|
36
|
+
expect{EventAggregator::Aggregator.register(listener, nil, callback)}.to raise_error
|
37
|
+
end
|
38
|
+
it "listener raise error" do
|
39
|
+
expect{EventAggregator::Aggregator.register(nil , message_type, callback)}.to raise_error
|
40
|
+
expect{EventAggregator::Aggregator.register(EventAggregator::Message.new("a","b"), message_type, callback)}.to raise_error
|
41
|
+
expect{EventAggregator::Aggregator.register(random_string , message_type, callback)}.to raise_error
|
42
|
+
expect{EventAggregator::Aggregator.register(random_number , message_type, callback)}.to raise_error
|
43
|
+
expect{EventAggregator::Aggregator.register(2.0 , message_type, callback)}.to raise_error
|
34
44
|
end
|
35
|
-
it '
|
36
|
-
expect{EventAggregator::Aggregator.register(
|
37
|
-
expect{EventAggregator::Aggregator.register(
|
38
|
-
expect{EventAggregator::Aggregator.register(
|
39
|
-
expect{EventAggregator::Aggregator.register(
|
45
|
+
it 'callback raise error' do
|
46
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, nil )}.to raise_error
|
47
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, EventAggregator::Message.new("a","b"))}.to raise_error
|
48
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, random_string )}.to raise_error
|
49
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, random_number )}.to raise_error
|
50
|
+
expect{EventAggregator::Aggregator.register(listener, message_type, 2.0 )}.to raise_error
|
40
51
|
end
|
41
52
|
end
|
42
53
|
end
|
@@ -54,13 +65,15 @@ describe EventAggregator::Aggregator do
|
|
54
65
|
end
|
55
66
|
it 'keep listener in unrelated lists' do
|
56
67
|
message_type2 = message_type + " different"
|
57
|
-
|
68
|
+
|
58
69
|
EventAggregator::Aggregator.register(listener, message_type, callback)
|
59
70
|
EventAggregator::Aggregator.register(listener, message_type2, callback)
|
60
|
-
|
71
|
+
|
61
72
|
EventAggregator::Aggregator.unregister(listener, message_type)
|
62
|
-
|
63
|
-
expect(
|
73
|
+
|
74
|
+
expect(callback).to receive(:call).once
|
75
|
+
|
76
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type2,data))
|
64
77
|
end
|
65
78
|
end
|
66
79
|
describe 'unregitering nonregisterd listener' do
|
@@ -75,17 +88,19 @@ describe EventAggregator::Aggregator do
|
|
75
88
|
EventAggregator::Aggregator.register(listener1, message_type1, callback)
|
76
89
|
EventAggregator::Aggregator.register(listener2, message_type2, callback)
|
77
90
|
EventAggregator::Aggregator.register(listener3, message_type3, callback)
|
78
|
-
|
91
|
+
|
79
92
|
#Touching hash
|
80
93
|
EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]
|
81
94
|
|
82
95
|
expect{EventAggregator::Aggregator.unregister(listener1, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
|
83
96
|
expect{EventAggregator::Aggregator.unregister(listener2, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
|
84
97
|
expect{EventAggregator::Aggregator.unregister(listener3, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
|
98
|
+
|
99
|
+
expect(callback).to receive(:call).exactly(3).times
|
85
100
|
|
86
|
-
|
87
|
-
|
88
|
-
|
101
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type1,data))
|
102
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type2,data))
|
103
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type3,data))
|
89
104
|
end
|
90
105
|
end
|
91
106
|
describe 'unregitering listener from wrong message type' do
|
@@ -116,7 +131,7 @@ describe EventAggregator::Aggregator do
|
|
116
131
|
EventAggregator::Aggregator.register(listener, message_type, callback)
|
117
132
|
|
118
133
|
EventAggregator::Aggregator.unregister_all(listener)
|
119
|
-
|
134
|
+
|
120
135
|
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to_not include([listener, callback])
|
121
136
|
end
|
122
137
|
it "not unregister wrong listener" do
|
@@ -132,12 +147,12 @@ describe EventAggregator::Aggregator do
|
|
132
147
|
EventAggregator::Aggregator.register(listener3, message_type2, callback)
|
133
148
|
EventAggregator::Aggregator.register(listener4, message_type3, callback)
|
134
149
|
|
135
|
-
|
150
|
+
|
136
151
|
EventAggregator::Aggregator.unregister_all(listener)
|
137
152
|
|
138
|
-
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to
|
139
|
-
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to
|
140
|
-
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3]).to
|
153
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type][listener2]).to eq(callback)
|
154
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2][listener3]).to eq(callback)
|
155
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3][listener4]).to eq(callback)
|
141
156
|
end
|
142
157
|
end
|
143
158
|
describe "unregistering listener registered for several message types" do
|
@@ -152,6 +167,15 @@ describe EventAggregator::Aggregator do
|
|
152
167
|
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to_not include([listener, callback])
|
153
168
|
end
|
154
169
|
end
|
170
|
+
describe "unregistering listener registered for all" do
|
171
|
+
it "unregister from all" do
|
172
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
173
|
+
|
174
|
+
EventAggregator::Aggregator.unregister_all(listener)
|
175
|
+
|
176
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners_all)).to_not include([listener, callback])
|
177
|
+
end
|
178
|
+
end
|
155
179
|
end
|
156
180
|
|
157
181
|
describe "self.message_publish" do
|
@@ -166,7 +190,7 @@ describe EventAggregator::Aggregator do
|
|
166
190
|
end
|
167
191
|
it 'not run incorrect callback' do
|
168
192
|
message_type2 = message_type + " different"
|
169
|
-
|
193
|
+
|
170
194
|
EventAggregator::Aggregator.register(listener, message_type, callback)
|
171
195
|
message = EventAggregator::Message.new(message_type2, data)
|
172
196
|
|
@@ -191,14 +215,71 @@ describe EventAggregator::Aggregator do
|
|
191
215
|
|
192
216
|
EventAggregator::Aggregator.message_publish(message)
|
193
217
|
end
|
218
|
+
it 'run all callbacks from register_all' do
|
219
|
+
listener2 = listener_class.new
|
220
|
+
callback2 = lambda{ |message| }
|
221
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
222
|
+
EventAggregator::Aggregator.register_all(listener2, callback2)
|
223
|
+
|
224
|
+
message = EventAggregator::Message.new(message_type, data, true, true)
|
225
|
+
|
226
|
+
expect(callback).to receive(:call).with(message)
|
227
|
+
expect(callback2).to receive(:call).with(message)
|
228
|
+
|
229
|
+
EventAggregator::Aggregator.message_publish(message)
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'run all callbacks for all message types' do
|
233
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
234
|
+
|
235
|
+
message1 = EventAggregator::Message.new(message_type , data)
|
236
|
+
message2 = EventAggregator::Message.new(message_type + "2", data)
|
237
|
+
message3 = EventAggregator::Message.new(message_type + "3", data)
|
238
|
+
message4 = EventAggregator::Message.new(message_type + "4", data)
|
239
|
+
message5 = EventAggregator::Message.new(message_type + "5", data)
|
240
|
+
message6 = EventAggregator::Message.new(message_type + "6", data)
|
241
|
+
|
242
|
+
expect(callback).to receive(:call) {|arg|
|
243
|
+
expect(arg.message_type).to eql(message1.message_type)
|
244
|
+
expect(arg.data).to eql(message1.data)
|
245
|
+
}
|
246
|
+
expect(callback).to receive(:call) {|arg|
|
247
|
+
expect(arg.message_type).to eql(message2.message_type)
|
248
|
+
expect(arg.data).to eql(message2.data)
|
249
|
+
}
|
250
|
+
expect(callback).to receive(:call) {|arg|
|
251
|
+
expect(arg.message_type).to eql(message3.message_type)
|
252
|
+
expect(arg.data).to eql(message3.data)
|
253
|
+
}
|
254
|
+
expect(callback).to receive(:call) {|arg|
|
255
|
+
expect(arg.message_type).to eql(message4.message_type)
|
256
|
+
expect(arg.data).to eql(message4.data)
|
257
|
+
}
|
258
|
+
expect(callback).to receive(:call) {|arg|
|
259
|
+
expect(arg.message_type).to eql(message5.message_type)
|
260
|
+
expect(arg.data).to eql(message5.data)
|
261
|
+
}
|
262
|
+
expect(callback).to receive(:call) {|arg|
|
263
|
+
expect(arg.message_type).to eql(message6.message_type)
|
264
|
+
expect(arg.data).to eql(message6.data)
|
265
|
+
}
|
266
|
+
|
267
|
+
|
268
|
+
EventAggregator::Aggregator.message_publish(message1)
|
269
|
+
EventAggregator::Aggregator.message_publish(message2)
|
270
|
+
EventAggregator::Aggregator.message_publish(message3)
|
271
|
+
EventAggregator::Aggregator.message_publish(message4)
|
272
|
+
EventAggregator::Aggregator.message_publish(message5)
|
273
|
+
EventAggregator::Aggregator.message_publish(message6)
|
274
|
+
end
|
194
275
|
end
|
195
276
|
describe 'illegal parameters' do
|
196
277
|
it 'non-message type' do
|
197
278
|
expect{EventAggregator::Aggregator.message_publish("string")}.to raise_error
|
198
|
-
expect{EventAggregator::Aggregator.message_publish(1)}.to
|
279
|
+
expect{EventAggregator::Aggregator.message_publish(1)} .to raise_error
|
199
280
|
expect{EventAggregator::Aggregator.message_publish(listener)}.to raise_error
|
200
|
-
expect{EventAggregator::Aggregator.message_publish()}.to
|
201
|
-
expect{EventAggregator::Aggregator.message_publish(nil)}.to
|
281
|
+
expect{EventAggregator::Aggregator.message_publish()} .to raise_error
|
282
|
+
expect{EventAggregator::Aggregator.message_publish(nil)} .to raise_error
|
202
283
|
end
|
203
284
|
end
|
204
285
|
describe 'consisten_data behaviour' do
|
@@ -209,7 +290,7 @@ describe EventAggregator::Aggregator do
|
|
209
290
|
|
210
291
|
EventAggregator::Aggregator.register(listener, message_type, callback1)
|
211
292
|
EventAggregator::Aggregator.register(listener2, message_type, callback2)
|
212
|
-
|
293
|
+
|
213
294
|
message = EventAggregator::Message.new(message_type, data, false, true)
|
214
295
|
|
215
296
|
expect(callback1).to receive(:call) {|arg| expect(arg).to equal(data)}
|
@@ -224,7 +305,7 @@ describe EventAggregator::Aggregator do
|
|
224
305
|
|
225
306
|
EventAggregator::Aggregator.register(listener, message_type, callback1)
|
226
307
|
EventAggregator::Aggregator.register(listener2, message_type, callback2)
|
227
|
-
|
308
|
+
|
228
309
|
message = EventAggregator::Message.new(message_type, data, false, false)
|
229
310
|
|
230
311
|
expect(callback1).to receive(:call) {|arg| expect(arg).to_not equal(data)}
|
@@ -234,12 +315,12 @@ describe EventAggregator::Aggregator do
|
|
234
315
|
end
|
235
316
|
it 'objects have same values when false' do
|
236
317
|
listener2 = listener_class.new
|
237
|
-
callback1 = lambda{|data| data ="no"}
|
238
|
-
callback2 = lambda{|data| data ="no"}
|
318
|
+
callback1 = lambda{|data| data = "no"}
|
319
|
+
callback2 = lambda{|data| data = "no"}
|
239
320
|
|
240
321
|
EventAggregator::Aggregator.register(listener, message_type, callback1)
|
241
322
|
EventAggregator::Aggregator.register(listener2, message_type, callback2)
|
242
|
-
|
323
|
+
|
243
324
|
message = EventAggregator::Message.new(message_type, data, false, false)
|
244
325
|
|
245
326
|
expect(callback1).to receive(:call) {|arg| expect(arg).to eq(data)}
|
@@ -249,4 +330,253 @@ describe EventAggregator::Aggregator do
|
|
249
330
|
end
|
250
331
|
end
|
251
332
|
end
|
252
|
-
|
333
|
+
|
334
|
+
describe "self.register_all" do
|
335
|
+
describe 'legal parameters' do
|
336
|
+
it 'registered at correct place' do
|
337
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
338
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners_all)).to include(listener)
|
339
|
+
end
|
340
|
+
|
341
|
+
it 'not register same listener multiple times' do
|
342
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
343
|
+
expect{EventAggregator::Aggregator.register_all(listener, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners_all)}
|
344
|
+
end
|
345
|
+
it "overwrite previous callback" do
|
346
|
+
callback2 = lambda { |data| }
|
347
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
348
|
+
EventAggregator::Aggregator.register_all(listener, callback2)
|
349
|
+
|
350
|
+
expect(callback).to_not receive(:call)
|
351
|
+
expect(callback2).to receive(:call)
|
352
|
+
|
353
|
+
EventAggregator::Aggregator.message_publish(EventAggregator::Message.new(message_type, data))
|
354
|
+
end
|
355
|
+
end
|
356
|
+
describe 'illegal parameters' do
|
357
|
+
it 'listener raise error' do
|
358
|
+
expect{EventAggregator::Aggregator.register_all(nil, callback)}.to raise_error
|
359
|
+
expect{EventAggregator::Aggregator.register_all(EventAggregator::Message.new("a","b"), callback)}.to raise_error
|
360
|
+
expect{EventAggregator::Aggregator.register_all(random_string, callback)}.to raise_error
|
361
|
+
expect{EventAggregator::Aggregator.register_all(random_number, callback)}.to raise_error
|
362
|
+
expect{EventAggregator::Aggregator.register_all(2.0, callback)}.to raise_error
|
363
|
+
end
|
364
|
+
it 'callback raise error' do
|
365
|
+
expect{EventAggregator::Aggregator.register_all(listener, nil )}.to raise_error
|
366
|
+
expect{EventAggregator::Aggregator.register_all(listener, EventAggregator::Message.new("a","b"))}.to raise_error
|
367
|
+
expect{EventAggregator::Aggregator.register_all(listener, random_string )}.to raise_error
|
368
|
+
expect{EventAggregator::Aggregator.register_all(listener, random_number )}.to raise_error
|
369
|
+
expect{EventAggregator::Aggregator.register_all(listener, 2.0 )}.to raise_error
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
describe "self.reset" do
|
375
|
+
it 'removes all listenes' do
|
376
|
+
EventAggregator::Aggregator.register(listener, message_type, callback)
|
377
|
+
EventAggregator::Aggregator.register_all(listener, callback)
|
378
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
379
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
380
|
+
|
381
|
+
EventAggregator::Aggregator.reset
|
382
|
+
|
383
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)) .to be_empty
|
384
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@listeners_all)) .to be_empty
|
385
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@message_translation)).to be_empty
|
386
|
+
expect(EventAggregator::Aggregator.class_variable_get(:@@producers)) .to be_empty
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'listener not receive messages' do
|
390
|
+
listener2 = listener_class.new
|
391
|
+
callback2 = lambda{|data|}
|
392
|
+
message = EventAggregator::Message.new(message_type, data)
|
393
|
+
EventAggregator::Aggregator.register(listener, message_type, callback)
|
394
|
+
EventAggregator::Aggregator.register_all(listener2, callback2)
|
395
|
+
|
396
|
+
EventAggregator::Aggregator.reset
|
397
|
+
|
398
|
+
expect(callback).to_not receive(:call)
|
399
|
+
expect(callback2).to_not receive(:call)
|
400
|
+
|
401
|
+
EventAggregator::Aggregator.message_publish(message)
|
402
|
+
end
|
403
|
+
it "producers not responding" do
|
404
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
405
|
+
message = EventAggregator::Message.new(message_type, data)
|
406
|
+
|
407
|
+
EventAggregator::Aggregator.reset
|
408
|
+
|
409
|
+
expect(callback).to_not receive(:call)
|
410
|
+
|
411
|
+
EventAggregator::Aggregator.message_request(message)
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
describe "self.translate_message_with" do
|
416
|
+
describe 'legal parameters' do
|
417
|
+
it "creates new message from type" do
|
418
|
+
EventAggregator::Aggregator.register(listener, message_type + " different", callback)
|
419
|
+
message = EventAggregator::Message.new(message_type, data)
|
420
|
+
|
421
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
422
|
+
|
423
|
+
expect(callback).to receive(:call).with(data)
|
424
|
+
|
425
|
+
EventAggregator::Aggregator.message_publish(message)
|
426
|
+
end
|
427
|
+
|
428
|
+
it "listener receives transformed data" do
|
429
|
+
EventAggregator::Aggregator.register(listener, message_type + " different", callback)
|
430
|
+
message = EventAggregator::Message.new(message_type, "data")
|
431
|
+
|
432
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", lambda{|data| "other data"})
|
433
|
+
|
434
|
+
expect(callback).to receive(:call).with("other data")
|
435
|
+
|
436
|
+
EventAggregator::Aggregator.message_publish(message)
|
437
|
+
end
|
438
|
+
|
439
|
+
it "multiple assigns not change list" do
|
440
|
+
message = EventAggregator::Message.new(message_type, data)
|
441
|
+
|
442
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
443
|
+
|
444
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@message_translation)}
|
445
|
+
end
|
446
|
+
|
447
|
+
it "multiple assigns not publish several messages" do
|
448
|
+
EventAggregator::Aggregator.register(listener, message_type + " different", callback)
|
449
|
+
message = EventAggregator::Message.new(message_type, data)
|
450
|
+
|
451
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
452
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
453
|
+
|
454
|
+
expect(callback).to receive(:call).with(data).once
|
455
|
+
|
456
|
+
EventAggregator::Aggregator.message_publish(message)
|
457
|
+
end
|
458
|
+
|
459
|
+
it "multiple assigns to update callback" do
|
460
|
+
EventAggregator::Aggregator.register(listener, message_type + " different", callback)
|
461
|
+
message = EventAggregator::Message.new(message_type, "data")
|
462
|
+
|
463
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different")
|
464
|
+
EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", lambda{|data| "changed data"})
|
465
|
+
|
466
|
+
expect(callback).to receive(:call).with("changed data").once
|
467
|
+
|
468
|
+
EventAggregator::Aggregator.message_publish(message)
|
469
|
+
end
|
470
|
+
end
|
471
|
+
describe 'illegal parameters' do
|
472
|
+
it "callback raise error" do
|
473
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", nil)} .to raise_error
|
474
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", random_number)} .to raise_error
|
475
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", random_string)} .to raise_error
|
476
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", Object.new)} .to raise_error
|
477
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", lambda{})} .to raise_error
|
478
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type + " different", lambda{ "whatever" })}.to raise_error
|
479
|
+
end
|
480
|
+
|
481
|
+
it "message type nil raise error" do
|
482
|
+
expect{EventAggregator::Aggregator.translate_message_with(nil, message_type)}.to raise_error
|
483
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, nil)} .to raise_error
|
484
|
+
expect{EventAggregator::Aggregator.translate_message_with(nil, nil)} .to raise_error
|
485
|
+
end
|
486
|
+
|
487
|
+
#Very VERY important that these raise errors!
|
488
|
+
it "equal arguments no callback raise error" do
|
489
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type)} .to raise_error
|
490
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_string, random_string)}.to raise_error
|
491
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_number, random_number)}.to raise_error
|
492
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_number, random_number)}.to raise_error
|
493
|
+
expect{EventAggregator::Aggregator.translate_message_with("string", "string")} .to raise_error
|
494
|
+
expect{EventAggregator::Aggregator.translate_message_with(1, 1)} .to raise_error
|
495
|
+
end
|
496
|
+
|
497
|
+
it "equal arguments with callback raise error" do
|
498
|
+
expect{EventAggregator::Aggregator.translate_message_with(message_type, message_type, callback)}.to raise_error
|
499
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_string, random_string, callback)}.to raise_error
|
500
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_number, random_number, callback)}.to raise_error
|
501
|
+
expect{EventAggregator::Aggregator.translate_message_with(random_number, random_number, callback)}.to raise_error
|
502
|
+
expect{EventAggregator::Aggregator.translate_message_with("string", "string", callback)}.to raise_error
|
503
|
+
expect{EventAggregator::Aggregator.translate_message_with(1, 1, callback)}.to raise_error
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
describe "self.register_producer" do
|
509
|
+
describe 'illegal parameters' do
|
510
|
+
it 'callback raise error' do
|
511
|
+
expect{EventAggregator::Aggregator.register_producer(message_type, nil )}.to raise_error
|
512
|
+
expect{EventAggregator::Aggregator.register_producer(message_type, EventAggregator::Message.new("a","b"))}.to raise_error
|
513
|
+
expect{EventAggregator::Aggregator.register_producer(message_type, random_string )}.to raise_error
|
514
|
+
expect{EventAggregator::Aggregator.register_producer(message_type, random_number )}.to raise_error
|
515
|
+
expect{EventAggregator::Aggregator.register_producer(message_type, 2.0 )}.to raise_error
|
516
|
+
end
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
describe "self.unregister_producer" do
|
521
|
+
it "producers not responding" do
|
522
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
523
|
+
message = EventAggregator::Message.new(message_type, data)
|
524
|
+
|
525
|
+
EventAggregator::Aggregator.unregister_producer(message_type)
|
526
|
+
|
527
|
+
expect(callback).to_not receive(:call)
|
528
|
+
|
529
|
+
EventAggregator::Aggregator.message_request(message)
|
530
|
+
end
|
531
|
+
end
|
532
|
+
|
533
|
+
|
534
|
+
describe "self.message_request" do
|
535
|
+
describe 'legal parameters' do
|
536
|
+
it 'run correct callback' do
|
537
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
538
|
+
message = EventAggregator::Message.new(message_type, data)
|
539
|
+
|
540
|
+
expect(callback).to receive(:call).with(data)
|
541
|
+
|
542
|
+
EventAggregator::Aggregator.message_request(message)
|
543
|
+
end
|
544
|
+
it 'not run incorrect callback' do
|
545
|
+
message_type2 = message_type + " different"
|
546
|
+
|
547
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
548
|
+
message = EventAggregator::Message.new(message_type2, data)
|
549
|
+
|
550
|
+
expect(callback).to_not receive(:call).with(data)
|
551
|
+
|
552
|
+
EventAggregator::Aggregator.message_request(message)
|
553
|
+
end
|
554
|
+
|
555
|
+
it 'run correct callback in list' do
|
556
|
+
message_type2 = message_type + " different"
|
557
|
+
|
558
|
+
callback2 = lambda{|data|}
|
559
|
+
|
560
|
+
EventAggregator::Aggregator.register_producer(message_type, callback)
|
561
|
+
EventAggregator::Aggregator.register_producer(message_type2, callback2)
|
562
|
+
|
563
|
+
message = EventAggregator::Message.new(message_type, data)
|
564
|
+
|
565
|
+
expect(callback).to receive(:call).with(data)
|
566
|
+
expect(callback2).to_not receive(:call)
|
567
|
+
|
568
|
+
EventAggregator::Aggregator.message_request(message)
|
569
|
+
end
|
570
|
+
|
571
|
+
end
|
572
|
+
describe 'illegal parameters' do
|
573
|
+
it 'non-message type' do
|
574
|
+
expect{EventAggregator::Aggregator.message_request("string")}.to raise_error
|
575
|
+
expect{EventAggregator::Aggregator.message_request(1)} .to raise_error
|
576
|
+
expect{EventAggregator::Aggregator.message_request(listener)}.to raise_error
|
577
|
+
expect{EventAggregator::Aggregator.message_request()} .to raise_error
|
578
|
+
expect{EventAggregator::Aggregator.message_request(nil)} .to raise_error
|
579
|
+
end
|
580
|
+
end
|
581
|
+
end
|
582
|
+
end
|
@@ -3,34 +3,39 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
# Public: Some ruby trickery to be able to test private methods
|
5
5
|
#
|
6
|
+
# Example:
|
7
|
+
# whatever_object.class.publicize_methods do
|
8
|
+
# #... execute private methods
|
9
|
+
# end
|
6
10
|
class Class
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def publicize_methods
|
12
|
+
saved_private_instance_methods = self.private_instance_methods
|
13
|
+
self.class_eval { public *saved_private_instance_methods }
|
14
|
+
yield
|
15
|
+
self.class_eval { private *saved_private_instance_methods }
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
describe EventAggregator::Listener do
|
16
|
-
let(:listener)
|
17
|
-
let(:listener_class)
|
18
|
-
let(:message_type)
|
19
|
-
let(:
|
20
|
-
let(:data)
|
20
|
+
let(:listener) { (Class.new { include EventAggregator::Listener }).new }
|
21
|
+
let(:listener_class) { Class.new { include EventAggregator::Listener } }
|
22
|
+
let(:message_type) { Faker::Name.name }
|
23
|
+
let(:callback) { lambda { |data| } }
|
24
|
+
let(:data) { Faker::Name.name }
|
25
|
+
let(:recieve_all_method) { lambda { |message| } }
|
21
26
|
|
22
27
|
before(:each) do
|
23
|
-
EventAggregator::Aggregator.
|
28
|
+
EventAggregator::Aggregator.reset
|
24
29
|
@message = EventAggregator::Message.new(message_type, data)
|
25
30
|
end
|
26
31
|
|
27
|
-
describe '.
|
32
|
+
describe '.message_type_register' do
|
28
33
|
describe 'legal parameters' do
|
29
34
|
it 'invoke aggregator register' do
|
30
|
-
expect(EventAggregator::Aggregator).to receive(:register).with(listener, message_type,
|
31
|
-
|
35
|
+
expect(EventAggregator::Aggregator).to receive(:register).with(listener, message_type, callback)
|
36
|
+
|
32
37
|
listener.class.publicize_methods do
|
33
|
-
listener.message_type_register(message_type,
|
38
|
+
listener.message_type_register(message_type, callback)
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
@@ -44,12 +49,12 @@ describe EventAggregator::Listener do
|
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
|
-
describe '.
|
52
|
+
describe '.message_type_unregister' do
|
48
53
|
describe 'legal parameters' do
|
49
54
|
it 'invoke aggregator unregister' do
|
50
55
|
listener.class.publicize_methods do
|
51
|
-
listener.message_type_register(message_type,
|
52
|
-
|
56
|
+
listener.message_type_register(message_type, callback)
|
57
|
+
|
53
58
|
expect(EventAggregator::Aggregator).to receive(:unregister).with(listener, message_type)
|
54
59
|
|
55
60
|
listener.message_type_unregister(message_type)
|
@@ -57,4 +62,39 @@ describe EventAggregator::Listener do
|
|
57
62
|
end
|
58
63
|
end
|
59
64
|
end
|
65
|
+
|
66
|
+
describe '.message_type_register_all' do
|
67
|
+
describe 'legal parameters' do
|
68
|
+
it 'invoke aggregator unregister_all' do
|
69
|
+
listener.class.publicize_methods do
|
70
|
+
expect(EventAggregator::Aggregator).to receive(:register_all).with(listener,callback)
|
71
|
+
|
72
|
+
listener.message_type_register_all(callback)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '.message_type_unregister_all' do
|
79
|
+
describe 'legal parameters' do
|
80
|
+
it 'invoke aggregator unregister' do
|
81
|
+
listener.class.publicize_methods do
|
82
|
+
expect(EventAggregator::Aggregator).to receive(:unregister_all).with(listener)
|
83
|
+
|
84
|
+
listener.message_type_unregister_all()
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe ".message_type_producer_register" do
|
91
|
+
describe 'legal parameters' do
|
92
|
+
it "invoke aggregator register_producer" do
|
93
|
+
expect(EventAggregator::Aggregator).to receive(:register_producer).with(message_type, callback)
|
94
|
+
listener.class.publicize_methods do
|
95
|
+
listener.producer_register(message_type, callback)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
60
100
|
end
|
@@ -1,47 +1,63 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe EventAggregator::Message do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
let(:message_type) { Faker::Name.name }
|
5
|
+
let(:data) { Faker::Name.name }
|
6
|
+
let(:listener_class) { (Class.new { include EventAggregator::Listener }) }
|
7
|
+
let(:callback) { lambda{ |data| } }
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
EventAggregator::Aggregator.reset
|
11
|
+
end
|
12
|
+
describe '.initialize' do
|
13
|
+
describe 'legal parameters' do
|
14
|
+
it 'allows nil data' do
|
15
|
+
expect{EventAggregator::Message.new(message_type, nil)}.to_not raise_error
|
16
|
+
end
|
17
|
+
it 'initialize data publicly available' do
|
18
|
+
message = EventAggregator::Message.new(message_type, data)
|
19
|
+
|
20
|
+
expect(message.message_type).to equal(message_type)
|
21
|
+
expect(message.data).to equal(data)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
describe 'illegal parameters' do
|
25
|
+
it 'require initialize data' do
|
26
|
+
expect{EventAggregator::Message.new(message_type)} .to raise_error
|
27
|
+
expect{EventAggregator::Message.new(data)} .to raise_error
|
28
|
+
expect{EventAggregator::Message.new(message_type, data)}.to_not raise_error
|
29
|
+
end
|
30
|
+
it 'non-nil message_type' do
|
31
|
+
expect{EventAggregator::Message.new(nil, data)}.to raise_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.publish' do
|
37
|
+
before(:each) do
|
12
38
|
@listener_one = listener_class.new
|
13
39
|
@listener_two = listener_class.new
|
14
|
-
|
40
|
+
|
15
41
|
EventAggregator::Aggregator.register(@listener_one, message_type, callback)
|
16
42
|
EventAggregator::Aggregator.register(@listener_two, message_type+" different", callback)
|
17
43
|
end
|
18
44
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
expect(EventAggregator::Aggregator).to receive(:message_publish).with(message)
|
45
|
+
it 'invoke message_publish on aggregator' do
|
46
|
+
message = EventAggregator::Message.new(message_type, data)
|
23
47
|
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
48
|
+
expect(EventAggregator::Aggregator).to receive(:message_publish).with(message)
|
27
49
|
|
28
|
-
|
29
|
-
let(:message_type) {Faker::Name.name}
|
30
|
-
let(:data) {Faker::Name.name}
|
31
|
-
|
32
|
-
it 'should require initialize data' do
|
33
|
-
expect{EventAggregator::Message.new(message_type)}.to raise_error
|
34
|
-
expect{EventAggregator::Message.new(data)}.to raise_error
|
35
|
-
expect{EventAggregator::Message.new(message_type, data)}.to_not raise_error
|
50
|
+
message.publish
|
36
51
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
it '
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".request" do
|
55
|
+
it 'invoke message_request on aggregator' do
|
41
56
|
message = EventAggregator::Message.new(message_type, data)
|
42
|
-
|
43
|
-
expect(
|
44
|
-
|
57
|
+
|
58
|
+
expect(EventAggregator::Aggregator).to receive(:message_request).with(message)
|
59
|
+
|
60
|
+
message.request
|
45
61
|
end
|
46
62
|
end
|
47
63
|
end
|
metadata
CHANGED
@@ -1,132 +1,117 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_aggregator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Stephan Eriksen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-08 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.3'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '1.3'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '10'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '10'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 3.0.0.beta1
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 3.0.0.beta1
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: guard-rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '4.2'
|
70
|
-
- -
|
62
|
+
- - ">="
|
71
63
|
- !ruby/object:Gem::Version
|
72
64
|
version: 4.2.2
|
73
65
|
type: :development
|
74
66
|
prerelease: false
|
75
67
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
68
|
requirements:
|
78
|
-
- - ~>
|
69
|
+
- - "~>"
|
79
70
|
- !ruby/object:Gem::Version
|
80
71
|
version: '4.2'
|
81
|
-
- -
|
72
|
+
- - ">="
|
82
73
|
- !ruby/object:Gem::Version
|
83
74
|
version: 4.2.2
|
84
75
|
- !ruby/object:Gem::Dependency
|
85
76
|
name: faker
|
86
77
|
requirement: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
78
|
requirements:
|
89
|
-
- - ~>
|
79
|
+
- - "~>"
|
90
80
|
- !ruby/object:Gem::Version
|
91
81
|
version: '1.2'
|
92
82
|
type: :development
|
93
83
|
prerelease: false
|
94
84
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
85
|
requirements:
|
97
|
-
- - ~>
|
86
|
+
- - "~>"
|
98
87
|
- !ruby/object:Gem::Version
|
99
88
|
version: '1.2'
|
100
89
|
- !ruby/object:Gem::Dependency
|
101
90
|
name: coveralls
|
102
91
|
requirement: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
92
|
requirements:
|
105
|
-
- - ~>
|
93
|
+
- - "~>"
|
106
94
|
- !ruby/object:Gem::Version
|
107
95
|
version: '0.7'
|
108
96
|
type: :development
|
109
97
|
prerelease: false
|
110
98
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
99
|
requirements:
|
113
|
-
- - ~>
|
100
|
+
- - "~>"
|
114
101
|
- !ruby/object:Gem::Version
|
115
102
|
version: '0.7'
|
116
103
|
- !ruby/object:Gem::Dependency
|
117
104
|
name: sucker_punch
|
118
105
|
requirement: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
106
|
requirements:
|
121
|
-
- - ~>
|
107
|
+
- - "~>"
|
122
108
|
- !ruby/object:Gem::Version
|
123
109
|
version: '1.0'
|
124
110
|
type: :runtime
|
125
111
|
prerelease: false
|
126
112
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
113
|
requirements:
|
129
|
-
- - ~>
|
114
|
+
- - "~>"
|
130
115
|
- !ruby/object:Gem::Version
|
131
116
|
version: '1.0'
|
132
117
|
description: A simple Ruby event aggregator.
|
@@ -136,9 +121,9 @@ executables: []
|
|
136
121
|
extensions: []
|
137
122
|
extra_rdoc_files: []
|
138
123
|
files:
|
139
|
-
- .gitignore
|
140
|
-
- .rspec
|
141
|
-
- .travis.yml
|
124
|
+
- ".gitignore"
|
125
|
+
- ".rspec"
|
126
|
+
- ".travis.yml"
|
142
127
|
- Gemfile
|
143
128
|
- Guardfile
|
144
129
|
- LICENSE.txt
|
@@ -159,27 +144,26 @@ files:
|
|
159
144
|
homepage: https://github.com/stephan-nordnes-eriksen/event_aggregator
|
160
145
|
licenses:
|
161
146
|
- MIT
|
147
|
+
metadata: {}
|
162
148
|
post_install_message:
|
163
149
|
rdoc_options: []
|
164
150
|
require_paths:
|
165
151
|
- lib
|
166
152
|
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
-
none: false
|
168
153
|
requirements:
|
169
|
-
- -
|
154
|
+
- - ">="
|
170
155
|
- !ruby/object:Gem::Version
|
171
156
|
version: '0'
|
172
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
158
|
requirements:
|
175
|
-
- -
|
159
|
+
- - ">="
|
176
160
|
- !ruby/object:Gem::Version
|
177
161
|
version: '0'
|
178
162
|
requirements: []
|
179
163
|
rubyforge_project:
|
180
|
-
rubygems_version:
|
164
|
+
rubygems_version: 2.2.0
|
181
165
|
signing_key:
|
182
|
-
specification_version:
|
166
|
+
specification_version: 4
|
183
167
|
summary: Event aggregator for Ruby.
|
184
168
|
test_files:
|
185
169
|
- spec/lib/event_aggregator/aggregator_spec.rb
|