event_aggregator 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .idea/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard :rspec do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
6
+
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # EventAggregator
2
2
 
3
+ #### Note: This is a very early release and subject to many changes. It is currently not tested propperly, and there are several issues ranging from potential dead-locks to upcoming refactoring.
4
+
3
5
  The 'event_aggregator' gem is a gem for using the event aggregator pattern in Ruby.
4
6
 
5
7
  An event aggregator is essentially a message passing service that aims at decoupeling object communication and that lets
@@ -28,9 +30,9 @@ Or install it yourself as:
28
30
  class Foo
29
31
  include EventAggregator::Listener
30
32
  def initialize()
31
- message_type_to_recieve_add( "foo", lambda{|data| puts "bar" } )
33
+ message_type_to_receive_add( "foo", lambda{|data| puts "bar" } )
32
34
 
33
- message_type_to_recieve_add( "foo2", method(:handle_message) )
35
+ message_type_to_receive_add( "foo2", method(:handle_message) )
34
36
  end
35
37
 
36
38
  def handle_message(data)
@@ -57,5 +59,6 @@ Or install it yourself as:
57
59
 
58
60
  ## Todo:
59
61
 
62
+ - Adding tests
60
63
  - Enable threaded message passing for higher performance.
61
- - Improving the readme and documentation in the gem.
64
+ - Improving the readme and documentation in the gem.
@@ -18,6 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
21
+ spec.add_development_dependency 'bundler', "~> 1.3"
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'guard-rspec'
24
+ spec.add_development_dependency 'factory_girl'
25
+ spec.add_development_dependency 'faker'
23
26
  end
@@ -1,27 +1,41 @@
1
+ #require 'singleton'
2
+
1
3
  module EventAggregator
4
+
5
+ # Public: TODO: Could potentially turn this into a module.
6
+ #
7
+ # module OtherSingleton
8
+ # @index = -1
9
+ # @colors = %w{ red green blue }
10
+ # def self.change
11
+ # @colors[(@index += 1) % @colors.size]
12
+ # end
13
+ # end
2
14
  class Aggregator
3
- @@listeners = Hash.new([])
15
+ #include Singleton
16
+ class <<self; private :new; end
17
+ #TODO: Figure out how to do singleton pattern properly
4
18
 
5
- @@message_types = Hash.new
19
+ @@listeners = Hash.new{|h, k| h[k] = []}
6
20
 
7
21
  def self.register( listener, message_type )
8
- @@listeners[message_type] << listener unless @@listeners[message_type].include?(listener)
22
+ @@listeners[message_type] << listener unless ! (listener.class < EventAggregator::Listener) || @@listeners[message_type].include?(listener)
9
23
  end
10
24
 
11
25
  def self.unregister( listener, message_type )
12
26
  @@listeners[message_type].delete listener
13
27
  end
14
-
28
+ def self.unregister_all( listener )
29
+ @@listeners.each do |e|
30
+ e[1].delete(listener)
31
+ end
32
+ end
15
33
  def self.message_publish ( message )
16
- return "Not a valid message" unless message.is_a? EventAggregator::Message
34
+ raise "Invalid message" unless message.is_a? EventAggregator::Message
17
35
 
18
36
  @@listeners[message.message_type].each do |l|
19
- l.recieve_message message
37
+ l.receive_message message
20
38
  end
21
39
  end
22
-
23
- def self.register_message_type(message_type)
24
- @@message_types[message_types] = [] unless @@message_types[message_types]
25
- end
26
40
  end
27
41
  end
@@ -1,5 +1,5 @@
1
1
  module EventAggregator
2
- # Public: A module you can include or extend to recieve messages from
2
+ # Public: A module you can include or extend to receive messages from
3
3
  # the event Aggregator system.
4
4
  #
5
5
  # Examples
@@ -9,7 +9,7 @@ module EventAggregator
9
9
  # ...
10
10
  # def initialize()
11
11
  # ...
