class RuboCop::Server::SocketReader
@api private
This class sends the request read from the socket to server.
def create_command_instance(request)
def create_command_instance(request) klass = find_command_class(request.header.command) klass.new(request.header.args, token: request.header.token, cwd: request.header.cwd) end
def find_command_class(command)
def find_command_class(command) case command when 'stop' then ServerCommand::Stop when 'exec' then ServerCommand::Exec else raise UnknownServerCommandError, "#{command.inspect} is not a valid command" end end
def initialize(socket)
def initialize(socket) @socket = socket end
def parse_header(header)
def parse_header(header) token, cwd, command, *args = header.shellsplit Header.new(token, cwd, command, args) end
def parse_request(content)
def parse_request(content) raw_header, *body = content.lines Request.new(parse_header(raw_header), body.join) end
def read!
def read! request = parse_request(@socket.read) stderr = StringIO.new Helper.redirect( stdin: StringIO.new(request.body), stdout: @socket, stderr: stderr ) do create_command_instance(request).run end ensure Cache.stderr_path.write(stderr.string) @socket.close end