Class: Kward::PromptInterface::TranscriptBuffer
- Inherits:
-
Object
- Object
- Kward::PromptInterface::TranscriptBuffer
- Defined in:
- lib/kward/prompt_interface/transcript_buffer.rb
Overview
Bounded in-memory transcript buffer used by the prompt interface.
Instance Attribute Summary collapse
-
#text ⇒ Object
readonly
Returns the value of attribute text.
Instance Method Summary collapse
- #append(text) ⇒ Object
- #clear ⇒ Object
- #display_rows(width, visual_banner_count:, banner_rows:) ⇒ Object
- #empty? ⇒ Boolean
- #end_with?(*suffixes) ⇒ Boolean
- #include?(*arguments) ⇒ Boolean
-
#initialize(limit:) ⇒ TranscriptBuffer
constructor
A new instance of TranscriptBuffer.
- #invalidate_display_rows_cache ⇒ Object
- #text_display_rows(width) ⇒ Object
- #to_s ⇒ Object
- #viewport_rows(row_count, width, visual_banner_count:, banner_rows:) ⇒ Object
- #viewport_text(row_count, width, visual_banner_count:, banner_rows:) ⇒ Object
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
#text ⇒ Object (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 |
#clear ⇒ Object
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 == && @display_rows_cache return @display_rows_cache end rows = [] .times { rows.concat(.call(width)) } rows << "" if .positive? && @text.empty? rows.concat(text_display_rows(width)) @display_rows_cache_width = width @display_rows_cache_banner_count = @display_rows_cache = rows end |
#empty? ⇒ Boolean
25 26 27 |
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 25 def empty? @text.empty? end |
#end_with?(*suffixes) ⇒ 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
21 22 23 |
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 21 def include?(*arguments) @text.include?(*arguments) end |
#invalidate_display_rows_cache ⇒ Object
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_s ⇒ Object
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 (row_count, width, visual_banner_count:, banner_rows:) return [] unless row_count.positive? rows = display_rows(width, visual_banner_count: , 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 (row_count, width, visual_banner_count:, banner_rows:) (row_count, width, visual_banner_count: , banner_rows: ).join("\n") end |