class Pry::History

The History class is responsible for maintaining the user's input history, both internally and within Readline.

Attributes

clearer[RW]
loader[RW]
original_lines[R]

@return [Fixnum] Number of lines in history when Pry first loaded.

pusher[RW]
saver[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/pry/history.rb, line 10
def initialize(options={})
  @history = []
  @original_lines = 0
  @file_path = options[:file_path]
  restore_default_behavior
end

Public Instance Methods

<<(line)
Alias for: push
clear() click to toggle source

Clear this session's history. This won't affect the contents of the history file.

# File lib/pry/history.rb, line 58
def clear
  @clearer.call
  @history = []
end
history_line_count() click to toggle source

@return [Fixnum] The number of lines in history.

# File lib/pry/history.rb, line 64
def history_line_count
  @history.count
end
load() click to toggle source

Load the input history using `History.loader`. @return [Integer] The number of lines loaded

# File lib/pry/history.rb, line 35
def load
  @loader.call do |line|
    @pusher.call(line.chomp)
    @history << line.chomp
    @original_lines += 1
  end
end
push(line) click to toggle source

Add a line to the input history, ignoring blank and duplicate lines. @param [String] line @return [String] The same line that was passed in

# File lib/pry/history.rb, line 46
def push(line)
  unless line.empty? || (@history.last && line == @history.last)
    @pusher.call(line)
    @history << line
    @saver.call(line) if Pry.config.history.should_save
  end
  line
end
Also aliased as: <<
restore_default_behavior() click to toggle source

Assign the default methods for loading, saving, pushing, and clearing.

# File lib/pry/history.rb, line 18
def restore_default_behavior
  Pry.config.input # force Readline to load if applicable

  @loader = method(:read_from_file)
  @saver  = method(:save_to_file)

  if defined?(Readline)
    @pusher  = method(:push_to_readline)
    @clearer = method(:clear_readline)
  else
    @pusher  = proc { }
    @clearer = proc { }
  end
end
session_line_count() click to toggle source

@return [Fixnum] The number of lines in history from just this session.

# File lib/pry/history.rb, line 69
def session_line_count
  @history.count - @original_lines
end
to_a() click to toggle source

Return an Array containing all stored history. @return [Array<String>] An Array containing all lines of history loaded

or entered by the user in the current session.
# File lib/pry/history.rb, line 76
def to_a
  @history.dup
end

Private Instance Methods

clear_readline() click to toggle source

The default clearer. Clears Readline::HISTORY.

# File lib/pry/history.rb, line 100
def clear_readline
  Readline::HISTORY.shift until Readline::HISTORY.empty?
end
history_file() click to toggle source

The history file, opened for appending.

# File lib/pry/history.rb, line 110
def history_file
  if defined?(@history_file)
    @history_file
  else
    @history_file = File.open(history_file_path, 'a', 0600).tap do |file|
      file.sync = true
    end
  end
rescue Errno::EACCES
  warn 'History not saved; unable to open your history file for writing.'
  @history_file = false
end
history_file_path() click to toggle source
# File lib/pry/history.rb, line 123
def history_file_path
  File.expand_path(@file_path || Pry.config.history.file)
end
push_to_readline(line) click to toggle source

The default pusher. Appends the given line to Readline::HISTORY. @param [String] line

# File lib/pry/history.rb, line 95
def push_to_readline(line)
  Readline::HISTORY << line
end
read_from_file() { |line| ... } click to toggle source

The default loader. Yields lines from `Pry.history.config.file`.

# File lib/pry/history.rb, line 83
def read_from_file
  path = history_file_path

  if File.exists?(path)
    File.foreach(path) { |line| yield(line) }
  end
rescue => error
  warn "History file not loaded: #{error.message}"
end
save_to_file(line) click to toggle source

The default saver. Appends the given line to `Pry.history.config.file`.

# File lib/pry/history.rb, line 105
def save_to_file(line)
  history_file.puts line if history_file
end