event_aggregator 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml 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