evt-messaging 2.5.5.0 → 2.5.8.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: 7461dc41752ca20949d07bd6cdd226d26b813e7fe094e7eec8c5191cb6ac308b
4
- data.tar.gz: bdeffa8dd6a53ec121c06db08f0cb63569db4eac34910716bd433dfca1cf3068
3
+ metadata.gz: ed29a0c35879e58829f90553574808b36c4925450725c0e6b312e45cbb75abc7
4
+ data.tar.gz: 5c3649886b569d050834f02391672745595611a83a3a6fed8958070bab1ddaea
5
5
  SHA512:
6
- metadata.gz: 688353dc94af44d17c52803e872dfe307f3aeafcef13ac78754dcd0b1bb9f1e411a75c9482c46c3f5ef72c56586d40c6499ace71ac6db801c2209faccac5ed08
7
- data.tar.gz: e92b9f581f4acd8688d7e399d8b6e94c1d36710c40a8223bb891d339e2fdace923fc2c9e554d226e02edc9e9229fba705ca5e75992bd889a4b90cd71b05ab561
6
+ metadata.gz: '04208a998e7aa313e679e41d064d8a8945b613dc6b2a3bea74cd2d53717cd69445d4824bd9c989ed42969798677f84bf756b1ed0989f385700d1e3dc3d467745'
7
+ data.tar.gz: a090214c089d0052e5a904b4e7c01b0537f4c7f5978e65766e89bf342c2c889294f438f3a07d59ef1c2f5f2381cfc0cfb715e0317a764c94763097fb7233a68f
data/lib/messaging.rb CHANGED
@@ -7,6 +7,7 @@ require 'messaging/stream_name'
7
7
 
8
8
  require 'messaging/message'
9
9
  require 'messaging/message/metadata'
10
+ require 'messaging/message/metadata/property'
10
11
  require 'messaging/message/copy'
11
12
  require 'messaging/message/follow'
12
13
  require 'messaging/message/sequence_accessor'
@@ -7,9 +7,10 @@ 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/metadata'
10
12
  require 'messaging/controls/message_data'
11
13
  require 'messaging/controls/message'
12
- require 'messaging/controls/metadata'
13
14
  require 'messaging/controls/batch'
14
15
  require 'messaging/controls/write'
15
16
  require 'messaging/controls/settings'
@@ -2,6 +2,12 @@ module Messaging
2
2
  module Controls
3
3
  module Metadata
4
4
  def self.example
5
+ data = self.data
6
+
7
+ ## Remove this once Metadata can be built
8
+ ## from Raw data (Scott, Fri Feb 5 20201)
9
+ data[:properties] = Properties.example
10
+
5
11
  Messaging::Message::Metadata.build(data)
6
12
  end
7
13
 
@@ -50,9 +56,7 @@ module Messaging
50
56
  end
51
57
 
52
58
  def self.properties
53
- {
54
- some_property: 'some property value'
55
- }
59
+ Properties.example
56
60
  end
57
61
 
58
62
  def self.time
@@ -73,7 +77,7 @@ module Messaging
73
77
 
74
78
  reply_stream_name: reply_stream_name,
75
79
 
76
- properties: properties,
80
+ properties: Properties.data,
77
81
 
78
82
  time: time,
79
83
 
@@ -0,0 +1,62 @@
1
+ module Messaging
2
+ module Controls
3
+ module Properties
4
+ def self.example
5
+ [
6
+ SomeProperty.example,
7
+ SomeLocalProperty.example
8
+ ]
9
+ end
10
+
11
+ def self.data
12
+ [
13
+ SomeProperty.data,
14
+ SomeLocalProperty.data
15
+ ]
16
+ end
17
+
18
+ module SomeProperty
19
+ def self.example
20
+ Messaging::Message::Metadata::Property.new(name, value)
21
+ end
22
+
23
+ def self.data
24
+ {
25
+ name: name,
26
+ value: value
27
+ }
28
+ end
29
+
30
+ def self.name
31
+ :some_property
32
+ end
33
+
34
+ def self.value
35
+ 'some property value'
36
+ end
37
+ end
38
+
39
+ module SomeLocalProperty
40
+ def self.example
41
+ Messaging::Message::Metadata::Property.new(name, value, true)
42
+ end
43
+
44
+ def self.data
45
+ {
46
+ name: name,
47
+ value: value,
48
+ local: true
49
+ }
50
+ end
51
+
52
+ def self.name
53
+ :some_local_property
54
+ end
55
+
56
+ def self.value
57
+ 'some local property value'
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -93,6 +93,8 @@ module Messaging
93
93
 
94
94
  if message_or_message_data.is_a? MessageStore::MessageData::Read
95
95
  name = Messaging::Message::Info.canonize_name(message_or_message_data.type)
96
+ elsif message_or_message_data.is_a? String
97
+ name = Messaging::Message::Info.canonize_name(message_or_message_data)
96
98
  else
97
99
  name = message_or_message_data.message_name
98
100
  end
@@ -209,7 +211,12 @@ module Messaging
209
211
 
210
212
  message_type = message.message_type
211
213
 
214
+ handler_logger.trace(tag: [:handle, :message_data]) { "Handling Message Data (Type: #{message_type}, Method: #{handler})" }
215
+
212
216
  public_send(handler, message)
217
+
218
+ handler_logger.info(tags: [:handle, :message_data]) { "Handled message data (Type: #{message_data.type})" }
219
+ handler_logger.info(tags: [:data, :message_data]) { message_data.pretty_inspect }
213
220
  else
214
221
  if respond_to?(:handle)
215
222
  message_type = message_data.type
