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