chickadee 2.0.0 → 3.0.0
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 +4 -4
- data/chickadee.gemspec +1 -1
- data/lib/chickadee/dispatcher.rb +9 -11
- data/lib/chickadee/version.rb +1 -1
- data/lib/chickadee.rb +0 -6
- data/spec/dispatcher_spec.rb +5 -31
- metadata +4 -18
- data/lib/chickadee/dispatchers/abstract_dispatcher.rb +0 -21
- data/lib/chickadee/dispatchers/command_dispatcher.rb +0 -19
- data/lib/chickadee/dispatchers/event_dispatcher.rb +0 -22
- data/lib/chickadee/dispatchers/query_dispatcher.rb +0 -18
- data/lib/chickadee/dispatchers/request_dispatcher.rb +0 -24
- data/lib/chickadee/message_bus.rb +0 -65
- data/spec/dispatchers/command_dispatcher_spec.rb +0 -53
- data/spec/dispatchers/event_dispatcher_spec.rb +0 -70
- data/spec/dispatchers/query_dispatcher_spec.rb +0 -56
- data/spec/message_bus_spec.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c871897239bb45e6e02e54b6eb1d12685cc0f2d
|
4
|
+
data.tar.gz: 58f8f9827a25bdf7de346254a4d3753be532b2cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdd719125dd3d7dd02c80475da5ea912d5e1ece40a473a505438af97343721cd4c564823a93502e154d015fc062aaed6ef5e34ea1ba3b160c55eb84ecb491e14
|
7
|
+
data.tar.gz: 0de3dc3407af9782b8a310e27ecc3678422c8dd50e6f743f5d1c9cfd5b74b99b0ecf2aa54da3003fa8596c5b64bead96c97cb811f9a34ab99c0c1ed44045a28b
|
data/chickadee.gemspec
CHANGED
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
25
|
-
spec.add_development_dependency "mocha", "~> 0.
|
25
|
+
spec.add_development_dependency "mocha", "~> 1.0.0"
|
26
26
|
spec.add_development_dependency "guard-minitest", "~> 2.2.0"
|
27
27
|
end
|
data/lib/chickadee/dispatcher.rb
CHANGED
@@ -9,28 +9,26 @@ module Chickadee
|
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
@container = Container.new
|
12
|
-
@
|
13
|
-
@container.register(:event_dispatcher, @request_dispatcher.event_dispatcher, :as => :instance)
|
12
|
+
@request_map = {}
|
14
13
|
end
|
15
14
|
|
16
15
|
def register(*args)
|
17
16
|
@container.register(*args)
|
18
17
|
end
|
19
18
|
|
20
|
-
def
|
21
|
-
|
19
|
+
def map(request_class, *handlers)
|
20
|
+
raise(DispatcherError, "Request already mapped: #{request_class}") if @request_map.key?(request_class)
|
21
|
+
@request_map[request_class] = Proc.new{|req| resolve_handler_chain(*handlers).handle(req)}
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
@
|
24
|
+
def execute(request)
|
25
|
+
@request_map[request.class].call(request)
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
@request_dispatcher.map(:query, request_class, *handlers)
|
30
|
-
end
|
28
|
+
private
|
31
29
|
|
32
|
-
def
|
33
|
-
@
|
30
|
+
def resolve_handler_chain(*handlers)
|
31
|
+
@container.resolve_anonymous(HandlerChainStruct.new(*handlers))
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
data/lib/chickadee/version.rb
CHANGED
data/lib/chickadee.rb
CHANGED
@@ -3,12 +3,6 @@ require 'chickadee/version'
|
|
3
3
|
require 'chickadee/exceptions'
|
4
4
|
require 'chickadee/container'
|
5
5
|
require 'chickadee/handler_chain_struct'
|
6
|
-
require 'chickadee/message_bus'
|
7
|
-
require 'chickadee/dispatchers/abstract_dispatcher'
|
8
|
-
require 'chickadee/dispatchers/event_dispatcher'
|
9
|
-
require 'chickadee/dispatchers/command_dispatcher'
|
10
|
-
require 'chickadee/dispatchers/query_dispatcher'
|
11
|
-
require 'chickadee/dispatchers/request_dispatcher'
|
12
6
|
require 'chickadee/dispatcher'
|
13
7
|
|
14
8
|
module Chickadee
|
data/spec/dispatcher_spec.rb
CHANGED
@@ -2,41 +2,15 @@ require 'spec_helper'
|
|
2
2
|
require 'chickadee'
|
3
3
|
|
4
4
|
describe Chickadee::Dispatcher do
|
5
|
-
it 'can dispatch a
|
5
|
+
it 'can dispatch a request' do
|
6
6
|
handler = stub(:handle => 'handler response')
|
7
|
-
|
8
|
-
|
7
|
+
request_class = Class.new
|
8
|
+
request = request_class.new
|
9
9
|
dispatcher = new_dispatcher
|
10
10
|
|
11
11
|
dispatcher.register(:handler, handler, :as => :instance)
|
12
|
-
dispatcher.
|
13
|
-
|
14
|
-
handler.expects(:handle).once
|
15
|
-
dispatcher.dispatch(command).must_be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'can dispatch a query' do
|
19
|
-
handler = stub(:handle => 'handler response')
|
20
|
-
query_class = Class.new
|
21
|
-
query = query_class.new
|
22
|
-
dispatcher = new_dispatcher
|
23
|
-
|
24
|
-
dispatcher.register(:handler, handler, :as => :instance)
|
25
|
-
dispatcher.query(query_class, :handler)
|
26
|
-
dispatcher.dispatch(query).must_equal('handler response')
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'can dispatch an event' do
|
30
|
-
handler = stub(:handle => 'handler response')
|
31
|
-
event_class = Class.new
|
32
|
-
event = event_class.new
|
33
|
-
dispatcher = new_dispatcher
|
34
|
-
|
35
|
-
dispatcher.register(:handler, handler, :as => :instance)
|
36
|
-
dispatcher.event(event_class, :handler)
|
37
|
-
|
38
|
-
handler.expects(:handle).once
|
39
|
-
dispatcher.dispatch(event).must_be_nil
|
12
|
+
dispatcher.map(request_class, :handler)
|
13
|
+
dispatcher.execute(request).must_equal('handler response')
|
40
14
|
end
|
41
15
|
|
42
16
|
def new_dispatcher
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chickadee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Lott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ioc
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 1.0.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 1.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,21 +97,11 @@ files:
|
|
97
97
|
- lib/chickadee.rb
|
98
98
|
- lib/chickadee/container.rb
|
99
99
|
- lib/chickadee/dispatcher.rb
|
100
|
-
- lib/chickadee/dispatchers/abstract_dispatcher.rb
|
101
|
-
- lib/chickadee/dispatchers/command_dispatcher.rb
|
102
|
-
- lib/chickadee/dispatchers/event_dispatcher.rb
|
103
|
-
- lib/chickadee/dispatchers/query_dispatcher.rb
|
104
|
-
- lib/chickadee/dispatchers/request_dispatcher.rb
|
105
100
|
- lib/chickadee/exceptions.rb
|
106
101
|
- lib/chickadee/handler_chain_struct.rb
|
107
|
-
- lib/chickadee/message_bus.rb
|
108
102
|
- lib/chickadee/version.rb
|
109
103
|
- spec/dispatcher_spec.rb
|
110
|
-
- spec/dispatchers/command_dispatcher_spec.rb
|
111
|
-
- spec/dispatchers/event_dispatcher_spec.rb
|
112
|
-
- spec/dispatchers/query_dispatcher_spec.rb
|
113
104
|
- spec/handler_chain_struct_spec.rb
|
114
|
-
- spec/message_bus_spec.rb
|
115
105
|
- spec/spec_helper.rb
|
116
106
|
homepage: ''
|
117
107
|
licenses:
|
@@ -139,9 +129,5 @@ specification_version: 4
|
|
139
129
|
summary: Lightweight domain driven design library
|
140
130
|
test_files:
|
141
131
|
- spec/dispatcher_spec.rb
|
142
|
-
- spec/dispatchers/command_dispatcher_spec.rb
|
143
|
-
- spec/dispatchers/event_dispatcher_spec.rb
|
144
|
-
- spec/dispatchers/query_dispatcher_spec.rb
|
145
132
|
- spec/handler_chain_struct_spec.rb
|
146
|
-
- spec/message_bus_spec.rb
|
147
133
|
- spec/spec_helper.rb
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class AbstractDispatcher
|
3
|
-
def initialize(container)
|
4
|
-
@container = container
|
5
|
-
end
|
6
|
-
|
7
|
-
def map(request_key, *handlers)
|
8
|
-
raise(NotImplementedError)
|
9
|
-
end
|
10
|
-
|
11
|
-
def dispatch(request)
|
12
|
-
raise(NotImplementedError)
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def resolve_handler_chain(*handlers)
|
18
|
-
@container.resolve_anonymous(HandlerChainStruct.new(*handlers))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class CommandDispatcher < AbstractDispatcher
|
3
|
-
def map(request_key, *handlers)
|
4
|
-
raise(DispatcherError, "Command already mapped: #{request_key}") if bus.topic_exists?(request_key)
|
5
|
-
bus.subscribe(request_key) {|req| resolve_handler_chain(*handlers).handle(req)}
|
6
|
-
end
|
7
|
-
|
8
|
-
def dispatch(request)
|
9
|
-
bus.publish(request.class, request)
|
10
|
-
nil
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def bus
|
16
|
-
@bus ||= MessageBus.new
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class EventDispatcher < AbstractDispatcher
|
3
|
-
def map(request_key, *handlers)
|
4
|
-
bus.subscribe(request_key) {|req| resolve_handler_chain(*handlers).handle(req)}
|
5
|
-
end
|
6
|
-
|
7
|
-
def dispatch(request)
|
8
|
-
bus.publish(request.class, request)
|
9
|
-
nil
|
10
|
-
end
|
11
|
-
|
12
|
-
def raise(*args)
|
13
|
-
dispatch(*args)
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def bus
|
19
|
-
@bus ||= MessageBus.new
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class QueryDispatcher < AbstractDispatcher
|
3
|
-
def map(request_key, *handlers)
|
4
|
-
raise(DispatcherError, "Query already mapped: #{request_key}") if cache.key?(request_key)
|
5
|
-
cache[request_key] = Proc.new{|req| resolve_handler_chain(*handlers).handle(req)}
|
6
|
-
end
|
7
|
-
|
8
|
-
def dispatch(request)
|
9
|
-
cache[request.class].call(request)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def cache
|
15
|
-
@cache ||= {}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class RequestDispatcher
|
3
|
-
|
4
|
-
attr_reader :command_dispatcher, :query_dispatcher, :event_dispatcher
|
5
|
-
|
6
|
-
def initialize(container)
|
7
|
-
@command_dispatcher = CommandDispatcher.new(container)
|
8
|
-
@query_dispatcher = QueryDispatcher.new(container)
|
9
|
-
@event_dispatcher = EventDispatcher.new(container)
|
10
|
-
@request_dispatcher_map = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def map(request_type, request_class, *handlers)
|
14
|
-
dispatcher = instance_variable_get("@#{request_type}_dispatcher")
|
15
|
-
@request_dispatcher_map[request_class] = dispatcher
|
16
|
-
dispatcher.map(request_class, *handlers)
|
17
|
-
end
|
18
|
-
|
19
|
-
def dispatch(request)
|
20
|
-
raise(DispatcherError, "Unrecognized request type: #{request.class}") unless @request_dispatcher_map.key?(request.class)
|
21
|
-
@request_dispatcher_map[request.class].dispatch(request)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module Chickadee
|
2
|
-
class MessageBus
|
3
|
-
class Topic
|
4
|
-
attr_reader :subscribers
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
@subscribers = []
|
8
|
-
end
|
9
|
-
|
10
|
-
def subscribe(obj)
|
11
|
-
@subscribers << obj
|
12
|
-
end
|
13
|
-
|
14
|
-
def unsubscribe(subscriber_id)
|
15
|
-
@subscribers.delete_if{|subscriber| subscriber.id == subscriber_id}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class Subscriber
|
20
|
-
attr_reader :id
|
21
|
-
|
22
|
-
def initialize(id, &block)
|
23
|
-
@id = id
|
24
|
-
@block = block
|
25
|
-
end
|
26
|
-
|
27
|
-
def call(*args)
|
28
|
-
@block.call(*args)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@topics = {}
|
34
|
-
@subscriber_id = -1
|
35
|
-
end
|
36
|
-
|
37
|
-
def subscribe(topic_key, &block)
|
38
|
-
subscriber = Subscriber.new(next_subscriber_id, &block)
|
39
|
-
get_topic(topic_key).subscribe(subscriber)
|
40
|
-
subscriber.id
|
41
|
-
end
|
42
|
-
|
43
|
-
def unsubscribe(subscriber_id)
|
44
|
-
@topics.each {|topic_key, topic| topic.unsubscribe(subscriber_id)}
|
45
|
-
end
|
46
|
-
|
47
|
-
def publish(topic_key, *args)
|
48
|
-
get_topic(topic_key).subscribers.each {|s| s.call(*args)}
|
49
|
-
end
|
50
|
-
|
51
|
-
def topic_exists?(key)
|
52
|
-
@topics.keys.include?(key)
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def get_topic(topic_key)
|
58
|
-
@topics[topic_key] ||= Topic.new
|
59
|
-
end
|
60
|
-
|
61
|
-
def next_subscriber_id
|
62
|
-
@subscriber_id = @subscriber_id + 1
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'chickadee'
|
3
|
-
|
4
|
-
describe Chickadee::CommandDispatcher do
|
5
|
-
it 'can map handler chain to request' do
|
6
|
-
container = define_container
|
7
|
-
dispatcher = define_dispatcher(container)
|
8
|
-
command_class = Class.new
|
9
|
-
command = command_class.new
|
10
|
-
handler1 = stub(:handle => 'handler1_response')
|
11
|
-
handler2 = stub(:handle => 'handler2_response')
|
12
|
-
|
13
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
14
|
-
container.register(:myhandler2, handler2, :as => :instance)
|
15
|
-
|
16
|
-
dispatcher.map(command_class, :myhandler1, :myhandler2)
|
17
|
-
|
18
|
-
handler1.expects(:handle).once
|
19
|
-
handler2.expects(:handle).once
|
20
|
-
dispatcher.dispatch(command)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'complains if same command mapped twice' do
|
24
|
-
container = define_container
|
25
|
-
dispatcher = define_dispatcher(container)
|
26
|
-
command_class = Class.new
|
27
|
-
command = command_class.new
|
28
|
-
|
29
|
-
dispatcher.map(command_class, stub)
|
30
|
-
proc{ dispatcher.map(command_class, stub) }.must_raise(Chickadee::DispatcherError)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns nothing' do
|
34
|
-
container = define_container
|
35
|
-
dispatcher = define_dispatcher(container)
|
36
|
-
command_class = Class.new
|
37
|
-
command = command_class.new
|
38
|
-
handler1 = stub(:handle => 'handler1_response')
|
39
|
-
|
40
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
41
|
-
|
42
|
-
dispatcher.map(command_class, :myhandler1)
|
43
|
-
dispatcher.dispatch(command).must_be_nil
|
44
|
-
end
|
45
|
-
|
46
|
-
def define_container
|
47
|
-
Chickadee::Container.new
|
48
|
-
end
|
49
|
-
|
50
|
-
def define_dispatcher(*args)
|
51
|
-
Chickadee::CommandDispatcher.new(*args)
|
52
|
-
end
|
53
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'chickadee'
|
3
|
-
|
4
|
-
describe Chickadee::EventDispatcher do
|
5
|
-
it 'can map handler chain to request' do
|
6
|
-
container = define_container
|
7
|
-
dispatcher = define_dispatcher(container)
|
8
|
-
event_class = Class.new
|
9
|
-
event = event_class.new
|
10
|
-
|
11
|
-
handler1 = stub(:handle => 'handler1_response')
|
12
|
-
handler2 = stub(:handle => 'handler2_response')
|
13
|
-
|
14
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
15
|
-
container.register(:myhandler2, handler2, :as => :instance)
|
16
|
-
|
17
|
-
dispatcher.map(event_class, :myhandler1, :myhandler2)
|
18
|
-
|
19
|
-
handler1.expects(:handle).once
|
20
|
-
handler2.expects(:handle).once
|
21
|
-
dispatcher.dispatch(event)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'can map multiple handler chains to request' do
|
25
|
-
container = define_container
|
26
|
-
dispatcher = define_dispatcher(container)
|
27
|
-
event_class = Class.new
|
28
|
-
event = event_class.new
|
29
|
-
handler1 = stub(:handle => 'handler1_response')
|
30
|
-
handler2 = stub(:handle => 'handler2_response')
|
31
|
-
handler3 = stub(:handle => 'handler3_response')
|
32
|
-
handler4 = stub(:handle => 'handler4_response')
|
33
|
-
|
34
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
35
|
-
container.register(:myhandler2, handler2, :as => :instance)
|
36
|
-
container.register(:myhandler3, handler3, :as => :instance)
|
37
|
-
container.register(:myhandler4, handler4, :as => :instance)
|
38
|
-
|
39
|
-
dispatcher.map(event_class, :myhandler1, :myhandler2)
|
40
|
-
dispatcher.map(event_class, :myhandler3, :myhandler4)
|
41
|
-
|
42
|
-
handler1.expects(:handle).once
|
43
|
-
handler2.expects(:handle).once
|
44
|
-
handler3.expects(:handle).once
|
45
|
-
handler4.expects(:handle).once
|
46
|
-
dispatcher.dispatch(event)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'returns nothing' do
|
50
|
-
container = define_container
|
51
|
-
dispatcher = define_dispatcher(container)
|
52
|
-
event_class = Class.new
|
53
|
-
event = event_class.new
|
54
|
-
handler1 = stub(:handle => 'handler1_response')
|
55
|
-
|
56
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
57
|
-
|
58
|
-
dispatcher.map(event_class, :myhandler1)
|
59
|
-
dispatcher.dispatch(event).must_be_nil
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
def define_container
|
64
|
-
Chickadee::Container.new
|
65
|
-
end
|
66
|
-
|
67
|
-
def define_dispatcher(*args)
|
68
|
-
Chickadee::EventDispatcher.new(*args)
|
69
|
-
end
|
70
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'chickadee'
|
3
|
-
|
4
|
-
describe Chickadee::QueryDispatcher do
|
5
|
-
it 'can map handler chain to request' do
|
6
|
-
container = define_container
|
7
|
-
dispatcher = define_dispatcher(container)
|
8
|
-
query_class = Class.new
|
9
|
-
query = query_class.new
|
10
|
-
handler1 = stub(:handle => 'handler1_response')
|
11
|
-
handler2 = stub(:handle => 'handler2_response')
|
12
|
-
|
13
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
14
|
-
container.register(:myhandler2, handler2, :as => :instance)
|
15
|
-
|
16
|
-
dispatcher.map(query_class, :myhandler1, :myhandler2)
|
17
|
-
|
18
|
-
handler1.expects(:handle).once
|
19
|
-
handler2.expects(:handle).once
|
20
|
-
dispatcher.dispatch(query)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'complains if same query mapped twice' do
|
24
|
-
container = define_container
|
25
|
-
dispatcher = define_dispatcher(container)
|
26
|
-
query_class = Class.new
|
27
|
-
query = query_class.new
|
28
|
-
|
29
|
-
dispatcher.map(query_class, stub)
|
30
|
-
proc{ dispatcher.map(query_class, stub) }.must_raise(Chickadee::DispatcherError)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns output from last handler in chain' do
|
34
|
-
container = define_container
|
35
|
-
dispatcher = define_dispatcher(container)
|
36
|
-
query_class = Class.new
|
37
|
-
query = query_class.new
|
38
|
-
handler1 = stub(:handle => 'handler1_response')
|
39
|
-
handler2 = stub(:handle => 'handler2_response')
|
40
|
-
|
41
|
-
container.register(:myhandler1, handler1, :as => :instance)
|
42
|
-
container.register(:myhandler2, handler2, :as => :instance)
|
43
|
-
|
44
|
-
dispatcher.map(query_class, :myhandler1, :myhandler2)
|
45
|
-
dispatcher.dispatch(query).must_equal('handler2_response')
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
def define_container
|
50
|
-
Chickadee::Container.new
|
51
|
-
end
|
52
|
-
|
53
|
-
def define_dispatcher(*args)
|
54
|
-
Chickadee::QueryDispatcher.new(*args)
|
55
|
-
end
|
56
|
-
end
|
data/spec/message_bus_spec.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'chickadee'
|
3
|
-
|
4
|
-
describe Chickadee::MessageBus do
|
5
|
-
it 'can register block with bus topic' do
|
6
|
-
bus = new_bus
|
7
|
-
|
8
|
-
output = nil
|
9
|
-
|
10
|
-
bus.subscribe("topic") do |msg|
|
11
|
-
output = msg
|
12
|
-
end
|
13
|
-
|
14
|
-
output.must_be_nil
|
15
|
-
bus.publish("topic", 'the proc was called')
|
16
|
-
output.must_equal('the proc was called')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'can pubish a message for a given topic' do
|
20
|
-
bus = new_bus
|
21
|
-
|
22
|
-
output1 = nil
|
23
|
-
output2 = nil
|
24
|
-
|
25
|
-
bus.subscribe("topic1") { |msg| output1 = msg }
|
26
|
-
bus.subscribe("topic2") { |msg| output2 = msg }
|
27
|
-
|
28
|
-
bus.publish("topic1", 'message for topic1')
|
29
|
-
bus.publish("topic2", 'message for topic2')
|
30
|
-
|
31
|
-
output1.must_equal('message for topic1')
|
32
|
-
output2.must_equal('message for topic2')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'can unsubscribe a listener' do
|
36
|
-
bus = new_bus
|
37
|
-
|
38
|
-
output = nil
|
39
|
-
subscriber_id = bus.subscribe("topic") { |msg| output = msg }
|
40
|
-
|
41
|
-
bus.publish("topic", 'i received the message')
|
42
|
-
output.must_equal('i received the message')
|
43
|
-
|
44
|
-
bus.publish("topic", 'i received the message a second time')
|
45
|
-
output.must_equal('i received the message a second time')
|
46
|
-
|
47
|
-
bus.unsubscribe(subscriber_id)
|
48
|
-
|
49
|
-
bus.publish("topic", 'i received the message a third time')
|
50
|
-
output.must_equal('i received the message a second time')
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'can publish any number of arguments' do
|
54
|
-
bus = new_bus
|
55
|
-
|
56
|
-
output1 = nil
|
57
|
-
output2 = nil
|
58
|
-
|
59
|
-
bus.subscribe("topic") do |arg1, arg2|
|
60
|
-
output1 = arg1
|
61
|
-
output2 = arg2
|
62
|
-
end
|
63
|
-
|
64
|
-
bus.publish("topic", 'myarg1', 'myarg2')
|
65
|
-
|
66
|
-
output1.must_equal('myarg1')
|
67
|
-
output2.must_equal('myarg2')
|
68
|
-
end
|
69
|
-
|
70
|
-
def new_bus
|
71
|
-
Chickadee::MessageBus.new
|
72
|
-
end
|
73
|
-
end
|