lib/ably/modules/conversions.rb in ably-1.1.8 vs lib/ably/modules/conversions.rb in ably-1.2.0
- old
+ new
@@ -113,7 +113,41 @@
payload.kind_of?(Array) ||
payload.nil?
raise Ably::Exceptions::UnsupportedDataType.new('Invalid data payload', 400, Ably::Exceptions::Codes::INVALID_MESSAGE_DATA_OR_ENCODING)
end
+
+ # Converts the name, data, attributes into the array of Message objects
+ #
+ # @return [Array<Ably::Models::Message>]
+ #
+ def build_messages(name, data = nil, attributes = {})
+ return [Ably::Models::Message(ensure_supported_name_and_payload(nil, data, attributes))] if name.nil?
+
+ Array(name).map do |item|
+ Ably::Models::Message(ensure_supported_name_and_payload(item, data, attributes))
+ end
+ end
+
+ # Ensures if the first argument (name) is a String, Hash or Ably::Models::Message object,
+ # second argument (data) should be a String, Hash, Array or nil (see ensure_supported_payload() method).
+ #
+ # @return [Hash] Contains :name, :data and other attributes
+ #
+ # (RSL1a, RSL1b)
+ #
+ def ensure_supported_name_and_payload(name, data = nil, attributes = {})
+ return name.attributes.dup if name.kind_of?(Ably::Models::Message)
+
+ payload = data
+ if (hash = name).kind_of?(Hash)
+ name, payload = hash[:name], (hash[:data] || payload)
+ attributes.merge!(hash)
+ end
+
+ name = ensure_utf_8(:name, name, allow_nil: true)
+ ensure_supported_payload payload
+
+ attributes.merge({ name: name, data: payload })
+ end
end
end