module PryStackExplorer

def bindings_equal?(b1, b2)

Returns:
  • (Boolean) - Whether the `Binding`s are equal.

Parameters:
  • b2 (Binding) -- Second binding.
  • b1 (Binding) -- First binding.
def bindings_equal?(b1, b2)
  (b1.eval('self').equal?(b2.eval('self'))) &&
    (b1.eval('__method__') == b2.eval('__method__')) &&
    (b1.eval('local_variables').map { |v| b1.eval("#{v}") }.equal?(
     b2.eval('local_variables').map { |v| b2.eval("#{v}") }))
end

def clear_frame_managers(_pry_)

Parameters:
  • _pry_ (Pry) -- The Pry instance associated with the frame managers
def clear_frame_managers(_pry_)
  pop_frame_manager(_pry_) until frame_managers(_pry_).empty?
  frame_hash.delete(_pry_) # this line should be unnecessary!
end

def create_and_push_frame_manager(bindings, _pry_, options={})

Parameters:
  • _pry_ (Pry) -- The Pry instance associated with the frame manager
  • bindings (Array) -- The array of bindings (frames)
def create_and_push_frame_manager(bindings, _pry_, options={})
  fm = FrameManager.new(bindings, _pry_)
  frame_hash[_pry_].push fm
  push_helper(fm, options)
  fm
end

def frame_hash

Returns:
  • (Hash) - The hash storing all frames for all Pry instances for
def frame_hash
  Thread.current[:__pry_frame_managers__] ||= Hash.new { |h, k| h[k] = [] }
end

def frame_manager(_pry_)

Returns:
  • (PryStackExplorer::FrameManager) - The currently active frame manager
def frame_manager(_pry_)
  frame_hash[_pry_].last
end

def frame_managers(_pry_)

Returns:
  • (Array) - The stack of Pry::FrameManager objections

Parameters:
  • _pry_ (Pry) -- The Pry instance associated with the frame
def frame_managers(_pry_)
  frame_hash[_pry_]
end

def pop_frame_manager(_pry_)

Returns:
  • (Pry::FrameManager) - The popped frame manager.

Parameters:
  • _pry_ (Pry) -- The Pry instance associated with the frame
def pop_frame_manager(_pry_)
  return if frame_managers(_pry_).empty?
  popped_fm = frame_managers(_pry_).pop
  pop_helper(popped_fm, _pry_)
  popped_fm
end

def pop_helper(popped_fm, _pry_)

Parameters:
  • _pry_ (Pry) -- The Pry instance associated with the frame managers.
  • popped_fm (Pry::FrameManager) -- The recently popped frame manager.
def pop_helper(popped_fm, _pry_)
  if frame_managers(_pry_).empty?
    if _pry_.binding_stack.empty?
      _pry_.binding_stack.push popped_fm.prior_binding
    else
      _pry_.binding_stack[-1] = popped_fm.prior_binding
    end
    frame_hash.delete(_pry_)
  else
    frame_manager(_pry_).refresh_frame(false)
  end
  # restore backtrace
  _pry_.backtrace = popped_fm.prior_backtrace
end

def push_helper(fm, options={})

Parameters:
  • options (Hash) -- The options hash.
  • fm (PryStackExplorer::FrameManager) -- The active frame manager.
def push_helper(fm, options={})
  options = {
    :initial_frame => 0
  }.merge!(options)
  fm.change_frame_to(options[:initial_frame], false)
end