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

#initialize(options = {}) ⇒ 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

#clearerObject

Returns the value of attribute clearer



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

def clearer
  @clearer
end

#loaderObject

Returns the value of attribute loader



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

def loader
  @loader
end

#original_linesFixnum (readonly)



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

def original_lines
  @original_lines
end

#pusherObject

Returns the value of attribute pusher



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

def pusher
  @pusher
end

#saverObject

Returns the value of attribute saver



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

def saver
  @saver
end

Instance Method Details

#clearObject

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

#clear_readlineObject (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

#history_fileObject (private)

The history file, opened for appending.



110
111
112
113
114
115
116
117
118
119
120
121
# 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_pathObject (private)



123
124
125
# File 'lib/pry/history.rb', line 123

def history_file_path
  File.expand_path(@file_path || Pry.config.history.file)
end

#history_line_countFixnum



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

def history_line_count
  @history.count
end

#loadInteger

Load the input history using History.loader.



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

#push(line) ⇒ String Also known as: <<

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



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

#push_to_readline(line) ⇒ Object (private)

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



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

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

#read_from_fileObject (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
  path = history_file_path

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

#restore_default_behaviorObject

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

#save_to_file(line) ⇒ Object (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

#session_line_countFixnum



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

def session_line_count
  @history.count - @original_lines
end

#to_aArray<String>

Return an Array containing all stored history.



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

def to_a
  @history.dup
end