pry 0.8.0pre9-i386-mswin32 → 0.8.1-i386-mswin32
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/README.markdown +385 -201
- data/Rakefile +2 -1
- data/bin/pry +24 -39
- data/lib/pry.rb +7 -1
- data/lib/pry/command_base.rb +14 -15
- data/lib/pry/command_base_helpers.rb +149 -18
- data/lib/pry/command_helpers.rb +37 -13
- data/lib/pry/command_processor.rb +20 -10
- data/lib/pry/commands.rb +285 -199
- data/lib/pry/completion.rb +1 -1
- data/lib/pry/hooks.rb +2 -6
- data/lib/pry/print.rb +10 -13
- data/lib/pry/prompts.rb +3 -3
- data/lib/pry/pry_class.rb +23 -18
- data/lib/pry/pry_instance.rb +44 -29
- data/lib/pry/version.rb +1 -1
- data/test/test.rb +114 -47
- metadata +113 -103
- data/lib/pry/TAGS +0 -62
data/lib/pry/completion.rb
CHANGED
data/lib/pry/hooks.rb
CHANGED
@@ -2,20 +2,16 @@ class Pry
|
|
2
2
|
|
3
3
|
# The default hooks - display messages when beginning and ending Pry sessions.
|
4
4
|
DEFAULT_HOOKS = {
|
5
|
-
|
6
|
-
:before_session => proc do |out, target|
|
7
|
-
# out.puts "Beginning Pry session for #{Pry.view_clip(target.eval('self'))}"
|
8
5
|
|
6
|
+
:before_session => proc do |out, target|
|
9
7
|
# ensure we're actually in a method
|
10
8
|
meth_name = target.eval('__method__')
|
11
9
|
file = target.eval('__FILE__')
|
12
10
|
|
13
11
|
# /unknown/ for rbx
|
14
|
-
if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != ""
|
12
|
+
if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != "" && file != "-e"
|
15
13
|
Pry.run_command "whereami 5", :output => out, :show_output => true, :context => target, :commands => Pry::Commands
|
16
14
|
end
|
17
15
|
end,
|
18
|
-
|
19
|
-
# :after_session => proc { |out, target| out.puts "Ending Pry session for #{Pry.view_clip(target.eval('self'))}" }
|
20
16
|
}
|
21
17
|
end
|
data/lib/pry/print.rb
CHANGED
@@ -1,19 +1,16 @@
|
|
1
1
|
class Pry
|
2
|
-
|
3
|
-
# The default print object - only show first line of backtrace and
|
4
|
-
# prepend output with `=>`
|
5
2
|
DEFAULT_PRINT = proc do |output, value|
|
6
|
-
|
7
|
-
|
8
|
-
output.puts "#{value.class}: #{value.message}"
|
9
|
-
output.puts "from #{value.backtrace.first}"
|
3
|
+
if Pry.color
|
4
|
+
output.puts "=> #{CodeRay.scan(Pry.view(value), :ruby).term}"
|
10
5
|
else
|
11
|
-
|
12
|
-
output.puts "=> #{CodeRay.scan(Pry.view(value), :ruby).term}"
|
13
|
-
else
|
14
|
-
output.puts "=> #{Pry.view(value)}"
|
15
|
-
end
|
6
|
+
output.puts "=> #{Pry.view(value)}"
|
16
7
|
end
|
17
8
|
end
|
9
|
+
|
10
|
+
# Will only show the first line of the backtrace
|
11
|
+
DEFAULT_EXCEPTION_HANDLER = proc do |output, exception|
|
12
|
+
output.puts "#{exception.class}: #{exception.message}"
|
13
|
+
output.puts "from #{exception.backtrace.first}"
|
14
|
+
end
|
18
15
|
end
|
19
|
-
|
16
|
+
|
data/lib/pry/prompts.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Pry
|
2
2
|
|
3
|
-
|
3
|
+
|
4
4
|
# The default prompt; includes the target and nesting level
|
5
5
|
DEFAULT_PROMPT = [
|
6
6
|
proc do |target_self, nest_level|
|
@@ -11,7 +11,7 @@ class Pry
|
|
11
11
|
"pry(#{Pry.view_clip(target_self)}):#{Pry.view_clip(nest_level)}> "
|
12
12
|
end
|
13
13
|
end,
|
14
|
-
|
14
|
+
|
15
15
|
proc do |target_self, nest_level|
|
16
16
|
if nest_level == 0
|
17
17
|
"pry(#{Pry.view_clip(target_self)})* "
|
@@ -24,7 +24,7 @@ class Pry
|
|
24
24
|
# A simple prompt - doesn't display target or nesting level
|
25
25
|
SIMPLE_PROMPT = [proc { ">> " }, proc { ">* " }]
|
26
26
|
|
27
|
-
|
27
|
+
SHELL_PROMPT = [
|
28
28
|
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
|
29
29
|
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
|
30
30
|
]
|
data/lib/pry/pry_class.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# @author John Mair (banisterfiend)
|
2
2
|
class Pry
|
3
3
|
|
4
|
-
# The RC Files to load.
|
4
|
+
# The RC Files to load.
|
5
5
|
RC_FILES = ["~/.pryrc"]
|
6
|
-
|
6
|
+
|
7
7
|
# class accessors
|
8
8
|
class << self
|
9
9
|
|
@@ -49,6 +49,10 @@ class Pry
|
|
49
49
|
# Pry instances.
|
50
50
|
attr_accessor :print
|
51
51
|
|
52
|
+
# @return [Proc] The Proc to use for printing exceptions by default by all
|
53
|
+
# Pry instances.
|
54
|
+
attr_accessor :exception_handler
|
55
|
+
|
52
56
|
# Get/Set the Hash that defines Pry hooks used by default by all Pry
|
53
57
|
# instances.
|
54
58
|
# @return [Hash] The hooks used by default by all Pry instances.
|
@@ -57,7 +61,7 @@ class Pry
|
|
57
61
|
# :after_session => proc { puts "goodbye" }
|
58
62
|
attr_accessor :hooks
|
59
63
|
|
60
|
-
|
64
|
+
|
61
65
|
# Get/Set the Proc that defines extra Readline completions (on top
|
62
66
|
# of the ones defined for IRB).
|
63
67
|
# @return [Proc] The Proc that defines extra Readline completions (on top
|
@@ -76,11 +80,15 @@ class Pry
|
|
76
80
|
attr_accessor :cmd_ret_value
|
77
81
|
|
78
82
|
# Determines whether colored output is enabled.
|
79
|
-
# @return [Boolean]
|
83
|
+
# @return [Boolean]
|
80
84
|
attr_accessor :color
|
81
85
|
|
86
|
+
# Determines whether paging (of long blocks of text) is enabled.
|
87
|
+
# @return [Boolean]
|
88
|
+
attr_accessor :pager
|
89
|
+
|
82
90
|
# Determines whether the rc file (~/.pryrc) should be loaded.
|
83
|
-
# @return [Boolean]
|
91
|
+
# @return [Boolean]
|
84
92
|
attr_accessor :should_load_rc
|
85
93
|
|
86
94
|
# Set to true if Pry is invoked from command line using `pry` executable
|
@@ -101,7 +109,7 @@ class Pry
|
|
101
109
|
load(file_name) if File.exists?(file_name)
|
102
110
|
end
|
103
111
|
end
|
104
|
-
|
112
|
+
|
105
113
|
# Start a Pry REPL.
|
106
114
|
# This method also loads the files specified in `Pry::RC_FILES` the
|
107
115
|
# first time it is invoked.
|
@@ -115,7 +123,7 @@ class Pry
|
|
115
123
|
load_rc
|
116
124
|
@rc_loaded = true
|
117
125
|
end
|
118
|
-
|
126
|
+
|
119
127
|
new(options).repl(target)
|
120
128
|
end
|
121
129
|
|
@@ -125,7 +133,7 @@ class Pry
|
|
125
133
|
# @return [String] The string representation of `obj`.
|
126
134
|
def self.view(obj)
|
127
135
|
case obj
|
128
|
-
when String, Hash, Array, Symbol, nil
|
136
|
+
when String, Hash, Array, Symbol, Exception, nil
|
129
137
|
obj.inspect
|
130
138
|
else
|
131
139
|
obj.to_s
|
@@ -169,23 +177,18 @@ class Pry
|
|
169
177
|
def self.run_command(arg_string, options={})
|
170
178
|
name, arg_string = arg_string.split(/\s+/, 2)
|
171
179
|
arg_string = "" if !arg_string
|
172
|
-
|
180
|
+
|
173
181
|
options = {
|
174
182
|
:context => TOPLEVEL_BINDING,
|
175
183
|
:show_output => false,
|
176
184
|
:output => Pry.output,
|
177
185
|
:commands => Pry.commands
|
178
186
|
}.merge!(options)
|
179
|
-
|
187
|
+
|
180
188
|
null_output = Object.new.tap { |v| v.instance_eval { def puts(*) end } }
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
commands = options[:commands].dup
|
185
|
-
else
|
186
|
-
commands = options[:commands].clone
|
187
|
-
end
|
188
|
-
|
189
|
+
|
190
|
+
commands = options[:commands]
|
191
|
+
|
189
192
|
commands.output = options[:show_output] ? options[:output] : null_output
|
190
193
|
commands.target = Pry.binding_for(options[:context])
|
191
194
|
|
@@ -205,9 +208,11 @@ class Pry
|
|
205
208
|
@commands = Pry::Commands
|
206
209
|
@prompt = DEFAULT_PROMPT
|
207
210
|
@print = DEFAULT_PRINT
|
211
|
+
@exception_handler = DEFAULT_EXCEPTION_HANDLER
|
208
212
|
@hooks = DEFAULT_HOOKS
|
209
213
|
@custom_completions = DEFAULT_CUSTOM_COMPLETIONS
|
210
214
|
@color = true
|
215
|
+
@pager = true
|
211
216
|
@should_load_rc = true
|
212
217
|
@rc_loaded = false
|
213
218
|
@cli = false
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -6,7 +6,8 @@ class Pry
|
|
6
6
|
|
7
7
|
# The list of configuration options.
|
8
8
|
CONFIG_OPTIONS = [:input, :output, :commands, :print,
|
9
|
-
|
9
|
+
:exception_handler, :prompt, :hooks,
|
10
|
+
:custom_completions]
|
10
11
|
|
11
12
|
attr_accessor *CONFIG_OPTIONS
|
12
13
|
|
@@ -17,8 +18,8 @@ class Pry
|
|
17
18
|
|
18
19
|
# Create a new `Pry` object.
|
19
20
|
# @param [Hash] options The optional configuration parameters.
|
20
|
-
# @option options [#readline] :input The object to use for input.
|
21
|
-
# @option options [#puts] :output The object to use for output.
|
21
|
+
# @option options [#readline] :input The object to use for input.
|
22
|
+
# @option options [#puts] :output The object to use for output.
|
22
23
|
# @option options [Pry::CommandBase] :commands The object to use for commands. (see commands.rb)
|
23
24
|
# @option options [Hash] :hooks The defined hook Procs (see hooks.rb)
|
24
25
|
# @option options [Array<Proc>] :default_prompt The array of Procs to use for the prompts. (see prompts.rb)
|
@@ -91,7 +92,7 @@ class Pry
|
|
91
92
|
|
92
93
|
# If break_data is an array, then the last element is the return value
|
93
94
|
break_level, return_value = Array(break_data)
|
94
|
-
|
95
|
+
|
95
96
|
# keep throwing until we reach the desired nesting level
|
96
97
|
if nesting_level != break_level
|
97
98
|
throw :breakout, break_data
|
@@ -113,7 +114,7 @@ class Pry
|
|
113
114
|
target_self = target.eval('self')
|
114
115
|
|
115
116
|
repl_prologue(target)
|
116
|
-
|
117
|
+
|
117
118
|
# cannot rely on nesting.level as
|
118
119
|
# nesting.level changes with new sessions
|
119
120
|
nesting_level = nesting.size
|
@@ -129,7 +130,7 @@ class Pry
|
|
129
130
|
|
130
131
|
# if one was provided, return the return value
|
131
132
|
return return_value if return_value
|
132
|
-
|
133
|
+
|
133
134
|
# otherwise return the target_self
|
134
135
|
target_self
|
135
136
|
end
|
@@ -143,13 +144,15 @@ class Pry
|
|
143
144
|
target = Pry.binding_for(target)
|
144
145
|
result = re(target)
|
145
146
|
|
146
|
-
|
147
|
+
show_result(result) if should_print?
|
147
148
|
end
|
148
149
|
|
149
150
|
# Perform a read-eval
|
150
151
|
# If no parameter is given, default to top-level (main).
|
151
152
|
# @param [Object, Binding] target The receiver of the read-eval-print
|
152
|
-
# @return [Object] The result of the eval or an `Exception` object in case of
|
153
|
+
# @return [Object] The result of the eval or an `Exception` object in case of
|
154
|
+
# error. In the latter case, you can check whether the exception was raised
|
155
|
+
# or is just the result of the expression using #last_result_is_exception?
|
153
156
|
# @example
|
154
157
|
# Pry.new.re(Object.new)
|
155
158
|
def re(target=TOPLEVEL_BINDING)
|
@@ -160,11 +163,12 @@ class Pry
|
|
160
163
|
Readline.completion_proc = Pry::InputCompleter.build_completion_proc target, instance_eval(&custom_completions)
|
161
164
|
end
|
162
165
|
|
163
|
-
|
164
166
|
# save the pry instance to active_instance
|
165
167
|
Pry.active_instance = self
|
166
168
|
target.eval("_pry_ = ::Pry.active_instance")
|
167
169
|
|
170
|
+
@last_result_is_exception = false
|
171
|
+
|
168
172
|
# eval the expression and save to last_result
|
169
173
|
# Do not want __FILE__, __LINE__ here because we need to distinguish
|
170
174
|
# (eval) methods for show-method and friends.
|
@@ -173,6 +177,7 @@ class Pry
|
|
173
177
|
rescue SystemExit => e
|
174
178
|
exit
|
175
179
|
rescue Exception => e
|
180
|
+
@last_result_is_exception = true
|
176
181
|
set_last_exception(e, target)
|
177
182
|
end
|
178
183
|
|
@@ -190,16 +195,26 @@ class Pry
|
|
190
195
|
@suppress_output = false
|
191
196
|
eval_string = ""
|
192
197
|
|
198
|
+
val = ""
|
193
199
|
loop do
|
194
200
|
val = retrieve_line(eval_string, target)
|
195
201
|
process_line(val, eval_string, target)
|
196
|
-
break if valid_expression?(eval_string)
|
202
|
+
break if valid_expression?(eval_string)
|
197
203
|
end
|
198
204
|
|
199
|
-
@suppress_output = true if eval_string =~ /;\Z/
|
200
|
-
|
205
|
+
@suppress_output = true if eval_string =~ /;\Z/ || null_input?(val)
|
206
|
+
|
201
207
|
eval_string
|
202
|
-
end
|
208
|
+
end
|
209
|
+
|
210
|
+
# FIXME should delete this method? it's exposing an implementation detail!
|
211
|
+
def show_result(result)
|
212
|
+
if last_result_is_exception?
|
213
|
+
exception_handler.call output, result
|
214
|
+
else
|
215
|
+
print.call output, result
|
216
|
+
end
|
217
|
+
end
|
203
218
|
|
204
219
|
# Returns true if input is "" and a command is not returning a
|
205
220
|
# value.
|
@@ -221,9 +236,9 @@ class Pry
|
|
221
236
|
# exit session if we receive EOF character
|
222
237
|
if !val
|
223
238
|
output.puts
|
224
|
-
throw(:breakout, nesting.level)
|
239
|
+
throw(:breakout, nesting.level)
|
225
240
|
end
|
226
|
-
|
241
|
+
|
227
242
|
val
|
228
243
|
end
|
229
244
|
|
@@ -235,7 +250,7 @@ class Pry
|
|
235
250
|
def process_line(val, eval_string, target)
|
236
251
|
val.rstrip!
|
237
252
|
Pry.cmd_ret_value = @command_processor.process_commands(val, eval_string, target)
|
238
|
-
|
253
|
+
|
239
254
|
if Pry.cmd_ret_value
|
240
255
|
eval_string << "Pry.cmd_ret_value\n"
|
241
256
|
else
|
@@ -261,6 +276,13 @@ class Pry
|
|
261
276
|
target.eval("_ex_ = ::Pry.last_exception")
|
262
277
|
end
|
263
278
|
|
279
|
+
# @return [Boolean] True if the last result is an exception that was raised,
|
280
|
+
# as opposed to simply an instance of Exception (like the result of
|
281
|
+
# Exception.new)
|
282
|
+
def last_result_is_exception?
|
283
|
+
@last_result_is_exception
|
284
|
+
end
|
285
|
+
|
264
286
|
# Returns the next line of input to be used by the pry instance.
|
265
287
|
# This method should not need to be invoked directly.
|
266
288
|
# @param [String] current_prompt The prompt to use for input.
|
@@ -279,29 +301,22 @@ class Pry
|
|
279
301
|
else
|
280
302
|
input.readline
|
281
303
|
end
|
282
|
-
|
304
|
+
|
305
|
+
rescue EOFError
|
283
306
|
self.input = Readline
|
284
307
|
""
|
285
|
-
|
286
|
-
# FIX ME!!!
|
287
|
-
# failing test is due to null_input?() being true for a
|
288
|
-
# command that doesn't return a value. This causes a EOFError
|
289
|
-
# exception for a 'rep' (as in test) as it makes the read loop
|
290
|
-
# redo and so it tries to read from a non-existent string
|
291
|
-
# binding.pry
|
292
308
|
end
|
293
309
|
end
|
294
310
|
end
|
295
311
|
|
296
312
|
# Whether the print proc should be invoked.
|
297
|
-
# Currently only invoked if the output is not suppressed OR the
|
313
|
+
# Currently only invoked if the output is not suppressed OR the last result
|
298
314
|
# is an exception regardless of suppression.
|
299
|
-
# @param [Object] result The result of evaluation stage of the REPL
|
300
315
|
# @return [Boolean] Whether the print proc should be invoked.
|
301
|
-
def should_print?
|
302
|
-
!@suppress_output ||
|
316
|
+
def should_print?
|
317
|
+
!@suppress_output || last_result_is_exception?
|
303
318
|
end
|
304
|
-
|
319
|
+
|
305
320
|
# Returns the appropriate prompt to use.
|
306
321
|
# This method should not need to be invoked directly.
|
307
322
|
# @param [Boolean] first_line Whether this is the first line of input
|
data/lib/pry/version.rb
CHANGED
data/test/test.rb
CHANGED
@@ -35,7 +35,7 @@ describe Pry do
|
|
35
35
|
it 'should make self evaluate to the receiver of the rep session' do
|
36
36
|
o = Object.new
|
37
37
|
str_output = StringIO.new
|
38
|
-
|
38
|
+
|
39
39
|
pry_tester = Pry.new(:input => InputTester.new("self"), :output => str_output)
|
40
40
|
pry_tester.rep(o)
|
41
41
|
str_output.string.should =~ /#{o.to_s}/
|
@@ -44,7 +44,7 @@ describe Pry do
|
|
44
44
|
it 'should work with multi-line input' do
|
45
45
|
o = Object.new
|
46
46
|
str_output = StringIO.new
|
47
|
-
|
47
|
+
|
48
48
|
pry_tester = Pry.new(:input => InputTester.new("x = ", "1 + 4"), :output => str_output)
|
49
49
|
pry_tester.rep(o)
|
50
50
|
str_output.string.should =~ /5/
|
@@ -55,6 +55,60 @@ describe Pry do
|
|
55
55
|
pry_tester.rep(Hello)
|
56
56
|
Hello.const_defined?(:Nested).should == true
|
57
57
|
end
|
58
|
+
|
59
|
+
it 'should suppress output if input ends in a ";" and is an Exception object (single line)' do
|
60
|
+
o = Object.new
|
61
|
+
str_output = StringIO.new
|
62
|
+
|
63
|
+
pry_tester = Pry.new(:input => InputTester.new("Exception.new;"), :output => str_output)
|
64
|
+
pry_tester.rep(o)
|
65
|
+
str_output.string.should == ""
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should suppress output if input ends in a ";" (single line)' do
|
69
|
+
o = Object.new
|
70
|
+
str_output = StringIO.new
|
71
|
+
|
72
|
+
pry_tester = Pry.new(:input => InputTester.new("x = 5;"), :output => str_output)
|
73
|
+
pry_tester.rep(o)
|
74
|
+
str_output.string.should == ""
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
it 'should suppress output if input ends in a ";" (multi-line)' do
|
79
|
+
o = Object.new
|
80
|
+
str_output = StringIO.new
|
81
|
+
|
82
|
+
pry_tester = Pry.new(:input => InputTester.new("def self.blah", ":test", "end;"), :output => str_output)
|
83
|
+
pry_tester.rep(o)
|
84
|
+
str_output.string.should == ""
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should be able to evaluate exceptions normally' do
|
88
|
+
o = Exception.new
|
89
|
+
str_output = StringIO.new
|
90
|
+
|
91
|
+
was_called = false
|
92
|
+
pry_tester = Pry.new(:input => InputTester.new("self"),
|
93
|
+
:output => str_output,
|
94
|
+
:exception_handler => proc { was_called = true })
|
95
|
+
|
96
|
+
pry_tester.rep(o)
|
97
|
+
was_called.should == false
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should notice when exceptions are raised' do
|
101
|
+
o = Exception.new
|
102
|
+
str_output = StringIO.new
|
103
|
+
|
104
|
+
was_called = false
|
105
|
+
pry_tester = Pry.new(:input => InputTester.new("raise self"),
|
106
|
+
:output => str_output,
|
107
|
+
:exception_handler => proc { was_called = true })
|
108
|
+
|
109
|
+
pry_tester.rep(o)
|
110
|
+
was_called.should == true
|
111
|
+
end
|
58
112
|
end
|
59
113
|
|
60
114
|
describe "repl" do
|
@@ -69,18 +123,6 @@ describe Pry do
|
|
69
123
|
|
70
124
|
o.instance_variable_get(:@x).should == 10
|
71
125
|
end
|
72
|
-
|
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
|
79
|
-
|
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
|
84
126
|
end
|
85
127
|
|
86
128
|
describe "test loading rc files" do
|
@@ -115,13 +157,13 @@ describe Pry do
|
|
115
157
|
Pry.should_load_rc = false
|
116
158
|
end
|
117
159
|
end
|
118
|
-
|
160
|
+
|
119
161
|
describe "nesting" do
|
120
162
|
after do
|
121
163
|
Pry.reset_defaults
|
122
164
|
Pry.color = false
|
123
165
|
end
|
124
|
-
|
166
|
+
|
125
167
|
it 'should nest properly' do
|
126
168
|
Pry.input = InputTester.new("pry", "pry", "pry", "\"nest:\#\{Pry.nesting.level\}\"", "exit_all")
|
127
169
|
|
@@ -140,7 +182,7 @@ describe Pry do
|
|
140
182
|
[Object.new, {}, []].each do |val|
|
141
183
|
str_input = StringIO.new("def hello;end")
|
142
184
|
Pry.new(:input => str_input, :output => StringIO.new).rep(val)
|
143
|
-
|
185
|
+
|
144
186
|
val.methods(false).map(&:to_sym).include?(:hello).should == true
|
145
187
|
end
|
146
188
|
end
|
@@ -168,9 +210,9 @@ describe Pry do
|
|
168
210
|
val.class.instance_methods(false).map(&:to_sym).include?(:hello).should == true
|
169
211
|
end
|
170
212
|
end
|
171
|
-
|
172
|
-
end
|
173
|
-
|
213
|
+
|
214
|
+
end
|
215
|
+
|
174
216
|
|
175
217
|
describe "commands" do
|
176
218
|
it 'should run a command with no parameter' do
|
@@ -208,7 +250,7 @@ describe Pry do
|
|
208
250
|
Pry.reset_defaults
|
209
251
|
Pry.color = false
|
210
252
|
end
|
211
|
-
|
253
|
+
|
212
254
|
it "should start a pry session on the receiver (first form)" do
|
213
255
|
Pry.input = InputTester.new("self", "exit")
|
214
256
|
|
@@ -227,7 +269,7 @@ describe Pry do
|
|
227
269
|
Pry.output = str_output
|
228
270
|
|
229
271
|
pry 20
|
230
|
-
|
272
|
+
|
231
273
|
str_output.string.should =~ /20/
|
232
274
|
end
|
233
275
|
|
@@ -252,14 +294,14 @@ describe Pry do
|
|
252
294
|
Pry.reset_defaults
|
253
295
|
Pry.color = false
|
254
296
|
end
|
255
|
-
|
297
|
+
|
256
298
|
describe "input" do
|
257
299
|
|
258
300
|
after do
|
259
301
|
Pry.reset_defaults
|
260
302
|
Pry.color = false
|
261
303
|
end
|
262
|
-
|
304
|
+
|
263
305
|
it 'should set the input default, and the default should be overridable' do
|
264
306
|
Pry.input = InputTester.new("5")
|
265
307
|
|
@@ -304,7 +346,7 @@ describe Pry do
|
|
304
346
|
|
305
347
|
arity_multi_input = Class.new do
|
306
348
|
attr_accessor :prompt
|
307
|
-
|
349
|
+
|
308
350
|
def readline(*args)
|
309
351
|
@prompt = args.first
|
310
352
|
"exit"
|
@@ -314,15 +356,15 @@ describe Pry do
|
|
314
356
|
Pry.start(self, :input => arity_multi_input, :output => Pry::NullOutput)
|
315
357
|
arity_multi_input.prompt.should == nil
|
316
358
|
end
|
317
|
-
|
359
|
+
|
318
360
|
end
|
319
361
|
|
320
362
|
it 'should set the output default, and the default should be overridable' do
|
321
363
|
Pry.input = InputTester.new("5", "6", "7")
|
322
|
-
|
364
|
+
|
323
365
|
str_output = StringIO.new
|
324
366
|
Pry.output = str_output
|
325
|
-
|
367
|
+
|
326
368
|
Pry.new.rep
|
327
369
|
str_output.string.should =~ /5/
|
328
370
|
|
@@ -347,7 +389,7 @@ describe Pry do
|
|
347
389
|
after do
|
348
390
|
Object.remove_const(:RCTest)
|
349
391
|
end
|
350
|
-
|
392
|
+
|
351
393
|
it "should execute command in the appropriate object context" do
|
352
394
|
result = Pry.run_command "ls", :context => RCTest
|
353
395
|
result.map(&:to_sym).should == [:@x]
|
@@ -361,7 +403,7 @@ describe Pry do
|
|
361
403
|
it "should execute command and show output with :show_output => true flag" do
|
362
404
|
str = StringIO.new
|
363
405
|
Pry.output = str
|
364
|
-
result = Pry.run_command "ls -
|
406
|
+
result = Pry.run_command "ls -afv", :context => RCTest, :show_output => true
|
365
407
|
str.string.should =~ /global variables/
|
366
408
|
Pry.output = $stdout
|
367
409
|
end
|
@@ -373,6 +415,30 @@ describe Pry do
|
|
373
415
|
end
|
374
416
|
|
375
417
|
describe "commands" do
|
418
|
+
it 'should interpolate ruby code into commands' do
|
419
|
+
klass = Class.new(Pry::CommandBase) do
|
420
|
+
command "hello", "", :keep_retval => true do |arg|
|
421
|
+
arg
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
$test_interpolation = "bing"
|
426
|
+
str_output = StringIO.new
|
427
|
+
Pry.new(:input => StringIO.new("hello #{$test_interpolation}"), :output => str_output, :commands => klass).rep
|
428
|
+
str_output.string.should =~ /bing/
|
429
|
+
$test_interpolation = nil
|
430
|
+
end
|
431
|
+
|
432
|
+
it 'should create a comand in a nested context and that command should be accessible from the parent' do
|
433
|
+
str_input = StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit")
|
434
|
+
str_output = StringIO.new
|
435
|
+
Pry.input = str_input
|
436
|
+
obj = Object.new
|
437
|
+
Pry.new(:output => str_output).repl(obj)
|
438
|
+
Pry.input = Readline
|
439
|
+
str_output.string.should =~ /@x/
|
440
|
+
end
|
441
|
+
|
376
442
|
it 'should define a command that keeps its return value' do
|
377
443
|
class Command68 < Pry::CommandBase
|
378
444
|
command "hello", "", :keep_retval => true do
|
@@ -382,6 +448,7 @@ describe Pry do
|
|
382
448
|
str_output = StringIO.new
|
383
449
|
Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => Command68).rep
|
384
450
|
str_output.string.should =~ /:kept_hello/
|
451
|
+
str_output.string.should =~ /=>/
|
385
452
|
|
386
453
|
Object.remove_const(:Command68)
|
387
454
|
end
|
@@ -395,11 +462,11 @@ describe Pry do
|
|
395
462
|
str_output = StringIO.new
|
396
463
|
Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => Command68).rep
|
397
464
|
(str_output.string =~ /:kept_hello/).should == nil
|
465
|
+
str_output.string !~ /=>/
|
398
466
|
|
399
467
|
Object.remove_const(:Command68)
|
400
468
|
end
|
401
|
-
|
402
|
-
|
469
|
+
|
403
470
|
it 'should set the commands default, and the default should be overridable' do
|
404
471
|
class Command0 < Pry::CommandBase
|
405
472
|
command "hello" do
|
@@ -420,7 +487,7 @@ describe Pry do
|
|
420
487
|
end
|
421
488
|
|
422
489
|
str_output = StringIO.new
|
423
|
-
|
490
|
+
|
424
491
|
Pry.new(:input => InputTester.new("goodbye"), :output => str_output, :commands => Command1).rep
|
425
492
|
str_output.string.should =~ /goodbye world/
|
426
493
|
|
@@ -470,7 +537,7 @@ describe Pry do
|
|
470
537
|
end
|
471
538
|
|
472
539
|
it 'should change description of a command using desc' do
|
473
|
-
|
540
|
+
|
474
541
|
class Command7 < Pry::Commands
|
475
542
|
end
|
476
543
|
|
@@ -482,10 +549,10 @@ describe Pry do
|
|
482
549
|
|
483
550
|
Command7.commands["help"][:description].should.not == orig
|
484
551
|
Command7.commands["help"][:description].should == "blah"
|
485
|
-
|
552
|
+
|
486
553
|
Object.remove_const(:Command7)
|
487
554
|
end
|
488
|
-
|
555
|
+
|
489
556
|
it 'should run a command from within a command' do
|
490
557
|
class Command01 < Pry::Commands
|
491
558
|
command "v" do
|
@@ -493,7 +560,7 @@ describe Pry do
|
|
493
560
|
end
|
494
561
|
|
495
562
|
command "run_v" do
|
496
|
-
run
|
563
|
+
run "v"
|
497
564
|
end
|
498
565
|
end
|
499
566
|
|
@@ -543,7 +610,7 @@ describe Pry do
|
|
543
610
|
class Command3 < Pry::Commands
|
544
611
|
command "v" do
|
545
612
|
end
|
546
|
-
|
613
|
+
|
547
614
|
delete "show_doc", "show_method"
|
548
615
|
delete "ls"
|
549
616
|
end
|
@@ -572,7 +639,7 @@ describe Pry do
|
|
572
639
|
|
573
640
|
# suppress evaluation output
|
574
641
|
Pry.print = proc {}
|
575
|
-
|
642
|
+
|
576
643
|
str_output = StringIO.new
|
577
644
|
Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => Command3).rep
|
578
645
|
str_output.string.rstrip.should == "jump-to the music"
|
@@ -580,7 +647,7 @@ describe Pry do
|
|
580
647
|
str_output = StringIO.new
|
581
648
|
Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => Command3).rep
|
582
649
|
str_output.string.rstrip.should == "help to the music"
|
583
|
-
|
650
|
+
|
584
651
|
Object.remove_const(:Command3)
|
585
652
|
|
586
653
|
Pry.reset_defaults
|
@@ -601,7 +668,7 @@ describe Pry do
|
|
601
668
|
Pry.new(:input => InputTester.new("\"test\""), :output => str_output,
|
602
669
|
:print => proc { |out, value| out.puts value.reverse }).rep
|
603
670
|
str_output.string.should == "tset\n"
|
604
|
-
|
671
|
+
|
605
672
|
Pry.new.print.should == Pry.print
|
606
673
|
str_output = StringIO.new
|
607
674
|
Pry.new(:input => InputTester.new("\"test\""), :output => str_output).rep
|
@@ -629,7 +696,7 @@ describe Pry do
|
|
629
696
|
Pry.start("carl", :input => StringIO.new("exit self"), :output => Pry::NullOutput).should == "carl"
|
630
697
|
end
|
631
698
|
end
|
632
|
-
|
699
|
+
|
633
700
|
describe "prompts" do
|
634
701
|
it 'should set the prompt default, and the default should be overridable (single prompt)' do
|
635
702
|
new_prompt = proc { "test prompt> " }
|
@@ -644,7 +711,7 @@ describe Pry do
|
|
644
711
|
pry_tester.prompt.should == new_prompt
|
645
712
|
pry_tester.select_prompt(true, 0).should == "A"
|
646
713
|
pry_tester.select_prompt(false, 0).should == "A"
|
647
|
-
|
714
|
+
|
648
715
|
Pry.new.prompt.should == Pry.prompt
|
649
716
|
Pry.new.select_prompt(true, 0).should == "test prompt> "
|
650
717
|
Pry.new.select_prompt(false, 0).should == "test prompt> "
|
@@ -663,7 +730,7 @@ describe Pry do
|
|
663
730
|
pry_tester.prompt.should == new_prompt
|
664
731
|
pry_tester.select_prompt(true, 0).should == "A"
|
665
732
|
pry_tester.select_prompt(false, 0).should == "B"
|
666
|
-
|
733
|
+
|
667
734
|
Pry.new.prompt.should == Pry.prompt
|
668
735
|
Pry.new.select_prompt(true, 0).should == "test prompt> "
|
669
736
|
Pry.new.select_prompt(false, 0).should == "test prompt* "
|
@@ -676,12 +743,12 @@ describe Pry do
|
|
676
743
|
:before_session => proc { |out,_| out.puts "HELLO" },
|
677
744
|
:after_session => proc { |out,_| out.puts "BYE" }
|
678
745
|
}
|
679
|
-
|
746
|
+
|
680
747
|
str_output = StringIO.new
|
681
748
|
Pry.new(:output => str_output).repl
|
682
749
|
str_output.string.should =~ /HELLO/
|
683
750
|
str_output.string.should =~ /BYE/
|
684
|
-
|
751
|
+
|
685
752
|
Pry.input.rewind
|
686
753
|
|
687
754
|
str_output = StringIO.new
|
@@ -703,7 +770,7 @@ describe Pry do
|
|
703
770
|
:before_session => proc { |out,_| out.puts "OPEN" }
|
704
771
|
}
|
705
772
|
).repl
|
706
|
-
|
773
|
+
|
707
774
|
str_output.string.should =~ /OPEN/
|
708
775
|
|
709
776
|
Pry.input.rewind
|