pry 0.8.4pre1 → 0.9.0pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.markdown +1 -1
- data/Rakefile +11 -5
- data/TODO +28 -2
- data/bin/pry +5 -9
- data/examples/example_basic.rb +2 -4
- data/examples/example_command_override.rb +2 -5
- data/examples/example_commands.rb +1 -4
- data/examples/example_hooks.rb +2 -5
- data/examples/example_image_edit.rb +4 -8
- data/examples/example_input.rb +1 -4
- data/examples/example_input2.rb +1 -4
- data/examples/example_output.rb +1 -4
- data/examples/example_print.rb +2 -5
- data/examples/example_prompt.rb +2 -5
- data/examples/helper.rb +6 -0
- data/lib/pry.rb +61 -4
- data/lib/pry/command_context.rb +10 -9
- data/lib/pry/command_processor.rb +29 -68
- data/lib/pry/command_set.rb +79 -28
- data/lib/pry/commands.rb +10 -121
- data/lib/pry/completion.rb +30 -29
- data/lib/pry/config.rb +93 -0
- data/lib/pry/default_commands/basic.rb +37 -0
- data/lib/pry/default_commands/context.rb +15 -15
- data/lib/pry/default_commands/documentation.rb +49 -48
- data/lib/pry/default_commands/easter_eggs.rb +1 -20
- data/lib/pry/default_commands/gems.rb +32 -41
- data/lib/pry/default_commands/input.rb +95 -19
- data/lib/pry/default_commands/introspection.rb +54 -60
- data/lib/pry/default_commands/ls.rb +2 -2
- data/lib/pry/default_commands/shell.rb +29 -39
- data/lib/pry/extended_commands/experimental.rb +48 -0
- data/lib/pry/extended_commands/user_command_api.rb +22 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +9 -106
- data/lib/pry/helpers/command_helpers.rb +96 -59
- data/lib/pry/helpers/text.rb +83 -0
- data/lib/pry/plugins.rb +79 -0
- data/lib/pry/pry_class.rb +96 -111
- data/lib/pry/pry_instance.rb +87 -55
- data/lib/pry/version.rb +1 -1
- data/test/helper.rb +56 -7
- data/test/test_command_processor.rb +99 -0
- data/test/{test_commandset.rb → test_command_set.rb} +18 -12
- data/test/test_default_commands.rb +59 -0
- data/test/test_default_commands/test_context.rb +64 -0
- data/test/test_default_commands/test_documentation.rb +31 -0
- data/test/test_default_commands/test_input.rb +157 -0
- data/test/test_default_commands/test_introspection.rb +146 -0
- data/test/test_pry.rb +430 -313
- metadata +25 -9
- data/lib/pry/hooks.rb +0 -17
- data/lib/pry/print.rb +0 -16
- data/lib/pry/prompts.rb +0 -31
data/.gitignore
CHANGED
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -5,7 +5,8 @@ $:.unshift 'lib'
|
|
5
5
|
require 'pry/version'
|
6
6
|
|
7
7
|
CLOBBER.include("**/*~", "**/*#*", "**/*.log")
|
8
|
-
CLEAN.include("**/*#*", "**/*#*.*", "**/*_flymake*.*", "**/*_flymake",
|
8
|
+
CLEAN.include("**/*#*", "**/*#*.*", "**/*_flymake*.*", "**/*_flymake",
|
9
|
+
"**/*.rbc", "**/.#*.*")
|
9
10
|
|
10
11
|
def apply_spec_defaults(s)
|
11
12
|
s.name = "pry"
|
@@ -16,13 +17,12 @@ def apply_spec_defaults(s)
|
|
16
17
|
s.email = 'jrmair@gmail.com'
|
17
18
|
s.description = s.summary
|
18
19
|
s.homepage = "http://banisterfiend.wordpress.com"
|
19
|
-
s.has_rdoc = 'yard'
|
20
20
|
s.executables = ["pry"]
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
23
23
|
s.add_dependency("ruby_parser",">=2.0.5")
|
24
24
|
s.add_dependency("coderay",">=0.9.8")
|
25
|
-
s.add_dependency("slop","
|
25
|
+
s.add_dependency("slop","~>1.6.0")
|
26
26
|
s.add_dependency("method_source",">=0.4.0")
|
27
27
|
s.add_development_dependency("bacon",">=1.1.0")
|
28
28
|
end
|
@@ -33,8 +33,7 @@ end
|
|
33
33
|
|
34
34
|
desc "run pry"
|
35
35
|
task :pry do
|
36
|
-
|
37
|
-
binding.pry
|
36
|
+
load 'bin/pry'
|
38
37
|
end
|
39
38
|
|
40
39
|
desc "show pry version"
|
@@ -52,6 +51,13 @@ namespace :ruby do
|
|
52
51
|
pkg.need_zip = false
|
53
52
|
pkg.need_tar = false
|
54
53
|
end
|
54
|
+
|
55
|
+
desc "Generate gemspec file"
|
56
|
+
task :gemspec do
|
57
|
+
File.open("#{spec.name}-#{spec.version}.gemspec", "w") do |f|
|
58
|
+
f << spec.to_ruby
|
59
|
+
end
|
60
|
+
end
|
55
61
|
end
|
56
62
|
|
57
63
|
[:mingw32, :mswin32].each do |v|
|
data/TODO
CHANGED
@@ -1,13 +1,39 @@
|
|
1
1
|
|
2
|
+
ROADMAP
|
3
|
+
|
2
4
|
FUTURE
|
3
|
-
|
5
|
+
--------
|
6
|
+
* Pry server and Pry client for SLIME style remote repl connectinos.
|
7
|
+
* i18n support
|
8
|
+
|
9
|
+
0.9.0
|
10
|
+
Major features
|
11
|
+
--------------
|
12
|
+
* Restructure command system and helpers (almost complete)
|
13
|
+
* Delete unnecessary commands, add a couple of new ones (e.g amend-line)
|
14
|
+
* Readline history
|
15
|
+
* Plugin support
|
16
|
+
* Support Rubinius core methods
|
17
|
+
* in[] and out[] arrays
|
18
|
+
* Improve test coverage (test some commands, etc)
|
19
|
+
|
20
|
+
Minor changes
|
21
|
+
-------------
|
22
|
+
* improve edit-method support for various editors
|
23
|
+
* ensure all commands have appropriate error handing and informative error messages
|
24
|
+
* show-doc should include signature of method
|
25
|
+
|
26
|
+
Optional
|
27
|
+
--------
|
28
|
+
* multi-line readline support
|
29
|
+
|
4
30
|
|
5
31
|
0.8.0
|
6
32
|
* allow #{} interpolation of all commands
|
7
33
|
* update documentation! new commands and features and change in behaviour of `run`
|
8
34
|
* add ; at end of line to suppress return value output
|
9
35
|
* Remove message spam (before/after hooks)
|
10
|
-
* stop commands returning a value
|
36
|
+
* stop commands returning a value
|
11
37
|
* use `redo` in the r() method when encounter a command
|
12
38
|
* shell functionality should just use system(), but redirect in and
|
13
39
|
out to Pry.input and Pry.output by reassining $stdin and $stdout
|
data/bin/pry
CHANGED
@@ -22,7 +22,7 @@ See: `https://github.com/banister` for more information.
|
|
22
22
|
on :e, :exec, "A line of code to execute in context before the session starts", true
|
23
23
|
on :f, "Suppress loading of ~/.pryrc"
|
24
24
|
on "no-color", "Disable syntax highlighting for session"
|
25
|
-
|
25
|
+
on "no-plugins", "Suppress loading of plugins."
|
26
26
|
on "simple-prompt", "Enable simple prompt mode" do
|
27
27
|
Pry.prompt = Pry::SIMPLE_PROMPT
|
28
28
|
end
|
@@ -50,15 +50,11 @@ end
|
|
50
50
|
# invoked via cli
|
51
51
|
Pry.cli = true
|
52
52
|
|
53
|
-
Pry::Commands.instance_eval do
|
54
|
-
command "reset", "Reset the REPL to a clean state." do
|
55
|
-
output.puts "Pry reset."
|
56
|
-
exec("pry")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
53
|
# load ~/.pryrc, if not suppressed with -f option
|
61
|
-
Pry.should_load_rc = !opts.f?
|
54
|
+
Pry.config.should_load_rc = !opts.f?
|
55
|
+
|
56
|
+
# suppress plugins if given --no-plugins optino
|
57
|
+
Pry.config.plugins.enabled = false if opts["no-plugins"]
|
62
58
|
|
63
59
|
# create the actual context
|
64
60
|
context = Pry.binding_for(eval(opts[:context]))
|
data/examples/example_basic.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
# define a local.
|
7
4
|
a = "a local variable"
|
@@ -14,4 +11,5 @@ end
|
|
14
11
|
# Start pry session at top-level.
|
15
12
|
# The local variable `a` and the `hello` method will
|
16
13
|
# be accessible.
|
14
|
+
puts __LINE__
|
17
15
|
binding.pry
|
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
# Inherit standard command set, but tweak them by importing some and
|
7
4
|
# overriding others.
|
@@ -18,7 +15,7 @@ class MyCommands < Pry::CommandBase
|
|
18
15
|
|
19
16
|
# analogy to Ruby's native alias_method idiom for decorating a method
|
20
17
|
alias_command "old_status", "status", ""
|
21
|
-
|
18
|
+
|
22
19
|
# Invoke one command from within another using `run`
|
23
20
|
command "status", "Modified status." do |x|
|
24
21
|
output.puts "About to show status, are you ready?"
|
data/examples/example_hooks.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
my_hooks = {
|
7
4
|
:before_session => proc { |out, target| out.puts "Opening #{target.eval('self')}." },
|
8
5
|
:after_session => proc { |out, target| out.puts "Closing #{target.eval('self')}." }
|
9
6
|
}
|
10
|
-
|
7
|
+
|
11
8
|
# Start a Pry session using the hooks hash defined in my_hooks
|
12
9
|
Pry.start(TOPLEVEL_BINDING, :hooks => my_hooks)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Note: this requires you to have Gosu and TexPlay installed.
|
2
2
|
# `gem install gosu`
|
3
3
|
# `gem install texplay`
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Extra instructions for installing Gosu on Linux can be found here:
|
6
6
|
# http://code.google.com/p/gosu/wiki/GettingStartedOnLinux
|
7
7
|
#
|
@@ -10,11 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# Have fun! :)
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
require 'rubygems'
|
16
|
-
require "texplay"
|
17
|
-
require "#{direc}/../lib/pry"
|
13
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
18
14
|
|
19
15
|
WIDTH = 640
|
20
16
|
HEIGHT = 480
|
@@ -42,12 +38,12 @@ class WinClass < Gosu::Window
|
|
42
38
|
@img.rect 0, 0, @img.width - 1, @img.height - 1
|
43
39
|
|
44
40
|
@binding = Pry.binding_for(@img)
|
45
|
-
|
41
|
+
|
46
42
|
@pry_instance = Pry.new(:commands => ImageCommands, :prompt => IMAGE_PROMPT)
|
47
43
|
end
|
48
44
|
|
49
45
|
def draw
|
50
|
-
@img.draw_rot(WIDTH / 2, HEIGHT / 2, 1, 0, 0.5, 0.5)
|
46
|
+
@img.draw_rot(WIDTH / 2, HEIGHT / 2, 1, 0, 0.5, 0.5)
|
51
47
|
end
|
52
48
|
|
53
49
|
def update
|
data/examples/example_input.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
# Create a StringIO that contains the input data
|
7
4
|
str_input = StringIO.new("puts 'hello world!'\nputs \"I am in \#{self}\"\nexit")
|
data/examples/example_input2.rb
CHANGED
data/examples/example_output.rb
CHANGED
data/examples/example_print.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
my_print = proc { |out, value| out.puts "Output is: #{value.inspect}" }
|
7
|
-
|
4
|
+
|
8
5
|
# Start a Pry session using the print object defined in my_print
|
9
6
|
Pry.start(TOPLEVEL_BINDING, :print => my_print)
|
data/examples/example_prompt.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
5
2
|
|
6
3
|
# Remember, first prompt in array is the main prompt, second is the wait
|
7
4
|
# prompt (used for multiline input when more input is required)
|
8
5
|
my_prompt = [ proc { |obj, *| "inside #{obj}> " },
|
9
6
|
proc { |obj, *| "inside #{obj}* "} ]
|
10
|
-
|
7
|
+
|
11
8
|
# Start a Pry session using the prompt defined in my_prompt
|
12
9
|
Pry.start(TOPLEVEL_BINDING, :prompt => my_prompt)
|
data/examples/helper.rb
ADDED
data/lib/pry.rb
CHANGED
@@ -1,6 +1,65 @@
|
|
1
1
|
# (C) John Mair (banisterfiend) 2011
|
2
2
|
# MIT License
|
3
3
|
|
4
|
+
class Pry
|
5
|
+
# The default hooks - display messages when beginning and ending Pry sessions.
|
6
|
+
DEFAULT_HOOKS = {
|
7
|
+
:before_session => proc do |out, target|
|
8
|
+
# ensure we're actually in a method
|
9
|
+
meth_name = target.eval('__method__')
|
10
|
+
file = target.eval('__FILE__')
|
11
|
+
|
12
|
+
# /unknown/ for rbx
|
13
|
+
if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != "" && file != "-e"
|
14
|
+
Pry.run_command "whereami 5", :output => out, :show_output => true, :context => target, :commands => Pry::Commands
|
15
|
+
end
|
16
|
+
end
|
17
|
+
}
|
18
|
+
|
19
|
+
# The default prints
|
20
|
+
DEFAULT_PRINT = proc do |output, value|
|
21
|
+
if Pry.color
|
22
|
+
output.puts "=> #{CodeRay.scan(Pry.view(value), :ruby).term}"
|
23
|
+
else
|
24
|
+
output.puts "=> #{Pry.view(value)}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Will only show the first line of the backtrace
|
29
|
+
DEFAULT_EXCEPTION_HANDLER = proc do |output, exception|
|
30
|
+
output.puts "#{exception.class}: #{exception.message}"
|
31
|
+
output.puts "from #{exception.backtrace.first}"
|
32
|
+
end
|
33
|
+
|
34
|
+
# The default prompt; includes the target and nesting level
|
35
|
+
DEFAULT_PROMPT = [
|
36
|
+
proc { |target_self, nest_level|
|
37
|
+
if nest_level == 0
|
38
|
+
"pry(#{Pry.view_clip(target_self)})> "
|
39
|
+
else
|
40
|
+
"pry(#{Pry.view_clip(target_self)}):#{Pry.view_clip(nest_level)}> "
|
41
|
+
end
|
42
|
+
},
|
43
|
+
|
44
|
+
proc { |target_self, nest_level|
|
45
|
+
if nest_level == 0
|
46
|
+
"pry(#{Pry.view_clip(target_self)})* "
|
47
|
+
else
|
48
|
+
"pry(#{Pry.view_clip(target_self)}):#{Pry.view_clip(nest_level)}* "
|
49
|
+
end
|
50
|
+
}
|
51
|
+
]
|
52
|
+
|
53
|
+
# A simple prompt - doesn't display target or nesting level
|
54
|
+
SIMPLE_PROMPT = [proc { ">> " }, proc { ">* " }]
|
55
|
+
|
56
|
+
SHELL_PROMPT = [
|
57
|
+
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
|
58
|
+
proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
|
59
|
+
]
|
60
|
+
|
61
|
+
end
|
62
|
+
|
4
63
|
require "method_source"
|
5
64
|
require 'shellwords'
|
6
65
|
require "readline"
|
@@ -20,15 +79,13 @@ if RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/
|
|
20
79
|
end
|
21
80
|
|
22
81
|
require "pry/version"
|
23
|
-
require "pry/hooks"
|
24
|
-
require "pry/print"
|
25
82
|
require "pry/helpers"
|
26
83
|
require "pry/command_set"
|
27
84
|
require "pry/commands"
|
28
85
|
require "pry/command_context"
|
29
|
-
require "pry/prompts"
|
30
86
|
require "pry/custom_completions"
|
31
87
|
require "pry/completion"
|
88
|
+
require "pry/plugins"
|
32
89
|
require "pry/core_extensions"
|
33
90
|
require "pry/pry_class"
|
34
|
-
require "pry/pry_instance"
|
91
|
+
require "pry/pry_instance"
|
data/lib/pry/command_context.rb
CHANGED
@@ -4,25 +4,26 @@ class Pry
|
|
4
4
|
class CommandContext
|
5
5
|
attr_accessor :output
|
6
6
|
attr_accessor :target
|
7
|
+
attr_accessor :captures
|
8
|
+
attr_accessor :eval_string
|
9
|
+
attr_accessor :arg_string
|
7
10
|
attr_accessor :opts
|
8
11
|
attr_accessor :command_set
|
9
12
|
attr_accessor :command_processor
|
10
13
|
|
11
|
-
def run(
|
12
|
-
|
13
|
-
|
14
|
-
command_processor.
|
15
|
-
execute_system_command([name, Shellwords.join(args)].join(' '),
|
16
|
-
target)
|
17
|
-
else
|
18
|
-
command_set.run_command(self, name, *args)
|
19
|
-
end
|
14
|
+
def run(command_string, *args)
|
15
|
+
complete_string = "#{command_string} #{args.join(" ")}"
|
16
|
+
command_processor.process_commands(complete_string, eval_string, target)
|
20
17
|
end
|
21
18
|
|
22
19
|
def commands
|
23
20
|
command_set.commands
|
24
21
|
end
|
25
22
|
|
23
|
+
def text
|
24
|
+
Pry::Helpers::Text
|
25
|
+
end
|
26
|
+
|
26
27
|
include Pry::Helpers::BaseHelpers
|
27
28
|
include Pry::Helpers::CommandHelpers
|
28
29
|
end
|
@@ -2,9 +2,6 @@ require 'forwardable'
|
|
2
2
|
|
3
3
|
class Pry
|
4
4
|
class CommandProcessor
|
5
|
-
SYSTEM_COMMAND_DELIMITER = "."
|
6
|
-
SYSTEM_COMMAND_REGEX = /^#{Regexp.escape(SYSTEM_COMMAND_DELIMITER)}(.*)/
|
7
|
-
|
8
5
|
extend Forwardable
|
9
6
|
|
10
7
|
attr_accessor :pry_instance
|
@@ -19,22 +16,16 @@ class Pry
|
|
19
16
|
# @param [String] val The string passed in from the Pry prompt.
|
20
17
|
# @return [Boolean] Whether the string is a valid command.
|
21
18
|
def valid_command?(val)
|
22
|
-
|
19
|
+
!!(command_matched(val)[0])
|
23
20
|
end
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
# Is the string a valid pry command?
|
33
|
-
# A Pry command is a command that is not a system command.
|
34
|
-
# @param [String] val The string passed in from the Pry prompt.
|
35
|
-
# @return [Boolean] Whether the string is a valid Pry command.
|
36
|
-
def pry_command?(val)
|
37
|
-
!!command_matched(val).first
|
22
|
+
def convert_to_regex(obj)
|
23
|
+
case obj
|
24
|
+
when String
|
25
|
+
Regexp.escape(obj)
|
26
|
+
else
|
27
|
+
obj
|
28
|
+
end
|
38
29
|
end
|
39
30
|
|
40
31
|
# Revaluate the string (str) and perform interpolation.
|
@@ -49,41 +40,6 @@ class Pry
|
|
49
40
|
target.eval(dumped_str)
|
50
41
|
end
|
51
42
|
|
52
|
-
# Execute a given system command.
|
53
|
-
# The commands first have interpolation applied against the
|
54
|
-
# `target` context.
|
55
|
-
# All system command are forwarded to a shell. Note that the `cd`
|
56
|
-
# command is special-cased and is converted internallly to a `Dir.chdir`
|
57
|
-
# @param [String] val The system command to execute.
|
58
|
-
# @param [Binding] target The context in which to perform string interpolation.
|
59
|
-
def execute_system_command(val, target)
|
60
|
-
SYSTEM_COMMAND_REGEX =~ val
|
61
|
-
cmd = interpolate_string($1, target)
|
62
|
-
|
63
|
-
if cmd =~ /^cd\s+(.+)/i
|
64
|
-
begin
|
65
|
-
@@cd_history ||= []
|
66
|
-
if $1 == "-"
|
67
|
-
dest = @@cd_history.pop || Dir.pwd
|
68
|
-
else
|
69
|
-
dest = File.expand_path($1)
|
70
|
-
end
|
71
|
-
|
72
|
-
@@cd_history << Dir.pwd
|
73
|
-
Dir.chdir(dest)
|
74
|
-
rescue Errno::ENOENT
|
75
|
-
output.puts "No such directory: #{dest}"
|
76
|
-
end
|
77
|
-
else
|
78
|
-
if !system(cmd)
|
79
|
-
output.puts "Error: there was a problem executing system command: #{cmd}"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Tick, tock, im getting rid of this shit soon.
|
84
|
-
val.replace("")
|
85
|
-
end
|
86
|
-
|
87
43
|
# Determine whether a Pry command was matched and return command data
|
88
44
|
# and argument string.
|
89
45
|
# This method should not need to be invoked directly.
|
@@ -91,10 +47,10 @@ class Pry
|
|
91
47
|
# @return [Array] The command data and arg string pair
|
92
48
|
def command_matched(val)
|
93
49
|
_, cmd_data = commands.commands.find do |name, cmd_data|
|
94
|
-
/^#{
|
50
|
+
/^#{convert_to_regex(name)}(?!\S)/ =~ val
|
95
51
|
end
|
96
52
|
|
97
|
-
[cmd_data,
|
53
|
+
[cmd_data, (Regexp.last_match ? Regexp.last_match.captures : nil), (Regexp.last_match ? Regexp.last_match.end(0) : nil)]
|
98
54
|
end
|
99
55
|
|
100
56
|
# Process Pry commands. Pry commands are not Ruby methods and are evaluated
|
@@ -107,30 +63,32 @@ class Pry
|
|
107
63
|
# multi-line input.
|
108
64
|
# @param [Binding] target The receiver of the commands.
|
109
65
|
def process_commands(val, eval_string, target)
|
110
|
-
def val.clear() replace("") end
|
111
|
-
def eval_string.clear() replace("") end
|
112
|
-
|
113
|
-
if system_command?(val)
|
114
|
-
execute_system_command(val, target)
|
115
|
-
return
|
116
|
-
end
|
117
66
|
|
118
67
|
# no command was matched, so return to caller
|
119
|
-
return if !
|
68
|
+
return if !valid_command?(val)
|
69
|
+
command, captures, pos = command_matched(val)
|
120
70
|
|
121
|
-
val.replace interpolate_string(val, target)
|
122
|
-
command, args_string = command_matched(val)
|
123
71
|
|
124
|
-
|
72
|
+
# perform ruby interpolation for commands
|
73
|
+
if command.options[:interpolate]
|
74
|
+
val.replace interpolate_string(val, target)
|
75
|
+
# command, captures, pos = command_matched(val)
|
76
|
+
# captures = captures.map { |v| interpolate_string(v, target) if v }
|
77
|
+
end
|
78
|
+
|
79
|
+
arg_string = val[pos..-1].strip
|
80
|
+
args = arg_string ? Shellwords.shellwords(arg_string) : []
|
125
81
|
|
126
82
|
options = {
|
127
83
|
:val => val,
|
84
|
+
:arg_string => arg_string,
|
128
85
|
:eval_string => eval_string,
|
129
86
|
:nesting => nesting,
|
130
|
-
:commands => commands.commands
|
87
|
+
:commands => commands.commands,
|
88
|
+
:captures => captures
|
131
89
|
}
|
132
90
|
|
133
|
-
execute_command(target, command.name, options, *args)
|
91
|
+
execute_command(target, command.name, options, *(captures + args))
|
134
92
|
end
|
135
93
|
|
136
94
|
# Execute a Pry command.
|
@@ -146,6 +104,9 @@ class Pry
|
|
146
104
|
context.opts = options
|
147
105
|
context.target = target
|
148
106
|
context.output = output
|
107
|
+
context.captures = options[:captures]
|
108
|
+
context.eval_string = options[:eval_string]
|
109
|
+
context.arg_string = options[:arg_string]
|
149
110
|
context.command_set = commands
|
150
111
|
|
151
112
|
context.command_processor = self
|
@@ -153,7 +114,7 @@ class Pry
|
|
153
114
|
ret = commands.run_command(context, command, *args)
|
154
115
|
|
155
116
|
# Tick, tock, im getting rid of this shit soon.
|
156
|
-
options[:val].
|
117
|
+
options[:val].replace("")
|
157
118
|
|
158
119
|
ret
|
159
120
|
end
|