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
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
def run setup Pry.start(@object, @options.merge(:input => client.input_proxy, :output => client.output)) ensure teardown end
def setup
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
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
-
(String)- URI for DRb
def uri "druby://#{host}:#{port}" end