Pryx CI Gem Version

Three Virtues of a Programmer: Laziness, Impatience, and Hubris. -- Larry Wall, the author of Perl Programming language.

Getting Started

Don't add this gem into bundler's Gemfile.

Instead, install it directly via RubyGems

$ gem install pryx

Then user can use pryx cross all your's project.

Usage

Before use it, you need set RUBYOPT variable.

You can do this two way in a terminal.

$: export RUBYOPT+=' -rpryx'
$: ruby your_file.rb              # add pry! in your_file for start pry session

or Run your's code directly use:

$: RUBYOPT+='-rpryx' ruby your_file.rb  # add pry! in your_file for start pry session

Then, try add pry! into your's ruby code, then run it, have fun!

Following is a example, assume there is a test.rb with content:

# test.rb
3.times do
  pry!
  puts 'hello'
end

Then, when you run RUBYOPT='-rpryx' ruby test.rb

pry.png

You can even connect to a pry session started from remote or background process use http connection.

pry_remote.png

Until now, you've only seen the tip of the iceberg, please have a try.

the preferred way to use pryx is add export RUBYOPT+=' -rpryx' to system start script.

It should almost not affect your's code too much, only special methods defined into Kernel#, no any gem be required before you invoke those added methods.

useful command which added directly to Kernel

Kernel#pry!

start a pry session, this session only can be intercept once if add into a loop. when used with a rails/roda web server, it only intercept one per request.

we have IRB equivalent, named irb!, though, only a little feature support it.

Following feature both available when start a Pry or IRB session:

  1. Add Kernel#ls1(use ls1 to avoid conflict with pry builtin ls command), see looksee
  2. Use ap for pretty print. see awesome-print
  3. Use Clipboard.copy or Clipboard.paste to interactive with system clipboard. see clipboard

Following feature available only for a Pry session:

  1. Add next/step/continue/up/down command for debug, use pry-nav pry-stack_explorer
  2. Add $/? command for see source, see pry-doc
  3. pry-remote debug support. you still use pry! no changes, it will use pry-remote automatically if current ruby process was running on backround, then, it will use pry-remote, and listen on 0.0.0.0:9876, Then, you can connect to it from another terminal! see pry-remote
  4. Add pa command, see pry-power_assert
  5. Add hier command for print the class hierarchies, see pry-hier
  6. Add pry-aa_ancestors command for print the class hierarchy, see pry-aa_ancestors
  7. Add up/down/frame/stack command, see pry-stack_explorer
  8. Add yes or y command, see pry-yes
  9. Add pry-disam, Check following screenshot for a example:

pry-disasm

Kernel#pry1 Kernel#pry2 (sorry for the bad name, please create a issue you have a better one)

pry2 do nothing, but it will be interceptd and start a pry session only after pry1 is running.

I haven use this hack for avoid pry session start on working place.

You know what i means.

Kernel#irb1 Kernel#irb2

IRB equivalent for pry1, pry2 we have irb1 and irb2 too.

Kernel#pry3

It just normal binding.pry, that is, will always be intercept if code can reach. but above plugins and libraries all correct configured.

we have another Kernel#pry?, which enable pry-state automatically, see pry-state

Add CLI command, rescue, kill-pry-rescue, pryx, irbx, pry!

rescue and kill-pry-rescue come from pry-rescue gem, it not load by default, but you can use rescue command from command line directly. see pry-rescue

pryx is same as pry, but, with plugins and libraries correct configured, it will load ./config/environment.rb if this file exists.

irbx is same things for irb.

pry! just a alias to binding.pry, but, if process is running on background, it a alias to binding.remote_pry('0.0.0.0', 9876), you can specify host or port manually, like this: pry!(host: '192.168.1.100'). in another terminal, you can run pry! directly to connect to it use IP + port.

e.g. assume your's pry-remote server started background on another host(192.168.1.100), port 9876 It maybe in container, you can connect remote pry like this:

$: pry! -s 192.168.1.100 -p 9876

Philosophy

This gem is design to Minimal impact on target ruby code, in fact, after require 'pryx' or RUBYOPT='-rpryx' (they do same thing), only several instance method be defined on Kernel, and several gems add to $LOAD_PATH, but not load, ready to require it, no more. so, it should be safe to use it, either affect performance nor namespace/variables etc.

But, you should only use it in development, though, it was tested is run in container(alpine) too.

Limit

  1. Pry's show auto-watch when not work, because Enter key rebinding to run the last command. i consider this is more useful, you can always use w alias to see the watch changes.

Support

  • MRI 2.6+

History

See CHANGELOG for details.

Contributing

  • Bug reports
  • Source
  • Patches:

    • Fork on Github.
    • Run gem install --dev pryx or bundle install.
    • Create your feature branch: git checkout -b my-new-feature.
    • Commit your changes: git commit -am 'Add some feature'.
    • Push to the branch: git push origin my-new-feature.
    • Send a pull request :D.

    Not listed famous pry plugins is welcome!!

license

Released under the MIT license, See LICENSE for details.