Class: PryRemoteReloaded::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/pry-remote-reloaded.rb

Overview

Parses arguments and allows to start the client.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = ARGV) ⇒ CLI

Returns a new instance of CLI.



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# File 'lib/pry-remote-reloaded.rb', line 266

def initialize(args = ARGV)
  params = Slop.parse args, :help => true do
    banner "#$PROGRAM_NAME [OPTIONS]"

    on :s, :server=, "Host of the server (#{DefaultHost})", :argument => :optional,
       :default => DefaultHost
    on :p, :port=, "Port of the server (#{DefaultPort})", :argument => :optional,
       :as => Integer, :default => DefaultPort
    on :w, :wait, "Wait for the pry server to come up",
       :default => false
    on :r, :persist, "Persist the client to wait for the pry server to come up each time",
       :default => false
    on :c, :capture, "Captures $stdout and $stderr from the server (true)",
       :default => true
    on :f, "Disables loading of .pryrc and its plugins, requires, and command history "
  end

  exit if params.help?

  @host = params[:server]
  @port = params[:port]

  @wait = params[:wait]
  @persist = params[:persist]
  @capture = params[:capture]

  Pry.initial_session_setup unless params[:f]
end

Instance Attribute Details

#captureObject (readonly) Also known as: capture?

Returns the value of attribute capture.



308
309
310
# File 'lib/pry-remote-reloaded.rb', line 308

def capture
  @capture
end

#hostString (readonly)

Returns Host of the server.

Returns:

  • (String)

    Host of the server



296
297
298
# File 'lib/pry-remote-reloaded.rb', line 296

def host
  @host
end

#persistObject (readonly) Also known as: persist?

Returns the value of attribute persist.



307
308
309
# File 'lib/pry-remote-reloaded.rb', line 307

def persist
  @persist
end

#portInteger (readonly)

Returns Port of the server.

Returns:

  • (Integer)

    Port of the server



299
300
301
# File 'lib/pry-remote-reloaded.rb', line 299

def port
  @port
end

#waitObject (readonly) Also known as: wait?

Returns the value of attribute wait.



306
307
308
# File 'lib/pry-remote-reloaded.rb', line 306

def wait
  @wait
end

Instance Method Details

#cleanup(client) ⇒ Object

Clean up the client



364
365
366
367
368
369
370
371
# File 'lib/pry-remote-reloaded.rb', line 364

def cleanup(client)
  begin
    # The method we are calling here doesn't matter.
    # This is a hack to close the connection of DRb.
    client.cleanup
  rescue DRb::DRbConnError, NoMethodError
  end
end

#connect(input = Pry.config.input, output = Pry.config.output) ⇒ Object

Connects to the server

Parameters:

  • input (IO) (defaults to: Pry.config.input)

    Object holding input for pry-remote

  • output (IO) (defaults to: Pry.config.output)

    Object pry-debug will send its output to



324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# File 'lib/pry-remote-reloaded.rb', line 324

def connect(input = Pry.config.input, output = Pry.config.output)
  local_ip = UDPSocket.open {|s| s.connect(@host, 1); s.addr.last}
  DRb.start_service "druby://#{local_ip}:0"
  client = DRbObject.new(nil, uri)

  cleanup(client)

  input  = IOUndumpedProxy.new(input)
  output = IOUndumpedProxy.new(output)

  begin
    client.input  = input
    client.output = output
  rescue DRb::DRbConnError => ex
    if wait? || persist?
      sleep 1
      retry
    else
      raise ex
    end
  end

  if capture?
    client.stdout = $stdout
    client.stderr = $stderr
  end

  client.editor = ClientEditor

  client.thread = Thread.current

  sleep
rescue Interrupt
  Pry.run_command('exit', context: Pry.binding_for(Object.new))
  puts "\n"
ensure
  DRb.stop_service
end

#runObject



313
314
315
316
317
318
# File 'lib/pry-remote-reloaded.rb', line 313

def run
  while true
    connect
    break unless persist?
  end
end

#uriString

Returns URI for DRb.

Returns:

  • (String)

    URI for DRb



302
303
304
# File 'lib/pry-remote-reloaded.rb', line 302

def uri
  "druby://#{host}:#{port}"
end