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 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=adding_travis_and_other)][travis]
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
- # Public: Register an EventAggregator::Listener to recieve
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 recieve
22
+ # listener - An EventAggregator::Listener which should receive
21
23
  # the messages.
22
- # message_type - The message type to recieve. Can be anything except nil.
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
- @@listeners[message_type] << [listener, callback] unless ! (listener.class < EventAggregator::Listener) || @@listeners[message_type].include?(listener)
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 recieve
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].delete_if{|value| value[0] == listener}
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 |e|
46
- e[1].delete_if{|value| value[0] == listener}
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 |l|
59
- if l[1].respond_to? :call
60
- case [message.async, message.consisten_data]
61
- when [true, true] then EventAggregator::MessageJob.new.async.perform(message.data, l[1])
62
- when [true, false] then EventAggregator::MessageJob.new.async.perform(message.data.clone, l[1])
63
- when [false, true] then EventAggregator::MessageJob.new.perform( message.data, l[1])
64
- when [false, false] then EventAggregator::MessageJob.new.perform( message.data.clone, l[1])
65
- end
66
- end
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
@@ -1,3 +1,3 @@
1
1
  module EventAggregator
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  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.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
13
+ EventAggregator::Aggregator.reset
12
14
  end
13
15
  describe "self.register" do
14
16
  describe 'legal parameters' do
15
- it 'registered at correct place' do
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
- it 'not be registered in wrong place' do
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.class_variable_get(:@@listeners).each do |e|
23
- if e[0] == message_type
24
- expect(e[1]).to include([listener, callback])
25
- else
26
- expect(e[1]).to_not include([listener, callback])
27
- end
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 'not allow nil as message type' do
33
- expect{EventAggregator::Aggregator.register(nil, message_type, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
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 'not allow non-listener to register' do
36
- expect{EventAggregator::Aggregator.register(EventAggregator::Message.new("a","b"), message_type, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
37
- expect{EventAggregator::Aggregator.register("string", message_type, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
38
- expect{EventAggregator::Aggregator.register(1, message_type, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
39
- expect{EventAggregator::Aggregator.register(2.0, message_type, callback)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
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(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include([listener, callback])
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
- expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type1]).to include([listener1, callback])
87
- expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include([listener2, callback])
88
- expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3]).to include([listener3, callback])
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 include([listener2, callback])
139
- expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include([listener3, callback])
140
- expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3]).to include([listener4, callback])
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 raise_error
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 raise_error
201
- expect{EventAggregator::Aggregator.message_publish(nil)}.to raise_error
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
- end
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
- def publicize_methods
8
- saved_private_instance_methods = self.private_instance_methods
9
- self.class_eval { public *saved_private_instance_methods }
10
- yield
11
- self.class_eval { private *saved_private_instance_methods }
12
- end
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) { (Class.new { include EventAggregator::Listener }).new }
17
- let(:listener_class) { Class.new { include EventAggregator::Listener } }
18
- let(:message_type) { Faker::Name.name }
19
- let(:lambda_method) { lambda { |data| }}
20
- let(:data) { Faker::Name.name }
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.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
28
+ EventAggregator::Aggregator.reset
24
29
  @message = EventAggregator::Message.new(message_type, data)
25
30
  end
26
31
 
27
- describe '.message_type_to_receive_add' do
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, lambda_method)
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, lambda_method)
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 '.message_type_to_receive_remove' do
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, lambda_method)
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
- describe '.publish' do
5
- let(:message_type) {Faker::Name.name}
6
- let(:data) {Faker::Name.name}
7
- let(:listener_class) { (Class.new { include EventAggregator::Listener }) }
8
- let(:callback) { lambda{ |data| } }
9
-
10
- before(:each) do
11
- EventAggregator::Aggregator.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
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
- it 'should invoke message_publish on aggregator' do
20
- message = EventAggregator::Message.new(message_type, data)
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
- message.publish
25
- end
26
- end
48
+ expect(EventAggregator::Aggregator).to receive(:message_publish).with(message)
27
49
 
28
- describe 'self.new' do
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
- it 'should have non-nil message_type' do
38
- expect{EventAggregator::Message.new(nil, data)}.to raise_error
39
- end
40
- it 'should have initialize data publicly available' do
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(message.message_type).to equal(message_type)
44
- expect(message.data).to equal(data)
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.2
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: 2013-12-29 00:00:00.000000000 Z
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: 1.8.23
164
+ rubygems_version: 2.2.0
181
165
  signing_key:
182
- specification_version: 3
166
+ specification_version: 4
183
167
  summary: Event aggregator for Ruby.
184
168
  test_files:
185
169
  - spec/lib/event_aggregator/aggregator_spec.rb