class TTY::Prompt::Reader::History

A class responsible for storing a history of all lines entered by user when interacting with shell prompt.

@api private

Constants

DEFAULT_SIZE

Default maximum size

Attributes

cycle[RW]
duplicates[RW]
exclude[RW]
index[R]
max_size[RW]

Set and retrieve the maximum size of the buffer

Public Class Methods

new(max_size = DEFAULT_SIZE, options = {}) { |self| ... } click to toggle source

Create a History buffer

param [Integer] max_size

the maximum size for history buffer

param [Hash] options @option options [Boolean] :duplicates

whether or not to store duplicates, true by default

@api public

# File lib/tty/prompt/reader/history.rb, line 42
def initialize(max_size = DEFAULT_SIZE, options = {})
  @max_size   = max_size
  @index      = 0
  @history    = []
  @duplicates = options.fetch(:duplicates) { true }
  @exclude    = options.fetch(:exclude) { proc {} }
  @cycle      = options.fetch(:cycle) { false }
  yield self if block_given?
end

Public Instance Methods

<<(line)
Alias for: push
[](index) click to toggle source

Return line at the specified index

@raise [IndexError] index out of range

@api public

# File lib/tty/prompt/reader/history.rb, line 115
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
clear() click to toggle source

Empty all history lines

@api public

# File lib/tty/prompt/reader/history.rb, line 138
def clear
  @history.clear
  @index = 0
end
each() { |line| ... } click to toggle source

Iterates over history lines

@api public

# File lib/tty/prompt/reader/history.rb, line 55
def each
  if block_given?
    @history.each { |line| yield line }
  else
    @history.to_enum
  end
end
get() click to toggle source

Get current line

@api public

# File lib/tty/prompt/reader/history.rb, line 129
def get
  return if size.zero?

  self[@index]
end
next() click to toggle source

Move the pointer to the next line in the history

@api public

# File lib/tty/prompt/reader/history.rb, line 83
def next
  return if size.zero?
  if @index == size - 1
    @index = 0 if @cycle
  else
    @index += 1
  end
end
next?() click to toggle source
# File lib/tty/prompt/reader/history.rb, line 92
def next?
  size > 0 && !(@index == size - 1 && !@cycle)
end
previous() click to toggle source

Move the pointer to the previous line in the history

# File lib/tty/prompt/reader/history.rb, line 97
def previous
  return if size.zero?
  if @index.zero?
    @index = size - 1 if @cycle
  else
    @index -= 1
  end
end
previous?() click to toggle source
# File lib/tty/prompt/reader/history.rb, line 106
def previous?
  size > 0 && !(@index < 0 && !@cycle)
end
push(line) click to toggle source

Add the last typed line to history buffer

@param [String] line

@api public

# File lib/tty/prompt/reader/history.rb, line 68
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
Also aliased as: <<