event_aggregator 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTA4MzQ1NDU2ZDMxMzkzYTQ0ZjkwNzBlMGFlODhhMDE2NWZjYjU5Yw==
4
+ ZmEwZGVmNTFlNWM4ZDQ2YjM4MzRiMWU1OWEzNTA2NjEwYjFhMTdhYg==
5
5
  data.tar.gz: !binary |-
6
- OWIwZmY0NGM0NzBmOGU2MDc2ZGYxMDBkZjY5NjlmNjVmOWJjMjM0Ng==
6
+ ZTc3MDBjMTQ0MzJhMGIxMjllYjBmYTkxMDlhMTg3NmJhYTNmNTNhNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YWI2ZjJhOTAzMTU3MTNmNzQwNWEyYWE3NTFlMzg2ZTIwYTQzZTRhMzA4MjVi
10
- NTk0ZDc2MDMwOTI1NjQ5NTJmZDdlNGQ5MjJhMzRmMWU3MDUzNTU2YjhkZGI1
11
- MGVkZDY5ZmY2MDM1MWZlZDAxZTk5MWJmYzgwYWNiYjNhOGNjMTQ=
9
+ N2YxMDFhNTE0ZDM2Nzg3NWMzYWZhNDcyOWI3NDE4NjgwNGVkYmY0NWQzOGEz
10
+ NDA5ZGNiNjk3MzEwZjJlOTk3NmVhNGRlMzMyOWU3M2YwZjg0YTJjZGJmMGRh
11
+ MzJiMzg0ZDQ3NmZiYmU2M2JlNTRjZTZmOGRiMmI4MDJjZDFlOGM=
12
12
  data.tar.gz: !binary |-
13
- NTA3NjFkNmFkOTEyOTZjZWE3N2MxYTFhMjc3YjMwMDY5ODU0MDVmMjZjYmFh
14
- YjZmNGNjNmNmOTgyNmE1MTRmMmRjZjc5Njc2NmVhOTViYTViYTJjOGIzNzI5
15
- ZDkxN2RlZjBkNmJiYjg2YmI4NmZhZGZhZDkzZWM3NzM4N2JhOTE=
13
+ YzkwMWRmY2Y0NDc3ODk2YmZkMDNhYzEzMjVmN2IxMzBmNDNmNmUyNjg3NDcw
14
+ MjQwOTU2ZDg4MTA0YTQ2YzE0OThhOGVhNGM4MzQxZmU2Yzg3ZjY0Y2I0ZjEw
15
+ NTQ0MzY5MzUxNTNhOGFlNjI1N2Y0NjRkYTM0MGU2NjAxYjJlYzc=
@@ -1,4 +1,5 @@
1
1
  require "thread/pool"
2
+
2
3
  require "event_aggregator/version"
3
4
  require "event_aggregator/aggregator"
4
5
  require "event_aggregator/listener"
@@ -129,7 +129,6 @@ module EventAggregator
129
129
  raise "Illegal message_type" if message_type == nil
130
130
  raise "Illegal callback" unless callback.respond_to?(:call) && callback.arity == 1
131
131
 
132
-
133
132
  @@producers[message_type] = callback
134
133
  end
135
134
 
@@ -155,7 +154,7 @@ module EventAggregator
155
154
 
156
155
  private
157
156
  def self.perform_message_job(data, callback, async, consisten_data)
158
- case [async, consisten_data]
157
+ case [async, consisten_data || data == nil]
159
158
  when [true, true] then @@pool.process{ EventAggregator::MessageJob.new.perform(data, callback) }
160
159
  when [true, false] then @@pool.process{ EventAggregator::MessageJob.new.perform(data.clone, callback) }
161
160
  when [false, true] then EventAggregator::MessageJob.new.perform(data, callback)
@@ -30,9 +30,9 @@ module EventAggregator
30
30
  # data - The data that will be passed to the
31
31
  # EventAggregator::Listener objects
32
32
  # async = true - Indicates if message should be published async or not
33
- # consisten_data = false - Indicates if EventAggregator::Listener objects
33
+ # consisten_data = true - Indicates if EventAggregator::Listener objects
34
34
  # should recieve a consistent object reference or clones.
35
- def initialize(message_type, data, async = true, consisten_data = false)
35
+ def initialize(message_type, data, async = true, consisten_data = true)
36
36
  raise "Illegal Message Type" if message_type == nil
