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.
Constant Summary collapse
- TRIM_RATIO =
0.9- TRIM_BOUNDARY_SEARCH =
1_024
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) ⇒ Object
- #empty? ⇒ Boolean
- #end_with?(*suffixes) ⇒ Boolean
- #include?(*arguments) ⇒ Boolean
-
#initialize(limit:) ⇒ TranscriptBuffer
constructor
A new instance of TranscriptBuffer.
- #initialize_copy(source) ⇒ Object
- #invalidate_display_rows_cache ⇒ Object
- #text_display_rows(width) ⇒ Object
- #to_s ⇒ Object
- #viewport_rows(row_count, width) ⇒ Object
- #viewport_text(row_count, width) ⇒ Object
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
#text ⇒ Object (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 |
#clear ⇒ Object
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
34 35 36 |
# File 'lib/kward/prompt_interface/transcript_buffer.rb', line 34 def empty? @text.empty? end |
#end_with?(*suffixes) ⇒ 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
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_cache ⇒ Object
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_s ⇒ Object
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 (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 (row_count, width) (row_count, width).join("\n") end |