Pryx
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
You can even connect to a pry session started from remote or background process use http connection.
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:
- Add
Kernel#ls1
(use ls1 to avoid conflict with pry builtin ls command), see looksee - Use
ap
for pretty print. see awesome-print - Use
Clipboard.copy
orClipboard.paste
to interactive with system clipboard. see clipboard
Following feature available only for a Pry session:
- Add
next/step/continue/up/down
command for debug, use pry-nav pry-stack_explorer - Add
$/?
command for see source, see pry-doc - pry-remote debug support. you still use
pry!
no changes, it will usepry-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 - Add
pa
command, see pry-power_assert - Add
hier
command for print the class hierarchies, see pry-hier - Add
pry-aa_ancestors
command for print the class hierarchy, see pry-aa_ancestors - Add
up/down/frame/stack
command, see pry-stack_explorer - Add
yes
ory
command, see pry-yes - Add
pry-disam
, Check following screenshot for a example:
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
- Pry's show auto-watch when not work, because
Enter
key rebinding torun the last command
. i consider this is more useful, you can always usew
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
orbundle 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.