@@ -21,7 +21,7 @@ module Messaging
21
21
  receiver = receiver.build
22
22
  end
23
23
 
24
- if include.nil?
24
+ if copy.nil? && include.nil?
25
25
  include = source.class.attribute_names
26
26
  end
27
27
 
@@ -32,8 +32,13 @@ 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]
36
+
36
37
  SetAttributes.(receiver.metadata, source.metadata, include: metadata_include)
38
+
39
+ source.metadata.properties.each do |property|
40
+ receiver.metadata.properties << property.dup
41
+ end
37
42
  end
38
43
 
39
44
  receiver
@@ -33,7 +33,7 @@ module Messaging
33
33
 
34
34
  attribute :reply_stream_name, String
35
35
 
36
- attribute :properties, Hash, default: -> { Hash.new }
36
+ attribute :properties, Array, default: -> { Array.new }
37
37
 
38
38
  attribute :time, Time
39
39
 
@@ -59,6 +59,14 @@ module Messaging
59
59
  self.correlation_stream_name = preceding_metadata.correlation_stream_name
60
60
 
61
61
  self.reply_stream_name = preceding_metadata.reply_stream_name
62
+
63
+ preceding_metadata.properties.each do |property|
64
+ if property.local?
65
+ next
66
+ end
67
+
68
+ properties << property.dup
69
+ end
62
70
  end
63
71
 
64
72
  def follows?(preceding_metadata)
@@ -128,16 +136,37 @@ module Messaging
128
136
  end
129
137
  alias :correlates? :correlated?
130
138
 
131
- def set_property(name, value)
132
- properties[name] = value
139
+ def set_property(name, value, local: nil)
140
+ local ||= false
141
+
142
+ delete_property(name)
143
+
144
+ property = Property.new(name, value, local)
145
+
146
+ properties << property
147
+
148
+ property
149
+ end
150
+
151
+ def set_local_property(name, value, local: nil)
152
+ set_property(name, value, local: true)
133
153
  end
134
154
 
135
155
  def get_property(name)
136
- properties[name]
156
+ property = properties.find { |property| property.name == name }
157
+ property&.value
137
158
  end
138
159
 
139
160
  def delete_property(name)
140
- properties.delete(name)
161
+ i = properties.index { |property| property.name == name }
162
+
163
+ return nil if i.nil?
164
+
165
+ properties.delete_at(i).value
166
+ end
167
+
168
+ def clear_properties
169
+ properties.clear
141
170
  end
142
171
 
143
172
  def self.source_attribute_names
@@ -0,0 +1,22 @@
1
+ module Messaging
2
+ module Message
3
+ class Metadata
4
+ Property = Struct.new(
5
+ :name,
6
+ :value,
7
+ :local
8
+ ) do
9
+ def local?
10
+ local == true
11
+ end
12
+
13
+ def ==(other)
14
+ equal =
15
+ name == other.name &&
16
+ value == other.value &&
17
+ !!local == !!other.local
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -26,8 +26,12 @@ module Messaging
26
26
 
27
27
  metadata = message.metadata.to_h
28
28
 
29
- if metadata[:properties].empty?
30
- metadata[:properties] = nil
29
+ properties = metadata[:properties]
30
+
31
+ if properties.empty?
32
+ metadata.delete(:properties)
33
+ else
34
+ metadata[:properties] = Properties.write(properties)
31
35
  end
32
36
 
33
37
  metadata.delete_if { |k, v| v.nil? }
@@ -37,9 +41,24 @@ module Messaging
37
41
  message_data
38
42
  end
39
43
 
44
+ module Properties
45
+ def self.write(properties)
46
+ properties.map do |property|
47
+ property_hash = property.to_h
48
+
49
+ if not property_hash[:local]
50
+ property_hash.delete(:local)
51
+ end
52
+
53
+ property_hash
54
+ end
55
+ end
56
+ end
57
+
40
58
  def self.read(message_data)
41
59
  data = message_data.to_h
42
60
 
61
+ ## TODO change to positive "if"
43
62
  unless data[:metadata].nil?
44
63
  data[:metadata] = data[:metadata].clone
45
64
  else
@@ -54,6 +73,16 @@ module Messaging
54
73
  metadata[:global_position] = data[:global_position]
55
74
  metadata[:time] = data[:time]
56
75
 
76
+ if metadata[:properties].nil?
77
+ metadata[:properties] = []
78
+ end
79
+
80
+ properties = metadata[:properties].map do |property_data|
81
+ Metadata::Property.new(*property_data.values_at(*Metadata::Property.members))
82
+ end
83
+
84
+ metadata[:properties] = properties
85
+
57
86
  data
58
87
  end
59
88
  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.5.0
4
+ version: 2.5.8.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: 2020-12-03 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-message_store
@@ -67,6 +67,7 @@ files:
67
67
  - lib/messaging/controls/message.rb
68
68
  - lib/messaging/controls/message_data.rb
69
69
  - lib/messaging/controls/metadata.rb
70
+ - lib/messaging/controls/properties.rb
70
71
  - lib/messaging/controls/random.rb
71
72
  - lib/messaging/controls/settings.rb
72
73
  - lib/messaging/controls/stream_name.rb
@@ -81,6 +82,7 @@ files:
81
82
  - lib/messaging/message/follow.rb
82
83
  - lib/messaging/message/import.rb
83
84
  - lib/messaging/message/metadata.rb
85
+ - lib/messaging/message/metadata/property.rb
84
86
  - lib/messaging/message/sequence_accessor.rb
85
87
  - lib/messaging/message/transform.rb
86
88
  - lib/messaging/message_registry.rb