Sha256: 8a5e73e68b6865966ef6267ade8b8a70d637a6fafe26fd95db5becf743fb5d21

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

require 'pry' unless defined? Pry

module PryMoves
class PryWrapper
  def initialize(binding_, pry_start_options = {})
    @init_binding = binding_
    @pry_start_options = pry_start_options   # Options to use for Pry.start
  end

  def run(&block)
    PryMoves.lock

    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

    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

  def trace_command
    if @command[:action] == :debug
      wrap_debug
    else
      start_tracing
    end
  end

  def wrap_debug
    #puts "##wrap debug"
    #puts "CALLER:\n#{caller.join "\n"}\n"
    #      Thread.abort_on_exception=true
    Thread.new do
      Thread.current[:pry_moves_debug] = true
      #@command[:binding].eval 'puts "###########"'
      start_tracing
      begin
        @command[:binding].eval @command[:param]
      rescue => e
        Thread.current.set_trace_func nil
        puts e
      end
    end.join
    binding_ = @last_runtime_binding || @init_binding
    Pry.start(binding_, @pry_start_options)
  end

  def start_tracing
    @last_runtime_binding = @command[:binding]
    @tracer = PryMoves::Tracer.new @command, @pry_start_options
    @tracer.trace
  end

end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pry-moves-0.1.4 lib/pry-moves/pry_wrapper.rb
pry-moves-0.1.3 lib/pry-moves/pry_wrapper.rb
pry-moves-0.1.2 lib/pry-moves/pry_wrapper.rb