12
- # message_type_to_recieve_add( "foo", lambda{ puts "bar" } )
12
+ # message_type_to_receive_add( "foo", lambda{ puts "bar" } )
13
13
  # end
14
14
  # ...
15
15
  # end
@@ -43,7 +43,7 @@ module EventAggregator
43
43
 
44
44
 
45
45
  # Public: DEPRICATED: Adding extra initialize to the class so that we make sure new objects are added to the EventAggregators registry.
46
- # This whole hack-deal is possibly not nescessary. Can be omited with a simple "register" when you add a new "recieve message_type"
46
+ # This whole hack-deal is possibly not nescessary. Can be omited with a simple "register" when you add a new "receive message_type"
47
47
  #
48
48
  # base - The class object for the class including the Listener module
49
49
  #
@@ -61,7 +61,7 @@ module EventAggregator
61
61
  end
62
62
  end
63
63
 
64
- def recieve_message( message )
64
+ def receive_message( message )
65
65
  m = event_listener_listens_to[message.message_type]
66
66
 
67
67
  m.call(message.data) if m.respond_to? :call #Should not need the check here, however who knows what kind of conurrency issues we might have.
@@ -72,18 +72,18 @@ module EventAggregator
72
72
  def event_listener_listens_to
73
73
  @event_listener_listens_to ||= Hash.new
74
74
  end
75
- # public: Use to add message types you want to recieve. Overwirte existing callback when existing message type is given.
75
+ # public: Use to add message types you want to receive. Overwirte existing callback when existing message type is given.
76
76
  #
77
- # message_type - A string indicating the message type you want to recieve from the event aggregrator. Can actually be anything.
78
- # callback - The method that will be invoked every time this message type is recieved. Must have: callback.respond_to? :call #=> true
77
+ # message_type - A string indicating the message type you want to receive from the event aggregrator. Can actually be anything.
78
+ # callback - The method that will be invoked every time this message type is received. Must have: callback.respond_to? :call #=> true
79
79
  #
80
80
  # Examples
81
81
  #
82
- # message_type_to_recieve_add("foo", method(:my_class_method))
83
- # message_type_to_recieve_add("foo", lambda { puts "foo" })
84
- # message_type_to_recieve_add("foo", Proc.new { puts "foo" })
82
+ # message_type_to_receive_add("foo", method(:my_class_method))
83
+ # message_type_to_receive_add("foo", lambda { puts "foo" })
84
+ # message_type_to_receive_add("foo", Proc.new { puts "foo" })
85
85
  #
86
- def message_type_to_recieve_add( message_type, callback )
86
+ def message_type_to_receive_add( message_type, callback )
87
87
  event_listener_listens_to[message_type] = callback #unless event_listener_listens_to[message_type] #It makes more sence to overwrite in the case it already exists.
88
88
  Aggregator.register( self, message_type )
89
89
  end
@@ -91,13 +91,13 @@ module EventAggregator
91
91
  # Public: Used to remove a certain type of message from your listening types. Messages of this specific type will no longer
92
92
  # invoke any callbacks.
93
93
  #
94
- # message_type -A string indicating the message type you no longer want to recieve.
94
+ # message_type -A string indicating the message type you no longer want to receive.
95
95
  #
96
96
  # Examples
97
97
  #
98
- # message_type_to_recieve_remove("foo")
98
+ # message_type_to_receive_remove("foo")
99
99
  #
100
- def message_type_to_recieve_remove( message_type )
100
+ def message_type_to_receive_remove( message_type )
101
101
  event_listener_listens_to[message_type] = nil
102
102
  Aggregator.unregister(self, message_type)
103
103
  end
@@ -4,6 +4,8 @@ module EventAggregator
4
4
  @message_type = nil
5
5
  @data = nil
6
6
  def initialize(message_type, data)
7
+ raise "Illegal Message Type" if !message_type
8
+
7
9
  @message_type = message_type
8
10
  @data = data
9
11
  end
