evt-messaging 2.5.6.0 → 2.7.0.0

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: 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