pry 0.8.4pre1-java → 0.9.0pre1-java
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/.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
|