class Docker::Messages
This class represents all the messages either received by chunks from attach
Attributes
all_messages[RW]
buffer[RW]
stderr_messages[RW]
stdout_messages[RW]
Public Class Methods
new(stdout_messages=[], stderr_messages=[], all_messages=[], buffer="")
click to toggle source
# File lib/docker/messages.rb, line 6 def initialize(stdout_messages=[], stderr_messages=[], all_messages=[], buffer="") @stdout_messages = stdout_messages @stderr_messages = stderr_messages @all_messages = all_messages @buffer = buffer end
Public Instance Methods
add_message(source, message)
click to toggle source
# File lib/docker/messages.rb, line 16 def add_message(source, message) case source when 1 stdout_messages << message when 2 stderr_messages << message end all_messages << message end
append(messages)
click to toggle source
# File lib/docker/messages.rb, line 42 def append(messages) @stdout_messages += messages.stdout_messages @stderr_messages += messages.stderr_messages @all_messages += messages.all_messages messages.clear @all_messages end
clear()
click to toggle source
# File lib/docker/messages.rb, line 51 def clear stdout_messages.clear stderr_messages.clear all_messages.clear end
decipher_messages(body)
click to toggle source
Method to break apart application/vnd.docker.raw-stream headers
# File lib/docker/messages.rb, line 58 def decipher_messages(body) raw_text = buffer + body.dup messages = Docker::Messages.new while !raw_text.empty? messages.get_message(raw_text) end messages end
get_message(raw_text)
click to toggle source
# File lib/docker/messages.rb, line 26 def get_message(raw_text) header = raw_text.slice!(0,8) if header.length < 8 @buffer = header return end type, length = header.unpack("CxxxN") message = raw_text.slice!(0,length) if message.length < length @buffer = header + message else add_message(type, message) end end