1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00

Always expand history file path (fix #1262)

This commit is contained in:
Ryan Fitzgerald 2014-07-06 15:20:03 -07:00
parent a6fad5f465
commit 98cbcc3b0e
2 changed files with 31 additions and 11 deletions

View file

@ -81,10 +81,10 @@ class Pry
# The default loader. Yields lines from `Pry.history.config.file`.
def read_from_file
filename = File.expand_path(Pry.config.history.file)
path = history_file_path
if File.exists?(filename)
File.foreach(filename) { |line| yield(line) }
if File.exists?(path)
File.foreach(path) { |line| yield(line) }
end
rescue => error
warn "History file not loaded: #{error.message}"
@ -111,15 +111,17 @@ class Pry
if defined?(@history_file)
@history_file
else
@history_file = File.open(file_path, 'a', 0600).tap { |f| f.sync = true }
@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
def file_path
@file_path || Pry.config.history.file
def history_file_path
File.expand_path(@file_path || Pry.config.history.file)
end
end
end

View file

@ -21,14 +21,14 @@ describe Pry do
end
describe '#push' do
it "should not record duplicated lines" do
it "does not record duplicated lines" do
Pry.history << '3'
Pry.history << '_ += 1'
Pry.history << '_ += 1'
Pry.history.to_a.grep('_ += 1').count.should == 1
end
it "should not record empty lines" do
it "does not record empty lines" do
c = Pry.history.to_a.count
Pry.history << ''
Pry.history.to_a.count.should == c
@ -120,7 +120,7 @@ describe Pry do
end
describe ".load_history" do
it "should read the contents of the file" do
it "reads the contents of the file" do
Pry.history.to_a[-2..-1].should == %w(2 3)
end
end
@ -138,12 +138,12 @@ describe Pry do
Pry.config.history.should_save = false
end
it "should save lines to a file as they are written" do
it "saves lines to a file as they are written" do
@history.push "5"
File.read(@histfile.path).should == "5\n"
end
it "should interleave lines from many places" do
it "interleaves lines from many places" do
@history.push "5"
File.open(@histfile.path, 'a'){ |f| f.puts "6" }
@history.push "7"
@ -151,4 +151,22 @@ describe Pry do
File.read(@histfile.path).should == "5\n6\n7\n"
end
end
describe "expanding the history file path" do
before { Pry.config.history.should_save = true }
after { Pry.config.history.should_save = false }
it "recognizes ~ (#1262)" do
# This is a pretty dumb way of testing this, but at least it shouldn't
# succeed spuriously.
history = Pry::History.new(file_path: '~/test_history')
error = Class.new(RuntimeError)
File.expects(:open).
with("#{ENV['HOME']}/test_history", 'a', 0600).
raises(error)
-> { history.push 'a line' }.should.raise(error)
end
end
end