pry 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/README.markdown +34 -15
- data/Rakefile +1 -1
- data/lib/pry.rb +26 -6
- data/lib/pry/version.rb +1 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
data/README.markdown
CHANGED
@@ -3,7 +3,7 @@ Pry
|
|
3
3
|
|
4
4
|
(C) John Mair (banisterfiend) 2010
|
5
5
|
|
6
|
-
_attach an irb-like session to any
|
6
|
+
_attach an irb-like session to any object at runtime_
|
7
7
|
|
8
8
|
Pry is a simple Ruby REPL that specializes in the interactive
|
9
9
|
manipulation of objects during the running of a program.
|
@@ -17,7 +17,7 @@ example: prying on an object at runtime
|
|
17
17
|
|
18
18
|
With the `Pry.into()` method we can pry (open an irb-like session) on
|
19
19
|
an object. In the example below we open a Pry session for the `Test` class and execute a method and add
|
20
|
-
an instance variable. The
|
20
|
+
an instance variable. The current thread is halted for the duration of the session.
|
21
21
|
|
22
22
|
require 'pry'
|
23
23
|
|
@@ -73,19 +73,6 @@ an instance variable inside that class:
|
|
73
73
|
Ending Pry session for Hello
|
74
74
|
pry(main)> exit
|
75
75
|
Ending Pry session for main
|
76
|
-
|
77
|
-
# program resumes here
|
78
|
-
|
79
|
-
|
80
|
-
example: Spawn a separate thread so you can use `Pry` to manipulate an
|
81
|
-
object without halting the program.
|
82
|
-
---------------------------------------------------------------------------------------------------
|
83
|
-
|
84
|
-
If we embed our `Pry.into` method inside its own thread we can examine
|
85
|
-
and manipulate objects without halting the program.
|
86
|
-
|
87
|
-
# Pry.into() without parameters opens up the top-level (main)
|
88
|
-
Thread.new { Pry.into }
|
89
76
|
|
90
77
|
|
91
78
|
Features and limitations
|
@@ -123,6 +110,38 @@ Limitations:
|
|
123
110
|
hash literal syntax (this: syntax) or the 'stabby lambda' syntax
|
124
111
|
(->).
|
125
112
|
|
113
|
+
Commands
|
114
|
+
-----------
|
115
|
+
|
116
|
+
The Pry API:
|
117
|
+
|
118
|
+
* `Pry.into()` and `Pry.start()` and `Pry.repl()` are all aliases of
|
119
|
+
oneanother. They all start a Read-Eval-Print-Loop on the object they
|
120
|
+
receive as a parameter. In the case of no parameter they operate on
|
121
|
+
top-level (main). They can receive any object or a `Binding`
|
122
|
+
object as parameter.
|
123
|
+
* If, for some reason you do not want to 'loop' then use `Pry.rep()`; it
|
124
|
+
only performs the Read-Eval-Print section of the REPL - it ends the
|
125
|
+
session after just one line of input. It takes the same parameters as
|
126
|
+
`Pry.repl()`
|
127
|
+
* Likewise `Pry.re()` only performs the Read-Eval section of the REPL,
|
128
|
+
it returns the result of the evaluation. It also takes the same parameters as `Pry.repl()`
|
129
|
+
* Similarly `Pry.r()` only performs the Read section of the REPL, only
|
130
|
+
returning the Ruby expression (as a string) or an Exception object in
|
131
|
+
case of error. It takes the same parameters as all the others.
|
132
|
+
|
133
|
+
Pry supports a few commands inside the session itself:
|
134
|
+
|
135
|
+
* Typing `!` on a line by itself will refresh the REPL - useful for
|
136
|
+
getting you out of a situation if the parsing process
|
137
|
+
goes wrong.
|
138
|
+
* `exit` or `quit` will end the current Pry session. Note that it will
|
139
|
+
not end any containing Pry sessions if the current session happens
|
140
|
+
to be nested.
|
141
|
+
* `#exit` or `#quit` will end the currently running program.
|
142
|
+
* You can type `Pry.into(obj)` to nest another Pry session within the
|
143
|
+
current one with `obj` as the receiver of the new session. Very useful
|
144
|
+
when exploring large or complicated runtime state.
|
126
145
|
|
127
146
|
Contact
|
128
147
|
-------
|
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ CLEAN.include("ext/**/*.#{dlext}", "ext/**/*.log", "ext/**/*.o",
|
|
12
12
|
|
13
13
|
def apply_spec_defaults(s)
|
14
14
|
s.name = "pry"
|
15
|
-
s.summary = "attach an irb-like session to any object"
|
15
|
+
s.summary = "attach an irb-like session to any object at runtime"
|
16
16
|
s.version = Pry::VERSION
|
17
17
|
s.date = Time.now.strftime '%Y-%m-%d'
|
18
18
|
s.author = "John Mair (banisterfiend)"
|
data/lib/pry.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
# (C) John Mair (banisterfiend) 2010
|
2
|
+
# MIT License
|
3
|
+
|
4
|
+
direc = File.dirname(__FILE__)
|
5
|
+
|
1
6
|
require 'rubygems'
|
2
7
|
require 'readline'
|
3
8
|
require 'ruby_parser'
|
9
|
+
require "#{direc}/pry/version"
|
4
10
|
|
5
11
|
module Pry
|
6
12
|
class << self
|
@@ -12,22 +18,28 @@ module Pry
|
|
12
18
|
@wait_prompt = proc { |v| "pry(#{v})* " }
|
13
19
|
@session_start_msg = proc { |v| "Beginning Pry session for #{v}" }
|
14
20
|
@session_end_msg = proc { |v| "Ending Pry session for #{v}" }
|
21
|
+
|
22
|
+
# useful for ending all Pry sessions currently active
|
23
|
+
@dead = false
|
15
24
|
|
16
25
|
# loop
|
17
26
|
def self.repl(target=TOPLEVEL_BINDING)
|
18
27
|
if !target.is_a?(Binding)
|
19
28
|
target = target.instance_eval { binding }
|
20
29
|
end
|
21
|
-
|
22
|
-
|
30
|
+
|
31
|
+
target_self = target.eval('self')
|
32
|
+
puts session_start_msg.call(target_self)
|
23
33
|
|
24
34
|
loop do
|
25
|
-
if catch(:pop) { rep(target) } == :return
|
26
|
-
break
|
35
|
+
if catch(:pop) { rep(target) } == :return || @dead
|
36
|
+
break
|
27
37
|
end
|
28
38
|
end
|
29
39
|
|
30
|
-
puts session_end_msg.call(
|
40
|
+
puts session_end_msg.call(target_self)
|
41
|
+
|
42
|
+
target_self
|
31
43
|
end
|
32
44
|
|
33
45
|
class << self
|
@@ -93,9 +105,17 @@ module Pry
|
|
93
105
|
|
94
106
|
def self.valid_expression?(code)
|
95
107
|
RubyParser.new.parse(code)
|
96
|
-
rescue Racc::ParseError
|
108
|
+
rescue Racc::ParseError, SyntaxError
|
97
109
|
false
|
98
110
|
else
|
99
111
|
true
|
100
112
|
end
|
113
|
+
|
114
|
+
def self.kill
|
115
|
+
@dead = true
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.revive
|
119
|
+
@dead = false
|
120
|
+
end
|
101
121
|
end
|
data/lib/pry/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- John Mair (banisterfiend)
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 2.0.5
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
|
-
description: attach an irb-like session to any object
|
35
|
+
description: attach an irb-like session to any object at runtime
|
36
36
|
email: jrmair@gmail.com
|
37
37
|
executables: []
|
38
38
|
|
@@ -77,6 +77,6 @@ rubyforge_project:
|
|
77
77
|
rubygems_version: 1.3.7
|
78
78
|
signing_key:
|
79
79
|
specification_version: 3
|
80
|
-
summary: attach an irb-like session to any object
|
80
|
+
summary: attach an irb-like session to any object at runtime
|
81
81
|
test_files: []
|
82
82
|
|