pry 0.8.0pre4-i386-mingw32 → 0.8.0pre5-i386-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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