class PryRemote::Server

def self.run(object, host = DefaultHost, port = DefaultPort, options = {})

def self.run(object, host = DefaultHost, port = DefaultPort, options = {})
  new(object, host, port, options).run
end

def initialize(object, host = DefaultHost, port = DefaultPort, options = {})

def initialize(object, host = DefaultHost, port = DefaultPort, options = {})
  @host    = host
  @port    = port
  @object  = object
  @options = options
  @client = PryRemote::Client.new
  DRb.start_service uri, @client
  puts "[pry-remote] Waiting for client on #{uri}"
  @client.wait
  puts "[pry-remote] Client received, starting remote session"
end

def run

the server right away
pry_remote flag so pry-nav knows this is a remote session, and not kill
Override the call to Pry.start to save off current Server, pass a
def run
  if PryNav.current_remote_server
    raise 'Already running a pry-remote session!'
  else
    PryNav.current_remote_server = self
  end
  setup
  Pry.start(
    @object,
    input: client.input_proxy,
    output: client.output,
    pry_remote: true,
  )
end

def run

Actually runs pry-remote
def run
  setup
  Pry.start(@object, @options.merge(:input => client.input_proxy, :output => client.output))
ensure
  teardown
end

def setup

Code that has to be called for Pry-remote to work properly
def setup
  # If client passed stdout and stderr, redirect actual messages there.
  @old_stdout, $stdout = if @client.stdout
                           [$stdout, @client.stdout]
                         else
                           [$stdout, $stdout]
                         end
  @old_stderr, $stderr = if @client.stderr
                           [$stderr, @client.stderr]
                         else
                           [$stderr, $stderr]
                         end
  # Before Pry starts, save the pager config.
  # We want to disable this because the pager won't do anything useful in
  # this case (it will run on the server).
  Pry.config.pager, @old_pager = false, Pry.config.pager
  # As above, but for system config
  Pry.config.system, @old_system = PryRemote::System, Pry.config.system
end

def teardown

Code that has to be called after setup to return to the initial state
def teardown
  # Reset output streams
  $stdout = @old_stdout
  $stderr = @old_stderr
  # Reset config
  Pry.config.pager = @old_pager
  # Reset sysem
  Pry.config.system = @old_system
  puts "[pry-remote] Remote session terminated"
  begin
    @client.kill
  rescue DRb::DRbConnError
    puts "[pry-remote] Continuing to stop service"
  ensure
    puts "[pry-remote] Ensure stop service"
    DRb.stop_service
  end
end

def teardown_with_pry_nav

def teardown_with_pry_nav
  teardown_without_pry_nav
  PryNav.current_remote_server = nil
end

def uri

Returns:
  • (String) - URI for DRb
def uri
  "druby://#{host}:#{port}"
end