37
37
 
38
38
  @message_type = message_type
@@ -47,9 +47,9 @@ module EventAggregator
47
47
  def publish
48
48
  Aggregator.message_publish( self )
49
49
  end
50
-
50
+
51
51
  # Public: Will provide data if a producer of this message_type is present.
52
- #
52
+ #
53
53
  # Returns Requested data if a producer is present. Nil otherwise.
54
54
  def request
55
55
  Aggregator.message_request( self )
@@ -1,3 +1,3 @@
1
1
  module EventAggregator
2
- VERSION = "1.1.4"
2
+ VERSION = "1.1.5"
3
3
  end
@@ -8,10 +8,15 @@ describe EventAggregator::Aggregator do
8
8
  let(:callback) { lambda{ |data| } }
9
9
  let(:random_string) { Faker::Internet.password }
10
10
  let(:random_number) { Faker::Number.number(rand(9)) }
11
-
12
- before(:each) do
11
+ let(:empty_object) { Object.new }
12
+
13
+ before(:all) do
13
14
  EventAggregator::Aggregator.reset
14
15
  end
16
+
17
+ after(:each) do
18
+ EventAggregator::Aggregator.restart_pool
19
+ end
15
20
  describe "self.register" do
16
21
  describe 'legal parameters' do
17
22
  it "no errors" do
@@ -229,7 +234,57 @@ describe EventAggregator::Aggregator do
229
234
  EventAggregator::Aggregator.message_publish(message)
230
235
  end
231
236
 
232
- it 'run all callbacks for all message types' do
237
+ it 'runs all callbacks when data is different types' do
238
+ EventAggregator::Aggregator.register_all(listener, callback)
239
+
240
+ message1 = EventAggregator::Message.new(message_type , nil)
241
+ message2 = EventAggregator::Message.new(message_type + "2", random_number)
242
+ message3 = EventAggregator::Message.new(message_type + "3", random_string)
243
+ message4 = EventAggregator::Message.new(message_type + "4", empty_object)
244
+ message5 = EventAggregator::Message.new(message_type + "5", true)
245
+ message6 = EventAggregator::Message.new(message_type + "6", false)
246
+
247
+ expect(callback).to receive(:call).with(message1)
248
+ expect(callback).to receive(:call).with(message2)
249
+ expect(callback).to receive(:call).with(message3)
250
+ expect(callback).to receive(:call).with(message4)
251
+ expect(callback).to receive(:call).with(message5)
252
+ expect(callback).to receive(:call).with(message6)
253
+
254
+ EventAggregator::Aggregator.message_publish(message1)
255
+ EventAggregator::Aggregator.message_publish(message2)
256
+ EventAggregator::Aggregator.message_publish(message3)
257
+ EventAggregator::Aggregator.message_publish(message4)
258
+ EventAggregator::Aggregator.message_publish(message5)
259
+ EventAggregator::Aggregator.message_publish(message6)
260
+ end
261
+
262
+ it 'runs all callbacks when data is different types register one' do
263
+ EventAggregator::Aggregator.register(listener, message_type, callback)
264
+
265
+ message1 = EventAggregator::Message.new(message_type, nil)
266
+ message2 = EventAggregator::Message.new(message_type, random_number)
267
+ message3 = EventAggregator::Message.new(message_type, random_string)
268
+ message4 = EventAggregator::Message.new(message_type, empty_object)
269
+ message5 = EventAggregator::Message.new(message_type, true)
270
+ message6 = EventAggregator::Message.new(message_type, false)
271
+
272
+ expect(callback).to receive(:call).with(nil)
273
+ expect(callback).to receive(:call).with(random_number)
274
+ expect(callback).to receive(:call).with(random_string)
275
+ expect(callback).to receive(:call).with(empty_object)
276
+ expect(callback).to receive(:call).with(true)
277
+ expect(callback).to receive(:call).with(false)
278
+
279
+ EventAggregator::Aggregator.message_publish(message1)
280
+ EventAggregator::Aggregator.message_publish(message2)
281
+ EventAggregator::Aggregator.message_publish(message3)
282
+ EventAggregator::Aggregator.message_publish(message4)
283
+ EventAggregator::Aggregator.message_publish(message5)
284
+ EventAggregator::Aggregator.message_publish(message6)
285
+ end
286
+
287
+ it 'run all callbacks for all message types register all' do #Fails with seed: 34154
233
288
  EventAggregator::Aggregator.register_all(listener, callback)
