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
15
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 9

def initialize(limit:)
  @limit = limit
  @text = +""
  @display_rows_cache_width = nil
  @display_rows_cache_banner_count = 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



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

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

#clearObject



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

def clear
  @text = +""
  invalidate_display_rows_cache
end

#display_rows(width, visual_banner_count:, banner_rows:) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 57

def display_rows(width, visual_banner_count:, banner_rows:)
  if @display_rows_cache_width == width && @display_rows_cache_banner_count == visual_banner_count && @display_rows_cache
    return @display_rows_cache
  end

  rows = []
  visual_banner_count.times { rows.concat(banner_rows.call(width)) }
  rows << "" if visual_banner_count.positive? && @text.empty?
  rows.concat(text_display_rows(width))
  @display_rows_cache_width = width
  @display_rows_cache_banner_count = visual_banner_count
  @display_rows_cache = rows
end

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @text.empty?
end

#end_with?(*suffixes) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#include?(*arguments) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#invalidate_display_rows_cacheObject



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

def invalidate_display_rows_cache
  @display_rows_cache_width = nil
  @display_rows_cache_banner_count = nil
  @display_rows_cache = nil
end

#text_display_rows(width) ⇒ Object



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

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



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

def to_s
  @text
end

#viewport_rows(row_count, width, visual_banner_count:, banner_rows:) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 49

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

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

#viewport_text(row_count, width, visual_banner_count:, banner_rows:) ⇒ Object



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

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