midnight-business_logic 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0746f394c8c1334e4eaf674bdfc9abe158d0a32485735515a739e43ff868f3f5
|
4
|
+
data.tar.gz: eff166d26277b30bf653685654ad49777f61a19906a8951e865a8aa9972655b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12fe01a09e3892b7d1de16a79c6a02b31758703150517b7672e706858328b41f361ed5f472a89c8a0b9457c6fcc7874ef7f95b34413ad2cc2aeafc0a69d039d0
|
7
|
+
data.tar.gz: 1ae7d14bde5fbadff1a429b78d1fb1575b3eb5168a91284a62e367fa6fd490b3208bc88884b8d8e1664f15d878b01701f091319a04d22dc32ed39054f28353c6
|
@@ -1,70 +1,40 @@
|
|
1
|
-
require 'active_support/core_ext/object/blank'
|
2
|
-
|
3
1
|
module Midnight
|
4
2
|
module BusinessLogic
|
5
3
|
class EventDispatcher
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
raise InvalidHandlerSupplied unless handler.respond_to?(:call)
|
13
|
-
# correct construction example:
|
14
|
-
# EventDispatcher.new(SomeEvent => [
|
15
|
-
# method(:puts)
|
16
|
-
# ])
|
4
|
+
def initialize(*handlers)
|
5
|
+
handlers = handlers.map do |handler|
|
6
|
+
if handler.respond_to?(:arity)
|
7
|
+
handler
|
8
|
+
else
|
9
|
+
handler.method(:call)
|
17
10
|
end
|
11
|
+
rescue ::NameError
|
12
|
+
reject_handlers
|
18
13
|
end
|
19
|
-
@
|
14
|
+
@handlers = handlers
|
15
|
+
@arity_mismatched = /wrong\s+number\s+of\s+arguments/i
|
20
16
|
freeze
|
21
17
|
end
|
22
18
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
19
|
+
def call(\
|
20
|
+
events,
|
21
|
+
# consumers are forbidden
|
22
|
+
# to pass metadata with _event_handlers as a key
|
23
|
+
_event_handlers: @handlers,
|
24
|
+
**metadata
|
25
|
+
)
|
26
|
+
_event_handlers.each do |handler|
|
27
|
+
handler.call(events, **metadata)
|
28
|
+
rescue ::ArgumentError => e
|
29
|
+
raise e unless @arity_mismatched =~ e.message
|
30
|
+
handler.call(events)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
32
|
-
|
33
|
-
events.each(&method(:once))
|
34
|
-
end
|
35
|
-
end
|
34
|
+
private
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
@_dispatchers = dispatchers
|
40
|
-
freeze
|
41
|
-
end
|
42
|
-
|
43
|
-
def once(event, **metadata)
|
44
|
-
@_dispatchers.each do |dispatcher|
|
45
|
-
dispatcher.once(event, metadata)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def batch(events, **metadata)
|
50
|
-
events.each do |event|
|
51
|
-
once(event, metadata)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
private_constant :CompositeEventDispatcher
|
56
|
-
|
57
|
-
class EventDispatcher
|
58
|
-
class InvalidDispatcherSupplied < ArgumentError;
|
59
|
-
end
|
60
|
-
|
61
|
-
class << self
|
62
|
-
def merge(*dispatchers)
|
63
|
-
raise InvalidDispatcherSupplied unless dispatchers.all? do |dispatcher|
|
64
|
-
dispatcher.respond_to?(:once)
|
65
|
-
end
|
66
|
-
CompositeEventDispatcher.new(*dispatchers)
|
67
|
-
end
|
36
|
+
def reject_handlers
|
37
|
+
raise ::ArgumentError, 'Invalid event handler'
|
68
38
|
end
|
69
39
|
end
|
70
40
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'active_support/core_ext/object/blank'
|
2
|
+
|
3
|
+
module Midnight
|
4
|
+
module BusinessLogic
|
5
|
+
class EventRouter < EventDispatcher
|
6
|
+
def initialize(handlers_map = {})
|
7
|
+
# construction example:
|
8
|
+
# EventRouter.new(SomeEvent => [
|
9
|
+
# method(:puts)
|
10
|
+
# ])
|
11
|
+
begin
|
12
|
+
handlers_map.each do |_event_class, handlers|
|
13
|
+
Array(handlers).each do |handler|
|
14
|
+
reject_handlers unless handler.respond_to?(:call)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
rescue ::NoMethodError => e
|
18
|
+
raise e unless e.name == :each
|
19
|
+
reject_handlers
|
20
|
+
end
|
21
|
+
@handlers_map = handlers_map
|
22
|
+
@arity_mismatched = /wrong\s+number\s+of\s+arguments/i
|
23
|
+
freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(event, **metadata)
|
27
|
+
handlers = @handlers_map[event.class]
|
28
|
+
return if handlers.blank?
|
29
|
+
super(
|
30
|
+
event,
|
31
|
+
_event_handlers: Array(handlers),
|
32
|
+
**metadata
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midnight-business_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sarun Rattanasiri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -36,6 +36,8 @@ files:
|
|
36
36
|
- lib/midnight/business_logic/aggregate_root.rb
|
37
37
|
- lib/midnight/business_logic/event.rb
|
38
38
|
- lib/midnight/business_logic/event_dispatcher.rb
|
39
|
+
- lib/midnight/business_logic/event_queue.rb
|
40
|
+
- lib/midnight/business_logic/event_router.rb
|
39
41
|
- lib/midnight/business_logic/version.rb
|
40
42
|
- lib/midnight/commons/concurrent_write_error.rb
|
41
43
|
- lib/midnight/commons/constants.rb
|
@@ -43,7 +45,7 @@ homepage: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/mast
|
|
43
45
|
licenses:
|
44
46
|
- BSD-3-Clause
|
45
47
|
metadata:
|
46
|
-
source_code_uri: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/v0.0.
|
48
|
+
source_code_uri: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/v0.0.4/midnight-business_logic
|
47
49
|
post_install_message:
|
48
50
|
rdoc_options: []
|
49
51
|
require_paths:
|