event_aggregator 1.1.3 → 1.1.4.pre.pre

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
- ZGM4ODIzYzYxMjJlMTcwYjU4YjE3YmU4ZWY3OWJkY2Q5Y2I2MGY0Yg==
4
+ NjViMDc2Y2ZkMmE0ZmJmNzk2ZmJlZTEwODBhNGQwZWM4Y2NkZTcyNg==
5
5
  data.tar.gz: !binary |-
6
- N2MxMGFlM2ZhNGM0NDM4ZGRiZTkyYWRmYzJmYmExM2M5M2JkMTM4Mg==
6
+ ZjdhZjQ2YWQ0YWZiYmQyM2FiZjU3ZTk1NDJkZTFmZDdiMDk4ODk0MQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDZjYTljOGVhZDQyY2IzYjZjMzMxM2U3YTZiNDRjNzFlMTRjNzc2YmM4NGVj
10
- ZGJhNjYwM2MwZDhjZjdiOWE0NDdhNTc2YjY2YzdlMWRjNzg1ZTJjMmI5OTNj
11
- NDJkZWNkMTIyZmJlOWI0NjQwNDExNTg3MTg3NDllOTU1NmY2OGM=
9
+ NTk4ZDNjMTczMWVhMWU3ODRkMDMyMmUxYTgzOTI5ZjkxYWU3OWI5MjNhYmI3
10
+ YzVkNjZlNDhlODZlODM0ZjkyNTYzMWRmNWQ3OWEyMmEzYTM3MmIzMjExNGUz
11
+ YjU3Y2ZhN2RhMDlhMjUzMjU0YmY0MjdjNGVlMTM4YTVmZGFlYzg=
12
12
  data.tar.gz: !binary |-
13
- ODEzZDU3MmFiYjA3ZTM0ODk3ZmQ3ZjcwMTU3N2Y0NDRhMTExNzI3ZDgzNDUw
14
- M2Q5YmEwMzg0MzY3Y2NjZWFjOGU4MDhiNjRmNDFmMmNlYmY3NzU0Yjk5MGRi
15
- Mjc5YjUxMjExZTgwZWM0M2E1OTI1MDIzYjViOWIzM2EzNmIyZWU=
13
+ YzZjN2I2YjNmNWMyMmFjNjhmMThkNmYwY2ZhOWZjNjgzZDBiZjFjN2FkYmFk
14
+ MjEzYTRjZmRiMDQ2NzdkNGY4MTg4ODNiODgyNzQ0NDMzNjc3NTBhOTU4MjM0
15
+ ZWVkODhlY2QwYjNhNTBlMjZhZDUzYzlhNDVkODcxYTE1NDYzZjI=
@@ -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"
@@ -27,6 +27,7 @@ module EventAggregator
27
27
  # message_type is published. Is executed with message.data as parameter.
28
28
  #
29
29
  def self.register( listener, message_type, callback )
30
+ puts 'def self.register( listener, message_type, callback )'
30
31
  raise "Illegal listener" unless listener.class < EventAggregator::Listener
31
32
  raise "Illegal message_type" if message_type == nil
32
33
  raise "Illegal callback" unless callback.respond_to?(:call)
@@ -44,6 +45,7 @@ module EventAggregator
44
45
  # will execute with the message as parameter.
45
46
  #
46
47
  def self.register_all( listener, callback )
48
+ puts 'def self.register_all( listener, callback )'
47
49
  raise "Illegal listener" unless listener.class < EventAggregator::Listener
48
50
  raise "Illegal callback" unless callback.respond_to?(:call)
49
51
  @@listeners_all[listener] = callback
@@ -57,6 +59,7 @@ module EventAggregator
57
59
  # the messages.
58
60
  # message_type - The message type to unregister for.
59
61
  def self.unregister( listener, message_type )
62
+ puts 'def self.unregister( listener, message_type )'
60
63
  @@listeners[message_type].delete(listener)
61
64
  end
62
65
 
@@ -65,6 +68,7 @@ module EventAggregator
65
68
  # listener - The listener who should no longer get any messages at all,
66
69
  # regardless of type.
67
70
  def self.unregister_all( listener )
71
+ puts 'def self.unregister_all( listener )'
68
72
  @@listeners.each do |key,value|
69
73
  value.delete(listener)
70
74
  end
@@ -78,6 +82,7 @@ module EventAggregator
78
82
  # async - true => message will be sent async. Default true
79
83
  # consisten_data - true => the same object will be sent to all recievers. Default false
80
84
  def self.message_publish ( message )
85
+ puts 'def self.message_publish ( message )'
81
86
  raise "Invalid message" unless message.respond_to?(:message_type) && message.respond_to?(:data)
82
87
  @@listeners[message.message_type].each do |listener, callback|
83
88
  perform_message_job(message.data, callback, message.async, message.consisten_data)
