class TTY::Reader::History
A class responsible for storing a history of all lines entered by user when interacting with shell prompt.
@api private
Constants
- DEFAULT_EXCLUDE
Default exclude
- DEFAULT_SIZE
Default maximum size
Attributes
Decides whether or not to allow cycling through stored lines.
@return [Boolean]
@api public
Decides wether or not duplicate lines are stored.
@return [Boolean]
@api public
Dictates which lines are stored.
@return [Proc]
@public
The current index
@return [Integer]
@api private
Set and retrieve the maximum size of the buffer
Public Class Methods
Create a History
buffer
@param [Integer] max_size
the maximum size for history buffer
@param [Boolean] cycle
whether or not the history should cycle, false by default
@param [Boolean] duplicates
whether or not to store duplicates, true by default
@param [Boolean] exclude
a Proc to exclude items from storing in history
@api public
# File lib/tty/reader/history.rb, line 66 def initialize(max_size = DEFAULT_SIZE, duplicates: true, cycle: false, exclude: DEFAULT_EXCLUDE) @max_size = max_size @index = nil @history = [] @duplicates = duplicates @exclude = exclude @cycle = cycle yield self if block_given? end
Public Instance Methods
Return line at the specified index
@raise [IndexError] index out of range
@api public
# File lib/tty/reader/history.rb, line 143 def [](index) if index < 0 index += @history.size if index < 0 end line = @history[index] if line.nil? raise IndexError, "invalid index" end line.dup end
Empty all history lines
@api public
# File lib/tty/reader/history.rb, line 166 def clear @history.clear @index = 0 end
Iterates over history lines
@api public
# File lib/tty/reader/history.rb, line 81 def each(&block) if block_given? @history.each(&block) else @history.to_enum end end
Get current line
@api public
# File lib/tty/reader/history.rb, line 157 def get return if size.zero? self[@index] end
Move the pointer to the next line in the history
@api public
# File lib/tty/reader/history.rb, line 109 def next return if size.zero? if @index == size - 1 @index = 0 if @cycle else @index += 1 end end
# File lib/tty/reader/history.rb, line 119 def next? size > 0 && !(@index == size - 1 && !@cycle) end
Move the pointer to the previous line in the history
# File lib/tty/reader/history.rb, line 124 def previous return if size.zero? if @index.zero? @index = size - 1 if @cycle else @index -= 1 end end
# File lib/tty/reader/history.rb, line 134 def previous? size > 0 && !(@index < 0 && !@cycle) end
Add the last typed line to history buffer
@param [String] line
@api public
# File lib/tty/reader/history.rb, line 94 def push(line) @history.delete(line) unless @duplicates return if line.to_s.empty? || @exclude[line] @history.shift if size >= max_size @history << line @index = @history.size - 1 self end