event_aggregator 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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]
|
5
|
-
[][travis]
|
6
6
|
[][gemnasium]
|
7
7
|
[][codeclimate]
|
8
8
|
[][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
|