evt-messaging 2.5.6.0 → 2.7.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/lib/messaging/controls.rb +3 -1
- data/lib/messaging/controls/handler.rb +0 -57
- data/lib/messaging/controls/local_properties.rb +39 -0
- data/lib/messaging/controls/metadata.rb +33 -11
- data/lib/messaging/controls/properties.rb +39 -0
- data/lib/messaging/handle.rb +25 -12
- data/lib/messaging/message/copy.rb +5 -1
- data/lib/messaging/message/metadata.rb +46 -36
- data/lib/messaging/message/transform.rb +10 -5
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d22a40f19386098d8d266f77e69a6c794324d30f018e96a4993eab0c5cfc20e1
|
4
|
+
data.tar.gz: 8d523d0b69b432eed9e06e8e24731a77f14809fd86df46aed900feb90b2d4e9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea96206a951ad33ef9b7e7d52db38e9f9584adaa66d898cf77579608e16ebff7b597017d770bf143048809b964d3dd5d90da4bef7ab262516506ab0cfc53881c
|
7
|
+
data.tar.gz: 8655511a3ae29570de973f79b5cfd535be9f701fdd6c2a7625fb4e9f746315bcb377b35c560c18563e482af2f53096b2215dcca79956361c48e868f65d6e98c0
|
data/lib/messaging/controls.rb
CHANGED
@@ -7,9 +7,11 @@ require 'messaging/controls/random'
|
|
7
7
|
require 'messaging/controls/time'
|
8
8
|
require 'messaging/controls/id'
|
9
9
|
require 'messaging/controls/stream_name'
|
10
|
+
require 'messaging/controls/properties'
|
11
|
+
require 'messaging/controls/local_properties'
|
12
|
+
require 'messaging/controls/metadata'
|
10
13
|
require 'messaging/controls/message_data'
|
11
14
|
require 'messaging/controls/message'
|
12
|
-
require 'messaging/controls/metadata'
|
13
15
|
require 'messaging/controls/batch'
|
14
16
|
require 'messaging/controls/write'
|
15
17
|
require 'messaging/controls/settings'
|
@@ -60,63 +60,6 @@ module Messaging
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
64
|
-
module SessionArgument
|
65
|
-
class Example
|
66
|
-
include Messaging::Handle
|
67
|
-
|
68
|
-
attr_accessor :session
|
69
|
-
|
70
|
-
def configure(session: nil)
|
71
|
-
self.session = session
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
module Anomaly
|
76
|
-
module Required
|
77
|
-
class Example
|
78
|
-
include Messaging::Handle
|
79
|
-
|
80
|
-
def configure(session:)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
module Positional
|
86
|
-
class Example
|
87
|
-
include Messaging::Handle
|
88
|
-
|
89
|
-
def configure(session)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
module Optional
|
94
|
-
class Example
|
95
|
-
include Messaging::Handle
|
96
|
-
|
97
|
-
def configure(session=nil)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
module Settings
|
106
|
-
Error = Class.new(RuntimeError)
|
107
|
-
|
108
|
-
class Example
|
109
|
-
include Messaging::Handle
|
110
|
-
|
111
|
-
setting :some_setting
|
112
|
-
|
113
|
-
attr_accessor :some_other_setting
|
114
|
-
|
115
|
-
def handle(message_data)
|
116
|
-
raise Settings::Error if some_setting.nil?
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
63
|
end
|
121
64
|
end
|
122
65
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Messaging
|
2
|
+
module Controls
|
3
|
+
module LocalProperties
|
4
|
+
def self.example
|
5
|
+
{
|
6
|
+
SomeLocalProperty.name => SomeLocalProperty.value
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
module SomeLocalProperty
|
11
|
+
def self.name
|
12
|
+
:some_local_property
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.value
|
16
|
+
'some local property value'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Random
|
21
|
+
def self.example
|
22
|
+
{
|
23
|
+
SomeLocalProperty.name => SomeLocalProperty.value
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
module SomeLocalProperty
|
28
|
+
def self.name
|
29
|
+
:some_local_property
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.value
|
33
|
+
SecureRandom.hex
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -2,6 +2,11 @@ module Messaging
|
|
2
2
|
module Controls
|
3
3
|
module Metadata
|
4
4
|
def self.example
|
5
|
+
data = self.data
|
6
|
+
|
7
|
+
data[:properties] = properties
|
8
|
+
data[:local_properties] = local_properties
|
9
|
+
|
5
10
|
Messaging::Message::Metadata.build(data)
|
6
11
|
end
|
7
12
|
|
@@ -49,22 +54,22 @@ module Messaging
|
|
49
54
|
"#{causation_message_stream_name}/#{causation_message_position}"
|
50
55
|
end
|
51
56
|
|
52
|
-
# def self.properties
|
53
|
-
# {
|
54
|
-
# some_property: 'some property value'
|
55
|
-
# }
|
56
|
-
# end
|
57
|
-
|
58
57
|
def self.properties
|
59
|
-
|
60
|
-
Messaging::Message::Metadata::Property.new(:some_property, 'some property value')
|
61
|
-
]
|
58
|
+
Properties.example
|
62
59
|
end
|
63
60
|
|
64
61
|
def self.time
|
65
62
|
Time::Raw.example
|
66
63
|
end
|
67
64
|
|
65
|
+
def self.properties
|
66
|
+
Properties.example
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.local_properties
|
70
|
+
LocalProperties.example
|
71
|
+
end
|
72
|
+
|
68
73
|
def self.data
|
69
74
|
{
|
70
75
|
stream_name: stream_name,
|
@@ -79,7 +84,8 @@ module Messaging
|
|
79
84
|
|
80
85
|
reply_stream_name: reply_stream_name,
|
81
86
|
|
82
|
-
properties:
|
87
|
+
properties: Properties.example,
|
88
|
+
local_properties: LocalProperties.example,
|
83
89
|
|
84
90
|
time: time,
|
85
91
|
|
@@ -112,6 +118,11 @@ module Messaging
|
|
112
118
|
|
113
119
|
module Random
|
114
120
|
def self.example
|
121
|
+
data = self.data
|
122
|
+
|
123
|
+
data[:properties] = properties
|
124
|
+
data[:local_properties] = local_properties
|
125
|
+
|
115
126
|
Messaging::Message::Metadata.build(data)
|
116
127
|
end
|
117
128
|
|
@@ -163,10 +174,19 @@ module Messaging
|
|
163
174
|
(::Time.now + Controls::Random::Number.example).utc
|
164
175
|
end
|
165
176
|
|
177
|
+
def self.properties
|
178
|
+
Properties::Random.example
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.local_properties
|
182
|
+
LocalProperties::Random.example
|
183
|
+
end
|
184
|
+
|
166
185
|
def self.data
|
167
186
|
{
|
168
187
|
stream_name: stream_name,
|
169
188
|
position: position,
|
189
|
+
global_position: global_position,
|
170
190
|
|
171
191
|
causation_message_stream_name: causation_message_stream_name,
|
172
192
|
causation_message_position: causation_message_position,
|
@@ -176,7 +196,9 @@ module Messaging
|
|
176
196
|
|
177
197
|
reply_stream_name: reply_stream_name,
|
178
198
|
|
179
|
-
|
199
|
+
properties: Properties::Random.example,
|
200
|
+
local_properties: LocalProperties::Random.example,
|
201
|
+
|
180
202
|
time: time,
|
181
203
|
|
182
204
|
schema_version: schema_version
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Messaging
|
2
|
+
module Controls
|
3
|
+
module Properties
|
4
|
+
def self.example
|
5
|
+
{
|
6
|
+
SomeProperty.name => SomeProperty.value
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
module SomeProperty
|
11
|
+
def self.name
|
12
|
+
:some_property
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.value
|
16
|
+
'some property value'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Random
|
21
|
+
def self.example
|
22
|
+
{
|
23
|
+
SomeProperty.name => SomeProperty.value
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
module SomeProperty
|
28
|
+
def self.name
|
29
|
+
:some_property
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.value
|
33
|
+
SecureRandom.hex
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/messaging/handle.rb
CHANGED
@@ -6,7 +6,6 @@ module Messaging
|
|
6
6
|
cls.class_exec do
|
7
7
|
include Dependency
|
8
8
|
include Virtual
|
9
|
-
include Settings::Setting
|
10
9
|
|
11
10
|
def handler_logger
|
12
11
|
@handler_logger ||= Log.get(self)
|
@@ -26,37 +25,49 @@ module Messaging
|
|
26
25
|
end
|
27
26
|
|
28
27
|
module Build
|
28
|
+
Error = Class.new(RuntimeError)
|
29
|
+
|
29
30
|
def build(strict: nil, session: nil, settings: nil)
|
30
31
|
instance = new
|
31
32
|
instance.strict = strict
|
32
33
|
|
33
|
-
|
34
|
-
|
34
|
+
arguments = {}
|
35
|
+
|
36
|
+
if Build.send_session?(session, instance)
|
37
|
+
arguments[:session] = session
|
35
38
|
end
|
36
39
|
|
37
|
-
if Build.
|
38
|
-
|
39
|
-
else
|
40
|
-
instance.configure
|
40
|
+
if Build.send_settings?(settings, instance)
|
41
|
+
arguments[:settings] = settings
|
41
42
|
end
|
42
43
|
|
44
|
+
instance.configure(**arguments)
|
45
|
+
|
43
46
|
instance
|
44
47
|
end
|
45
48
|
|
46
|
-
def self.
|
49
|
+
def self.send_session?(session, instance)
|
50
|
+
configure?(instance, :session) && !session.nil?
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.send_settings?(settings, instance)
|
54
|
+
configure?(instance, :settings) && !settings.nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.configure?(instance, parameter_name)
|
47
58
|
configure_method = instance.method(:configure)
|
48
59
|
|
49
60
|
parameter_type, _ = configure_method.parameters.find do |type, name|
|
50
|
-
name ==
|
61
|
+
name == parameter_name
|
51
62
|
end
|
52
63
|
|
53
64
|
return false if parameter_type.nil?
|
54
65
|
|
55
|
-
return true if
|
66
|
+
return true if [:key, :keyreq].include?(parameter_type)
|
56
67
|
|
57
|
-
error_message = "
|
68
|
+
error_message = "Incorrect definition of handler's configure method. The #{parameter_name} parameter must be a keyword argument (Handler: #{instance.class}, Parameter Type: #{parameter_type.inspect})"
|
58
69
|
handler_logger.error(tag: :handle) { error_message }
|
59
|
-
raise
|
70
|
+
raise Error, error_message
|
60
71
|
end
|
61
72
|
|
62
73
|
def self.handler_logger
|
@@ -93,6 +104,8 @@ module Messaging
|
|
93
104
|
|
94
105
|
if message_or_message_data.is_a? MessageStore::MessageData::Read
|
95
106
|
name = Messaging::Message::Info.canonize_name(message_or_message_data.type)
|
107
|
+
elsif message_or_message_data.is_a? String
|
108
|
+
name = Messaging::Message::Info.canonize_name(message_or_message_data)
|
96
109
|
else
|
97
110
|
name = message_or_message_data.message_name
|
98
111
|
end
|
@@ -32,8 +32,12 @@ module Messaging
|
|
32
32
|
end
|
33
33
|
|
34
34
|
if metadata
|
35
|
-
metadata_include = source.metadata.class.attribute_names
|
35
|
+
metadata_include = source.metadata.class.attribute_names - [:properties, :local_properties]
|
36
|
+
|
36
37
|
SetAttributes.(receiver.metadata, source.metadata, include: metadata_include)
|
38
|
+
|
39
|
+
receiver.metadata.properties = source.metadata.properties.dup
|
40
|
+
receiver.metadata.local_properties = source.metadata.local_properties.dup
|
37
41
|
end
|
38
42
|
|
39
43
|
receiver
|
@@ -33,7 +33,8 @@ module Messaging
|
|
33
33
|
|
34
34
|
attribute :reply_stream_name, String
|
35
35
|
|
36
|
-
attribute :properties,
|
36
|
+
attribute :properties, Hash, default: -> { Hash.new }
|
37
|
+
attribute :local_properties, Hash, default: -> { Hash.new }
|
37
38
|
|
38
39
|
attribute :time, Time
|
39
40
|
|
@@ -60,16 +61,8 @@ module Messaging
|
|
60
61
|
|
61
62
|
self.reply_stream_name = preceding_metadata.reply_stream_name
|
62
63
|
|
63
|
-
preceding_metadata.properties.each do |
|
64
|
-
|
65
|
-
next
|
66
|
-
end
|
67
|
-
|
68
|
-
set_property(
|
69
|
-
property.name,
|
70
|
-
property.value,
|
71
|
-
transient: property.transient
|
72
|
-
)
|
64
|
+
preceding_metadata.properties.each do |name, value|
|
65
|
+
properties[name] = value
|
73
66
|
end
|
74
67
|
end
|
75
68
|
|
@@ -140,47 +133,64 @@ module Messaging
|
|
140
133
|
end
|
141
134
|
alias :correlates? :correlated?
|
142
135
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
:transient
|
147
|
-
) do
|
148
|
-
def transient?
|
149
|
-
transient == true
|
136
|
+
def set_property(name, value)
|
137
|
+
if not name.is_a?(Symbol)
|
138
|
+
raise Error, "Property name must be a symbol: #{name.inspect}"
|
150
139
|
end
|
151
|
-
end
|
152
140
|
|
153
|
-
|
154
|
-
transient ||= false
|
141
|
+
properties[name] = value
|
155
142
|
|
156
|
-
|
143
|
+
value
|
144
|
+
end
|
145
|
+
|
146
|
+
def get_property(name)
|
147
|
+
if not name.is_a?(Symbol)
|
148
|
+
raise Error, "Property name must be a symbol: #{name.inspect}"
|
149
|
+
end
|
157
150
|
|
158
|
-
|
151
|
+
properties[name]
|
152
|
+
end
|
159
153
|
|
160
|
-
|
154
|
+
def delete_property(name)
|
155
|
+
if not name.is_a?(Symbol)
|
156
|
+
raise Error, "Property name must be a symbol: #{name.inspect}"
|
157
|
+
end
|
161
158
|
|
162
|
-
|
159
|
+
properties.delete(name)
|
163
160
|
end
|
164
161
|
|
165
|
-
def
|
166
|
-
|
162
|
+
def clear_properties
|
163
|
+
properties.clear
|
167
164
|
end
|
168
165
|
|
169
|
-
def
|
170
|
-
|
171
|
-
|
166
|
+
def set_local_property(name, value)
|
167
|
+
if not name.is_a?(Symbol)
|
168
|
+
raise Error, "Local property name must be a symbol: #{name.inspect}"
|
169
|
+
end
|
170
|
+
|
171
|
+
local_properties[name] = value
|
172
|
+
|
173
|
+
value
|
172
174
|
end
|
173
175
|
|
174
|
-
def
|
175
|
-
|
176
|
+
def get_local_property(name)
|
177
|
+
if not name.is_a?(Symbol)
|
178
|
+
raise Error, "Local property name must be a symbol: #{name.inspect}"
|
179
|
+
end
|
176
180
|
|
177
|
-
|
181
|
+
local_properties[name]
|
182
|
+
end
|
183
|
+
|
184
|
+
def delete_local_property(name)
|
185
|
+
if not name.is_a?(Symbol)
|
186
|
+
raise Error, "Local property name must be a symbol: #{name.inspect}"
|
187
|
+
end
|
178
188
|
|
179
|
-
|
189
|
+
local_properties.delete(name)
|
180
190
|
end
|
181
191
|
|
182
|
-
def
|
183
|
-
|
192
|
+
def clear_local_properties
|
193
|
+
local_properties.clear
|
184
194
|
end
|
185
195
|
|
186
196
|
def self.source_attribute_names
|
@@ -26,12 +26,14 @@ module Messaging
|
|
26
26
|
|
27
27
|
metadata = message.metadata.to_h
|
28
28
|
|
29
|
-
metadata[:properties].delete_if { |property| property.transient? }
|
30
|
-
|
31
29
|
if metadata[:properties].empty?
|
32
30
|
metadata.delete(:properties)
|
33
31
|
end
|
34
32
|
|
33
|
+
if metadata[:local_properties].empty?
|
34
|
+
metadata.delete(:local_properties)
|
35
|
+
end
|
36
|
+
|
35
37
|
metadata.delete_if { |k, v| v.nil? }
|
36
38
|
|
37
39
|
message_data.metadata = metadata
|
@@ -42,10 +44,10 @@ module Messaging
|
|
42
44
|
def self.read(message_data)
|
43
45
|
data = message_data.to_h
|
44
46
|
|
45
|
-
|
46
|
-
data[:metadata] = data[:metadata].clone
|
47
|
-
else
|
47
|
+
if data[:metadata].nil?
|
48
48
|
data[:metadata] = {}
|
49
|
+
else
|
50
|
+
data[:metadata] = data[:metadata].clone
|
49
51
|
end
|
50
52
|
|
51
53
|
metadata = data[:metadata]
|
@@ -56,6 +58,9 @@ module Messaging
|
|
56
58
|
metadata[:global_position] = data[:global_position]
|
57
59
|
metadata[:time] = data[:time]
|
58
60
|
|
61
|
+
metadata[:properties] ||= {}
|
62
|
+
metadata[:local_properties] ||= {}
|
63
|
+
|
59
64
|
data
|
60
65
|
end
|
61
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evt-messaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Eventide Project
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evt-message_store
|
@@ -64,9 +64,11 @@ files:
|
|
64
64
|
- lib/messaging/controls/batch.rb
|
65
65
|
- lib/messaging/controls/handler.rb
|
66
66
|
- lib/messaging/controls/id.rb
|
67
|
+
- lib/messaging/controls/local_properties.rb
|
67
68
|
- lib/messaging/controls/message.rb
|
68
69
|
- lib/messaging/controls/message_data.rb
|
69
70
|
- lib/messaging/controls/metadata.rb
|
71
|
+
- lib/messaging/controls/properties.rb
|
70
72
|
- lib/messaging/controls/random.rb
|
71
73
|
- lib/messaging/controls/settings.rb
|
72
74
|
- lib/messaging/controls/stream_name.rb
|