@@ -1,3 +1,3 @@
1
1
  module EventAggregator
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/factories.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'factory_girl'
2
+ require 'faker'
3
+ require 'event_aggregator'
4
+
5
+
6
+ # Public: Not really used. Might not be needed at all. The same
7
+ # goes for FactoryGirl in general. Might not be needed.
8
+ #
9
+ class DummyListener
10
+ include EventAggregator::Listener
11
+ end
12
+
13
+ FactoryGirl.define do
14
+ factory :listener, class: DummyListener do
15
+
16
+ end
17
+ factory :message do
18
+ message_type { Faker::Name.name }
19
+ data { Faker::Commerce.product_name } #TODO: This bracket should be unnescecary
20
+ #initialize_with(Faker::Name.name, Faker::Name.name)
21
+ end
22
+ end
@@ -0,0 +1,202 @@
1
+ require 'spec_helper'
2
+
3
+ describe EventAggregator::Aggregator do
4
+ let(:listener) { (Class.new { include EventAggregator::Listener }).new }
5
+ let(:listener_class) { Class.new { include EventAggregator::Listener }}
6
+ let(:message_type) { Faker::Name.name }
7
+ let(:data) { Faker::Name.name }
8
+
9
+ before(:each) do
10
+ EventAggregator::Aggregator.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
11
+ end
12
+ describe "self.register" do
13
+ describe 'legal parameters' do
14
+ it 'registered at correct place' do
15
+ EventAggregator::Aggregator.register(listener, message_type)
16
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to include(listener)
17
+ end
18
+
19
+ it 'should not be registered in wrong place' do
20
+ EventAggregator::Aggregator.register(listener, message_type)
21
+ EventAggregator::Aggregator.class_variable_get(:@@listeners).each do |e|
22
+ if e[0] == message_type
23
+ expect(e[1]).to include(listener)
24
+ else
25
+ expect(e[1]).to_not include(listener)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ describe 'illegal parameters' do
31
+ it 'should not allow nil as message type' do
32
+ expect{EventAggregator::Aggregator.register(nil, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
33
+ end
34
+ it 'should not allow non-listener to register' do
35
+ expect{EventAggregator::Aggregator.register(EventAggregator::Message.new("a","b"), message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
36
+ expect{EventAggregator::Aggregator.register("string", message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
37
+ expect{EventAggregator::Aggregator.register(1, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
38
+ expect{EventAggregator::Aggregator.register(2.0, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "self.unregister" do
44
+ describe 'legal parameters' do
45
+ it 'should decrease count by 1' do
46
+ EventAggregator::Aggregator.register(listener, message_type)
47
+ expect{EventAggregator::Aggregator.unregister(listener, message_type)}.to change{EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type].length}.by(-1)
48
+ end
49
+ it 'should be remove from list' do
50
+ EventAggregator::Aggregator.register(listener, message_type)
51
+ EventAggregator::Aggregator.unregister(listener, message_type)
52
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to_not include(listener)
53
+ end
54
+ it 'should keep listener in unrelated lists' do
55
+ message_type2 = message_type + " different"
56
+
57
+ EventAggregator::Aggregator.register(listener, message_type)
58
+ EventAggregator::Aggregator.register(listener, message_type2)
59
+
60
+ EventAggregator::Aggregator.unregister(listener, message_type)
61
+
62
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include(listener)
63
+ end
64
+ end
65
+ describe 'unregitering nonregisterd listener' do
66
+ it 'should not change list' do
67
+ message_type1 = message_type + " different 1"
68
+ message_type2 = message_type + " different 2"
69
+ message_type3 = message_type + " different 3"
70
+ listener1 = listener_class.new
71
+ listener2 = listener_class.new
72
+ listener3 = listener_class.new
73
+
74
+ EventAggregator::Aggregator.register(listener1, message_type1)
75
+ EventAggregator::Aggregator.register(listener2, message_type2)
76
+ EventAggregator::Aggregator.register(listener3, message_type3)
77
+
78
+ #Touching hash
79
+ EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]
80
+
81
+ expect{EventAggregator::Aggregator.unregister(listener1, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
82
+ expect{EventAggregator::Aggregator.unregister(listener2, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
83
+ expect{EventAggregator::Aggregator.unregister(listener3, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
84
+
85
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type1]).to include(listener1)
86
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include(listener2)
87
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3]).to include(listener3)
88
+ end
89
+ end
90
+ describe 'unregitering listener from wrong message type' do
91
+ it 'should not change list' do
92
+ message_type2 = message_type + " different"
93
+
94
+ EventAggregator::Aggregator.register(listener, message_type)
95
+
96
+ expect{EventAggregator::Aggregator.unregister(listener, message_type2)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]}
97
+ end
98
+ end
99
+ describe 'unregitering non-listener class' do
100
+ it 'should not change register list' do
101
+ #Touching hash
102
+ EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]
103
+
104
+ expect{EventAggregator::Aggregator.unregister(EventAggregator::Message.new("a","b"), message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
105
+ expect{EventAggregator::Aggregator.unregister("string", message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
106
+ expect{EventAggregator::Aggregator.unregister(1, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
107
+ expect{EventAggregator::Aggregator.unregister(2.0, message_type)}.to_not change{EventAggregator::Aggregator.class_variable_get(:@@listeners)}
108
+ end
109
+ end
110
+ end
111
+
112
+ describe "self.unregister_all" do
113
+ describe "unregistering listener registered to one message type" do
114
+ it "should unregister from list" do
115
+ EventAggregator::Aggregator.register(listener, message_type)
116
+
117
+ EventAggregator::Aggregator.unregister_all(listener)
118
+
119
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to_not include(listener)
120
+ end
121
+ it "should not unregister wrong listener" do
122
+ listener2 = listener_class.new
123
+ listener3 = listener_class.new
124
+ listener4 = listener_class.new
125
+
126
+ message_type2 = message_type + " different"
127
+ message_type3 = message_type + " different 2"
128
+
129
+ EventAggregator::Aggregator.register(listener, message_type)
130
+ EventAggregator::Aggregator.register(listener2, message_type)
131
+ EventAggregator::Aggregator.register(listener3, message_type2)
132
+ EventAggregator::Aggregator.register(listener4, message_type3)
133
+
134
+
135
+ EventAggregator::Aggregator.unregister_all(listener)
136
+
137
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to include(listener2)
138
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to include(listener3)
139
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type3]).to include(listener4)
140
+ end
141
+ end
142
+ describe "unregistering listener registered for several message types" do
143
+ it "should unregister from all lists" do
144
+ EventAggregator::Aggregator.register(listener, message_type)
145
+ message_type2 = message_type + " different"
146
+ EventAggregator::Aggregator.register(listener, message_type2)
147
+
148
+ EventAggregator::Aggregator.unregister_all(listener)
149
+
150
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type]).to_not include(listener)
151
+ expect(EventAggregator::Aggregator.class_variable_get(:@@listeners)[message_type2]).to_not include(listener)
152
+ end
153
+ end
154
+ end
155
+
156
+ describe "self.message_publish" do
157
+ describe 'legal parameters' do
158
+ it 'should receive correct messages' do
159
+ EventAggregator::Aggregator.register(listener, message_type)
160
+ message = EventAggregator::Message.new(message_type, data)
161
+
162
+ expect(listener).to receive(:receive_message).with(message)
163
+
164
+ EventAggregator::Aggregator.message_publish(message)
165
+ end
166
+ it 'should not receive incorrect messages' do
167
+ message_type2 = message_type + " different"
168
+
169
+ EventAggregator::Aggregator.register(listener, message_type)
170
+ message = EventAggregator::Message.new(message_type2, data)
171
+
172
+ expect(listener).to_not receive(:receive_message)
173
+
174
+ EventAggregator::Aggregator.message_publish(message)
175
+ end
176
+
177
+ it 'should send message to right listener' do
178
+ listener2 = listener_class.new
179
+ message_type2 = message_type + " different"
180
+
181
+ EventAggregator::Aggregator.register(listener, message_type)
182
+ EventAggregator::Aggregator.register(listener, message_type2)
183
+
184
+ message = EventAggregator::Message.new(message_type, data)
185
+
186
+ expect(listener).to receive(:receive_message).with(message)
187
+ expect(listener2).to_not receive(:receive_message)
188
+
189
+ EventAggregator::Aggregator.message_publish(message)
190
+ end
191
+ end
192
+ describe 'illegal parameters' do
193
+ it 'non-message type' do
194
+ expect{EventAggregator::Aggregator.message_publish("string")}.to raise_error
195
+ expect{EventAggregator::Aggregator.message_publish(1)}.to raise_error
196
+ expect{EventAggregator::Aggregator.message_publish(listener)}.to raise_error
197
+ expect{EventAggregator::Aggregator.message_publish()}.to raise_error
198
+ expect{EventAggregator::Aggregator.message_publish(nil)}.to raise_error
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ # Public: Some ruby trickery to be able to test private methods
5
+ #
6
+ 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
13
+ end
14
+
15
+ 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 }
21
+
22
+ before(:each) do
23
+ EventAggregator::Aggregator.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
24
+ @message = EventAggregator::Message.new(message_type, data)
25
+ end
26
+ describe '.receive_message' do
27
+ describe 'legal parameters' do
28
+ it 'execute callback' do
29
+ #TODO: This is subject to refactor because the method is stroed in the module by a hack.
30
+ # This stuff should be moved to the aggregator, or somewhere else.
31
+ listener.class.publicize_methods do
32
+ listener.message_type_to_receive_add(message_type, lambda_method)
33
+
34
+ expect(lambda_method).to receive(:call)
35
+
36
+ listener.receive_message(@message)
37
+ end
38
+ end
39
+ end
40
+ describe 'illegal parameters' do
41
+ #This should not recieve illegal parameters.
42
+ it 'pending' do
43
+ pending "not implemented"
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '.message_type_to_receive_add' do
49
+ describe 'legal parameters' do
50
+ it 'should register at aggregator' do
51
+ expect(EventAggregator::Aggregator).to receive(:register).with(listener, message_type)
52
+
53
+ listener.class.publicize_methods do
54
+ listener.message_type_to_receive_add(message_type, lambda_method)
55
+ end
56
+ end
57
+ it 'pending' do
58
+ pending "not implemented"
59
+ end
60
+ end
61
+ describe 'illegal parameters' do
62
+ it 'not valid' do
63
+ expect{listener.message_type_to_receive_add(message_type, nil)}.to raise_error
64
+ expect{listener.message_type_to_receive_add(message_type, 1)}.to raise_error
65
+ expect{listener.message_type_to_receive_add(message_type, "string")}.to raise_error
66
+ expect{listener.message_type_to_receive_add(message_type, listener_class.new)}.to raise_error
67
+ end
68
+ end
69
+ end
70
+
71
+ describe '.message_type_to_receive_remove' do
72
+ describe 'legal parameters' do
73
+ it 'not recieve callbacks' do
74
+ listener.class.publicize_methods do
75
+ listener.message_type_to_receive_add(message_type, lambda_method)
76
+ listener.message_type_to_receive_remove(message_type)
77
+
78
+ expect(lambda_method).to_not receive(:call)
79
+
80
+ listener.receive_message(@message)
81
+ end
82
+ end
83
+ end
84
+ describe 'illegal parameters' do
85
+ it 'not registered reciever' do
86
+ pending "This will really likely be removed in next refactor"
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
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
+
9
+ before(:each) do
10
+ EventAggregator::Aggregator.class_variable_set :@@listener, Hash.new{|h, k| h[k] = []}
11
+ @listener_one = listener_class.new
12
+ @listener_two = listener_class.new
13
+
14
+ EventAggregator::Aggregator.register(@listener_one, message_type)
15
+ EventAggregator::Aggregator.register(@listener_two, message_type+" different")
16
+ end
17
+
18
+ it 'should be received by a correct subscribers' do
19
+ message = EventAggregator::Message.new(message_type, data)
20
+ expect(@listener_one).to receive(:receive_message).with(message)
21
+ expect(@listener_two).to_not receive(:receive_message)
22
+
23
+ message.publish
24
+ end
25
+ it 'should be published to the aggregator' do
26
+ message = EventAggregator::Message.new(message_type, data)
27
+ expect(EventAggregator::Aggregator).to receive(:message_publish).with(message)
28
+
29
+ message.publish
30
+ end
31
+ end
32
+
33
+ describe 'self.new' do
34
+ let(:message_type) {Faker::Name.name}
35
+ let(:data) {Faker::Name.name}
36
+
37
+ it 'should require initialize data' do
38
+ expect{EventAggregator::Message.new(message_type)}.to raise_error
39
+ expect{EventAggregator::Message.new(data)}.to raise_error
40
+ expect{EventAggregator::Message.new(message_type, data)}.to_not raise_error
41
+ end
42
+ it 'should have non-nil message_type' do
43
+ expect{EventAggregator::Message.new(nil, data)}.to raise_error
44
+ end
45
+ it 'should have initialize data publicly available' do
46
+ message = EventAggregator::Message.new(message_type, data)
47
+
48
+ expect(message.message_type).to equal(message_type)
49
+ expect(message.data).to equal(data)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,21 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+ require "factory_girl"
4
+ require "faker"
5
+
6
+ require "event_aggregator"
7
+
8
+ RSpec.configure do |config|
9
+ config.treat_symbols_as_metadata_keys_with_true_values = true
10
+ config.run_all_when_everything_filtered = true
11
+ config.filter_run :focus
12
+
13
+ # Run specs in random order to surface order dependencies. If you find an
14
+ # order dependency and want to debug it, you can fix the order by providing
15
+ # the seed, which is printed after each run.
16
+ # --seed 1234
17
+ config.order = "random"
18
+
19
+
20
+ FactoryGirl.find_definitions
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_aggregator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-09 00:00:00.000000000 Z
12
+ date: 2013-12-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,6 +43,54 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: guard-rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: factory_girl
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: faker
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
46
94
  description: A simple Ruby event aggregator.
47
95
  email:
48
96
  - stephan.n.eriksen@gmail.com
@@ -51,7 +99,9 @@ extensions: []
51
99
  extra_rdoc_files: []
52
100
  files:
53
101
  - .gitignore
102
+ - .rspec
54
103
  - Gemfile
104
+ - Guardfile
55
105
  - LICENSE.txt
56
106
  - README.md
57
107
  - Rakefile
@@ -61,6 +111,11 @@ files:
61
111
  - lib/event_aggregator/listener.rb
62
112
  - lib/event_aggregator/message.rb
63
113
  - lib/event_aggregator/version.rb
114
+ - spec/factories.rb
115
+ - spec/lib/event_aggregator/aggregator_spec.rb
116
+ - spec/lib/event_aggregator/listener_spec.rb
117
+ - spec/lib/event_aggregator/message_spec.rb
118
+ - spec/spec_helper.rb
64
119
  homepage: https://github.com/stephan-nordnes-eriksen/event_aggregator
65
120
  licenses:
66
121
  - MIT
@@ -86,4 +141,9 @@ rubygems_version: 1.8.25
86
141
  signing_key:
87
142
  specification_version: 3
88
143
  summary: Event aggregator for Ruby.
89
- test_files: []
144
+ test_files:
145
+ - spec/factories.rb
146
+ - spec/lib/event_aggregator/aggregator_spec.rb
147
+ - spec/lib/event_aggregator/listener_spec.rb
148
+ - spec/lib/event_aggregator/message_spec.rb
149
+ - spec/spec_helper.rb