LoginSignup
8
8

More than 5 years have passed since last update.

Learning Pry

Last updated at Posted at 2013-11-10

Personal notes on Pry

Notes from the following sites.

-pry wiki
-Introductory screencast
Pry~IRB (Japanese)

# install it
$ gem install pry
# version
$ pry -v
# enter to pry
$ pry
# help
pry(main)> help

# To customize change ~/.pryrc file
# get help on command
pry(main)> show-doc -h

# Showing rubydoc 
pry(main)> s ="pry"
pry(main)> show-doc s.each_line

# or
pry(main)> show-doc String#each_line

# to show method
pry(main)> show-method s.each_line

# or
pry(main)> show-source s.each_line

# adding line number
pry(main)> show-source s.each_line -l

# creating gist
# "gem install gist" and afer pry console enter "install-command gist"
pry(main)> gist s.each_line
Gist created at URL https://gist.github.com/acfc1489eaa0dbbc3f0a, which is now in the clipboard.

Using command shell in pry

Using . dot.

# Showing methods in IRB is very messy but pry shows them line by line.
pry(main)> self.methods

# Using shell command with .(dot)
pry(main)> .ls -al

Or use shell-mode.

pry(main)> shell-mode
pry main:/Users/myname/rubytest $ .cd rubytest
pry main:/Users/myname/rubytest $ .ls
addtemps.rb list.txt    temps.txt
exception1.rb   tempavg.rb  tkexample.rb
pry main:/Users/myname/rubytest $ .vim test6.rb
pry main:/Users/myname/rubytest $ load "test6.rb"
=> true
pry main:/Users/myname/rubytest $ hello_world
hello world!
=> nil

Getting out of shell-mode.

# just type shell-mode again
$ pry
[1] pry(main)> shell-mode
pry main:/Users/myname/first_app $ shell-mode
[3] pry(main)>

List methods of defined context


# ls to list methods of defined context.
pry(main)> s="pry"
pry(main)> ls s

# Use cd to change to the obect. Then use ls to show all methods 
# You can create an object and cd 
pry(main)> require 'net/http'
=> true
pry(main)> url = URI.parse('http://www.zenet-web.co.jp/index.html')
=> #<URI::HTTP:0x007faf6247d560 URL:http://www.zenet-web.co.jp/index.html>
pry(main)> req = Net::HTTP::Get.new(url.path)
=> #<Net::HTTP::Get GET>
pry(main)> res = Net::HTTP::start(url.host, url.port) do |http|
pry(main)*   http.request(req)
pry(main)* end
=> #<Net::HTTPOK 200 OK readbody=true>
pry(main)> cd res
pry(#<Net::HTTPOK>):1> ls
Net::HTTPHeader#methods:
...
pry(main)>

# go back to the main
pry(main)> cd

Calling pry from runtime

# test.rb
require 'pry'
puts "Run Pry!"
binding.pry

Run test.rb. It will start pry after running the script.

$ ruby test5.rb
Run Pry!

From: /Users/teacher/Documents/rubytest/test5.rb @ line 5 :

    1: require 'pry'
    2:
    3:
    4: puts "Run Pry!"
 => 5: binding.pry

Another example

# test.rb
require 'pry'

class A
  def hello() puts "hello world!" end
end

a = A.new

# set x to 10
x = 10

# start a REPL session
binding.pry

# program resumes here (after pry session)
puts "program resumes here. Value of x is: #{x}."

Run it from your terminal

$ ruby test4.rb

From: /Users/teacher/Documents/rubytest/test4.rb @ line 14 :

     9:
    10: # set x to 10
    11: x = 10
    12:
    13: # start a REPL session
 => 14: binding.pry
    15:
    16: # program resumes here (after pry session)
    17: puts "program resumes here. Value of x is: #{x}."

[1] pry(main)> a.hello
hello world!
=> nil
[2] pry(main)> puts x
10
=> nil
[3] pry(main)> def a.goodbye
[3] pry(main)*   puts "Goodbye world!"
[3] pry(main)* end
=> nil
[4] pry(main)> a.goodbye
Goodbye world!
=> nil
[5] pry(main)> x="changed"
=> "changed"
[6] pry(main)> exit
program resumes here. Value of x is: changed.

Using pry on a rails project

Install pry-rails gem.

$ gem install pry-rails

Add to Gemfile

group :development do
  gem 'sqlite3', '1.3.7'
  gem 'pry-rails'
end

You can add pry
Run rails console.

$ rails c
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8