@@ -95,6 +100,7 @@ module EventAggregator
95
100
  # Use EventAggregator::Aggregator.reset before each test when doing unit testing.
96
101
  #
97
102
  def self.reset
103
+ puts 'def self.reset'
98
104
  @@listeners = Hash.new{|h, k| h[k] = Hash.new}
99
105
  @@listeners_all = Hash.new
100
106
  @@message_translation = Hash.new{|h, k| h[k] = Hash.new }
@@ -108,6 +114,7 @@ module EventAggregator
108
114
  # callback=lambda{|data| data} - The callback that will transform the data from message_type to message_type_new. Default: copy.
109
115
  #
110
116
  def self.translate_message_with(message_type, message_type_new, callback=lambda{|data| data})
117
+ puts 'def self.translate_message_with(message_type, message_type_new, callback=lambda{|data| data})'
111
118
  raise "Illegal parameters" if message_type == nil || message_type_new == nil || !callback.respond_to?(:call) || callback.arity != 1 #TODO: The callback.parameters is not 1.8.7 compatible.
112
119
  raise "Illegal parameters, equal message_type and message_type_new" if message_type == message_type_new || message_type.eql?(message_type_new)
113
120
 
@@ -126,9 +133,10 @@ module EventAggregator
126
133
  # EventAggregator::Aggregator.register_producer("GetMultipliedByTwo", lambda{|data| data*2})
127
134
  #
128
135
  def self.register_producer(message_type, callback)
136
+ puts 'def self.register_producer(message_type, callback)'
129
137
  raise "Illegal message_type" if message_type == nil
130
138
  raise "Illegal callback" unless callback.respond_to?(:call) && callback.arity == 1
131
- raise "Already defined producer" if @@producers[message_type]
139
+
132
140
 
133
141
  @@producers[message_type] = callback
134
142
  end
@@ -139,6 +147,7 @@ module EventAggregator
139
147
  # message_type - The message type which will no longer respond to message requests.
140
148
  #
141
149
  def self.unregister_producer(message_type)
150
+ puts 'def self.unregister_producer(message_type)'
142
151
  @@producers.delete(message_type)
143
152
  end
144
153
 
@@ -150,11 +159,13 @@ module EventAggregator
150
159
  # Returns The data provided by a producer registered for this specific message type, or nil.
151
160
  #
152
161
  def self.message_request(message)
162
+ puts 'def self.message_request(message)'
153
163
  @@producers[message.message_type] ? @@producers[message.message_type].call(message.data) : nil
154
164
  end
155
165
 
156
166
  private
157
167
  def self.perform_message_job(data, callback, async, consisten_data)
168
+ puts 'def self.perform_message_job(data, callback, async, consisten_data)'
158
169
  case [async, consisten_data]
159
170
  when [true, true] then @@pool.process{ EventAggregator::MessageJob.new.perform(data, callback) }
160
171
  when [true, false] then @@pool.process{ EventAggregator::MessageJob.new.perform(data.clone, callback) }
@@ -28,6 +28,7 @@ module EventAggregator
28
28
  # message_type_register("foo", Proc.new { puts "foo" })
29
29
  #
30
30
  def message_type_register( message_type, callback )
31
+ puts 'def message_type_register( message_type, callback )'
31
32
  Aggregator.register( self, message_type, callback)
32
33
  end
33
34
 
@@ -38,6 +39,7 @@ module EventAggregator
38
39
  # callback - The method that will be invoked every time this message type is received. Must have: callback.respond_to? :call #=> true
39
40
  #
40
41
  def message_type_register_all(callback)
42
+ puts 'def message_type_register_all(callback)'
41
43
  Aggregator.register_all(self, callback)
42
44
  end
43
45
 
@@ -51,6 +53,7 @@ module EventAggregator
51
53
  # message_type_unregister("foo")
52
54
  #
53
55
  def message_type_unregister( message_type )
56
+ puts 'def message_type_unregister( message_type )'
54
57
  Aggregator.unregister(self, message_type)
55
58
  end
56
59
 
@@ -59,6 +62,7 @@ module EventAggregator
59
62
  # Listener will no longer recieve any callbacks when messages of any kind are published.
60
63
  #
61
64
  def message_type_unregister_all
65
+ puts 'def message_type_unregister_all'
62
66
  Aggregator.unregister_all(self)
63
67
  end
64
68
 
@@ -75,6 +79,7 @@ module EventAggregator
75
79
  # # => 6
76
80
  #
77
81
  def producer_register(message_type, callback)
82
+ puts 'def producer_register(message_type, callback)'
78
83
  Aggregator.register_producer(message_type, callback)
79
84
  end
80
85
  end
@@ -33,6 +33,7 @@ module EventAggregator
33
33
  # consisten_data = false - Indicates if EventAggregator::Listener objects
34
34
  # should recieve a consistent object reference or clones.
35
35
  def initialize(message_type, data, async = true, consisten_data = false)
