Class: Pry::History

Inherits:
Object show all
Defined in:
lib/pry/history.rb

Overview

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

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (History) initialize(options = {})

Returns a new instance of History



10
11
12
13
14
15
# File 'lib/pry/history.rb', line 10

def initialize(options={})
  @history = []
  @original_lines = 0
  @file_path = options[:file_path]
  restore_default_behavior
end

Instance Attribute Details

- (Object) clearer

Returns the value of attribute clearer



5
6
7
# File 'lib/pry/history.rb', line 5

def clearer
  @clearer
end

- (Object) loader

Returns the value of attribute loader



5
6
7
# File 'lib/pry/history.rb', line 5

def loader
  @loader
end

- (Fixnum) original_lines (readonly)

Returns Number of lines in history when Pry first loaded.

Returns:

  • (Fixnum)

    Number of lines in history when Pry first loaded.



8
9
10
# File 'lib/pry/history.rb', line 8

def original_lines
  @original_lines
end

- (Object) pusher

Returns the value of attribute pusher



5
6
7
# File 'lib/pry/history.rb', line 5

def pusher
  @pusher
end

- (Object) saver

Returns the value of attribute saver



5
6
7
# File 'lib/pry/history.rb', line 5

def saver
  @saver
end

Instance Method Details

- (Object) clear

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



58
59
60
61
# File 'lib/pry/history.rb', line 58

def clear
  @clearer.call
  @history = []
end

- (Object) clear_readline (private)

The default clearer. Clears Readline::HISTORY.



100
101
102
# File 'lib/pry/history.rb', line 100

def clear_readline
  Readline::HISTORY.shift until Readline::HISTORY.empty?
end

- (Object) file_path (private)



121
122
123
# File 'lib/pry/history.rb', line 121

def file_path
  @file_path || Pry.config.history.file
end

- (Object) history_file (private)

The history file, opened for appending.



110
111
112
113
114
115
116
117
118
119
# File 'lib/pry/history.rb', line 110

def history_file
  if defined?(@history_file)
    @history_file
  else
    @history_file = File.open(file_path, 'a', 0600).tap { |f| f.sync = true }
  end
rescue Errno::EACCES
  warn 'History not saved; unable to open your history file for writing.'
  @history_file = false
end

- (Fixnum) history_line_count

Returns The number of lines in history.

Returns:

  • (Fixnum)

    The number of lines in history.



64
65
66
# File 'lib/pry/history.rb', line 64

def history_line_count
  @history.count
end

- (Integer) load

Load the input history using History.loader.

Returns:

  • (Integer)

    The number of lines loaded



35
36
37
38
39
40
41
# 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

- (String) push(line) Also known as: <<

Add a line to the input history, ignoring blank and duplicate lines.

Parameters:

  • line (String)

Returns:

  • (String)

    The same line that was passed in



46
47
48
49
50
51
52
53
# 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

- (Object) push_to_readline(line) (private)

The default pusher. Appends the given line to Readline::HISTORY.

Parameters:

  • line (String)


95
96
97
# File 'lib/pry/history.rb', line 95

def push_to_readline(line)
  Readline::HISTORY << line
end

- (Object) read_from_file (private)

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



83
84
85
86
87
88
89
90
91
# File 'lib/pry/history.rb', line 83

def read_from_file
  filename = File.expand_path(Pry.config.history.file)

  if File.exists?(filename)
    File.foreach(filename) { |line| yield(line) }
  end
rescue => error
  warn "History file not loaded: #{error.message}"
end

- (Object) restore_default_behavior

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



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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

- (Object) save_to_file(line) (private)

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



105
106
107
# File 'lib/pry/history.rb', line 105

def save_to_file(line)
  history_file.puts line if history_file
end

- (Fixnum) session_line_count

Returns The number of lines in history from just this session.

Returns:

  • (Fixnum)

    The number of lines in history from just this session.



69
70
71
# File 'lib/pry/history.rb', line 69

def session_line_count
  @history.count - @original_lines
end

- (Array<String>) to_a

Return an Array containing all stored history.

Returns:

  • (Array<String>)

    An Array containing all lines of history loaded or entered by the user in the current session.



76
77
78
# File 'lib/pry/history.rb', line 76

def to_a
  @history.dup
end