mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
Renamed Pry.get_context and moved to a more suitable place
This commit is contained in:
parent
5e4463b50d
commit
5b292ff0f5
2 changed files with 72 additions and 68 deletions
|
@ -22,7 +22,7 @@ class Pry
|
||||||
BANNER
|
BANNER
|
||||||
|
|
||||||
def process
|
def process
|
||||||
stack, old_stack = Pry.get_context(arg_string, _pry_, state.old_stack||[])
|
stack, old_stack = context_from_object_path(arg_string, _pry_, state.old_stack||[])
|
||||||
state.old_stack = old_stack
|
state.old_stack = old_stack
|
||||||
_pry_.binding_stack = stack unless stack.nil?
|
_pry_.binding_stack = stack unless stack.nil?
|
||||||
end
|
end
|
||||||
|
@ -31,61 +31,5 @@ class Pry
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_context(arg_string, pry=nil, old_stack=[])
|
|
||||||
|
|
||||||
# Extract command arguments. Delete blank arguments like " ", but
|
|
||||||
# don't delete empty strings like "".
|
|
||||||
path = arg_string.split(/\//).delete_if { |a| a =~ /\A\s+\z/ }
|
|
||||||
stack = pry.binding_stack.dup
|
|
||||||
state_old_stack = old_stack
|
|
||||||
|
|
||||||
# Special case when we only get a single "/", return to root.
|
|
||||||
if path.empty?
|
|
||||||
state_old_stack = stack.dup unless old_stack.empty?
|
|
||||||
stack = [stack.first]
|
|
||||||
end
|
|
||||||
|
|
||||||
path.each_with_index do |context, i|
|
|
||||||
begin
|
|
||||||
case context.chomp
|
|
||||||
when ""
|
|
||||||
state_old_stack = stack.dup
|
|
||||||
stack = [stack.first]
|
|
||||||
when "::"
|
|
||||||
state_old_stack = stack.dup
|
|
||||||
stack.push(TOPLEVEL_BINDING)
|
|
||||||
when "."
|
|
||||||
next
|
|
||||||
when ".."
|
|
||||||
unless stack.size == 1
|
|
||||||
# Don't rewrite old_stack if we're in complex expression
|
|
||||||
# (e.g.: `cd 1/2/3/../4).
|
|
||||||
state_old_stack = stack.dup if path.first == ".."
|
|
||||||
stack.pop
|
|
||||||
end
|
|
||||||
when "-"
|
|
||||||
unless old_stack.empty?
|
|
||||||
# Interchange current stack and old stack with each other.
|
|
||||||
stack, state_old_stack = state_old_stack, stack
|
|
||||||
end
|
|
||||||
else
|
|
||||||
state_old_stack = stack.dup if i == 0
|
|
||||||
stack.push(Pry.binding_for(stack.last.eval(context)))
|
|
||||||
end
|
|
||||||
|
|
||||||
rescue RescuableException => e
|
|
||||||
|
|
||||||
# Restore old stack to its initial values.
|
|
||||||
state_old_stack = old_stack
|
|
||||||
|
|
||||||
output.puts "Bad object path: #{arg_string.chomp}. Failed trying to resolve: #{context}"
|
|
||||||
output.puts e.inspect
|
|
||||||
return nil, state_old_stack
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return stack, state_old_stack
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,66 @@ class Pry
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @param [String] arg_string The object path expressed as a string.
|
||||||
|
# @param [Pry] _pry_ The relevant Pry instance.
|
||||||
|
# @param [Array<Binding>] old_stack The state of the old binding stack
|
||||||
|
# @return [Array<Array<Binding>, Array<Binding>>] An array
|
||||||
|
# containing two elements: The new `binding_stack` and the old `binding_stack`.
|
||||||
|
def context_from_object_path(arg_string, _pry_=nil, old_stack=[])
|
||||||
|
|
||||||
|
# Extract command arguments. Delete blank arguments like " ", but
|
||||||
|
# don't delete empty strings like "".
|
||||||
|
path = arg_string.split(/\//).delete_if { |a| a =~ /\A\s+\z/ }
|
||||||
|
stack = _pry_.binding_stack.dup
|
||||||
|
state_old_stack = old_stack
|
||||||
|
|
||||||
|
# Special case when we only get a single "/", return to root.
|
||||||
|
if path.empty?
|
||||||
|
state_old_stack = stack.dup unless old_stack.empty?
|
||||||
|
stack = [stack.first]
|
||||||
|
end
|
||||||
|
|
||||||
|
path.each_with_index do |context, i|
|
||||||
|
begin
|
||||||
|
case context.chomp
|
||||||
|
when ""
|
||||||
|
state_old_stack = stack.dup
|
||||||
|
stack = [stack.first]
|
||||||
|
when "::"
|
||||||
|
state_old_stack = stack.dup
|
||||||
|
stack.push(TOPLEVEL_BINDING)
|
||||||
|
when "."
|
||||||
|
next
|
||||||
|
when ".."
|
||||||
|
unless stack.size == 1
|
||||||
|
# Don't rewrite old_stack if we're in complex expression
|
||||||
|
# (e.g.: `cd 1/2/3/../4).
|
||||||
|
state_old_stack = stack.dup if path.first == ".."
|
||||||
|
stack.pop
|
||||||
|
end
|
||||||
|
when "-"
|
||||||
|
unless old_stack.empty?
|
||||||
|
# Interchange current stack and old stack with each other.
|
||||||
|
stack, state_old_stack = state_old_stack, stack
|
||||||
|
end
|
||||||
|
else
|
||||||
|
state_old_stack = stack.dup if i == 0
|
||||||
|
stack.push(Pry.binding_for(stack.last.eval(context)))
|
||||||
|
end
|
||||||
|
|
||||||
|
rescue RescuableException => e
|
||||||
|
|
||||||
|
# Restore old stack to its initial values.
|
||||||
|
state_old_stack = old_stack
|
||||||
|
|
||||||
|
output.puts "Bad object path: #{arg_string.chomp}. Failed trying to resolve: #{context}"
|
||||||
|
output.puts e.inspect
|
||||||
|
return nil, state_old_stack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return stack, state_old_stack
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue