evt-messaging 2.5.8.1 → 2.7.0.1

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: ccafb945cdd024a0fa0d3b90b2bb197973f0a6111f778657e2c8dcc7514e944f
4
- data.tar.gz: 64be2ec439b541414bd50e9d0ad2490cb6069d9e617bd12d8f44b5dad8231f64
3
+ metadata.gz: 9c8945f49315d73d29f7c3a3fa6d88bfca5c8eeb2dcd8fd5e34f2b5020881ef4
4
+ data.tar.gz: 77bfd0a23528e8624e74ca29a0a590892ce29d64571a9e75aeca7ed5247def60
5
5
  SHA512:
6
- metadata.gz: 13a6e341c068157a89e0e3336afd19c3518149bc766bcfca8b73fc72d74a97948854838b5e35d9ba9adb127e660ef679ada4f1b4d928d7bb08307f816f3cfbac
7
- data.tar.gz: c017e5d29247eb7601db7828574f03348429e38f51cd69c7c65dbf394723b9f5ca592d68589bcb1782055c6fa9562d6be5602fa91bf6834e0de8296b705c16d3
6
+ metadata.gz: dbf96b8c14e18786fec12e942b075276b31ded1b1d1c1b7a9e062564d7923f8dbc4e5e1884d7bb935bed784a57f58c2c8bed7e752265643c12f9b462e685d095
7
+ data.tar.gz: 8b5ca6436050e0938f58bf081a8369f6fadb5181aed72875b0a0b3c3fa2decc8042336fcb396a175e77f016a56bdd3e70bc2f767f4e518b2274cb197c6e9621d
@@ -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
@@ -4,9 +4,8 @@ module Messaging
4
4
  def self.example
5
5
  data = self.data
6
6
 
7
- ## Remove this once Metadata can be built
8
- ## from Raw data (Scott, Fri Feb 5 20201)
9
- data[:properties] = Properties.example
7
+ data[:properties] = properties
8
+ data[:local_properties] = local_properties
10
9
 
11
10
  Messaging::Message::Metadata.build(data)
12
11
  end
@@ -63,6 +62,14 @@ module Messaging
63
62
  Time::Raw.example
64
63
  end
65
64
 
65
+ def self.properties
66
+ Properties.example
67
+ end
68
+
69
+ def self.local_properties
70
+ LocalProperties.example
71
+ end
72
+
66
73
  def self.data
