event_aggregator 1.1.3 → 1.1.4.pre.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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