pry 0.8.0pre4-i386-mswin32 → 0.8.0pre5-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/lib/pry/command_base.rb +11 -4
- data/lib/pry/command_processor.rb +14 -7
- data/lib/pry/commands.rb +27 -14
- data/lib/pry/hooks.rb +2 -2
- data/lib/pry/pry_instance.rb +2 -1
- data/lib/pry/version.rb +1 -1
- data/test/test.rb +20 -15
- data/test/test_helper.rb +1 -0
- metadata +2 -2
data/Rakefile
CHANGED
@@ -30,13 +30,13 @@ def apply_spec_defaults(s)
|
|
30
30
|
end
|
31
31
|
|
32
32
|
task :test do
|
33
|
-
sh "bacon
|
33
|
+
sh "bacon #{direc}/test/test.rb"
|
34
34
|
end
|
35
35
|
|
36
36
|
desc "run pry"
|
37
37
|
task :pry do
|
38
38
|
require "#{direc}/lib/pry.rb"
|
39
|
-
|
39
|
+
binding.pry
|
40
40
|
end
|
41
41
|
|
42
42
|
desc "show pry version"
|
data/lib/pry/command_base.rb
CHANGED
@@ -68,19 +68,26 @@ class Pry
|
|
68
68
|
end
|
69
69
|
|
70
70
|
# Execute a command (this enables commands to call other commands).
|
71
|
+
# @param [Binding] target The current target object.
|
71
72
|
# @param [String] name The command to execute
|
72
73
|
# @param [Array] args The parameters to pass to the command.
|
73
74
|
# @example Wrap one command with another
|
74
75
|
# class MyCommands < Pry::Commands
|
75
76
|
# command "ls2" do
|
76
77
|
# output.puts "before ls"
|
77
|
-
# run "ls"
|
78
|
+
# run target, "ls"
|
78
79
|
# output.puts "after ls"
|
79
80
|
# end
|
80
81
|
# end
|
81
|
-
def run(name, *args)
|
82
|
-
|
83
|
-
|
82
|
+
def run(target, name, *args)
|
83
|
+
command_processor = CommandProcessor.new(target.eval('_pry_'))
|
84
|
+
|
85
|
+
if command_processor.system_command?(name)
|
86
|
+
command_processor.execute_system_command("#{name} #{args.join}", target)
|
87
|
+
else
|
88
|
+
action = opts[:commands][name][:action]
|
89
|
+
instance_exec(*args, &action)
|
90
|
+
end
|
84
91
|
end
|
85
92
|
|
86
93
|
# Import commands from another command object.
|
@@ -7,7 +7,7 @@ class Pry
|
|
7
7
|
|
8
8
|
extend Forwardable
|
9
9
|
|
10
|
-
|
10
|
+
attr_accessor :pry_instance
|
11
11
|
|
12
12
|
def initialize(pry_instance)
|
13
13
|
@pry_instance = pry_instance
|
@@ -26,10 +26,16 @@ class Pry
|
|
26
26
|
def pry_command?(val)
|
27
27
|
!!command_matched(val).first
|
28
28
|
end
|
29
|
+
|
30
|
+
def interpolate_string(str, target)
|
31
|
+
dumped_str = str.dump
|
32
|
+
dumped_str.gsub!(/\\\#\{/, '#{')
|
33
|
+
target.eval(dumped_str)
|
34
|
+
end
|
29
35
|
|
30
|
-
def execute_system_command(val)
|
36
|
+
def execute_system_command(val, target)
|
31
37
|
SYSTEM_COMMAND_REGEX =~ val
|
32
|
-
cmd = $1
|
38
|
+
cmd = interpolate_string($1, target)
|
33
39
|
|
34
40
|
if cmd =~ /^cd\s+(.+)/i
|
35
41
|
begin
|
@@ -71,15 +77,16 @@ class Pry
|
|
71
77
|
def eval_string.clear() replace("") end
|
72
78
|
|
73
79
|
if system_command?(val)
|
74
|
-
execute_system_command(val)
|
80
|
+
execute_system_command(val, target)
|
75
81
|
return
|
76
82
|
end
|
77
83
|
|
84
|
+
# no command was matched, so return to caller
|
85
|
+
return if !pry_command?(val)
|
86
|
+
|
87
|
+
val.replace interpolate_string(val, target)
|
78
88
|
cmd_data, args_string = command_matched(val)
|
79
89
|
|
80
|
-
# no command was matched, so return to caller
|
81
|
-
return if !cmd_data
|
82
|
-
|
83
90
|
args = args_string ? Shellwords.shellwords(args_string) : []
|
84
91
|
action = cmd_data[:action]
|
85
92
|
keep_retval = cmd_data[:keep_retval]
|
data/lib/pry/commands.rb
CHANGED
@@ -31,6 +31,16 @@ class Pry
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
set_file_and_dir_locals = lambda do |file_name|
|
35
|
+
return if !target
|
36
|
+
FILE_TEMP = File.expand_path(file_name)
|
37
|
+
DIR_TEMP = File.dirname(FILE_TEMP)
|
38
|
+
target.eval("_file_ = Pry::Commands::FILE_TEMP")
|
39
|
+
target.eval("_dir_ = Pry::Commands::DIR_TEMP")
|
40
|
+
remove_const(:FILE_TEMP)
|
41
|
+
remove_const(:DIR_TEMP)
|
42
|
+
end
|
43
|
+
|
34
44
|
check_for_dynamically_defined_method = lambda do |meth|
|
35
45
|
file, _ = meth.source_location
|
36
46
|
if file =~ /(\(.*\))|<.*>/
|
@@ -123,7 +133,7 @@ class Pry
|
|
123
133
|
command "gem-cd", "Change working directory to specified gem's directory." do |gem_name|
|
124
134
|
require 'rubygems'
|
125
135
|
gem_spec = Gem.source_index.find_name(gem_name).first
|
126
|
-
next output.
|
136
|
+
next output.puts("Gem `#{gem_name}` not found.") if !gem_spec
|
127
137
|
Dir.chdir(File.expand_path(gem_spec.full_gem_path))
|
128
138
|
end
|
129
139
|
|
@@ -149,6 +159,8 @@ class Pry
|
|
149
159
|
else
|
150
160
|
Pry.active_instance.prompt = Pry::FILE_PROMPT
|
151
161
|
Pry.active_instance.custom_completions = Pry::FILE_COMPLETIONS
|
162
|
+
Readline.completion_proc = Pry::InputCompleter.build_completion_proc target,
|
163
|
+
Pry.active_instance.instance_eval(&Pry::FILE_COMPLETIONS)
|
152
164
|
end
|
153
165
|
end
|
154
166
|
|
@@ -201,6 +213,8 @@ class Pry
|
|
201
213
|
next
|
202
214
|
end
|
203
215
|
|
216
|
+
set_file_and_dir_locals.call(file)
|
217
|
+
puts "blah blah #{target}"
|
204
218
|
output.puts "--\nFrom #{file} @ line #{line_num} in #{klass}##{meth_name}:\n--"
|
205
219
|
|
206
220
|
# This method inspired by http://rubygems.org/gems/ir_b
|
@@ -426,20 +440,13 @@ Shows local and instance variables by default.
|
|
426
440
|
CodeRay.scan(contents, language_detected).term
|
427
441
|
end
|
428
442
|
|
429
|
-
read_between_the_lines = lambda do |file_name, start_line, end_line
|
443
|
+
read_between_the_lines = lambda do |file_name, start_line, end_line|
|
430
444
|
content = File.read(File.expand_path(file_name))
|
431
|
-
|
432
|
-
if with_line_numbers
|
433
|
-
lines = content.each_line.map.with_index { |line, idx| "#{idx + 1}: #{line}" }
|
434
|
-
else
|
435
|
-
lines = content.each_line.to_a
|
436
|
-
end
|
437
|
-
|
438
|
-
lines[start_line..end_line].join
|
445
|
+
content.each_line.to_a[start_line..end_line].join
|
439
446
|
end
|
440
447
|
|
441
448
|
add_line_numbers = lambda do |lines, start_line|
|
442
|
-
lines.each_line.map
|
449
|
+
lines.each_line.each_with_index.map do |line, idx|
|
443
450
|
adjusted_index = idx + start_line
|
444
451
|
if Pry.color
|
445
452
|
cindex = CodeRay.scan("#{adjusted_index}", :ruby).term
|
@@ -475,7 +482,7 @@ e.g: cat-file hello.rb
|
|
475
482
|
end_line = line.to_i - 1
|
476
483
|
end
|
477
484
|
|
478
|
-
opts.on("-t", "--type TYPE", "The specific file type for syntax higlighting.") do |type|
|
485
|
+
opts.on("-t", "--type TYPE", "The specific file type for syntax higlighting (e.g ruby, python, cpp, java)") do |type|
|
479
486
|
file_type = type.to_sym
|
480
487
|
end
|
481
488
|
|
@@ -494,7 +501,7 @@ e.g: cat-file hello.rb
|
|
494
501
|
next
|
495
502
|
end
|
496
503
|
|
497
|
-
contents = read_between_the_lines.call(file_name, start_line, end_line
|
504
|
+
contents = read_between_the_lines.call(file_name, start_line, end_line)
|
498
505
|
|
499
506
|
if Pry.color
|
500
507
|
contents = syntax_highlight_by_file_type_or_specified.call(contents, file_name, file_type)
|
@@ -503,7 +510,8 @@ e.g: cat-file hello.rb
|
|
503
510
|
if options[:l]
|
504
511
|
contents = add_line_numbers.call(contents, start_line + 1)
|
505
512
|
end
|
506
|
-
|
513
|
+
|
514
|
+
set_file_and_dir_locals.call(file_name)
|
507
515
|
output.puts contents
|
508
516
|
contents
|
509
517
|
end
|
@@ -548,6 +556,8 @@ e.g: eval-file -c self "hello.rb"
|
|
548
556
|
TOPLEVEL_BINDING.eval(File.read(File.expand_path(file_name)))
|
549
557
|
output.puts "--\nEval'd '#{file_name}' at top-level."
|
550
558
|
end
|
559
|
+
set_file_and_dir_locals.call(file_name)
|
560
|
+
|
551
561
|
new_constants = Object.constants - old_constants
|
552
562
|
output.puts "Brought in the following top-level constants: #{new_constants.inspect}" if !new_constants.empty?
|
553
563
|
end
|
@@ -680,6 +690,7 @@ e.g show-doc hello_method
|
|
680
690
|
when :ruby
|
681
691
|
doc = meth.comment
|
682
692
|
doc = strip_leading_hash_and_whitespace_from_ruby_comments.call(doc)
|
693
|
+
set_file_and_dir_locals.call(meth.source_location.first)
|
683
694
|
end
|
684
695
|
|
685
696
|
next output.puts("No documentation found.") if doc.empty?
|
@@ -749,6 +760,7 @@ e.g: show-method hello_method
|
|
749
760
|
code = strip_comments_from_c_code.call(code)
|
750
761
|
when :ruby
|
751
762
|
code = strip_leading_whitespace.call(meth.source)
|
763
|
+
set_file_and_dir_locals.call(meth.source_location.first)
|
752
764
|
end
|
753
765
|
|
754
766
|
output.puts make_header.call(meth, code_type)
|
@@ -778,6 +790,7 @@ e.g: show-method hello_method
|
|
778
790
|
|
779
791
|
code = strip_leading_whitespace.call(meth.source)
|
780
792
|
file, line = meth.source_location
|
793
|
+
set_file_and_dir_locals.call(file)
|
781
794
|
check_for_dynamically_defined_method.call(meth)
|
782
795
|
|
783
796
|
output.puts "--\nFrom #{file} @ line #{line}:\n--"
|
data/lib/pry/hooks.rb
CHANGED
@@ -4,7 +4,7 @@ class Pry
|
|
4
4
|
DEFAULT_HOOKS = {
|
5
5
|
|
6
6
|
:before_session => proc do |out, target|
|
7
|
-
|
7
|
+
# out.puts "Beginning Pry session for #{Pry.view_clip(target.eval('self'))}"
|
8
8
|
|
9
9
|
# ensure we're actually in a method
|
10
10
|
meth_name = target.eval('__method__')
|
@@ -16,6 +16,6 @@ class Pry
|
|
16
16
|
end
|
17
17
|
end,
|
18
18
|
|
19
|
-
:after_session => proc { |out, target| out.puts "Ending Pry session for #{Pry.view_clip(target.eval('self'))}" }
|
19
|
+
# :after_session => proc { |out, target| out.puts "Ending Pry session for #{Pry.view_clip(target.eval('self'))}" }
|
20
20
|
}
|
21
21
|
end
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -142,6 +142,7 @@ class Pry
|
|
142
142
|
def rep(target=TOPLEVEL_BINDING)
|
143
143
|
target = Pry.binding_for(target)
|
144
144
|
result = re(target)
|
145
|
+
|
145
146
|
print.call output, result if !@suppress_output
|
146
147
|
end
|
147
148
|
|
@@ -235,7 +236,7 @@ class Pry
|
|
235
236
|
# @param [String] eval_string The cumulative lines of input.
|
236
237
|
# @target [Binding] target The target of the Pry session.
|
237
238
|
def process_line(val, eval_string, target)
|
238
|
-
val.
|
239
|
+
val.rstrip!
|
239
240
|
Pry.cmd_ret_value = @command_processor.process_commands(val, eval_string, target)
|
240
241
|
|
241
242
|
if Pry.cmd_ret_value
|
data/lib/pry/version.rb
CHANGED
data/test/test.rb
CHANGED
@@ -70,15 +70,17 @@ describe Pry do
|
|
70
70
|
o.instance_variable_get(:@x).should == 10
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
# # this is now deprecated
|
74
|
+
# it 'should execute start session and end session hooks' do
|
75
|
+
# next
|
76
|
+
# input = InputTester.new("exit")
|
77
|
+
# str_output = StringIO.new
|
78
|
+
# o = Object.new
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
80
|
+
# pry_tester = Pry.start(o, :input => input, :output => str_output)
|
81
|
+
# str_output.string.should =~ /Beginning.*#{o}/
|
82
|
+
# str_output.string.should =~ /Ending.*#{o}/
|
83
|
+
# end
|
82
84
|
end
|
83
85
|
|
84
86
|
describe "test loading rc files" do
|
@@ -490,7 +492,7 @@ describe Pry do
|
|
490
492
|
end
|
491
493
|
|
492
494
|
command "run_v" do
|
493
|
-
run "v"
|
495
|
+
run target, "v"
|
494
496
|
end
|
495
497
|
end
|
496
498
|
|
@@ -514,23 +516,26 @@ describe Pry do
|
|
514
516
|
str_output = StringIO.new
|
515
517
|
Pry.new(:print => proc {}, :input => InputTester.new("v"),
|
516
518
|
:output => str_output, :commands => Command4).rep("john")
|
517
|
-
|
519
|
+
|
520
|
+
str_output.string.rstrip.should == "john"
|
518
521
|
|
519
522
|
Object.remove_const(:Command3)
|
520
523
|
Object.remove_const(:Command4)
|
521
524
|
end
|
522
525
|
|
523
526
|
it 'should import commands from another command object' do
|
524
|
-
|
527
|
+
Object.remove_const(:Command77) if Object.const_defined?(:Command77)
|
528
|
+
|
529
|
+
class Command77 < Pry::CommandBase
|
525
530
|
import_from Pry::Commands, "status", "jump-to"
|
526
531
|
end
|
527
532
|
|
528
533
|
str_output = StringIO.new
|
529
534
|
Pry.new(:print => proc {}, :input => InputTester.new("status"),
|
530
|
-
:output => str_output, :commands =>
|
535
|
+
:output => str_output, :commands => Command77).rep("john")
|
531
536
|
str_output.string.should =~ /Status:/
|
532
537
|
|
533
|
-
Object.remove_const(:
|
538
|
+
Object.remove_const(:Command77)
|
534
539
|
end
|
535
540
|
|
536
541
|
it 'should delete some inherited commands when using delete method' do
|
@@ -569,11 +574,11 @@ describe Pry do
|
|
569
574
|
|
570
575
|
str_output = StringIO.new
|
571
576
|
Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => Command3).rep
|
572
|
-
str_output.string.
|
577
|
+
str_output.string.rstrip.should == "jump-to the music"
|
573
578
|
|
574
579
|
str_output = StringIO.new
|
575
580
|
Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => Command3).rep
|
576
|
-
str_output.string.
|
581
|
+
str_output.string.rstrip.should == "help to the music"
|
577
582
|
|
578
583
|
Object.remove_const(:Command3)
|
579
584
|
|
data/test/test_helper.rb
CHANGED