class PryMoves::PryWrapper

Public Class Methods

new(binding_, pry_start_options = {}) click to toggle source
# File lib/pry-moves/pry_wrapper.rb, line 5
def initialize(binding_, pry_start_options = {})
  @init_binding = binding_
  @pry_start_options = pry_start_options   # Options to use for Pry.start
end

Public Instance Methods

run() { || ... } click to toggle source
# File lib/pry-moves/pry_wrapper.rb, line 10
def run(&block)
  PryMoves.lock

  Pry.config.marker = "⛔️" if @pry_start_options[:exit_from_method]

  return_value = nil
  PryMoves.is_open = true
  @command = catch(:breakout_nav) do      # Coordinates with PryMoves::Commands
    return_value = yield
    nil    # Nothing thrown == no navigational command
  end
  PryMoves.is_open = false
  Pry.config.marker = "=>"

  if @command
    trace_command
  else
    PryMoves.unlock
    if @pry_start_options[:pry_remote] && PryMoves.current_remote_server
      PryMoves.current_remote_server.teardown
    end
  end

  return_value
end

Private Instance Methods

start_tracing() click to toggle source
# File lib/pry-moves/pry_wrapper.rb, line 74
def start_tracing
  @last_runtime_binding = @command[:binding]
  tracer = PryMoves::Tracer.new @command, @pry_start_options
  tracer.trace
  tracer
end
trace_command() click to toggle source
# File lib/pry-moves/pry_wrapper.rb, line 38
def trace_command
  if @command[:action] == :debug
    wrap_debug
  else
    start_tracing
  end
end
wrap_debug() click to toggle source
# File lib/pry-moves/pry_wrapper.rb, line 46
def wrap_debug
  #puts "##wrap debug"
  #puts "CALLER:\n#{caller.join "\n"}\n"
  #      Thread.abort_on_exception=true
  parent_thread = Thread.current
  Thread.new do

    # copy non-pry thread's properties
    parent_thread.keys.select do |k|
      !k.to_s.include?('pry')
    end.each do |k|
      Thread.current[k] = parent_thread[k]
    end

    Thread.current[:pry_moves_debug] = true
    tracer = start_tracing
    begin
      @command[:binding].eval @command[:param]
    rescue => e
      Thread.current.set_trace_func nil
      puts e
    end
    tracer.stop_tracing
  end.join
  binding_ = @last_runtime_binding || @init_binding
  Pry.start(binding_, @pry_start_options)
end