pry 0.9.11.4 → 0.9.12pre1
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/.travis.yml +2 -0
- data/Rakefile +4 -0
- data/lib/pry.rb +1 -1
- data/lib/pry/cli.rb +14 -8
- data/lib/pry/code.rb +3 -3
- data/lib/pry/command.rb +20 -5
- data/lib/pry/command_set.rb +3 -3
- data/lib/pry/commands.rb +1 -1
- data/lib/pry/commands/disabled_commands.rb +2 -0
- data/lib/pry/commands/ls.rb +1 -2
- data/lib/pry/commands/reload_code.rb +8 -1
- data/lib/pry/commands/show_info.rb +27 -4
- data/lib/pry/commands/show_source.rb +2 -1
- data/lib/pry/commands/whereami.rb +87 -19
- data/lib/pry/completion.rb +7 -4
- data/lib/pry/helpers/base_helpers.rb +5 -2
- data/lib/pry/helpers/command_helpers.rb +3 -1
- data/lib/pry/helpers/documentation_helpers.rb +18 -7
- data/lib/pry/helpers/table.rb +4 -4
- data/lib/pry/indent.rb +2 -7
- data/lib/pry/method.rb +89 -129
- data/lib/pry/method/disowned.rb +53 -0
- data/lib/pry/method/weird_method_locator.rb +186 -0
- data/lib/pry/module_candidate.rb +3 -3
- data/lib/pry/pager.rb +13 -11
- data/lib/pry/pry_class.rb +10 -3
- data/lib/pry/terminal.rb +73 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +51 -1
- data/spec/command_helpers_spec.rb +21 -1
- data/spec/commands/ls_spec.rb +4 -0
- data/spec/commands/show_doc_spec.rb +28 -28
- data/spec/commands/show_source_spec.rb +70 -22
- data/spec/commands/whereami_spec.rb +60 -11
- data/spec/documentation_helper_spec.rb +73 -0
- data/spec/fixtures/whereami_helper.rb +6 -0
- data/spec/helpers/table_spec.rb +19 -0
- data/spec/method_spec.rb +24 -7
- metadata +13 -7
- data/lib/pry/commands/deprecated_commands.rb +0 -2
- data/lib/pry/terminal_info.rb +0 -48
data/spec/commands/ls_spec.rb
CHANGED
|
@@ -93,6 +93,10 @@ describe "ls" do
|
|
|
93
93
|
"ls Module.new{ def shinanagarns; 4; end; public :shinanagarns }")
|
|
94
94
|
output.should =~ /shinanagarns/
|
|
95
95
|
end
|
|
96
|
+
|
|
97
|
+
it "should behave normally when invoked on Module itself" do
|
|
98
|
+
pry_eval("ls Module").should.not =~ /Pry/
|
|
99
|
+
end
|
|
96
100
|
end
|
|
97
101
|
|
|
98
102
|
describe "constants" do
|
|
@@ -279,34 +279,34 @@ if !PryTestHelpers.mri18_and_no_real_source_location?
|
|
|
279
279
|
|
|
280
280
|
# FIXME: THis is nto a good spec anyway, because i dont think it
|
|
281
281
|
# SHOULD skip!
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
282
|
+
describe "should skip over broken modules" do
|
|
283
|
+
before do
|
|
284
|
+
module TestHost
|
|
285
|
+
# hello
|
|
286
|
+
module M
|
|
287
|
+
binding.eval("def a; end", "dummy.rb", 1)
|
|
288
|
+
binding.eval("def b; end", "dummy.rb", 2)
|
|
289
|
+
binding.eval("def c; end", "dummy.rb", 3)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# goodbye
|
|
293
|
+
module M
|
|
294
|
+
def d; end
|
|
295
|
+
def e; end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
after do
|
|
301
|
+
Object.remove_const(:TestHost)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it 'should return doc for first valid module' do
|
|
305
|
+
result = pry_eval("show-doc TestHost::M")
|
|
306
|
+
result.should =~ /goodbye/
|
|
307
|
+
result.should.not =~ /hello/
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
310
|
end
|
|
311
311
|
|
|
312
312
|
describe "on commands" do
|
|
@@ -491,7 +491,7 @@ if !PryTestHelpers.mri18_and_no_real_source_location?
|
|
|
491
491
|
proc {
|
|
492
492
|
pry_eval(TestHost::C, 'show-source')
|
|
493
493
|
}.should.raise(Pry::CommandError).
|
|
494
|
-
message.should =~ /
|
|
494
|
+
message.should =~ /Couldn't locate/
|
|
495
495
|
end
|
|
496
496
|
|
|
497
497
|
it 'should display method code (rather than class) if Pry started inside method binding' do
|
|
@@ -535,14 +535,11 @@ if !PryTestHelpers.mri18_and_no_real_source_location?
|
|
|
535
535
|
Object.remove_const(:BabyDuck)
|
|
536
536
|
end
|
|
537
537
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
# out.should.not =~ /def a; end/
|
|
544
|
-
# end
|
|
545
|
-
|
|
538
|
+
it 'should return source for first valid module' do
|
|
539
|
+
out = pry_eval('show-source BabyDuck::Muesli')
|
|
540
|
+
out.should =~ /def d; end/
|
|
541
|
+
out.should.not =~ /def a; end/
|
|
542
|
+
end
|
|
546
543
|
end
|
|
547
544
|
end
|
|
548
545
|
end
|
|
@@ -560,28 +557,79 @@ if !PryTestHelpers.mri18_and_no_real_source_location?
|
|
|
560
557
|
Pry.config.commands = @oldset
|
|
561
558
|
end
|
|
562
559
|
|
|
563
|
-
|
|
564
|
-
|
|
560
|
+
describe "block commands" do
|
|
561
|
+
it 'should show source for an ordinary command' do
|
|
562
|
+
@set.command "foo", :body_of_foo do; end
|
|
565
563
|
|
|
566
|
-
|
|
567
|
-
|
|
564
|
+
pry_eval('show-source foo').should =~ /:body_of_foo/
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
it "should output source of commands using special characters" do
|
|
568
|
+
@set.command "!%$", "I gots the yellow fever" do; end
|
|
569
|
+
|
|
570
|
+
pry_eval('show-source !%$').should =~ /yellow fever/
|
|
571
|
+
end
|
|
568
572
|
|
|
569
|
-
|
|
570
|
-
|
|
573
|
+
it 'should show source for a command with spaces in its name' do
|
|
574
|
+
@set.command "foo bar", :body_of_foo_bar do; end
|
|
571
575
|
|
|
572
|
-
|
|
576
|
+
pry_eval('show-source foo bar').should =~ /:body_of_foo_bar/
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
it 'should show source for a command by listing name' do
|
|
580
|
+
@set.command /foo(.*)/, :body_of_foo_bar_regex, :listing => "bar" do; end
|
|
581
|
+
|
|
582
|
+
pry_eval('show-source bar').should =~ /:body_of_foo_bar_regex/
|
|
583
|
+
end
|
|
573
584
|
end
|
|
574
585
|
|
|
575
|
-
|
|
576
|
-
|
|
586
|
+
describe "create_command commands" do
|
|
587
|
+
it 'should show source for a command' do
|
|
588
|
+
@set.create_command "foo", "babble" do
|
|
589
|
+
def process() :body_of_foo end
|
|
590
|
+
end
|
|
591
|
+
pry_eval('show-source foo').should =~ /:body_of_foo/
|
|
592
|
+
end
|
|
577
593
|
|
|
578
|
-
|
|
594
|
+
it 'should show source for a command defined inside pry' do
|
|
595
|
+
pry_eval %{
|
|
596
|
+
_pry_.commands.create_command "foo", "babble" do
|
|
597
|
+
def process() :body_of_foo end
|
|
598
|
+
end
|
|
599
|
+
}
|
|
600
|
+
pry_eval('show-source foo').should =~ /:body_of_foo/
|
|
601
|
+
end
|
|
579
602
|
end
|
|
580
603
|
|
|
581
|
-
|
|
582
|
-
|
|
604
|
+
describe "real class-based commands" do
|
|
605
|
+
before do
|
|
606
|
+
class ::TemporaryCommand < Pry::ClassCommand
|
|
607
|
+
match 'temp-command'
|
|
608
|
+
def process() :body_of_temp end
|
|
609
|
+
end
|
|
583
610
|
|
|
584
|
-
|
|
611
|
+
Pry.commands.add_command(::TemporaryCommand)
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
after do
|
|
615
|
+
Object.remove_const(:TemporaryCommand)
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
it 'should show source for a command' do
|
|
619
|
+
pry_eval('show-source temp-command').should =~ /:body_of_temp/
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
it 'should show source for a command defined inside pry' do
|
|
623
|
+
pry_eval %{
|
|
624
|
+
class ::TemporaryCommandInPry < Pry::ClassCommand
|
|
625
|
+
match 'temp-command-in-pry'
|
|
626
|
+
def process() :body_of_temp end
|
|
627
|
+
end
|
|
628
|
+
}
|
|
629
|
+
Pry.commands.add_command(::TemporaryCommandInPry)
|
|
630
|
+
pry_eval('show-source temp-command-in-pry').should =~ /:body_of_temp/
|
|
631
|
+
Object.remove_const(:TemporaryCommandInPry)
|
|
632
|
+
end
|
|
585
633
|
end
|
|
586
634
|
end
|
|
587
635
|
|
|
@@ -63,7 +63,6 @@ describe "whereami" do
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
Cor.instance_method(:blimey!).source.should =~ /pry_eval/
|
|
66
|
-
|
|
67
66
|
Cor.new.blimey!.should =~ /Cor#blimey!.*Look at me/m
|
|
68
67
|
Object.remove_const(:Cor)
|
|
69
68
|
end
|
|
@@ -85,26 +84,76 @@ describe "whereami" do
|
|
|
85
84
|
Object.remove_const(:Cor)
|
|
86
85
|
end
|
|
87
86
|
|
|
88
|
-
|
|
87
|
+
# Now that we use stagger_output (paging output) we no longer get
|
|
88
|
+
# the "From: " line, as we output everything in one go (not separate output.puts)
|
|
89
|
+
# and so the user just gets a single `Error: Cannot open
|
|
90
|
+
# "not.found.file.erb" for reading.`
|
|
91
|
+
# which is good enough IMO. Unfortunately we can't test for it
|
|
92
|
+
# though, as we don't hook stdout.
|
|
93
|
+
#
|
|
94
|
+
# it 'should display a description and error if reading the file goes wrong' do
|
|
95
|
+
# class Cor
|
|
96
|
+
# def blimey!
|
|
97
|
+
# eval <<-END, binding, "not.found.file.erb", 7
|
|
98
|
+
# Pad.tester = pry_tester(binding)
|
|
99
|
+
# Pad.tester.eval('whereami')
|
|
100
|
+
# END
|
|
101
|
+
# end
|
|
102
|
+
# end
|
|
103
|
+
|
|
104
|
+
# proc { Cor.new.blimey! }.should.raise(MethodSource::SourceNotFoundError)
|
|
105
|
+
|
|
106
|
+
# Pad.tester.last_output.should =~
|
|
107
|
+
# /From: not.found.file.erb @ line 7 Cor#blimey!:/
|
|
108
|
+
# Object.remove_const(:Cor)
|
|
109
|
+
# end
|
|
110
|
+
|
|
111
|
+
it 'should show code window (not just method source) if parameter passed to whereami' do
|
|
89
112
|
class Cor
|
|
90
113
|
def blimey!
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
114
|
+
pry_eval(binding, 'whereami 3').should =~ /class Cor/
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
Cor.new.blimey!
|
|
118
|
+
Object.remove_const(:Cor)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'should show entire method when -m option used' do
|
|
122
|
+
old_size, Pry.config.default_window_size = Pry.config.default_window_size, 1
|
|
123
|
+
old_cutoff, Pry::Command::Whereami.method_size_cutoff = Pry::Command::Whereami.method_size_cutoff, 1
|
|
124
|
+
class Cor
|
|
125
|
+
def blimey!
|
|
126
|
+
1
|
|
127
|
+
2
|
|
128
|
+
pry_eval(binding, 'whereami -m').should =~ /def blimey/
|
|
95
129
|
end
|
|
96
130
|
end
|
|
131
|
+
Pry::Command::Whereami.method_size_cutoff, Pry.config.default_window_size = old_cutoff, old_size
|
|
132
|
+
Cor.new.blimey!
|
|
133
|
+
Object.remove_const(:Cor)
|
|
134
|
+
end
|
|
97
135
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
136
|
+
it 'should show entire file when -f option used' do
|
|
137
|
+
class Cor
|
|
138
|
+
def blimey!
|
|
139
|
+
1
|
|
140
|
+
2
|
|
141
|
+
pry_eval(binding, 'whereami -f').should =~ /show entire file when -f option used/
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
Cor.new.blimey!
|
|
101
145
|
Object.remove_const(:Cor)
|
|
102
146
|
end
|
|
103
147
|
|
|
104
|
-
it 'should show
|
|
148
|
+
it 'should show class when -c option used, and locate correct candidate' do
|
|
149
|
+
require 'fixtures/whereami_helper'
|
|
105
150
|
class Cor
|
|
106
151
|
def blimey!
|
|
107
|
-
|
|
152
|
+
1
|
|
153
|
+
2
|
|
154
|
+
out = pry_eval(binding, 'whereami -c')
|
|
155
|
+
out.should =~ /class Cor/
|
|
156
|
+
out.should =~ /blimey/
|
|
108
157
|
end
|
|
109
158
|
end
|
|
110
159
|
Cor.new.blimey!
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
describe Pry::Helpers::DocumentationHelpers do
|
|
4
|
+
before do
|
|
5
|
+
@helper = Pry::Helpers::DocumentationHelpers
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe "get_comment_content" do
|
|
9
|
+
it "should strip off the hash and unindent" do
|
|
10
|
+
@helper.get_comment_content(" # hello\n # world\n").should == "hello\nworld\n"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should strip out leading lines of hashes" do
|
|
14
|
+
@helper.get_comment_content("###############\n#hello\n#world\n").should == "hello\nworld\n"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should remove shebangs" do
|
|
18
|
+
@helper.get_comment_content("#!/usr/bin/env ruby\n# This is a program\n").should == "This is a program\n"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should unindent past separators" do
|
|
22
|
+
@helper.get_comment_content(" # Copyright Me <me@cirw.in>\n #--\n # So there.\n").should == "Copyright Me <me@cirw.in>\n--\nSo there.\n"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "process_rdoc" do
|
|
27
|
+
before do
|
|
28
|
+
Pry.color = true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
after do
|
|
32
|
+
Pry.color = false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should syntax highlight indented code" do
|
|
36
|
+
@helper.process_rdoc(" 4 + 4\n").should.not == " 4 + 4\n"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should highlight words surrounded by +s" do
|
|
40
|
+
@helper.process_rdoc("the +parameter+").should =~ /the \e.*parameter\e.*/
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should syntax highlight things in backticks" do
|
|
44
|
+
@helper.process_rdoc("for `Example`").should =~ /for `\e.*Example\e.*`/
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should emphasise em tags" do
|
|
48
|
+
@helper.process_rdoc("for <em>science</em>").should == "for \e[1mscience\e[0m"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should emphasise italic tags" do
|
|
52
|
+
@helper.process_rdoc("for <i>science</i>").should == "for \e[1mscience\e[0m"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should syntax highlight code in <code>" do
|
|
56
|
+
@helper.process_rdoc("for <code>Example</code>").should =~ /for \e.*Example\e.*/
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should not double-highlight backticks inside indented code" do
|
|
60
|
+
@helper.process_rdoc(" `echo 5`").should =~ /echo 5/
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should not remove ++" do
|
|
64
|
+
@helper.process_rdoc("--\n comment in a bubble\n++").should =~ /\+\+/
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should do nothing if Pry.color is false" do
|
|
68
|
+
Pry.color = false
|
|
69
|
+
@helper.process_rdoc(" 4 + 4\n").should == " 4 + 4\n"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
data/spec/helpers/table_spec.rb
CHANGED
|
@@ -80,6 +80,25 @@ asfadsssaaad fasfaafdssd s
|
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
+
describe 'line length is smaller than the length of the longest word' do
|
|
84
|
+
before do
|
|
85
|
+
element = 'swizzle'
|
|
86
|
+
@elem_len = element.length
|
|
87
|
+
@out = [element, 'crime', 'fun']
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should not raise error' do
|
|
91
|
+
should.not.raise(FloatDomainError) {
|
|
92
|
+
Pry::Helpers.tablify(@out, @elem_len - 1)
|
|
93
|
+
}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should format output as one column' do
|
|
97
|
+
table = Pry::Helpers.tablify(@out, @elem_len - 1).to_s
|
|
98
|
+
table.should == "swizzle\ncrime \nfun "
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
83
102
|
describe 'decide between one-line or indented output' do
|
|
84
103
|
Pry::Helpers.tablify_or_one_line('head', %w(ing)).should == 'head: ing'
|
|
85
104
|
end
|
data/spec/method_spec.rb
CHANGED
|
@@ -95,27 +95,29 @@ describe Pry::Method do
|
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it "should find methods that have been undef'd" do
|
|
98
|
-
|
|
98
|
+
c = Class.new do
|
|
99
99
|
def self.bar
|
|
100
100
|
class << self; undef bar; end
|
|
101
101
|
binding
|
|
102
102
|
end
|
|
103
|
-
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
m = Pry::Method.from_binding(c.bar)
|
|
104
106
|
m.name.should == "bar"
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
# Our source_location trick doesn't work, due to https://github.com/rubinius/rubinius/issues/953
|
|
108
110
|
unless Pry::Helpers::BaseHelpers.rbx?
|
|
109
|
-
|
|
110
|
-
a = Class.new{ def
|
|
111
|
-
b = Class.new(a){ def
|
|
111
|
+
it 'should find the super method correctly' do
|
|
112
|
+
a = Class.new{ def gag33; binding; end; def self.line; __LINE__; end }
|
|
113
|
+
b = Class.new(a){ def gag33; super; end }
|
|
112
114
|
|
|
113
|
-
g = b.new.
|
|
115
|
+
g = b.new.gag33
|
|
114
116
|
m = Pry::Method.from_binding(g)
|
|
115
117
|
|
|
116
118
|
m.owner.should == a
|
|
117
119
|
m.source_line.should == a.line
|
|
118
|
-
m.name.should == "
|
|
120
|
+
m.name.should == "gag33"
|
|
119
121
|
end
|
|
120
122
|
end
|
|
121
123
|
|
|
@@ -140,6 +142,21 @@ describe Pry::Method do
|
|
|
140
142
|
m.source_line.should == a.line
|
|
141
143
|
end
|
|
142
144
|
end
|
|
145
|
+
|
|
146
|
+
it 'should find the right method even if it was renamed and replaced' do
|
|
147
|
+
o = Object.new
|
|
148
|
+
class << o
|
|
149
|
+
def borscht
|
|
150
|
+
"nips"
|
|
151
|
+
binding
|
|
152
|
+
end
|
|
153
|
+
alias paella borscht
|
|
154
|
+
def borscht() paella end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
m = Pry::Method.from_binding(o.borscht)
|
|
158
|
+
m.source.should == Pry::Method(o.method(:paella)).source
|
|
159
|
+
end
|
|
143
160
|
end
|
|
144
161
|
|
|
145
162
|
describe 'super' do
|