1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00

* got run command working by passing in extra 'target' argument. Got

command string interpolation working, so .cd #{my_dir} now works.
This commit is contained in:
John Mair 2011-04-08 21:10:49 +12:00
parent d111b19f82
commit ad0e3b9d9f
3 changed files with 16 additions and 7 deletions

2
TODO
View file

@ -3,6 +3,8 @@ FUTURE
* allows pipes (|) for commands * allows pipes (|) for commands
0.8.0 0.8.0
* allow #{} interpolation of all commands
* update documentation! new commands and features and change in behaviour of `run`
* add ; at end of line to suppress return value output * add ; at end of line to suppress return value output
* Remove message spam (before/after hooks) * Remove message spam (before/after hooks)
* stop commands returning a value * stop commands returning a value

View file

@ -83,7 +83,7 @@ class Pry
command_processor = CommandProcessor.new(target.eval('_pry_')) command_processor = CommandProcessor.new(target.eval('_pry_'))
if command_processor.system_command?(name) if command_processor.system_command?(name)
command_processor.execute_system_command("#{name} #{args.join}") command_processor.execute_system_command("#{name} #{args.join}", target)
else else
action = opts[:commands][name][:action] action = opts[:commands][name][:action]
instance_exec(*args, &action) instance_exec(*args, &action)

View file

@ -26,10 +26,16 @@ class Pry
def pry_command?(val) def pry_command?(val)
!!command_matched(val).first !!command_matched(val).first
end end
def interpolate_string(str, target)
dumped_str = str.dump
dumped_str.gsub!(/\\\#{/, '#{')
target.eval(dumped_str)
end
def execute_system_command(val) def execute_system_command(val, target)
SYSTEM_COMMAND_REGEX =~ val SYSTEM_COMMAND_REGEX =~ val
cmd = $1 cmd = interpolate_string($1, target)
if cmd =~ /^cd\s+(.+)/i if cmd =~ /^cd\s+(.+)/i
begin begin
@ -71,15 +77,16 @@ class Pry
def eval_string.clear() replace("") end def eval_string.clear() replace("") end
if system_command?(val) if system_command?(val)
execute_system_command(val) execute_system_command(val, target)
return return
end end
# no command was matched, so return to caller
return if !pry_command?(val)
val.replace interpolate_string(val, target)
cmd_data, args_string = command_matched(val) cmd_data, args_string = command_matched(val)
# no command was matched, so return to caller
return if !cmd_data
args = args_string ? Shellwords.shellwords(args_string) : [] args = args_string ? Shellwords.shellwords(args_string) : []
action = cmd_data[:action] action = cmd_data[:action]
keep_retval = cmd_data[:keep_retval] keep_retval = cmd_data[:keep_retval]