Skip to content
Kward Search API index

Class: Kward::PromptInterface::TranscriptBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/prompt_interface/transcript_buffer.rb

Overview

Bounded in-memory transcript buffer used by the prompt interface.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(limit:) ⇒ TranscriptBuffer

Returns a new instance of TranscriptBuffer.



9
10
11
12
13
14
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 9

def initialize(limit:)
  @limit = limit
  @text = +""
  @display_rows_cache_width = nil
  @display_rows_cache = nil
end

Instance Attribute Details

#textObject (readonly)

Returns the value of attribute text.



7
8
9
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 7

def text
  @text
end

Instance Method Details

#append(text) ⇒ Object



43
44
45
46
47
48
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 43

def append(text)
  @text << ANSI.sanitize_transcript(text)
  @text = @text[-@limit, @limit] if @text.length > @limit
  invalidate_display_rows_cache
  @text
end

#clearObject



38
39
40
41
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 38

def clear
  @text = +""
  invalidate_display_rows_cache
end

#display_rows(width) ⇒ Object



62
63
64
65
66
67
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 62

def display_rows(width)
  return @display_rows_cache if @display_rows_cache_width == width && @display_rows_cache

  @display_rows_cache_width = width
  @display_rows_cache = text_display_rows(width)
end

#empty?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 30

def empty?
  @text.empty?
end

#end_with?(*suffixes) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 34

def end_with?(*suffixes)
  @text.end_with?(*suffixes)
end

#include?(*arguments) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 26

def include?(*arguments)
  @text.include?(*arguments)
end

#initialize_copy(source) ⇒ Object



16
17
18
19
20
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 16

def initialize_copy(source)
  super
  @text = source.text.dup
  invalidate_display_rows_cache
end

#invalidate_display_rows_cacheObject



76
77
78
79
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 76

def invalidate_display_rows_cache
  @display_rows_cache_width = nil
  @display_rows_cache = nil
end

#text_display_rows(width) ⇒ Object



69
70
71
72
73
74
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 69

def text_display_rows(width)
  @text.split(/\r\n|\r|\n/, -1).flat_map do |line|
    chunks = ANSI.wrap_visible(line, width)
    chunks.empty? ? [""] : chunks
  end
end

#to_sObject



22
23
24
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 22

def to_s
  @text
end

#viewport_rows(row_count, width) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 54

def viewport_rows(row_count, width)
  return [] unless row_count.positive?

  rows = display_rows(width).last(row_count)
  rows = ([""] * (row_count - rows.length)) + rows if rows.length < row_count
  rows
end

#viewport_text(row_count, width) ⇒ Object



50
51
52
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 50

def viewport_text(row_count, width)
  viewport_rows(row_count, width).join("\n")
end