Class: Aidp::CLI::TerminalIO

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/cli/terminal_io.rb

Instance Method Summary collapse

Constructor Details

#initialize(input: nil, output: nil) ⇒ TerminalIO

Returns a new instance of TerminalIO.



9
10
11
12
# File 'lib/aidp/cli/terminal_io.rb', line 9

def initialize(input: nil, output: nil)
  @input = input || $stdin
  @output = output || $stdout
end

Instance Method Details

#flushObject



76
77
78
# File 'lib/aidp/cli/terminal_io.rb', line 76

def flush
  @output.flush
end

#getchObject



22
23
24
25
26
27
28
29
30
# File 'lib/aidp/cli/terminal_io.rb', line 22

def getch
  return nil unless ready?
  if @input.is_a?(StringIO)
    char = @input.getc
    char&.chr || ""
  else
    @input.getch
  end
end

#getsObject



32
33
34
# File 'lib/aidp/cli/terminal_io.rb', line 32

def gets
  @input.gets
end


72
73
74
# File 'lib/aidp/cli/terminal_io.rb', line 72

def print(str)
  @output.print(str)
end

#puts(str = "") ⇒ Object



68
69
70
# File 'lib/aidp/cli/terminal_io.rb', line 68

def puts(str = "")
  @output.puts(str)
end

#readline(prompt = "", default: nil) ⇒ Object

Enhanced readline-style input with standard key combinations Supports: Ctrl-A (beginning), Ctrl-E (end), Ctrl-W (delete word), etc.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/aidp/cli/terminal_io.rb', line 38

def readline(prompt = "", default: nil)
  # Use StringIO for testing, otherwise use TTY::Reader for real input
  if @input.is_a?(StringIO)
    @output.print(prompt)
    @output.flush
    line = @input.gets
    return line&.chomp if line
    return default
  end

  reader = TTY::Reader.new(
    input: @input,
    output: @output,
    interrupt: :exit
  )

  # TTY::Reader#read_line does not support a :default keyword; we emulate fallback
  result = reader.read_line(prompt)
  if (result.nil? || result.chomp.empty?) && !default.nil?
    return default
  end
  result&.chomp
rescue TTY::Reader::InputInterrupt
  raise Interrupt
end

#ready?Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
20
# File 'lib/aidp/cli/terminal_io.rb', line 14

def ready?
  return false if @input.closed?
  return true if @input.is_a?(StringIO)
  # For regular IO, we can't easily check if data is ready
  # So we'll assume it's always ready for non-blocking operations
  true
end

#write(str) ⇒ Object



64
65
66
# File 'lib/aidp/cli/terminal_io.rb', line 64

def write(str)
  @output.write(str)
end