67
74
  {
68
75
  stream_name: stream_name,
@@ -77,7 +84,8 @@ module Messaging
77
84
 
78
85
  reply_stream_name: reply_stream_name,
79
86
 
80
- properties: Properties.data,
87
+ properties: Properties.example,
88
+ local_properties: LocalProperties.example,
81
89
 
82
90
  time: time,
83
91
 
@@ -110,6 +118,11 @@ module Messaging
110
118
 
111
119
  module Random
112
120
  def self.example
121
+ data = self.data
122
+
123
+ data[:properties] = properties
124
+ data[:local_properties] = local_properties
125
+
113
126
  Messaging::Message::Metadata.build(data)
114
127
  end
115
128
 
@@ -161,10 +174,19 @@ module Messaging
161
174
  (::Time.now + Controls::Random::Number.example).utc
162
175
  end
163
176
 
177
+ def self.properties
178
+ Properties::Random.example
179
+ end
180
+
181
+ def self.local_properties
182
+ LocalProperties::Random.example
183
+ end
184
+
164
185
  def self.data
165
186
  {
166
187
  stream_name: stream_name,
167
188
  position: position,
189
+ global_position: global_position,
168
190
 
169
191
  causation_message_stream_name: causation_message_stream_name,
170
192
  causation_message_position: causation_message_position,
@@ -174,7 +196,9 @@ module Messaging
174
196
 
175
197
  reply_stream_name: reply_stream_name,
176
198
 
177
- global_position: global_position,
199
+ properties: Properties::Random.example,
200
+ local_properties: LocalProperties::Random.example,
201
+
178
202
  time: time,
179
203
 
180
204
  schema_version: schema_version
@@ -2,33 +2,14 @@ module Messaging
2
2
  module Controls
3
3
  module Properties
4
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
- ]
5
+ {
6
+ SomeProperty.name => SomeProperty.value
7
+ }
16
8
  end
17
9
 
18
10
  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
11
  def self.name
31
- 'some_property'
12
+ :some_property
32
13
  end
33
14
 
34
15
  def self.value
@@ -36,25 +17,21 @@ module Messaging
36
17
  end
37
18
  end
38
19
 
39
- module SomeLocalProperty
20
+ module Random
40
21
  def self.example
41
- Messaging::Message::Metadata::Property.new(name, value, true)
42
- end
43
-
44
- def self.data
45
22
  {
46
- name: name,
47
- value: value,
48
- local: true
23
+ SomeProperty.name => SomeProperty.value
49
24
  }
50
25
  end
51
26
 
52
- def self.name
53
- 'some_local_property'
54
- end
27
+ module SomeProperty
28
+ def self.name
29
+ :some_property
30
+ end
55
31
 
56
- def self.value
57
- 'some local property value'
32
+ def self.value
33
+ SecureRandom.hex
34
+ end
58
35
  end
59
36
  end
60
37
  end
@@ -8,6 +8,7 @@ require 'messaging/controls/time'
8
8
  require 'messaging/controls/id'
9
9
  require 'messaging/controls/stream_name'
10
10
  require 'messaging/controls/properties'
11
+ require 'messaging/controls/local_properties'
11
12
  require 'messaging/controls/metadata'
12
13
  require 'messaging/controls/message_data'
13
14
  require 'messaging/controls/message'
@@ -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
@@ -75,20 +86,20 @@ module Messaging
75
86
  extend self
76
87
 
77
88
  def handler(message_or_message_data)
78
- name = handler_name(message_or_message_data)
89
+ handler_method_name = handler_method_name(message_or_message_data)
79
90
 
80
- if method_defined?(name)
81
- return name
91
+ if method_defined?(handler_method_name)
92
+ return handler_method_name
82
93
  else
83
94
  return nil
84
95
  end
85
96
  end
86
97
 
87
98
  def handles?(message_or_message_data)
88
- method_defined? handler_name(message_or_message_data)
99
+ method_defined? handler_method_name(message_or_message_data)
89
100
  end
90
101
 
91
- def handler_name(message_or_message_data)
102
+ def handler_method_name(message_or_message_data)
92
103
  name = nil
93
104
 
94
105
  if message_or_message_data.is_a? MessageStore::MessageData::Read
@@ -99,7 +110,7 @@ module Messaging
99
110
  name = message_or_message_data.message_name
100
111
  end
101
112
 
102
- "handle_#{name}"
113
+ "handle_#{name}".to_sym
103
114
  end
104
115
  end
105
116
 
@@ -111,13 +122,16 @@ module Messaging
111
122
  end
112
123
 
113
124
  def handle_macro(message_class, &blk)
114
- define_handler_method(message_class, &blk)
125
+ handler_method_name = define_handler_method(message_class, &blk)
126
+
115
127
  message_registry.register(message_class)
128
+
129
+ handler_method_name
116
130
  end
117
131
  alias :handle :handle_macro
118
132
 
119
133
  def define_handler_method(message_class, &blk)
120
- handler_method_name = handler_name(message_class)
134
+ handler_method_name = handler_method_name(message_class)
121
135
 
122
136
  if blk.nil?
123
137
  error_msg = "Handler for #{message_class.name} is not correctly defined. It must have a block."
@@ -32,13 +32,12 @@ module Messaging
32
32
  end
33
33
 
34
34
  if metadata
35
- metadata_include = source.metadata.class.attribute_names - [:properties]
35
+ metadata_include = source.metadata.class.attribute_names - [:properties, :local_properties]
36
36
 
37
37
  SetAttributes.(receiver.metadata, source.metadata, include: metadata_include)
38
38
 
39
- source.metadata.properties.each do |property|
40
- receiver.metadata.properties << property.dup
41
- end
39
+ receiver.metadata.properties = source.metadata.properties.dup
40
+ receiver.metadata.local_properties = source.metadata.local_properties.dup
42
41
  end
43
42
 
44
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,12 +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.local?
65
- next
66
- end
67
-
68
- properties << property.dup
64
+ preceding_metadata.properties.each do |name, value|
65
+ properties[name] = value
69
66
  end
70
67
  end
71
68
 
@@ -136,49 +133,64 @@ module Messaging
136
133
  end
137
134
  alias :correlates? :correlated?
138
135
 
139
- def set_property(name, value, local: nil)
140
- if not name.is_a?(String)
141
- raise Error, "Property name must be a string: #{name.inspect}"
136
+ def set_property(name, value)
137
+ if not name.is_a?(Symbol)
138
+ raise Error, "Property name must be a symbol: #{name.inspect}"
142
139
  end
143
140
 
144
- local ||= false
141
+ properties[name] = value
145
142
 
146
- 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
147
150
 
148
- property = Property.new(name, value, local)
151
+ properties[name]
152
+ end
149
153
 
150
- 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
151
158
 
152
- property
159
+ properties.delete(name)
153
160
  end
154
161
 
155
- def set_local_property(name, value)
156
- set_property(name, value, local: true)
162
+ def clear_properties
163
+ properties.clear
157
164
  end
158
165
 
159
- def get_property(name)
160
- if not name.is_a?(String)
161
- raise Error, "Property name must be a string: #{name.inspect}"
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}"
162
169
  end
