pry 0.9.8pre7-i386-mswin32 → 0.9.8pre8-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/pry.rb +10 -2
- data/lib/pry/code.rb +8 -1
- data/lib/pry/command.rb +3 -3
- data/lib/pry/command_set.rb +36 -33
- data/lib/pry/config.rb +13 -1
- data/lib/pry/default_commands/context.rb +9 -4
- data/lib/pry/default_commands/documentation.rb +69 -99
- data/lib/pry/default_commands/input.rb +57 -49
- data/lib/pry/default_commands/introspection.rb +20 -15
- data/lib/pry/default_commands/ls.rb +1 -1
- data/lib/pry/default_commands/shell.rb +76 -1
- data/lib/pry/helpers/command_helpers.rb +9 -0
- data/lib/pry/hooks.rb +89 -10
- data/lib/pry/plugins.rb +3 -3
- data/lib/pry/pry_class.rb +6 -4
- data/lib/pry/pry_instance.rb +16 -1
- data/lib/pry/version.rb +1 -1
- data/test/helper.rb +6 -1
- data/test/test_command.rb +17 -17
- data/test/test_command_set.rb +4 -4
- data/test/test_default_commands/test_documentation.rb +20 -8
- data/test/test_default_commands/test_input.rb +71 -32
- data/test/test_default_commands/test_shell.rb +190 -0
- data/test/test_hooks.rb +72 -2
- metadata +76 -70
data/lib/pry/plugins.rb
CHANGED
@@ -9,7 +9,7 @@ class Pry
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def method_missing(*args)
|
12
|
-
|
12
|
+
warn "Warning: The plugin '#{@name}' was not found! (no gem found)"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -45,8 +45,8 @@ class Pry
|
|
45
45
|
begin
|
46
46
|
require gem_name if !active?
|
47
47
|
rescue LoadError => e
|
48
|
-
|
49
|
-
|
48
|
+
warn "Warning: The plugin '#{gem_name}' was not found! (gem found but could not be loaded)"
|
49
|
+
warn e
|
50
50
|
end
|
51
51
|
self.active = true
|
52
52
|
self.enabled = true
|
data/lib/pry/pry_class.rb
CHANGED
@@ -89,7 +89,7 @@ class Pry
|
|
89
89
|
# note these have to be loaded here rather than in pry_instance as
|
90
90
|
# we only want them loaded once per entire Pry lifetime.
|
91
91
|
load_rc if Pry.config.should_load_rc
|
92
|
-
load_plugins if Pry.config.
|
92
|
+
load_plugins if Pry.config.should_load_plugins
|
93
93
|
load_requires if Pry.config.should_load_requires
|
94
94
|
load_history if Pry.config.history.should_load
|
95
95
|
load_traps if Pry.config.should_trap_interrupts
|
@@ -113,7 +113,10 @@ class Pry
|
|
113
113
|
pry_instance = new(options)
|
114
114
|
|
115
115
|
# save backtrace
|
116
|
-
pry_instance.backtrace = caller
|
116
|
+
pry_instance.backtrace = caller
|
117
|
+
|
118
|
+
# if Pry was started via binding.pry, elide that from the backtrace.
|
119
|
+
pry_instance.backtrace.shift if pry_instance.backtrace.first =~ /pry.*core_extensions.*pry/
|
117
120
|
|
118
121
|
# yield the binding_stack to the hook for modification
|
119
122
|
pry_instance.exec_hook(
|
@@ -238,8 +241,7 @@ class Pry
|
|
238
241
|
config.gist ||= OpenStruct.new
|
239
242
|
config.gist.inspecter = proc(&:pretty_inspect)
|
240
243
|
|
241
|
-
config.
|
242
|
-
config.plugins.enabled = true
|
244
|
+
config.should_load_plugins = true
|
243
245
|
|
244
246
|
config.requires ||= []
|
245
247
|
config.should_load_requires = true
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -7,7 +7,6 @@ class Pry
|
|
7
7
|
attr_accessor :commands
|
8
8
|
attr_accessor :print
|
9
9
|
attr_accessor :exception_handler
|
10
|
-
attr_accessor :hooks
|
11
10
|
attr_accessor :input_stack
|
12
11
|
|
13
12
|
attr_accessor :custom_completions
|
@@ -25,6 +24,22 @@ class Pry
|
|
25
24
|
|
26
25
|
attr_accessor :backtrace
|
27
26
|
|
27
|
+
# Special treatment for hooks as we want to alert people of the
|
28
|
+
# changed API
|
29
|
+
attr_reader :hooks
|
30
|
+
|
31
|
+
# FIXME:
|
32
|
+
# This is a hack to alert people of the new API.
|
33
|
+
# @param [Pry::Hooks] v Only accept `Pry::Hooks` now!
|
34
|
+
def hooks=(v)
|
35
|
+
if v.is_a?(Hash)
|
36
|
+
warn "Hash-based hooks are now deprecated! Use a `Pry::Hooks` object instead! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
|
37
|
+
@hooks = Pry::Hooks.from_hash(v)
|
38
|
+
else
|
39
|
+
@hooks = v
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
28
43
|
# Create a new `Pry` object.
|
29
44
|
# @param [Hash] options The optional configuration parameters.
|
30
45
|
# @option options [#readline] :input The object to use for input.
|
data/lib/pry/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -8,6 +8,11 @@ puts "Ruby v#{RUBY_VERSION} (#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}), P
|
|
8
8
|
require 'bacon'
|
9
9
|
require 'open4'
|
10
10
|
|
11
|
+
|
12
|
+
# turn warnings off (esp for Pry::Hooks which will generate warnings
|
13
|
+
# in tests)
|
14
|
+
$VERBOSE = nil
|
15
|
+
|
11
16
|
# Ensure we do not execute any rc files
|
12
17
|
Pry::RC_FILES.clear
|
13
18
|
|
@@ -21,7 +26,7 @@ class << Pry
|
|
21
26
|
Pry.color = false
|
22
27
|
Pry.pager = false
|
23
28
|
Pry.config.should_load_rc = false
|
24
|
-
Pry.config.
|
29
|
+
Pry.config.should_load_plugins = false
|
25
30
|
Pry.config.history.should_load = false
|
26
31
|
Pry.config.history.should_save = false
|
27
32
|
Pry.config.auto_indent = false
|
data/test/test_command.rb
CHANGED
@@ -9,7 +9,7 @@ describe "Pry::Command" do
|
|
9
9
|
describe 'call_safely' do
|
10
10
|
|
11
11
|
it 'should display a message if gems are missing' do
|
12
|
-
cmd = @set.
|
12
|
+
cmd = @set.create_command "ford-prefect", "From a planet near Beetlegeuse", :requires_gem => %w(ghijkl) do
|
13
13
|
#
|
14
14
|
end
|
15
15
|
|
@@ -17,7 +17,7 @@ describe "Pry::Command" do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should abort early if arguments are required' do
|
20
|
-
cmd = @set.
|
20
|
+
cmd = @set.create_command 'arthur-dent', "Doesn't understand Thursdays", :argument_required => true do
|
21
21
|
#
|
22
22
|
end
|
23
23
|
|
@@ -27,7 +27,7 @@ describe "Pry::Command" do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should return VOID without keep_retval' do
|
30
|
-
cmd = @set.
|
30
|
+
cmd = @set.create_command 'zaphod-beeblebrox', "Likes pan-Galactic Gargle Blasters" do
|
31
31
|
def process
|
32
32
|
3
|
33
33
|
end
|
@@ -37,7 +37,7 @@ describe "Pry::Command" do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should return the return value with keep_retval' do
|
40
|
-
cmd = @set.
|
40
|
+
cmd = @set.create_command 'tricia-mcmillian', "a.k.a Trillian", :keep_retval => true do
|
41
41
|
def process
|
42
42
|
5
|
43
43
|
end
|
@@ -47,7 +47,7 @@ describe "Pry::Command" do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should call hooks in the right order' do
|
50
|
-
cmd = @set.
|
50
|
+
cmd = @set.create_command 'marvin', "Pained by the diodes in his left side" do
|
51
51
|
def process
|
52
52
|
output.puts 3 + args[0].to_i
|
53
53
|
end
|
@@ -73,13 +73,13 @@ describe "Pry::Command" do
|
|
73
73
|
|
74
74
|
# TODO: This strikes me as rather silly...
|
75
75
|
it 'should return the value from the last hook with keep_retval' do
|
76
|
-
cmd = @set.
|
76
|
+
cmd = @set.create_command 'slartibartfast', "Designs Fjords", :keep_retval => true do
|
77
77
|
def process
|
78
78
|
22
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
-
@set.after_command 'slartibartfast' do
|
82
|
+
@set.after_command 'slartibartfast' do
|
83
83
|
10
|
84
84
|
end
|
85
85
|
|
@@ -97,7 +97,7 @@ describe "Pry::Command" do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it 'should use slop to generate the help for classy commands' do
|
100
|
-
@set.
|
100
|
+
@set.create_command 'eddie', "The ship-board computer" do
|
101
101
|
def options(opt)
|
102
102
|
opt.banner "Over-cheerful, and makes a ticking noise."
|
103
103
|
end
|
@@ -107,7 +107,7 @@ describe "Pry::Command" do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'should provide --help for classy commands' do
|
110
|
-
cmd = @set.
|
110
|
+
cmd = @set.create_command 'agrajag', "Killed many times by Arthur" do
|
111
111
|
def options(opt)
|
112
112
|
opt.on :r, :retaliate, "Try to get Arthur back"
|
113
113
|
end
|
@@ -117,7 +117,7 @@ describe "Pry::Command" do
|
|
117
117
|
end
|
118
118
|
|
119
119
|
it 'should provide a -h for classy commands' do
|
120
|
-
cmd = @set.
|
120
|
+
cmd = @set.create_command 'zarniwoop', "On an intergalactic cruise, in his office." do
|
121
121
|
def options(opt)
|
122
122
|
opt.on :e, :escape, "Help zaphod escape the Total Perspective Vortex"
|
123
123
|
end
|
@@ -127,7 +127,7 @@ describe "Pry::Command" do
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it 'should use the banner provided' do
|
130
|
-
cmd = @set.
|
130
|
+
cmd = @set.create_command 'deep-thought', "The second-best computer ever" do
|
131
131
|
banner <<-BANNER
|
132
132
|
Who's merest operational parameters, I am not worthy to compute.
|
133
133
|
BANNER
|
@@ -148,7 +148,7 @@ describe "Pry::Command" do
|
|
148
148
|
}
|
149
149
|
|
150
150
|
it 'should capture lots of stuff from the hash passed to new before setup' do
|
151
|
-
cmd = @set.
|
151
|
+
cmd = @set.create_command 'fenchurch', "Floats slightly off the ground" do
|
152
152
|
define_method(:setup) do
|
153
153
|
self.context.should == context
|
154
154
|
target.should == context[:target]
|
@@ -170,7 +170,7 @@ describe "Pry::Command" do
|
|
170
170
|
describe 'classy api' do
|
171
171
|
|
172
172
|
it 'should call setup, then options, then process' do
|
173
|
-
cmd = @set.
|
173
|
+
cmd = @set.create_command 'rooster', "Has a tasty towel" do
|
174
174
|
def setup
|
175
175
|
output.puts "setup"
|
176
176
|
end
|
@@ -188,7 +188,7 @@ describe "Pry::Command" do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
it 'should raise a command error if process is not overridden' do
|
191
|
-
cmd = @set.
|
191
|
+
cmd = @set.create_command 'jeltz', "Commander of a Vogon constructor fleet" do
|
192
192
|
def proccces
|
193
193
|
#
|
194
194
|
end
|
@@ -200,7 +200,7 @@ describe "Pry::Command" do
|
|
200
200
|
end
|
201
201
|
|
202
202
|
it 'should work if neither options, nor setup is overridden' do
|
203
|
-
cmd = @set.
|
203
|
+
cmd = @set.create_command 'wowbagger', "Immortal, insulting.", :keep_retval => true do
|
204
204
|
def process
|
205
205
|
5
|
206
206
|
end
|
@@ -210,7 +210,7 @@ describe "Pry::Command" do
|
|
210
210
|
end
|
211
211
|
|
212
212
|
it 'should provide opts and args as provided by slop' do
|
213
|
-
cmd = @set.
|
213
|
+
cmd = @set.create_command 'lintilla', "One of 800,000,000 clones" do
|
214
214
|
def options(opt)
|
215
215
|
opt.on :f, :four, "A numeric four", :as => Integer, :optional => true
|
216
216
|
end
|
@@ -225,7 +225,7 @@ describe "Pry::Command" do
|
|
225
225
|
end
|
226
226
|
|
227
227
|
it 'should allow overriding options after definition' do
|
228
|
-
cmd = @set.
|
228
|
+
cmd = @set.create_command /number-(one|two)/, "Lieutenants of the Golgafrinchan Captain", :shellwords => false do
|
229
229
|
|
230
230
|
command_options :listing => 'number-one'
|
231
231
|
end
|
data/test/test_command_set.rb
CHANGED
@@ -501,7 +501,7 @@ describe Pry::CommandSet do
|
|
501
501
|
end
|
502
502
|
|
503
503
|
it 'should return Result.new(true, VOID) if the command is not keep_retval' do
|
504
|
-
@set.
|
504
|
+
@set.create_command('mrs-cake') do
|
505
505
|
def process; 42; end
|
506
506
|
end
|
507
507
|
|
@@ -512,7 +512,7 @@ describe Pry::CommandSet do
|
|
512
512
|
end
|
513
513
|
|
514
514
|
it 'should return Result.new(true, retval) if the command is keep_retval' do
|
515
|
-
@set.
|
515
|
+
@set.create_command('magrat', 'the maiden', :keep_retval => true) do
|
516
516
|
def process; 42; end
|
517
517
|
end
|
518
518
|
|
@@ -529,7 +529,7 @@ describe Pry::CommandSet do
|
|
529
529
|
:output => StringIO.new,
|
530
530
|
:target => binding
|
531
531
|
}
|
532
|
-
@set.
|
532
|
+
@set.create_command('agnes') do
|
533
533
|
define_method(:process) do
|
534
534
|
eval_string.should == ctx[:eval_string]
|
535
535
|
output.should == ctx[:output]
|
@@ -543,7 +543,7 @@ describe Pry::CommandSet do
|
|
543
543
|
|
544
544
|
it 'should add command_set to context' do
|
545
545
|
set = @set
|
546
|
-
@set.
|
546
|
+
@set.create_command(/nann+y ogg+/) do
|
547
547
|
define_method(:process) do
|
548
548
|
command_set.should == set
|
549
549
|
end
|
@@ -3,29 +3,41 @@ require 'helper'
|
|
3
3
|
describe "Pry::DefaultCommands::Documentation" do
|
4
4
|
describe "show-doc" do
|
5
5
|
it 'should output a method\'s documentation' do
|
6
|
-
str_output
|
7
|
-
redirect_pry_io(InputTester.new("show-doc sample_method", "exit-all"), str_output) do
|
6
|
+
redirect_pry_io(InputTester.new("show-doc sample_method", "exit-all"), str_output=StringIO.new) do
|
8
7
|
pry
|
9
8
|
end
|
10
9
|
|
11
10
|
str_output.string.should =~ /sample doc/
|
12
11
|
end
|
13
12
|
|
14
|
-
it 'should output a method\'s documentation
|
15
|
-
|
13
|
+
it 'should output a method\'s documentation with line numbers' do
|
14
|
+
redirect_pry_io(InputTester.new("show-doc sample_method -l", "exit-all"), str_output=StringIO.new) do
|
15
|
+
pry
|
16
|
+
end
|
17
|
+
|
18
|
+
str_output.string.should =~ /\d: sample doc/
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should output a method\'s documentation with line numbers (base one)' do
|
22
|
+
redirect_pry_io(InputTester.new("show-doc sample_method -b", "exit-all"), str_output=StringIO.new) do
|
23
|
+
pry
|
24
|
+
end
|
25
|
+
|
26
|
+
str_output.string.should =~ /1: sample doc/
|
27
|
+
end
|
16
28
|
|
29
|
+
it 'should output a method\'s documentation if inside method without needing to use method name' do
|
17
30
|
o = Object.new
|
18
31
|
|
19
32
|
# sample comment
|
20
33
|
def o.sample
|
21
|
-
redirect_pry_io(InputTester.new("show-doc", "exit-all"), $
|
34
|
+
redirect_pry_io(InputTester.new("show-doc", "exit-all"), $out=StringIO.new) do
|
22
35
|
binding.pry
|
23
36
|
end
|
24
37
|
end
|
25
38
|
o.sample
|
26
|
-
|
27
|
-
$
|
28
|
-
$str_output = nil
|
39
|
+
$out.string.should =~ /sample comment/
|
40
|
+
$out = nil
|
29
41
|
end
|
30
42
|
|
31
43
|
it "should be able to find super methods" do
|
@@ -170,59 +170,93 @@ describe "Pry::DefaultCommands::Input" do
|
|
170
170
|
str_output.string.should.not =~ /goodbye/
|
171
171
|
end
|
172
172
|
|
173
|
+
it 'should play documentation with the -d switch' do
|
174
|
+
o = Object.new
|
175
|
+
|
176
|
+
# @v = 10
|
177
|
+
# @y = 20
|
178
|
+
def o.test_method
|
179
|
+
:test_method_content
|
180
|
+
end
|
181
|
+
|
182
|
+
redirect_pry_io(InputTester.new('play -d test_method', "exit-all"), str_output = StringIO.new) do
|
183
|
+
o.pry
|
184
|
+
end
|
185
|
+
|
186
|
+
o.instance_variable_get(:@v).should == 10
|
187
|
+
o.instance_variable_get(:@y).should == 20
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'should play documentation with the -d switch (restricted by --lines)' do
|
191
|
+
o = Object.new
|
192
|
+
|
193
|
+
# @x = 0
|
194
|
+
# @v = 10
|
195
|
+
# @y = 20
|
196
|
+
# @z = 30
|
197
|
+
def o.test_method
|
198
|
+
:test_method_content
|
199
|
+
end
|
200
|
+
|
201
|
+
redirect_pry_io(InputTester.new('play -d test_method --lines 2..3', "exit-all"), str_output = StringIO.new) do
|
202
|
+
o.pry
|
203
|
+
end
|
204
|
+
|
205
|
+
o.instance_variable_get(:@x).should == nil
|
206
|
+
o.instance_variable_get(:@z).should == nil
|
207
|
+
o.instance_variable_get(:@v).should == 10
|
208
|
+
o.instance_variable_get(:@y).should == 20
|
209
|
+
end
|
210
|
+
|
211
|
+
|
173
212
|
it 'should play a method with the -m switch (a single line)' do
|
174
|
-
|
175
|
-
def
|
213
|
+
o = Object.new
|
214
|
+
def o.test_method
|
176
215
|
:test_method_content
|
177
216
|
end
|
178
217
|
|
179
|
-
redirect_pry_io(InputTester.new('play -m
|
180
|
-
pry
|
218
|
+
redirect_pry_io(InputTester.new('play -m test_method --lines 2', "exit-all"), str_output = StringIO.new) do
|
219
|
+
o.pry
|
181
220
|
end
|
182
221
|
|
183
222
|
str_output.string.should =~ /:test_method_content/
|
184
|
-
$o = nil
|
185
223
|
end
|
186
224
|
|
187
225
|
it 'should APPEND to the input buffer when playing a line with play -m, not replace it' do
|
188
|
-
|
189
|
-
def
|
226
|
+
o = Object.new
|
227
|
+
def o.test_method
|
190
228
|
:test_method_content
|
191
229
|
end
|
192
230
|
|
193
|
-
redirect_pry_io(InputTester.new('def another_test_method', 'play -m
|
194
|
-
pry
|
231
|
+
redirect_pry_io(InputTester.new('def another_test_method', 'play -m test_method --lines 2', 'show-input', 'exit-all'), str_output = StringIO.new) do
|
232
|
+
o.pry
|
195
233
|
end
|
196
234
|
str_output.string.should =~ /def another_test_method/
|
197
235
|
str_output.string.should =~ /:test_method_content/
|
198
|
-
$o = nil
|
199
236
|
end
|
200
237
|
|
201
238
|
|
202
239
|
it 'should play a method with the -m switch (multiple line)' do
|
203
|
-
|
204
|
-
class << $o
|
205
|
-
attr_accessor :var1, :var2
|
206
|
-
end
|
240
|
+
o = Object.new
|
207
241
|
|
208
|
-
def
|
242
|
+
def o.test_method
|
243
|
+
@var0 = 10
|
209
244
|
@var1 = 20
|
210
245
|
@var2 = 30
|
246
|
+
@var3 = 40
|
211
247
|
end
|
212
248
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
redirect_pry_io(InputTester.new('play -m $o.test_method --lines 2..3', "exit-all"), str_output = StringIO.new) do
|
217
|
-
b.pry
|
249
|
+
redirect_pry_io(InputTester.new('play -m test_method --lines 3..4', "exit-all"), str_output = StringIO.new) do
|
250
|
+
o.pry
|
218
251
|
end
|
219
252
|
|
220
|
-
|
221
|
-
|
253
|
+
o.instance_variable_get(:@var0).should == nil
|
254
|
+
o.instance_variable_get(:@var1).should == 20
|
255
|
+
o.instance_variable_get(:@var2).should == 30
|
256
|
+
o.instance_variable_get(:@var3).should == nil
|
222
257
|
str_output.string.should =~ /30/
|
223
258
|
str_output.string.should.not =~ /20/
|
224
259
|
end
|
225
|
-
|
226
260
|
end
|
227
261
|
|
228
262
|
describe "hist" do
|
@@ -242,24 +276,29 @@ describe "Pry::DefaultCommands::Input" do
|
|
242
276
|
end
|
243
277
|
|
244
278
|
it 'should replay history correctly (single item)' do
|
245
|
-
|
246
|
-
@hist.push "
|
247
|
-
@hist.push "
|
279
|
+
o = Object.new
|
280
|
+
@hist.push "@x = 10"
|
281
|
+
@hist.push "@y = 20"
|
282
|
+
@hist.push "@z = 30"
|
248
283
|
str_output = StringIO.new
|
249
284
|
redirect_pry_io(InputTester.new("hist --replay -1", "exit-all"), str_output) do
|
250
|
-
pry
|
285
|
+
o.pry
|
251
286
|
end
|
252
|
-
|
287
|
+
o.instance_variable_get(:@x).should == nil
|
288
|
+
o.instance_variable_get(:@y).should == nil
|
289
|
+
o.instance_variable_get(:@z).should == 30
|
253
290
|
end
|
254
291
|
|
255
292
|
it 'should replay a range of history correctly (range of items)' do
|
256
|
-
|
257
|
-
@hist.push "
|
293
|
+
o = Object.new
|
294
|
+
@hist.push "@x = 10"
|
295
|
+
@hist.push "@y = 20"
|
258
296
|
str_output = StringIO.new
|
259
297
|
redirect_pry_io(InputTester.new("hist --replay 0..2", "exit-all"), str_output) do
|
260
|
-
pry
|
298
|
+
o.pry
|
261
299
|
end
|
262
|
-
|
300
|
+
o.instance_variable_get(:@x).should == 10
|
301
|
+
o.instance_variable_get(:@y).should == 20
|
263
302
|
end
|
264
303
|
|
265
304
|
it 'should grep for correct lines in history' do
|