midnight-business_logic 0.0.3 → 0.0.4
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,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:
|