pry 0.9.8.2 → 0.9.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/README.markdown +20 -13
- data/Rakefile +1 -1
- data/lib/pry.rb +1 -2
- data/lib/pry/command.rb +88 -2
- data/lib/pry/command_set.rb +15 -85
- data/lib/pry/commands.rb +12 -8
- data/lib/pry/default_commands/cd.rb +58 -0
- data/lib/pry/default_commands/commands.rb +62 -0
- data/lib/pry/default_commands/context.rb +48 -165
- data/lib/pry/default_commands/editing.rb +385 -0
- data/lib/pry/default_commands/help.rb +127 -0
- data/lib/pry/default_commands/hist.rb +116 -0
- data/lib/pry/default_commands/{shell.rb → input_and_output.rb} +137 -15
- data/lib/pry/default_commands/introspection.rb +79 -232
- data/lib/pry/default_commands/ls.rb +4 -2
- data/lib/pry/default_commands/{basic.rb → misc.rb} +1 -14
- data/lib/pry/default_commands/navigating_pry.rb +114 -0
- data/lib/pry/helpers/base_helpers.rb +15 -3
- data/lib/pry/helpers/command_helpers.rb +16 -0
- data/lib/pry/history.rb +12 -4
- data/lib/pry/method.rb +2 -2
- data/lib/pry/pry_class.rb +7 -1
- data/lib/pry/pry_instance.rb +6 -0
- data/lib/pry/rbx_path.rb +6 -18
- data/lib/pry/version.rb +1 -1
- data/pry.gemspec +8 -8
- data/test/helper.rb +8 -0
- data/test/test_command.rb +256 -2
- data/test/test_command_integration.rb +2 -13
- data/test/test_command_set.rb +13 -23
- data/test/test_default_commands/test_help.rb +57 -0
- data/test/test_default_commands/test_introspection.rb +23 -0
- data/test/test_pry.rb +11 -0
- metadata +13 -9
- data/lib/pry/default_commands/documentation.rb +0 -209
- data/lib/pry/default_commands/input.rb +0 -247
- data/test/test_default_commands.rb +0 -58
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
2/3/2012 version 0.9.8.3 minor update
|
2
|
+
* various tweaks to improve rbx support
|
3
|
+
* commands now support optional block arguments
|
4
|
+
* much improved help command
|
5
|
+
* updated method_source dependency
|
6
|
+
* added wtf command
|
7
|
+
* jruby should now work in windows (though without color)
|
8
|
+
|
1
9
|
9/2/2012 version 0.9.8.2 bugfix
|
2
10
|
* fixed bugs related to --super
|
3
11
|
* upgraded slop dependency
|
data/README.markdown
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
[![Build Status](https://secure.travis-ci.org/pry/pry.png)](http://travis-ci.org/pry/pry)
|
2
|
+
|
3
|
+
**RBX (Rubinius) users**
|
4
|
+
|
5
|
+
Please report bugs that you find because we are working very hard right now to make Pry more RBX friendly and it would be great to hear of your problems with Pry in RBX. File a ticket if you run into problems with Pry on RBX so we can try to fix it for our next major release.
|
6
|
+
|
2
7
|
<center>
|
3
8
|
![Alt text](http://dl.dropbox.com/u/26521875/pry_logo_350.png)
|
4
9
|
|
@@ -32,10 +37,12 @@ these include:
|
|
32
37
|
* Gist integration
|
33
38
|
* Navigation around state (`cd`, `ls` and friends)
|
34
39
|
* Runtime invocation (use Pry as a developer console or debugger)
|
35
|
-
* Exotic object support (BasicObject
|
36
|
-
*
|
37
|
-
* Ability to view and replay history
|
40
|
+
* Exotic object support (BasicObject ins
|
41
|
+
* tances, IClasses, ...)
|
42
|
+
* A Powerful and flexible command system* Ability to view and replay history
|
43
|
+
|
38
44
|
* Many convenience commands inspired by IPython, Smalltalk and other advanced REPLs
|
45
|
+
* A wide-range number of [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide remote sessions, full debugging functionality, and more.
|
39
46
|
|
40
47
|
Pry also aims to be more than an IRB replacement; it is an
|
41
48
|
attempt to bring REPL driven programming to the Ruby language. It is
|
@@ -79,7 +86,7 @@ Pry command will show a list of all private instance methods (in
|
|
79
86
|
scope) that begin with 'pa'
|
80
87
|
|
81
88
|
pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
|
82
|
-
|
89
|
+
YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
|
83
90
|
|
84
91
|
### Navigating around state
|
85
92
|
|
@@ -97,7 +104,7 @@ an instance variable inside that class:
|
|
97
104
|
=> 20
|
98
105
|
pry(main)> cd Hello
|
99
106
|
pry(Hello):1> ls -i
|
100
|
-
|
107
|
+
instance variables: @x
|
101
108
|
pry(Hello):1> cd @x
|
102
109
|
pry(20:2)> self + 10
|
103
110
|
=> 30
|
@@ -121,8 +128,6 @@ We can then jump back to any of the previous nesting levels by using
|
|
121
128
|
the `jump-to` command:
|
122
129
|
|
123
130
|
pry("friend":3)> jump-to 1
|
124
|
-
Ending Pry session for "friend"
|
125
|
-
Ending Pry session for 100
|
126
131
|
=> 100
|
127
132
|
pry(Hello):1>
|
128
133
|
|
@@ -223,8 +228,8 @@ In the following example we will enter the `Pry` class, list the
|
|
223
228
|
instance methods beginning with 're' and display the source code for the `rep` method:
|
224
229
|
|
225
230
|
pry(main)> cd Pry
|
226
|
-
pry(Pry)
|
227
|
-
|
231
|
+
pry(Pry)> ls -M --grep re
|
232
|
+
Pry#methods: re readline refresh rep repl repl_epilogue repl_prologue retrieve_line
|
228
233
|
pry(Pry):1> show-method rep -l
|
229
234
|
|
230
235
|
From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb @ line 143:
|
@@ -319,12 +324,12 @@ We can also use `ri` in the normal way:
|
|
319
324
|
### Gist integration
|
320
325
|
|
321
326
|
If the `gist` gem is installed then method source or documentation can be gisted to github with the
|
322
|
-
`gist
|
323
|
-
|
327
|
+
`gist` command. The `gist` command is capable of gisting [almost any REPL content](https://gist.github.com/cae143e4533416529726), including methods, documentation,
|
328
|
+
input expressions, command source, and so on. In the example below we will gist the C source
|
324
329
|
code for the `Symbol#to_proc` method to github:
|
325
330
|
|
326
|
-
pry(main)> gist-
|
327
|
-
https://gist.github.com/5332c38afc46d902ce46
|
331
|
+
pry(main)> gist -m Symbol#to_proc
|
332
|
+
Gist created at https://gist.github.com/5332c38afc46d902ce46 and added to clipboard.
|
328
333
|
pry(main)>
|
329
334
|
|
330
335
|
You can see the actual gist generated here: [https://gist.github.com/5332c38afc46d902ce46](https://gist.github.com/5332c38afc46d902ce46)
|
@@ -363,6 +368,8 @@ avaiable.
|
|
363
368
|
|
364
369
|
MyArtChannel has kindly provided a hack to replace the `rails console` command in Rails 3: [https://gist.github.com/941174](https://gist.github.com/941174) This is not recommended for code bases with multiple developers, as they may not all want to use Pry.
|
365
370
|
|
371
|
+
Also check out the [wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry) for other strategies on integrating Pry with rails, notably the [pry-rails](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry#wiki-pry_rails) plugin.
|
372
|
+
|
366
373
|
### Limitations:
|
367
374
|
|
368
375
|
* Tab completion is currently a bit broken/limited this will have a
|
data/Rakefile
CHANGED
@@ -21,7 +21,7 @@ def apply_spec_defaults(s)
|
|
21
21
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
22
22
|
s.add_dependency('coderay', '~> 1.0.5')
|
23
23
|
s.add_dependency('slop', ['>= 2.4.4', '< 3'])
|
24
|
-
s.add_dependency('method_source','~> 0.7')
|
24
|
+
s.add_dependency('method_source','~> 0.7.1')
|
25
25
|
s.add_development_dependency('bacon', '~> 1.1')
|
26
26
|
s.add_development_dependency('open4', '~> 1.3')
|
27
27
|
s.add_development_dependency('rake', '~> 0.9')
|
data/lib/pry.rb
CHANGED
@@ -179,8 +179,7 @@ if Pry::Helpers::BaseHelpers.windows?
|
|
179
179
|
begin
|
180
180
|
require 'win32console'
|
181
181
|
rescue LoadError
|
182
|
-
warn "
|
183
|
-
exit 1
|
182
|
+
warn "You should: `gem install win32console` for better auto-indent and color support."
|
184
183
|
end
|
185
184
|
end
|
186
185
|
|
data/lib/pry/command.rb
CHANGED
@@ -83,6 +83,30 @@ class Pry
|
|
83
83
|
command_regex =~ val
|
84
84
|
end
|
85
85
|
|
86
|
+
# How well does this command match the given line?
|
87
|
+
#
|
88
|
+
# Higher scores are better because they imply that this command matches
|
89
|
+
# the line more closely.
|
90
|
+
#
|
91
|
+
# The score is calculated by taking the number of characters at the start
|
92
|
+
# of the string that are used only to identify the command, not as part of
|
93
|
+
# the arguments.
|
94
|
+
#
|
95
|
+
# @example
|
96
|
+
# /\.(.*)/.match_score(".foo") #=> 1
|
97
|
+
# /\.*(.*)/.match_score("...foo") #=> 3
|
98
|
+
# 'hi'.match_score("hi there") #=> 2
|
99
|
+
#
|
100
|
+
# @param String a line input at the REPL
|
101
|
+
# @return Fixnum
|
102
|
+
def match_score(val)
|
103
|
+
if command_regex =~ val
|
104
|
+
Regexp.last_match.size > 1 ? Regexp.last_match.begin(1) : Regexp.last_match.end(0)
|
105
|
+
else
|
106
|
+
-1
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
86
110
|
# Store hooks to be run before or after the command body.
|
87
111
|
# @see {Pry::CommandSet#before_command}
|
88
112
|
# @see {Pry::CommandSet#after_command}
|
@@ -105,8 +129,27 @@ class Pry
|
|
105
129
|
obj
|
106
130
|
end
|
107
131
|
end
|
108
|
-
end
|
109
132
|
|
133
|
+
# The group in which the command should be displayed in "help" output.
|
134
|
+
# This is usually auto-generated from directory naming, but it can be
|
135
|
+
# manually overridden if necessary.
|
136
|
+
def group(name=nil)
|
137
|
+
@group = name if name
|
138
|
+
@group ||=(
|
139
|
+
case Pry::Method(block).source_file
|
140
|
+
when %r{/pry/.*_commands/(.*).rb}
|
141
|
+
$1.capitalize.gsub(/_/, " ")
|
142
|
+
when %r{(pry-[\w_]+)-([\d\.]+)}
|
143
|
+
name, version = $1, $2
|
144
|
+
"#{name.to_s} (v#{version.to_s})"
|
145
|
+
when /pryrc/
|
146
|
+
"~/.pryrc"
|
147
|
+
else
|
148
|
+
"(other)"
|
149
|
+
end
|
150
|
+
)
|
151
|
+
end
|
152
|
+
end
|
110
153
|
|
111
154
|
# Properties of one execution of a command (passed by {Pry#run_command} as a hash of
|
112
155
|
# context and expanded in {#initialize}
|
@@ -119,6 +162,14 @@ class Pry
|
|
119
162
|
attr_accessor :command_set
|
120
163
|
attr_accessor :_pry_
|
121
164
|
|
165
|
+
# The block we pass *into* a command so long as `:takes_block` is
|
166
|
+
# not equal to `false`
|
167
|
+
# @example
|
168
|
+
# my-command | do
|
169
|
+
# puts "block content"
|
170
|
+
# end
|
171
|
+
attr_accessor :command_block
|
172
|
+
|
122
173
|
# Run a command from another command.
|
123
174
|
# @param [String] command_string The string that invokes the command
|
124
175
|
# @param [Array] args Further arguments to pass to the command
|
@@ -217,6 +268,9 @@ class Pry
|
|
217
268
|
# remove the one leading space if it exists
|
218
269
|
arg_string.slice!(0) if arg_string.start_with?(" ")
|
219
270
|
|
271
|
+
# process and pass a block if one is found
|
272
|
+
pass_block(arg_string) if command_options[:takes_block]
|
273
|
+
|
220
274
|
if arg_string
|
221
275
|
args = command_options[:shellwords] ? Shellwords.shellwords(arg_string) : arg_string.split(" ")
|
222
276
|
else
|
@@ -241,6 +295,36 @@ class Pry
|
|
241
295
|
call_safely(*(captures + args))
|
242
296
|
end
|
243
297
|
|
298
|
+
# Pass a block argument to a command.
|
299
|
+
# @param [String] arg_string The arguments (as a string) passed to the command.
|
300
|
+
# We inspect these for a '| do' or a '| {' and if we find it we use it
|
301
|
+
# to start a block input sequence. Once we have a complete
|
302
|
+
# block, we save it to an accessor that can be retrieved from the command context.
|
303
|
+
# Note that if we find the '| do' or '| {' we delete this and the
|
304
|
+
# elements following it from `arg_string`.
|
305
|
+
def pass_block(arg_string)
|
306
|
+
block_index = arg_string.rindex /\| *(?:do|\{)/
|
307
|
+
|
308
|
+
return if !block_index
|
309
|
+
|
310
|
+
block_init_string = arg_string.slice!(block_index..-1)[1..-1]
|
311
|
+
prime_string = "proc #{block_init_string}\n"
|
312
|
+
|
313
|
+
if !_pry_.complete_expression?(prime_string)
|
314
|
+
block_string = _pry_.r(target, prime_string)
|
315
|
+
else
|
316
|
+
block_string = prime_string
|
317
|
+
end
|
318
|
+
|
319
|
+
begin
|
320
|
+
self.command_block = target.eval(block_string)
|
321
|
+
rescue Pry::RescuableException
|
322
|
+
raise CommandError, "Incomplete block definition."
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
private :pass_block
|
327
|
+
|
244
328
|
# Run the command with the given {args}.
|
245
329
|
#
|
246
330
|
# This is a public wrapper around {#call} which ensures all preconditions are met.
|
@@ -327,7 +411,9 @@ class Pry
|
|
327
411
|
instance_exec(*correct_arg_arity(block.arity, args), &block)
|
328
412
|
end
|
329
413
|
|
330
|
-
def help
|
414
|
+
def help
|
415
|
+
"#{command_options[:listing].to_s.ljust(18)} #{description}"
|
416
|
+
end
|
331
417
|
end
|
332
418
|
|
333
419
|
# A super-class ofr Commands with structure.
|
data/lib/pry/command_set.rb
CHANGED
@@ -21,7 +21,6 @@ class Pry
|
|
21
21
|
@commands = {}
|
22
22
|
@helper_module = Module.new
|
23
23
|
|
24
|
-
define_default_commands
|
25
24
|
import(*imported_sets)
|
26
25
|
|
27
26
|
instance_eval(&block) if block
|
@@ -281,7 +280,19 @@ class Pry
|
|
281
280
|
# @param [String] the line that may be a command invocation
|
282
281
|
# @return [Pry::Command, nil]
|
283
282
|
def find_command(val)
|
284
|
-
commands.values.
|
283
|
+
commands.values.select{ |c| c.matches?(val) }.sort_by{ |c| c.match_score(val) }.last
|
284
|
+
end
|
285
|
+
|
286
|
+
# Find the command that the user might be trying to refer to.
|
287
|
+
#
|
288
|
+
# @param [String] the user's search.
|
289
|
+
# @return [Pry::Command, nil]
|
290
|
+
def find_command_for_help(search)
|
291
|
+
find_command(search) || (begin
|
292
|
+
find_command_by_name_or_listing(search)
|
293
|
+
rescue ArgumentError
|
294
|
+
nil
|
295
|
+
end)
|
285
296
|
end
|
286
297
|
|
287
298
|
# Is the given line a command invocation?
|
@@ -324,91 +335,10 @@ class Pry
|
|
324
335
|
:interpolate => true,
|
325
336
|
:shellwords => true,
|
326
337
|
:listing => name,
|
327
|
-
:use_prefix => true
|
338
|
+
:use_prefix => true,
|
339
|
+
:takes_block => false
|
328
340
|
}
|
329
341
|
end
|
330
|
-
|
331
|
-
def define_default_commands
|
332
|
-
|
333
|
-
create_command "help" do |cmd|
|
334
|
-
description "Show a list of commands, or help for one command"
|
335
|
-
|
336
|
-
banner <<-BANNER
|
337
|
-
Usage: help [ COMMAND ]
|
338
|
-
|
339
|
-
With no arguments, help lists all the available commands in the current
|
340
|
-
command-set along with their description.
|
341
|
-
|
342
|
-
When given a command name as an argument, shows the help for that command.
|
343
|
-
BANNER
|
344
|
-
|
345
|
-
def process
|
346
|
-
if cmd = args.first
|
347
|
-
if command = find_command(cmd)
|
348
|
-
output.puts command.new.help
|
349
|
-
else
|
350
|
-
output.puts "No info for command: #{cmd}"
|
351
|
-
end
|
352
|
-
else
|
353
|
-
output.puts
|
354
|
-
help_text = heading("Command List: ") + "\n"
|
355
|
-
|
356
|
-
help_text << commands.map do |key, command|
|
357
|
-
if command.description && !command.description.empty?
|
358
|
-
"#{command.options[:listing].to_s.ljust(18)} #{command.description}"
|
359
|
-
end
|
360
|
-
end.compact.sort.join("\n")
|
361
|
-
|
362
|
-
stagger_output(help_text)
|
363
|
-
end
|
364
|
-
end
|
365
|
-
end
|
366
|
-
|
367
|
-
create_command "install-command", "Install a disabled command." do |name|
|
368
|
-
|
369
|
-
banner <<-BANNER
|
370
|
-
Usage: install-command COMMAND
|
371
|
-
|
372
|
-
Installs the gems necessary to run the given COMMAND. You will generally not
|
373
|
-
need to run this unless told to by an error message.
|
374
|
-
BANNER
|
375
|
-
|
376
|
-
def process(name)
|
377
|
-
require 'rubygems/dependency_installer' unless defined? Gem::DependencyInstaller
|
378
|
-
command = find_command(name)
|
379
|
-
|
380
|
-
if command_dependencies_met?(command.options)
|
381
|
-
output.puts "Dependencies for #{command.name} are met. Nothing to do."
|
382
|
-
return
|
383
|
-
end
|
384
|
-
|
385
|
-
output.puts "Attempting to install `#{name}` command..."
|
386
|
-
gems_to_install = Array(command.options[:requires_gem])
|
387
|
-
|
388
|
-
gems_to_install.each do |g|
|
389
|
-
next if gem_installed?(g)
|
390
|
-
output.puts "Installing `#{g}` gem..."
|
391
|
-
|
392
|
-
begin
|
393
|
-
Gem::DependencyInstaller.new.install(g)
|
394
|
-
rescue Gem::GemNotFoundException
|
395
|
-
raise CommandError, "Required Gem: `#{g}` not found. Aborting command installation."
|
396
|
-
end
|
397
|
-
end
|
398
|
-
|
399
|
-
Gem.refresh
|
400
|
-
gems_to_install.each do |g|
|
401
|
-
begin
|
402
|
-
require g
|
403
|
-
rescue LoadError
|
404
|
-
raise CommandError, "Required Gem: `#{g}` installed but not found?!. Aborting command installation."
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
output.puts "Installation of `#{name}` successful! Type `help #{name}` for information"
|
409
|
-
end
|
410
|
-
end
|
411
|
-
end
|
412
342
|
end
|
413
343
|
|
414
344
|
# Wraps the return result of process_commands, indicates if the
|
data/lib/pry/commands.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
require "pry/default_commands/
|
2
|
-
require "pry/default_commands/
|
1
|
+
require "pry/default_commands/misc"
|
2
|
+
require "pry/default_commands/help"
|
3
3
|
require "pry/default_commands/gems"
|
4
4
|
require "pry/default_commands/context"
|
5
|
-
require "pry/default_commands/
|
6
|
-
require "pry/default_commands/
|
5
|
+
require "pry/default_commands/commands"
|
6
|
+
require "pry/default_commands/input_and_output"
|
7
7
|
require "pry/default_commands/introspection"
|
8
|
+
require "pry/default_commands/editing"
|
9
|
+
require "pry/default_commands/navigating_pry"
|
8
10
|
require "pry/default_commands/easter_eggs"
|
9
11
|
|
10
12
|
require "pry/extended_commands/experimental"
|
@@ -13,13 +15,15 @@ class Pry
|
|
13
15
|
|
14
16
|
# Default commands used by Pry.
|
15
17
|
Commands = Pry::CommandSet.new do
|
16
|
-
import DefaultCommands::
|
17
|
-
import DefaultCommands::
|
18
|
+
import DefaultCommands::Misc
|
19
|
+
import DefaultCommands::Help
|
18
20
|
import DefaultCommands::Gems
|
19
21
|
import DefaultCommands::Context
|
20
|
-
import DefaultCommands::
|
21
|
-
import DefaultCommands::
|
22
|
+
import DefaultCommands::NavigatingPry
|
23
|
+
import DefaultCommands::Editing
|
24
|
+
import DefaultCommands::InputAndOutput
|
22
25
|
import DefaultCommands::Introspection
|
23
26
|
import DefaultCommands::EasterEggs
|
27
|
+
import DefaultCommands::Commands
|
24
28
|
end
|
25
29
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class Pry
|
2
|
+
module DefaultCommands
|
3
|
+
Cd = Pry::CommandSet.new do
|
4
|
+
create_command "cd" do
|
5
|
+
group "Context"
|
6
|
+
description "Move into a new context (object or scope)."
|
7
|
+
|
8
|
+
banner <<-BANNER
|
9
|
+
Usage: cd [OPTIONS] [--help]
|
10
|
+
|
11
|
+
Move into new context (object or scope). As in unix shells use
|
12
|
+
`cd ..` to go back and `cd /` to return to Pry top-level).
|
13
|
+
Complex syntax (e.g cd ../@x/y) also supported.
|
14
|
+
|
15
|
+
e.g: `cd @x`
|
16
|
+
e.g: `cd ..
|
17
|
+
e.g: `cd /`
|
18
|
+
|
19
|
+
https://github.com/pry/pry/wiki/State-navigation#wiki-Changing_scope
|
20
|
+
BANNER
|
21
|
+
|
22
|
+
def process
|
23
|
+
path = arg_string.split(/\//)
|
24
|
+
stack = _pry_.binding_stack.dup
|
25
|
+
|
26
|
+
# special case when we only get a single "/", return to root
|
27
|
+
stack = [stack.first] if path.empty?
|
28
|
+
|
29
|
+
path.each do |context|
|
30
|
+
begin
|
31
|
+
case context.chomp
|
32
|
+
when ""
|
33
|
+
stack = [stack.first]
|
34
|
+
when "::"
|
35
|
+
stack.push(TOPLEVEL_BINDING)
|
36
|
+
when "."
|
37
|
+
next
|
38
|
+
when ".."
|
39
|
+
unless stack.size == 1
|
40
|
+
stack.pop
|
41
|
+
end
|
42
|
+
else
|
43
|
+
stack.push(Pry.binding_for(stack.last.eval(context)))
|
44
|
+
end
|
45
|
+
|
46
|
+
rescue RescuableException => e
|
47
|
+
output.puts "Bad object path: #{arg_string.chomp}. Failed trying to resolve: #{context}"
|
48
|
+
output.puts e.inspect
|
49
|
+
return
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
_pry_.binding_stack = stack
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|