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

edit --in can take a range, added some more tests.

This commit is contained in:
Conrad Irwin 2011-09-26 00:39:16 -07:00
parent b76fa99f32
commit 0e904ada39
2 changed files with 36 additions and 4 deletions

View file

@ -122,7 +122,7 @@ class Pry
USAGE
opt.on :e, :ex, "Open the file that raised the most recent exception (_ex_.file)", :optional => true, :as => Integer
opt.on :i, :in, "Open a temporary file containing the specified line of _in_.", :optional => true, :as => Integer
opt.on :i, :in, "Open a temporary file containing the Nth line of _in_. N may be a range.", :optional => true, :as => Range, :default => -1..-1
opt.on :t, :temp, "Open an empty temporary file"
opt.on :l, :line, "Jump to this line in the opened file", true, :as => Integer
opt.on :n, :"no-reload", "Don't automatically reload the edited code"
@ -133,8 +133,8 @@ class Pry
end
next if opts.h?
if [opts.ex? || nil, opts.t? || nil, !args.empty? || nil].compact.size > 1
next output.puts "Only one of --ex, --temp, and FILE may be specified"
if [opts.ex?, opts.t?, opts.in?, !args.empty?].count(true) > 1
next output.puts "Only one of --ex, --temp, --in and FILE may be specified"
end
# edit of local code, eval'd within pry.
@ -143,7 +143,14 @@ class Pry
content = if opts.t?
""
elsif opts.i?
_pry_.input_array[opts[:i] || -1] || ""
case opts[:i]
when Range
(_pry_.input_array[opts[:i]] || []).join
when Fixnum
_pry_.input_array[opts[:i]] || ""
else
next output.puts "Not a valid range: #{opts[:i]}"
end
elsif eval_string.strip != ""
eval_string
else

View file

@ -211,11 +211,36 @@ describe "Pry::DefaultCommands::Introspection" do
}
mock_pry("edit -n").should.not =~ /FOO/
end
end
describe "with --in" do
it "should edit the nth line of _in_" do
mock_pry("10", "11", "edit --in -2")
@contents.should == "10\n"
end
it "should edit the last line if no argument is given" do
mock_pry("10", "11", "edit --in")
@contents.should == "11\n"
end
it "should edit a range of lines if a range is given" do
mock_pry("10", "11", "edit -i 1,2")
@contents.should == "10\n11\n"
end
it "should edit a multi-line expression as it occupies one line of _in_" do
mock_pry("class Fixnum", " def invert; -self; end", "end", "edit -i 1")
@contents.should == "class Fixnum\n def invert; -self; end\nend\n"
end
it "should not work with a filename" do
mock_pry("edit ruby.rb -i").should =~ /Only one of --ex, --temp, --in and FILE may be specified/
end
it "should not work with nonsense" do
mock_pry("edit --in three").should =~ /Not a valid range: three/
end
end
end