163
170
 
164
- property = properties.find { |property| property.name == name }
165
- property&.value
171
+ local_properties[name] = value
172
+
173
+ value
166
174
  end
167
175
 
168
- def delete_property(name)
169
- if not name.is_a?(String)
170
- raise Error, "Property name must be a string: #{name.inspect}"
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}"
171
179
  end
172
180
 
173
- i = properties.index { |property| property.name == name }
181
+ local_properties[name]
182
+ end
174
183
 
175
- return nil if i.nil?
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
176
188
 
177
- properties.delete_at(i).value
189
+ local_properties.delete(name)
178
190
  end
179
191
 
180
- def clear_properties
181
- properties.clear
192
+ def clear_local_properties
193
+ local_properties.clear
182
194
  end
183
195
 
184
196
  def self.source_attribute_names
@@ -26,12 +26,12 @@ module Messaging
26
26
 
27
27
  metadata = message.metadata.to_h
28
28
 
29
- properties = metadata[:properties]
30
-
31
- if properties.empty?
29
+ if metadata[:properties].empty?
32
30
  metadata.delete(:properties)
33
- else
34
- metadata[:properties] = Properties.write(properties)
31
+ end
32
+
33
+ if metadata[:local_properties].empty?
34
+ metadata.delete(:local_properties)
35
35
  end
36
36
 
37
37
  metadata.delete_if { |k, v| v.nil? }
@@ -41,28 +41,13 @@ module Messaging
41
41
  message_data
42
42
  end
43
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
-
58
44
  def self.read(message_data)
59
45
  data = message_data.to_h
60
46
 
61
- ## TODO change to positive "if"
62
- unless data[:metadata].nil?
63
- data[:metadata] = data[:metadata].clone
64
- else
47
+ if data[:metadata].nil?
65
48
  data[:metadata] = {}
49
+ else
50
+ data[:metadata] = data[:metadata].clone
66
51
  end
67
52
 
68
53
  metadata = data[:metadata]
@@ -73,15 +58,8 @@ module Messaging
73
58
  metadata[:global_position] = data[:global_position]
74
59
  metadata[:time] = data[:time]
75
60
 
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
61
+ metadata[:properties] ||= {}
62
+ metadata[:local_properties] ||= {}
85
63
 
86
64
  data
87
65
  end
data/lib/messaging.rb CHANGED
@@ -7,7 +7,6 @@ require 'messaging/stream_name'
7
7
 
8
8
  require 'messaging/message'
9
9
  require 'messaging/message/metadata'
10
- require 'messaging/message/metadata/property'
11
10
  require 'messaging/message/copy'
12
11
  require 'messaging/message/follow'
13
12
  require 'messaging/message/sequence_accessor'
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.8.1
4
+ version: 2.7.0.1
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-02-09 00:00:00.000000000 Z
11
+ date: 2022-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-message_store
@@ -64,6 +64,7 @@ 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
@@ -82,7 +83,6 @@ files:
82
83
  - lib/messaging/message/follow.rb
83
84
  - lib/messaging/message/import.rb
84
85
  - lib/messaging/message/metadata.rb
85
- - lib/messaging/message/metadata/property.rb
86
86
  - lib/messaging/message/sequence_accessor.rb
87
87
  - lib/messaging/message/transform.rb
88
88
  - lib/messaging/message_registry.rb
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
- rubygems_version: 3.1.2
111
+ rubygems_version: 3.3.3
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: Common primitives for platform-specific messaging implementations for Eventide
@@ -1,22 +0,0 @@
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