mimi-messaging 1.0.0 → 1.1.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
  SHA1:
3
- metadata.gz: 81b174d0230b57feade2b45ddf7ba624bcaae33e
4
- data.tar.gz: 810f82256c0e7b94e7c6f5df9b2f66b87bd640fb
3
+ metadata.gz: 54a536d257b3a394b605e80e1b24167e5912f785
4
+ data.tar.gz: 03374246a36903692068863563ec7a111cd18b8b
5
5
  SHA512:
6
- metadata.gz: 326f345bb63e01400930c1127f2fecc27769bc3c3ce43e04c96abedcafc054c74b25c459acc1079a6e20249dd1b3614c67d8410be9e0b0e05dd77beb7f57aef2
7
- data.tar.gz: 124ad7375b0465e09cbe7b23c184ff484572d0bab3f4f85e6c4da9750026d2b7ae62ff03d2078a2ece20d6d3ff8e0e7fc1b91d95a16c1fe118adbd420e336ae4
6
+ metadata.gz: '0295bb31beb00e6370340e4db43bab2a145e9d463d514bcdf1eba944a171edb614133afc7384a9e1e3010b832c4ff4b547ae9a27e307efb19d4abe3acee0782d'
7
+ data.tar.gz: 5e3a7f512fc58d688551c9601c26b863872dfeafaf860554796f2493ba30234045c591520c453fa973cae529069516cc19653553cf369eca7f31bc7c5ac29395
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mimi
4
+ module Messaging
5
+ #
6
+ # A Message is a Hash and additional headers structure.
7
+ #
8
+ class Message < Hash
9
+ attr_reader :headers
10
+
11
+ # Creates a Message out of Hash or another Message.
12
+ #
13
+ # @param message_or_hash [Hash,Message]
14
+ # @param headers [Hash,nil] additional headers to attach to the message
15
+ #
16
+ def initialize(message_or_hash, headers = nil)
17
+ unless message_or_hash.is_a?(Hash) # or a Message
18
+ raise ArgumentError, "Message or Hash is expected as argument"
19
+ end
20
+
21
+ # copy attributes
22
+ message_or_hash.each { |k, v| self[k] = v.dup }
23
+
24
+ # copy headers
25
+ headers ||= {}
26
+ if message_or_hash.is_a?(Mimi::Messaging::Message)
27
+ @headers = message_or_hash.headers.merge(headers)
28
+ else
29
+ @headers = headers
30
+ end
31
+ end
32
+ end # class Message
33
+ end # module Messaging
34
+ end # module Mimi
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Mimi
4
4
  module Messaging
5
- VERSION = "1.0.0"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
@@ -4,6 +4,7 @@ require "mimi/core"
4
4
  require_relative "messaging/adapters"
5
5
  require_relative "messaging/errors"
6
6
  require_relative "messaging/json_serializer"
7
+ require_relative "messaging/message"
7
8
  require_relative "messaging/version"
8
9
 
9
10
  module Mimi
@@ -185,10 +186,10 @@ module Mimi
185
186
  #
186
187
  def self.command(target, message = {}, opts = {})
187
188
  raise ArgumentError, "Invalid target argument" unless TARGET_REGEX.match(target)
188
- raise ArgumentError, "Invalid message, Hash is expected" unless message.is_a?(Hash)
189
+ raise ArgumentError, "Invalid message, Hash or Message is expected" unless message.is_a?(Hash)
189
190
  raise Error, "Failed to send command, adapter is not started" unless started?(:adapter)
190
191
 
191
- adapter.command(target, message, opts)
192
+ adapter.command(target, Mimi::Messaging::Message.new(message), opts)
192
193
  end
193
194
 
194
195
  # Executes the query to the given target and returns response
@@ -196,17 +197,17 @@ module Mimi
196
197
  # Raises Timeout::Error if the response from the target was not received in time.
197
198
  #
198
199
  # @param target [String] "<queue>/<method>"
199
- # @param message [Hash]
200
+ # @param message [Hash,Mimi::Messaging::Message]
200
201
  # @param opts [Hash] additional options, e.g. :timeout
201
202
  #
202
203
  # @return [Hash]
203
204
  #
204
205
  def self.query(target, message = {}, opts = {})
205
206
  raise ArgumentError, "Invalid target argument" unless TARGET_REGEX.match(target)
206
- raise ArgumentError, "Invalid message, Hash is expected" unless message.is_a?(Hash)
207
+ raise ArgumentError, "Invalid message, Hash or Message is expected" unless message.is_a?(Hash)
207
208
  raise Error, "Failed to send query, adapter is not started" unless started?(:adapter)
208
209
 
209
- adapter.query(target, message, opts)
210
+ adapter.query(target, Mimi::Messaging::Message.new(message), opts)
210
211
  end
211
212
 
212
213
  # Broadcasts the event with the given target
@@ -217,10 +218,10 @@ module Mimi
217
218
  #
218
219
  def self.event(target, message = {}, opts = {})
219
220
  raise ArgumentError, "Invalid target argument" unless TARGET_REGEX.match(target)
220
- raise ArgumentError, "Invalid message, Hash is expected" unless message.is_a?(Hash)
221
+ raise ArgumentError, "Invalid message, Hash or Message is expected" unless message.is_a?(Hash)
221
222
  raise Error, "Failed to broadcast event, adapter is not started" unless started?(:adapter)
222
223
 
223
- adapter.event(target, message, opts)
224
+ adapter.event(target, Mimi::Messaging::Message.new(message), opts)
224
225
  end
225
226
 
226
227
  # Registers the request (command/query) processor.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mimi-messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kukushkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-06 00:00:00.000000000 Z
11
+ date: 2019-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mimi-core
@@ -122,6 +122,7 @@ files:
122
122
  - lib/mimi/messaging/adapters/test.rb
123
123
  - lib/mimi/messaging/errors.rb
124
124
  - lib/mimi/messaging/json_serializer.rb
125
+ - lib/mimi/messaging/message.rb
125
126
  - lib/mimi/messaging/version.rb
126
127
  - mimi-messaging.gemspec
127
128
  homepage: https://github.com/kukushkin/mimi-messaging