pry 0.7.7.2-i386-mingw32 → 0.8.0-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/README.markdown +393 -195
- data/Rakefile +5 -4
- data/bin/pry +31 -39
- data/lib/pry.rb +18 -11
- data/lib/pry/command_base.rb +74 -21
- data/lib/pry/command_base_helpers.rb +241 -0
- data/lib/pry/command_helpers.rb +303 -0
- data/lib/pry/command_processor.rb +174 -0
- data/lib/pry/commands.rb +479 -260
- data/lib/pry/completion.rb +1 -1
- data/lib/pry/custom_completions.rb +6 -0
- data/lib/pry/hooks.rb +3 -7
- data/lib/pry/print.rb +10 -13
- data/lib/pry/prompts.rb +7 -2
- data/lib/pry/pry_class.rb +34 -11
- data/lib/pry/pry_instance.rb +83 -106
- data/lib/pry/version.rb +1 -1
- data/test/test.rb +126 -59
- data/test/test_helper.rb +6 -0
- metadata +112 -109
- data/lib/pry.rbc +0 -541
- data/lib/pry/#commands.rb# +0 -718
- data/lib/pry/command_base.rbc +0 -1795
- data/lib/pry/commands.rbc +0 -14430
- data/lib/pry/completion.rbc +0 -4485
- data/lib/pry/core_extensions.rbc +0 -592
- data/lib/pry/hooks.rbc +0 -649
- data/lib/pry/print.rbc +0 -400
- data/lib/pry/prompts.rbc +0 -574
- data/lib/pry/pry_class.rbc +0 -2376
- data/lib/pry/pry_instance.rbc +0 -4633
- data/lib/pry/version.rbc +0 -131
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 != ""
|
15
|
-
Pry.run_command "whereami", :output => out, :show_output => true, :context => target, :commands => Pry::Commands
|
12
|
+
if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != "" && file != "-e"
|
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)})* "
|
@@ -23,4 +23,9 @@ class Pry
|
|
23
23
|
|
24
24
|
# A simple prompt - doesn't display target or nesting level
|
25
25
|
SIMPLE_PROMPT = [proc { ">> " }, proc { ">* " }]
|
26
|
+
|
27
|
+
SHELL_PROMPT = [
|
28
|
+
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
|
29
|
+
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
|
30
|
+
]
|
26
31
|
end
|
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,6 +61,14 @@ class Pry
|
|
57
61
|
# :after_session => proc { puts "goodbye" }
|
58
62
|
attr_accessor :hooks
|
59
63
|
|
64
|
+
|
65
|
+
# Get/Set the Proc that defines extra Readline completions (on top
|
66
|
+
# of the ones defined for IRB).
|
67
|
+
# @return [Proc] The Proc that defines extra Readline completions (on top
|
68
|
+
# @example Add file names to completion list
|
69
|
+
# Pry.custom_completions = proc { Dir.entries('.') }
|
70
|
+
attr_accessor :custom_completions
|
71
|
+
|
60
72
|
# Get the array of Procs to be used for the prompts by default by
|
61
73
|
# all Pry instances.
|
62
74
|
# @return [Array<Proc>] The array of Procs to be used for the
|
@@ -68,11 +80,15 @@ class Pry
|
|
68
80
|
attr_accessor :cmd_ret_value
|
69
81
|
|
70
82
|
# Determines whether colored output is enabled.
|
71
|
-
# @return [Boolean]
|
83
|
+
# @return [Boolean]
|
72
84
|
attr_accessor :color
|
73
85
|
|
86
|
+
# Determines whether paging (of long blocks of text) is enabled.
|
87
|
+
# @return [Boolean]
|
88
|
+
attr_accessor :pager
|
89
|
+
|
74
90
|
# Determines whether the rc file (~/.pryrc) should be loaded.
|
75
|
-
# @return [Boolean]
|
91
|
+
# @return [Boolean]
|
76
92
|
attr_accessor :should_load_rc
|
77
93
|
|
78
94
|
# Set to true if Pry is invoked from command line using `pry` executable
|
@@ -93,7 +109,7 @@ class Pry
|
|
93
109
|
load(file_name) if File.exists?(file_name)
|
94
110
|
end
|
95
111
|
end
|
96
|
-
|
112
|
+
|
97
113
|
# Start a Pry REPL.
|
98
114
|
# This method also loads the files specified in `Pry::RC_FILES` the
|
99
115
|
# first time it is invoked.
|
@@ -107,7 +123,7 @@ class Pry
|
|
107
123
|
load_rc
|
108
124
|
@rc_loaded = true
|
109
125
|
end
|
110
|
-
|
126
|
+
|
111
127
|
new(options).repl(target)
|
112
128
|
end
|
113
129
|
|
@@ -117,11 +133,14 @@ class Pry
|
|
117
133
|
# @return [String] The string representation of `obj`.
|
118
134
|
def self.view(obj)
|
119
135
|
case obj
|
120
|
-
when String, Hash, Array, Symbol, nil
|
136
|
+
when String, Hash, Array, Symbol, Exception, nil
|
121
137
|
obj.inspect
|
122
138
|
else
|
123
139
|
obj.to_s
|
124
140
|
end
|
141
|
+
|
142
|
+
rescue NoMethodError
|
143
|
+
"unknown"
|
125
144
|
end
|
126
145
|
|
127
146
|
# A version of `Pry.view` that clips the output to `max_size` chars.
|
@@ -158,17 +177,18 @@ class Pry
|
|
158
177
|
def self.run_command(arg_string, options={})
|
159
178
|
name, arg_string = arg_string.split(/\s+/, 2)
|
160
179
|
arg_string = "" if !arg_string
|
161
|
-
|
180
|
+
|
162
181
|
options = {
|
163
182
|
:context => TOPLEVEL_BINDING,
|
164
183
|
:show_output => false,
|
165
184
|
:output => Pry.output,
|
166
185
|
:commands => Pry.commands
|
167
186
|
}.merge!(options)
|
168
|
-
|
187
|
+
|
169
188
|
null_output = Object.new.tap { |v| v.instance_eval { def puts(*) end } }
|
170
|
-
|
171
|
-
commands = options[:commands]
|
189
|
+
|
190
|
+
commands = options[:commands]
|
191
|
+
|
172
192
|
commands.output = options[:show_output] ? options[:output] : null_output
|
173
193
|
commands.target = Pry.binding_for(options[:context])
|
174
194
|
|
@@ -188,8 +208,11 @@ class Pry
|
|
188
208
|
@commands = Pry::Commands
|
189
209
|
@prompt = DEFAULT_PROMPT
|
190
210
|
@print = DEFAULT_PRINT
|
211
|
+
@exception_handler = DEFAULT_EXCEPTION_HANDLER
|
191
212
|
@hooks = DEFAULT_HOOKS
|
213
|
+
@custom_completions = DEFAULT_CUSTOM_COMPLETIONS
|
192
214
|
@color = true
|
215
|
+
@pager = true
|
193
216
|
@should_load_rc = true
|
194
217
|
@rc_loaded = false
|
195
218
|
@cli = false
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
+
direc = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require "#{direc}/command_processor.rb"
|
4
|
+
|
1
5
|
class Pry
|
2
6
|
|
3
7
|
# The list of configuration options.
|
4
8
|
CONFIG_OPTIONS = [:input, :output, :commands, :print,
|
5
|
-
|
9
|
+
:exception_handler, :prompt, :hooks,
|
10
|
+
:custom_completions]
|
6
11
|
|
7
12
|
attr_accessor *CONFIG_OPTIONS
|
8
13
|
|
@@ -13,8 +18,8 @@ class Pry
|
|
13
18
|
|
14
19
|
# Create a new `Pry` object.
|
15
20
|
# @param [Hash] options The optional configuration parameters.
|
16
|
-
# @option options [#readline] :input The object to use for input.
|
17
|
-
# @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.
|
18
23
|
# @option options [Pry::CommandBase] :commands The object to use for commands. (see commands.rb)
|
19
24
|
# @option options [Hash] :hooks The defined hook Procs (see hooks.rb)
|
20
25
|
# @option options [Array<Proc>] :default_prompt The array of Procs to use for the prompts. (see prompts.rb)
|
@@ -29,6 +34,8 @@ class Pry
|
|
29
34
|
CONFIG_OPTIONS.each do |key|
|
30
35
|
instance_variable_set("@#{key}", default_options[key])
|
31
36
|
end
|
37
|
+
|
38
|
+
@command_processor = CommandProcessor.new(self)
|
32
39
|
end
|
33
40
|
|
34
41
|
# Get nesting data.
|
@@ -71,8 +78,8 @@ class Pry
|
|
71
78
|
Pry.active_instance = self
|
72
79
|
|
73
80
|
# Make sure special locals exist
|
74
|
-
target.eval("_pry_ = Pry.active_instance")
|
75
|
-
target.eval("_ = Pry.last_result")
|
81
|
+
target.eval("_pry_ = ::Pry.active_instance")
|
82
|
+
target.eval("_ = ::Pry.last_result")
|
76
83
|
self.session_target = target
|
77
84
|
end
|
78
85
|
|
@@ -85,7 +92,7 @@ class Pry
|
|
85
92
|
|
86
93
|
# If break_data is an array, then the last element is the return value
|
87
94
|
break_level, return_value = Array(break_data)
|
88
|
-
|
95
|
+
|
89
96
|
# keep throwing until we reach the desired nesting level
|
90
97
|
if nesting_level != break_level
|
91
98
|
throw :breakout, break_data
|
@@ -93,7 +100,7 @@ class Pry
|
|
93
100
|
|
94
101
|
return_value
|
95
102
|
end
|
96
|
-
|
103
|
+
|
97
104
|
# Start a read-eval-print-loop.
|
98
105
|
# If no parameter is given, default to top-level (main).
|
99
106
|
# @param [Object, Binding] target The receiver of the Pry session
|
@@ -107,7 +114,7 @@ class Pry
|
|
107
114
|
target_self = target.eval('self')
|
108
115
|
|
109
116
|
repl_prologue(target)
|
110
|
-
|
117
|
+
|
111
118
|
# cannot rely on nesting.level as
|
112
119
|
# nesting.level changes with new sessions
|
113
120
|
nesting_level = nesting.size
|
@@ -123,7 +130,7 @@ class Pry
|
|
123
130
|
|
124
131
|
# if one was provided, return the return value
|
125
132
|
return return_value if return_value
|
126
|
-
|
133
|
+
|
127
134
|
# otherwise return the target_self
|
128
135
|
target_self
|
129
136
|
end
|
@@ -135,13 +142,17 @@ class Pry
|
|
135
142
|
# Pry.new.rep(Object.new)
|
136
143
|
def rep(target=TOPLEVEL_BINDING)
|
137
144
|
target = Pry.binding_for(target)
|
138
|
-
|
145
|
+
result = re(target)
|
146
|
+
|
147
|
+
show_result(result) if should_print?
|
139
148
|
end
|
140
149
|
|
141
150
|
# Perform a read-eval
|
142
151
|
# If no parameter is given, default to top-level (main).
|
143
152
|
# @param [Object, Binding] target The receiver of the read-eval-print
|
144
|
-
# @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?
|
145
156
|
# @example
|
146
157
|
# Pry.new.re(Object.new)
|
147
158
|
def re(target=TOPLEVEL_BINDING)
|
@@ -149,13 +160,14 @@ class Pry
|
|
149
160
|
|
150
161
|
if input == Readline
|
151
162
|
# Readline tab completion
|
152
|
-
Readline.completion_proc = Pry::InputCompleter.build_completion_proc
|
163
|
+
Readline.completion_proc = Pry::InputCompleter.build_completion_proc target, instance_eval(&custom_completions)
|
153
164
|
end
|
154
165
|
|
155
|
-
|
156
166
|
# save the pry instance to active_instance
|
157
167
|
Pry.active_instance = self
|
158
|
-
target.eval("_pry_ = Pry.active_instance")
|
168
|
+
target.eval("_pry_ = ::Pry.active_instance")
|
169
|
+
|
170
|
+
@last_result_is_exception = false
|
159
171
|
|
160
172
|
# eval the expression and save to last_result
|
161
173
|
# Do not want __FILE__, __LINE__ here because we need to distinguish
|
@@ -165,6 +177,7 @@ class Pry
|
|
165
177
|
rescue SystemExit => e
|
166
178
|
exit
|
167
179
|
rescue Exception => e
|
180
|
+
@last_result_is_exception = true
|
168
181
|
set_last_exception(e, target)
|
169
182
|
end
|
170
183
|
|
@@ -179,15 +192,38 @@ class Pry
|
|
179
192
|
# Pry.new.r(Object.new)
|
180
193
|
def r(target=TOPLEVEL_BINDING)
|
181
194
|
target = Pry.binding_for(target)
|
195
|
+
@suppress_output = false
|
182
196
|
eval_string = ""
|
183
197
|
|
198
|
+
val = ""
|
184
199
|
loop do
|
185
200
|
val = retrieve_line(eval_string, target)
|
186
201
|
process_line(val, eval_string, target)
|
187
|
-
break
|
202
|
+
break if valid_expression?(eval_string)
|
203
|
+
end
|
204
|
+
|
205
|
+
@suppress_output = true if eval_string =~ /;\Z/ || null_input?(val)
|
206
|
+
|
207
|
+
eval_string
|
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
|
188
216
|
end
|
189
217
|
end
|
190
218
|
|
219
|
+
# Returns true if input is "" and a command is not returning a
|
220
|
+
# value.
|
221
|
+
# @param [String] val The input string.
|
222
|
+
# @return [Boolean] Whether the input is null.
|
223
|
+
def null_input?(val)
|
224
|
+
val.empty? && !Pry.cmd_ret_value
|
225
|
+
end
|
226
|
+
|
191
227
|
# Read a line of input and check for ^d, also determine prompt to use.
|
192
228
|
# This method should not need to be invoked directly.
|
193
229
|
# @param [String] eval_string The cumulative lines of input.
|
@@ -200,9 +236,9 @@ class Pry
|
|
200
236
|
# exit session if we receive EOF character
|
201
237
|
if !val
|
202
238
|
output.puts
|
203
|
-
throw(:breakout, nesting.level)
|
239
|
+
throw(:breakout, nesting.level)
|
204
240
|
end
|
205
|
-
|
241
|
+
|
206
242
|
val
|
207
243
|
end
|
208
244
|
|
@@ -212,13 +248,13 @@ class Pry
|
|
212
248
|
# @param [String] eval_string The cumulative lines of input.
|
213
249
|
# @target [Binding] target The target of the Pry session.
|
214
250
|
def process_line(val, eval_string, target)
|
215
|
-
val.
|
216
|
-
Pry.cmd_ret_value = process_commands(val, eval_string, target)
|
217
|
-
|
251
|
+
val.rstrip!
|
252
|
+
Pry.cmd_ret_value = @command_processor.process_commands(val, eval_string, target)
|
253
|
+
|
218
254
|
if Pry.cmd_ret_value
|
219
255
|
eval_string << "Pry.cmd_ret_value\n"
|
220
256
|
else
|
221
|
-
eval_string << "#{val}\n"
|
257
|
+
eval_string << "#{val}\n" if !val.empty?
|
222
258
|
end
|
223
259
|
end
|
224
260
|
|
@@ -228,7 +264,7 @@ class Pry
|
|
228
264
|
# @param [Binding] target The binding to set `_` on.
|
229
265
|
def set_last_result(result, target)
|
230
266
|
Pry.last_result = result
|
231
|
-
target.eval("_ = Pry.last_result")
|
267
|
+
target.eval("_ = ::Pry.last_result")
|
232
268
|
end
|
233
269
|
|
234
270
|
# Set the last exception for a session.
|
@@ -237,87 +273,14 @@ class Pry
|
|
237
273
|
# @param [Binding] target The binding to set `_ex_` on.
|
238
274
|
def set_last_exception(ex, target)
|
239
275
|
Pry.last_exception = ex
|
240
|
-
target.eval("_ex_ = Pry.last_exception")
|
241
|
-
end
|
242
|
-
|
243
|
-
# Determine whether a Pry command was matched and return command data
|
244
|
-
# and argument string.
|
245
|
-
# This method should not need to be invoked directly.
|
246
|
-
# @param [String] val The line of input.
|
247
|
-
# @return [Array] The command data and arg string pair
|
248
|
-
def command_matched(val)
|
249
|
-
_, cmd_data = commands.commands.find do |name, cmd_data|
|
250
|
-
/^#{name}(?!\S)(?:\s+(.+))?/ =~ val
|
251
|
-
end
|
252
|
-
|
253
|
-
[cmd_data, $1]
|
254
|
-
end
|
255
|
-
|
256
|
-
# Process Pry commands. Pry commands are not Ruby methods and are evaluated
|
257
|
-
# prior to Ruby expressions.
|
258
|
-
# Commands can be modified/configured by the user: see `Pry::Commands`
|
259
|
-
# This method should not need to be invoked directly - it is called
|
260
|
-
# by `Pry#r`.
|
261
|
-
# @param [String] val The current line of input.
|
262
|
-
# @param [String] eval_string The cumulative lines of input for
|
263
|
-
# multi-line input.
|
264
|
-
# @param [Binding] target The receiver of the commands.
|
265
|
-
def process_commands(val, eval_string, target)
|
266
|
-
def val.clear() replace("") end
|
267
|
-
def eval_string.clear() replace("") end
|
268
|
-
|
269
|
-
cmd_data, args_string = command_matched(val)
|
270
|
-
|
271
|
-
# no command was matched, so return to caller
|
272
|
-
return if !cmd_data
|
273
|
-
|
274
|
-
args = args_string ? Shellwords.shellwords(args_string) : []
|
275
|
-
action = cmd_data[:action]
|
276
|
-
keep_retval = cmd_data[:keep_retval]
|
277
|
-
|
278
|
-
options = {
|
279
|
-
:val => val,
|
280
|
-
:eval_string => eval_string,
|
281
|
-
:nesting => nesting,
|
282
|
-
:commands => commands.commands
|
283
|
-
}
|
284
|
-
|
285
|
-
ret_value = execute_command(target, action, options, *args)
|
286
|
-
|
287
|
-
# return value of block only if :keep_retval is true
|
288
|
-
ret_value if keep_retval
|
276
|
+
target.eval("_ex_ = ::Pry.last_exception")
|
289
277
|
end
|
290
278
|
|
291
|
-
#
|
292
|
-
#
|
293
|
-
#
|
294
|
-
|
295
|
-
|
296
|
-
# @param [Array] args The command arguments.
|
297
|
-
def execute_command(target, action, options, *args)
|
298
|
-
|
299
|
-
# set some useful methods to be used by the action blocks
|
300
|
-
commands.opts = options
|
301
|
-
commands.target = target
|
302
|
-
commands.output = output
|
303
|
-
|
304
|
-
case action.arity <=> 0
|
305
|
-
when -1
|
306
|
-
|
307
|
-
# Use instance_exec() to make the `opts` method, etc available
|
308
|
-
ret_val = commands.instance_exec(*args, &action)
|
309
|
-
when 1, 0
|
310
|
-
|
311
|
-
# ensure that we get the right number of parameters
|
312
|
-
# since 1.8.7 complains about incorrect arity (1.9.2
|
313
|
-
# doesn't care)
|
314
|
-
args_with_corrected_arity = args.values_at *0..(action.arity - 1)
|
315
|
-
ret_val = commands.instance_exec(*args_with_corrected_arity, &action)
|
316
|
-
end
|
317
|
-
|
318
|
-
options[:val].clear
|
319
|
-
|
320
|
-
ret_val
|
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
|
321
284
|
end
|
322
285
|
|
323
286
|
# Returns the next line of input to be used by the pry instance.
|
@@ -332,14 +295,28 @@ class Pry
|
|
332
295
|
# as it has a second parameter.
|
333
296
|
input.readline(current_prompt, true)
|
334
297
|
else
|
335
|
-
|
336
|
-
input.readline
|
337
|
-
|
338
|
-
|
298
|
+
begin
|
299
|
+
if input.method(:readline).arity == 1
|
300
|
+
input.readline(current_prompt)
|
301
|
+
else
|
302
|
+
input.readline
|
303
|
+
end
|
304
|
+
|
305
|
+
rescue EOFError
|
306
|
+
self.input = Readline
|
307
|
+
""
|
339
308
|
end
|
340
309
|
end
|
341
310
|
end
|
342
311
|
|
312
|
+
# Whether the print proc should be invoked.
|
313
|
+
# Currently only invoked if the output is not suppressed OR the last result
|
314
|
+
# is an exception regardless of suppression.
|
315
|
+
# @return [Boolean] Whether the print proc should be invoked.
|
316
|
+
def should_print?
|
317
|
+
!@suppress_output || last_result_is_exception?
|
318
|
+
end
|
319
|
+
|
343
320
|
# Returns the appropriate prompt to use.
|
344
321
|
# This method should not need to be invoked directly.
|
345
322
|
# @param [Boolean] first_line Whether this is the first line of input
|
@@ -355,7 +332,7 @@ class Pry
|
|
355
332
|
end
|
356
333
|
end
|
357
334
|
|
358
|
-
if RUBY_VERSION =~ /1.9/
|
335
|
+
if RUBY_VERSION =~ /1.9/ && RUBY_ENGINE == "ruby"
|
359
336
|
require 'ripper'
|
360
337
|
|
361
338
|
# Determine if a string of code is a valid Ruby expression.
|