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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ed32a3950086fa459ebb29d4343df38845f3ce1d4a559205bb5fcd6d8c42c40
4
- data.tar.gz: 6187c2a9da83c38d5f003259a1ecf59b96fcf88aaaa16ca3b5ec03723a6ff806
3
+ metadata.gz: d22a40f19386098d8d266f77e69a6c794324d30f018e96a4993eab0c5cfc20e1
4
+ data.tar.gz: 8d523d0b69b432eed9e06e8e24731a77f14809fd86df46aed900feb90b2d4e9c
5
5
  SHA512:
6
- metadata.gz: 56c25adccd43baa313b05d76aa3b2e8f82977be4e898c0680ae38ba479e009d88a31caa4deb50adc59fc3ebce58dc74e46f87dee6a44f8bfd2facb3bedb0c94a
7
- data.tar.gz: 6e375228008283d4bc40f7495658223ca789afabc6c99d86805bee419c6b42dbfd06850e3ddc771a30f7c5ff46289ae2485d3e14fa2c5076a4c5cd4057434344
6
+ metadata.gz: ea96206a951ad33ef9b7e7d52db38e9f9584adaa66d898cf77579608e16ebff7b597017d770bf143048809b964d3dd5d90da4bef7ab262516506ab0cfc53881c
7
+ data.tar.gz: 8655511a3ae29570de973f79b5cfd535be9f701fdd6c2a7625fb4e9f746315bcb377b35c560c18563e482af2f53096b2215dcca79956361c48e868f65d6e98c0
@@ -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: 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
- global_position: global_position,
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
@@ -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
- if not settings.nil?
34
- settings.set(instance)
34
+ arguments = {}
35
+
36
+ if Build.send_session?(session, instance)
37
+ arguments[:session] = session
35
38
  end
36
39
 
37
- if Build.configure_session?(instance)
38
- instance.configure(session: session)
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.configure_session?(instance)
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 == :session
61
+ name == parameter_name
51
62
  end
52
63
 
53
64
  return false if parameter_type.nil?
54
65
 
55
- return true if parameter_type == :key
66
+ return true if [:key, :keyreq].include?(parameter_type)
56
67
 
57
- error_message = "Optional session parameter of configure is not a keyword argument (Type: #{parameter_type.inspect})"
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 ArgumentError, error_message
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, Array, default: -> { Array.new }
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 |property|
64
- if property.transient?
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
- Property = Struct.new(
144
- :name,
145
- :value,
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
- def set_property(name, value, transient: nil)
154
- transient ||= false
141
+ properties[name] = value
155
142
 
156
- delete_property(name)
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
- property = Property.new(name, value, transient)
151
+ properties[name]
152
+ end
159
153
 
160
- properties << property
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
- property
159
+ properties.delete(name)
163
160
  end
164
161
 
165
- def set_transient_property(name, value, transient: nil)
166
- set_property(name, value, transient: true)
162
+ def clear_properties
163
+ properties.clear
167
164
  end
168
165
 
169
- def get_property(name)
170
- property = properties.find { |property| property.name == name }
171
- property&.value
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 delete_property(name)
175
- i = properties.index { |property| property.name == name }
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
- return nil if i.nil?
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
- properties.delete_at(i).value
189
+ local_properties.delete(name)
180
190
  end
181
191
 
182
- def clear_properties
183
- properties.clear
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
- unless data[:metadata].nil?
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.5.6.0
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-01-04 00:00:00.000000000 Z
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