Skip to content
Kward Search API index

Class: Kward::BufferedPtyOutputSink

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/pty/output_sink.rb

Overview

Retains output while a detached PTY command runs without terminal ownership.

Instance Method Summary collapse

Constructor Details

#initialize(max_capture_bytes:, initial_output: nil, initial_truncated: false) ⇒ BufferedPtyOutputSink

Returns a new instance of BufferedPtyOutputSink.



7
8
9
10
11
12
13
# File 'lib/kward/pty/output_sink.rb', line 7

def initialize(max_capture_bytes:, initial_output: nil, initial_truncated: false)
  @max_capture_bytes = max_capture_bytes
  @captured_output = +"".b
  @truncated = initial_truncated
  @mutex = Mutex.new
  write(initial_output) unless initial_output.to_s.empty?
end

Instance Method Details

#captured_outputObject



15
16
17
# File 'lib/kward/pty/output_sink.rb', line 15

def captured_output
  @mutex.synchronize { @captured_output.dup }
end

#finishObject



38
39
40
# File 'lib/kward/pty/output_sink.rb', line 38

def finish
  nil
end

#flushObject



34
35
36
# File 'lib/kward/pty/output_sink.rb', line 34

def flush
  nil
end

#pre_input_capture_only?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/kward/pty/output_sink.rb', line 46

def pre_input_capture_only?
  true
end

#transcript_safe?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/kward/pty/output_sink.rb', line 42

def transcript_safe?
  true
end

#truncated?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/kward/pty/output_sink.rb', line 50

def truncated?
  @mutex.synchronize { @truncated }
end

#write(chunk) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/kward/pty/output_sink.rb', line 19

def write(chunk)
  value = chunk.to_s.b
  return if value.empty?

  @mutex.synchronize do
    remaining = @max_capture_bytes - @captured_output.bytesize
    if value.bytesize > remaining
      @captured_output << value.byteslice(0, remaining) if remaining.positive?
      @truncated = true
    else
      @captured_output << value
    end
  end
end