36
+ puts 'def initialize(message_type, data, async = true, consisten_data = false)'
36
37
  raise "Illegal Message Type" if message_type == nil
37
38
 
38
39
  @message_type = message_type
@@ -45,13 +46,15 @@ module EventAggregator
45
46
  # EventAggregator::Listener that is registered for message types
46
47
  # equal to this.message_type
47
48
  def publish
49
+ puts 'def publish'
48
50
  Aggregator.message_publish( self )
49
51
  end
50
-
52
+
51
53
  # Public: Will provide data if a producer of this message_type is present.
52
- #
54
+ #
53
55
  # Returns Requested data if a producer is present. Nil otherwise.
54
56
  def request
57
+ puts 'def request'
55
58
  Aggregator.message_request( self )
56
59
  end
57
60
  end
@@ -12,6 +12,7 @@ module EventAggregator
12
12
  # callback - The callback that will be processed with the data as
13
13
  # a parameter
14
14
  def perform(data, callback)
15
+ puts 'def perform(data, callback)'
15
16
  callback.call(data)
16
17
  end
17
18
  end
@@ -1,3 +1,3 @@
1
1
  module EventAggregator
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.4-pre"
3
3
  end
@@ -9,9 +9,13 @@ describe EventAggregator::Aggregator do
9
9
  let(:random_string) { Faker::Internet.password }
10
10
  let(:random_number) { Faker::Number.number(rand(9)) }
11
11
 
12
- before(:each) do
12
+ before(:all) do
13
13
  EventAggregator::Aggregator.reset
14
14
  end
15
+
16
+ after(:each) do
17
+ EventAggregator::Aggregator.restart_pool
18
+ end
15
19
  describe "self.register" do
16
20
  describe 'legal parameters' do
17
21
  it "no errors" do
@@ -229,7 +233,7 @@ describe EventAggregator::Aggregator do
229
233
  EventAggregator::Aggregator.message_publish(message)
230
234
  end
231
235
 
232
- it 'run all callbacks for all message types' do
236
+ it 'run all callbacks for all message types' do #Fails with seed: 34154
233
237
  EventAggregator::Aggregator.register_all(listener, callback)
234
238
 
235
239
  message1 = EventAggregator::Message.new(message_type , data)
@@ -579,4 +583,70 @@ describe EventAggregator::Aggregator do
579
583
  end
580
584
  end
581
585
  end
586
+
587
+ describe 'propagates fully' do
588
+ class TestClassSingle
589
+ include EventAggregator::Listener
590
+
591
+ def initialize
592
+ message_type_register("message_type", method(:test_method))
593
+ end
594
+
595
+ def test_method(data)
596
+ self.self_called(data)
597
+ end
598
+ def self_called(data)
599
+ end
600
+ end
601
+
602
+ class TestClassAll
603
+ include EventAggregator::Listener
604
+
605
+ def initialize
606
+ message_type_register_all(method(:test_method))
607
+ end
608
+
609
+ def test_method(data)
610
+ self.self_called(data)
611
+ end
612
+ def self_called(data)
613
+ end
614
+ end
615
+
616
+ it "calls method on test class single" do
617
+ test_class = TestClassSingle.new
618
+ expect(test_class).to receive(:self_called).with(data)
619
+ message = EventAggregator::Message.new("message_type", data)
620
+ EventAggregator::Aggregator.message_publish(message)
621
+ end
622
+
623
+ it "calls method on test class all" do
624
+ test_class = TestClassAll.new
625
+ message = EventAggregator::Message.new("message_type", data)
626
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
627
+ EventAggregator::Aggregator.message_publish(message)
628
+ end
629
+
630
+ it "calls method on test class single full-stack" do
631
+ test_class = TestClassSingle.new
632
+ expect(test_class).to receive(:self_called).with(data)
633
+ message = EventAggregator::Message.new("message_type", data)
634
+ message.publish
635
+ end
636
+
637
+ it "calls method on test class all full-stack" do
638
+ test_class = TestClassAll.new
639
+ message = EventAggregator::Message.new("message_type", data)
640
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
641
+ message.publish
642
+ end
643
+ it "calls method on mulitple" do
644
+ test_class = TestClassAll.new
645
+ test_class2 = TestClassSingle.new
646
+ message = EventAggregator::Message.new("message_type", data)
647
+ expect(test_class).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
648
+ expect(test_class2).to receive(:self_called){|e| expect(e.message_type).to eq("message_type") and expect(e.data).to eq(data)}
649
+ message.publish
650
+ end
651
+ end
582
652
  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.3
4
+ version: 1.1.4.pre.pre
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-13 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
@@ -156,9 +156,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ! '>='
159
+ - - ! '>'
160
160
  - !ruby/object:Gem::Version
161
- version: '0'
161
+ version: 1.3.1
162
162
  requirements: []
163
163
  rubyforge_project:
164
164
  rubygems_version: 2.2.0