234
289
 
235
290
  message1 = EventAggregator::Message.new(message_type , data)
@@ -239,30 +294,13 @@ describe EventAggregator::Aggregator do
239
294
  message5 = EventAggregator::Message.new(message_type + "5", data)
240
295
  message6 = EventAggregator::Message.new(message_type + "6", data)
241
296
 
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
- }
297
+
298
+ expect(callback).to receive(:call).with(message1)
299
+ expect(callback).to receive(:call).with(message2)
300
+ expect(callback).to receive(:call).with(message3)
301
+ expect(callback).to receive(:call).with(message4)
302
+ expect(callback).to receive(:call).with(message5)
303
+ expect(callback).to receive(:call).with(message6)
266
304
 
267
305
 
268
306
  EventAggregator::Aggregator.message_publish(message1)
@@ -579,4 +617,70 @@ describe EventAggregator::Aggregator do
579
617
  end
580
618
  end
581
619
  end
620
+
621
+ describe 'propagates fully' do
622
+ class TestClassSingle
623
+ include EventAggregator::Listener
624
+
625
+ def initialize
626
+ message_type_register("message_type", method(:test_method))
627
+ end
628
+
629
+ def test_method(data)
630
+ self.self_called(data)
631
+ end
632
+ def self_called(data)
633
+ end
634
+ end
635
+
636
+ class TestClassAll
637
+ include EventAggregator::Listener
638
+
639
+ def initialize
640
+ message_type_register_all(method(:test_method))
641
+ end
642
+
643
+ def test_method(data)
644
+ self.self_called(data)
645
+ end
646
+ def self_called(data)
647
+ end
648
+ end
649
+
650
+ it "calls method on test class single" do
651
+ test_class = TestClassSingle.new
652
+ expect(test_class).to receive(:self_called).with(data)
653
+ message = EventAggregator::Message.new("message_type", data)
654
+ EventAggregator::Aggregator.message_publish(message)
655
+ end
656
+
657
+ it "calls method on test class all" do
658
+ test_class = TestClassAll.new
659
+ message = EventAggregator::Message.new("message_type", data)
660
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
661
+ EventAggregator::Aggregator.message_publish(message)
662
+ end
663
+
664
+ it "calls method on test class single full-stack" do
665
+ test_class = TestClassSingle.new
666
+ expect(test_class).to receive(:self_called).with(data)
667
+ message = EventAggregator::Message.new("message_type", data)
668
+ message.publish
669
+ end
670
+
671
+ it "calls method on test class all full-stack" do
672
+ test_class = TestClassAll.new
673
+ message = EventAggregator::Message.new("message_type", data)
674
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
675
+ message.publish
676
+ end
677
+ it "calls method on mulitple" do
678
+ test_class = TestClassAll.new
679
+ test_class2 = TestClassSingle.new
680
+ message = EventAggregator::Message.new("message_type", data)
681
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
682
+ expect(test_class2).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
683
+ message.publish
684
+ end
685
+ end
582
686
  end
data/spec/spec_helper.rb CHANGED
@@ -10,13 +10,13 @@ Coveralls.wear!
10
10
 
11
11
 
12
12
 
13
- class Thread::Pool
14
-
15
- # Public: Overriding the process-call of the thread::pool so we can do tests better
16
- def process (*args, &block)
17
- block.call(*args)
18
- end
19
- end
13
+ # class Thread::Pool
14
+
15
+ # # Public: Overriding the process-call of the thread::pool so we can do tests better
16
+ # def process (*args, &block)
17
+ # block.call(*args)
18
+ # end
19
+ # end
20
20
 
21
21
  RSpec.configure do |config|
22
22
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -29,3 +29,13 @@ RSpec.configure do |config|
29
29
  # --seed 1234
30
30
  config.order = "random"
31
31
  end
32
+
33
+
34
+ class EventAggregator::Aggregator
35
+
36
+ def self.restart_pool
37
+ @@pool.shutdown
38
+ @@pool = Thread.pool(4)
39
+ end
40
+
41
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_aggregator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Eriksen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-14 00:00:00.000000000 Z
11
+ date: 2014-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler