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 +8 -8
- data/lib/event_aggregator.rb +1 -0
- data/lib/event_aggregator/aggregator.rb +12 -1
- data/lib/event_aggregator/listener.rb +5 -0
- data/lib/event_aggregator/message.rb +5 -2
- data/lib/event_aggregator/message_job.rb +1 -0
- data/lib/event_aggregator/version.rb +1 -1
- data/spec/lib/event_aggregator/aggregator_spec.rb +72 -2
- data/spec/spec_helper.rb +17 -7
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjViMDc2Y2ZkMmE0ZmJmNzk2ZmJlZTEwODBhNGQwZWM4Y2NkZTcyNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjdhZjQ2YWQ0YWZiYmQyM2FiZjU3ZTk1NDJkZTFmZDdiMDk4ODk0MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTk4ZDNjMTczMWVhMWU3ODRkMDMyMmUxYTgzOTI5ZjkxYWU3OWI5MjNhYmI3
|
10
|
+
YzVkNjZlNDhlODZlODM0ZjkyNTYzMWRmNWQ3OWEyMmEzYTM3MmIzMjExNGUz
|
11
|
+
YjU3Y2ZhN2RhMDlhMjUzMjU0YmY0MjdjNGVlMTM4YTVmZGFlYzg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzZjN2I2YjNmNWMyMmFjNjhmMThkNmYwY2ZhOWZjNjgzZDBiZjFjN2FkYmFk
|
14
|
+
MjEzYTRjZmRiMDQ2NzdkNGY4MTg4ODNiODgyNzQ0NDMzNjc3NTBhOTU4MjM0
|
15
|
+
ZWVkODhlY2QwYjNhNTBlMjZhZDUzYzlhNDVkODcxYTE1NDYzZjI=
|
data/lib/event_aggregator.rb
CHANGED
@@ -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
|
-
|
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
|
@@ -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(:
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
+
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-
|
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:
|
161
|
+
version: 1.3.1
|
162
162
|
requirements: []
|
163
163
|
rubyforge_project:
|
164
164
|
rubygems_version: 2.2.0
|