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.

Constant Summary collapse

TRIM_RATIO =
0.9
TRIM_BOUNDARY_SEARCH =
1_024

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(limit:) ⇒ TranscriptBuffer

Returns a new instance of TranscriptBuffer.



12
13
14
15
16
17
18
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 12

def initialize(limit:)
  @limit = [limit.to_i, 1].max
  @trim_target = [(@limit * TRIM_RATIO).floor, 1].max
  @text = +""
  @display_rows_cache_width = nil
  @display_rows_cache = nil
end

Instance Attribute Details

#textObject (readonly)

Returns the value of attribute text.



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

def text
  @text
end

Instance Method Details

#append(text) ⇒ Object



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

def append(text)
  @text << ANSI.sanitize_transcript(text)
  trim_to_limit if @text.length > @limit
  invalidate_display_rows_cache
  @text
end

#clearObject



42
43
44
45
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 42

def clear
  @text = +""
  invalidate_display_rows_cache
end

#display_rows(width) ⇒ Object



66
67
68
69
70
71
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 66

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)


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

def empty?
  @text.empty?
end

#end_with?(*suffixes) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#include?(*arguments) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#initialize_copy(source) ⇒ Object



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

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

#invalidate_display_rows_cacheObject



80
81
82
83
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 80

def invalidate_display_rows_cache
  @display_rows_cache_width = nil
  @display_rows_cache = nil
end

#text_display_rows(width) ⇒ Object



73
74
75
76
77
78
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 73

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



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

def to_s
  @text
end

#viewport_rows(row_count, width) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 58

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



54
55
56
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 54

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