pry 0.10.0.pre4-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +702 -0
- data/LICENSE +25 -0
- data/README.md +406 -0
- data/bin/pry +16 -0
- data/lib/pry.rb +161 -0
- data/lib/pry/cli.rb +220 -0
- data/lib/pry/code.rb +341 -0
- data/lib/pry/code/code_file.rb +103 -0
- data/lib/pry/code/code_range.rb +71 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +172 -0
- data/lib/pry/color_printer.rb +55 -0
- data/lib/pry/command.rb +692 -0
- data/lib/pry/command_set.rb +443 -0
- data/lib/pry/commands.rb +6 -0
- data/lib/pry/commands/amend_line.rb +99 -0
- data/lib/pry/commands/bang.rb +20 -0
- data/lib/pry/commands/bang_pry.rb +17 -0
- data/lib/pry/commands/cat.rb +62 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +77 -0
- data/lib/pry/commands/cat/file_formatter.rb +67 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +41 -0
- data/lib/pry/commands/change_inspector.rb +27 -0
- data/lib/pry/commands/change_prompt.rb +26 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/disabled_commands.rb +2 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +195 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
- data/lib/pry/commands/exit.rb +42 -0
- data/lib/pry/commands/exit_all.rb +29 -0
- data/lib/pry/commands/exit_program.rb +23 -0
- data/lib/pry/commands/find_method.rb +193 -0
- data/lib/pry/commands/fix_indent.rb +19 -0
- data/lib/pry/commands/gem_cd.rb +26 -0
- data/lib/pry/commands/gem_install.rb +32 -0
- data/lib/pry/commands/gem_list.rb +33 -0
- data/lib/pry/commands/gem_open.rb +29 -0
- data/lib/pry/commands/gist.rb +101 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +180 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +53 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/list_inspectors.rb +35 -0
- data/lib/pry/commands/list_prompts.rb +35 -0
- data/lib/pry/commands/ls.rb +114 -0
- data/lib/pry/commands/ls/constants.rb +47 -0
- data/lib/pry/commands/ls/formatter.rb +49 -0
- data/lib/pry/commands/ls/globals.rb +48 -0
- data/lib/pry/commands/ls/grep.rb +21 -0
- data/lib/pry/commands/ls/instance_vars.rb +39 -0
- data/lib/pry/commands/ls/interrogatable.rb +18 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
- data/lib/pry/commands/ls/local_names.rb +35 -0
- data/lib/pry/commands/ls/local_vars.rb +39 -0
- data/lib/pry/commands/ls/ls_entity.rb +70 -0
- data/lib/pry/commands/ls/methods.rb +57 -0
- data/lib/pry/commands/ls/methods_helper.rb +46 -0
- data/lib/pry/commands/ls/self_methods.rb +32 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +103 -0
- data/lib/pry/commands/pry_backtrace.rb +25 -0
- data/lib/pry/commands/pry_version.rb +17 -0
- data/lib/pry/commands/raise_up.rb +32 -0
- data/lib/pry/commands/reload_code.rb +62 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +60 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +48 -0
- data/lib/pry/commands/shell_mode.rb +25 -0
- data/lib/pry/commands/show_doc.rb +83 -0
- data/lib/pry/commands/show_info.rb +195 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +50 -0
- data/lib/pry/commands/simple_prompt.rb +22 -0
- data/lib/pry/commands/stat.rb +40 -0
- data/lib/pry/commands/switch_to.rb +23 -0
- data/lib/pry/commands/toggle_color.rb +24 -0
- data/lib/pry/commands/watch_expression.rb +105 -0
- data/lib/pry/commands/watch_expression/expression.rb +38 -0
- data/lib/pry/commands/whereami.rb +190 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/config.rb +24 -0
- data/lib/pry/config/behavior.rb +139 -0
- data/lib/pry/config/convenience.rb +26 -0
- data/lib/pry/config/default.rb +165 -0
- data/lib/pry/core_extensions.rb +131 -0
- data/lib/pry/editor.rb +133 -0
- data/lib/pry/exceptions.rb +77 -0
- data/lib/pry/helpers.rb +5 -0
- data/lib/pry/helpers/base_helpers.rb +113 -0
- data/lib/pry/helpers/command_helpers.rb +156 -0
- data/lib/pry/helpers/documentation_helpers.rb +75 -0
- data/lib/pry/helpers/options_helpers.rb +27 -0
- data/lib/pry/helpers/table.rb +109 -0
- data/lib/pry/helpers/text.rb +107 -0
- data/lib/pry/history.rb +125 -0
- data/lib/pry/history_array.rb +121 -0
- data/lib/pry/hooks.rb +230 -0
- data/lib/pry/indent.rb +406 -0
- data/lib/pry/input_completer.rb +242 -0
- data/lib/pry/input_lock.rb +132 -0
- data/lib/pry/inspector.rb +27 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method.rb +546 -0
- data/lib/pry/method/disowned.rb +53 -0
- data/lib/pry/method/patcher.rb +125 -0
- data/lib/pry/method/weird_method_locator.rb +186 -0
- data/lib/pry/module_candidate.rb +136 -0
- data/lib/pry/object_path.rb +82 -0
- data/lib/pry/output.rb +50 -0
- data/lib/pry/pager.rb +234 -0
- data/lib/pry/plugins.rb +103 -0
- data/lib/pry/prompt.rb +26 -0
- data/lib/pry/pry_class.rb +375 -0
- data/lib/pry/pry_instance.rb +654 -0
- data/lib/pry/rbx_path.rb +22 -0
- data/lib/pry/repl.rb +202 -0
- data/lib/pry/repl_file_loader.rb +74 -0
- data/lib/pry/rubygem.rb +82 -0
- data/lib/pry/terminal.rb +79 -0
- data/lib/pry/test/helper.rb +170 -0
- data/lib/pry/version.rb +3 -0
- data/lib/pry/wrapped_module.rb +373 -0
- metadata +248 -0
data/LICENSE
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
License
|
2
|
+
-------
|
3
|
+
|
4
|
+
(The MIT License)
|
5
|
+
|
6
|
+
Copyright (c) 2013 John Mair (banisterfiend)
|
7
|
+
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
a copy of this software and associated documentation files (the
|
10
|
+
'Software'), to deal in the Software without restriction, including
|
11
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
the following conditions:
|
15
|
+
|
16
|
+
The above copyright notice and this permission notice shall be
|
17
|
+
included in all copies or substantial portions of the Software.
|
18
|
+
|
19
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
22
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
23
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
24
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
25
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,406 @@
|
|
1
|
+
[![Build Status](https://img.shields.io/travis/pry/pry.svg)](https://travis-ci.org/pry/pry)
|
2
|
+
[![Code Climate](https://img.shields.io/codeclimate/github/pry/pry.svg)](https://codeclimate.com/github/pry/pry)
|
3
|
+
[![Inline docs](http://inch-pages.github.io/github/pry/pry.svg)](http://inch-pages.github.io/github/pry/pry)
|
4
|
+
|
5
|
+
<center>
|
6
|
+
![The Pry Logo](https://dl.dropbox.com/u/26521875/pry%20stuff/logo/pry_logo_350.png)
|
7
|
+
|
8
|
+
© John Mair ([banisterfiend](https://twitter.com/banisterfiend)) 2013<br>
|
9
|
+
|
10
|
+
**Please** [DONATE](http://www.pledgie.com/campaigns/15899) to the Pry project - Pry was a **huge** amount of work and every donation received is encouraging and supports Pry's continued development!
|
11
|
+
|
12
|
+
**Sponsors**
|
13
|
+
|
14
|
+
[Tealeaf Academy](www.gotealeaf.com)<br/>
|
15
|
+
[Atomic Object](http://www.atomicobject.com/)<br/>
|
16
|
+
[Hashrocket](http://hashrocket.com/)<br/>
|
17
|
+
[Intridea](http://intridea.com/)<br/>
|
18
|
+
[Gaslight](http://gaslight.co/home)<br/>
|
19
|
+
|
20
|
+
**Other Resources**
|
21
|
+
|
22
|
+
[Skip to the website (recommended)](http://pry.github.com) <br />
|
23
|
+
[Skip to the wiki](https://github.com/pry/pry/wiki)
|
24
|
+
</center>
|
25
|
+
|
26
|
+
Pry is a powerful alternative to the standard IRB shell for Ruby. It is
|
27
|
+
written from scratch to provide a number of advanced features,
|
28
|
+
including:
|
29
|
+
|
30
|
+
* Source code browsing (including core C source with the pry-doc gem)
|
31
|
+
* Documentation browsing
|
32
|
+
* Live help system
|
33
|
+
* Open methods in editors (`edit Class#method`)
|
34
|
+
* Syntax highlighting
|
35
|
+
* Command shell integration (start editors, run git, and rake from within Pry)
|
36
|
+
* Gist integration
|
37
|
+
* Navigation around state (`cd`, `ls` and friends)
|
38
|
+
* Runtime invocation (use Pry as a developer console or debugger)
|
39
|
+
* Exotic object support (BasicObject instances, IClasses, ...)
|
40
|
+
* A Powerful and flexible command system
|
41
|
+
* Ability to view and replay history
|
42
|
+
* Many convenience commands inspired by IPython, Smalltalk and other advanced REPLs
|
43
|
+
* A wide-range number of [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide remote sessions, full debugging functionality, and more.
|
44
|
+
|
45
|
+
Pry also aims to be more than an IRB replacement; it is an
|
46
|
+
attempt to bring REPL driven programming to the Ruby language. It is
|
47
|
+
currently not as powerful as tools like [SLIME](http://en.wikipedia.org/wiki/SLIME) for lisp, but that is the
|
48
|
+
general direction Pry is heading.
|
49
|
+
|
50
|
+
Pry is also fairly flexible and allows significant user
|
51
|
+
[customization](https://github.com/pry/pry/wiki/Customization-and-configuration)
|
52
|
+
is trivial to set it to read from any object that has a `readline` method and write to any object that has a
|
53
|
+
`puts` method - many other aspects of Pry are also configurable making
|
54
|
+
it a good choice for implementing custom shells.
|
55
|
+
|
56
|
+
Pry comes with an executable so it can be invoked at the command line.
|
57
|
+
Just enter `pry` to start. A `.pryrc` file in the user's home directory will
|
58
|
+
be loaded if it exists. Type `pry --help` at the command line for more
|
59
|
+
information.
|
60
|
+
|
61
|
+
Try `gem install pry-doc` for additional documentation on Ruby Core
|
62
|
+
methods. The additional docs are accessed through the `show-doc` and
|
63
|
+
`show-method` commands.
|
64
|
+
|
65
|
+
* Install the [gem](https://rubygems.org/gems/pry): `gem install pry`
|
66
|
+
* Browse the comprehensive [documentation at the official Pry wiki](https://github.com/pry/pry/wiki)
|
67
|
+
* Read the [YARD API documentation](http://rdoc.info/github/pry/pry/master/file/README.markdown)
|
68
|
+
* See the [source code](http://github.com/pry/pry)
|
69
|
+
|
70
|
+
### Commands
|
71
|
+
|
72
|
+
Nearly every piece of functionality in a Pry session is implemented as
|
73
|
+
a command. Commands are not methods and must start at the beginning of a line, with no
|
74
|
+
whitespace in between. Commands support a flexible syntax and allow
|
75
|
+
'options' in the same way as shell commands, for example the following
|
76
|
+
Pry command will show a list of all private instance methods (in
|
77
|
+
scope) that begin with 'pa'
|
78
|
+
|
79
|
+
pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
|
80
|
+
YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
|
81
|
+
|
82
|
+
### Navigating around state
|
83
|
+
|
84
|
+
Pry allows us to pop in and out of different scopes (objects) using
|
85
|
+
the `cd` command. This enables us to explore the run-time view of a
|
86
|
+
program or library. To view which variables and methods are available
|
87
|
+
within a particular scope we use the versatile [ls command.](https://gist.github.com/c0fc686ef923c8b87715)
|
88
|
+
|
89
|
+
Here we will begin Pry at top-level, then Pry on a class and then on
|
90
|
+
an instance variable inside that class:
|
91
|
+
|
92
|
+
pry(main)> class Hello
|
93
|
+
pry(main)* @x = 20
|
94
|
+
pry(main)* end
|
95
|
+
=> 20
|
96
|
+
pry(main)> cd Hello
|
97
|
+
pry(Hello):1> ls -i
|
98
|
+
instance variables: @x
|
99
|
+
pry(Hello):1> cd @x
|
100
|
+
pry(20):2> self + 10
|
101
|
+
=> 30
|
102
|
+
pry(20):2> cd ..
|
103
|
+
pry(Hello):1> cd ..
|
104
|
+
pry(main)> cd ..
|
105
|
+
|
106
|
+
The number after the `:` in the pry prompt indicates the nesting
|
107
|
+
level. To display more information about nesting, use the `nesting`
|
108
|
+
command. E.g
|
109
|
+
|
110
|
+
pry("friend"):3> nesting
|
111
|
+
Nesting status:
|
112
|
+
0. main (Pry top level)
|
113
|
+
1. Hello
|
114
|
+
2. 100
|
115
|
+
3. "friend"
|
116
|
+
=> nil
|
117
|
+
|
118
|
+
We can then jump back to any of the previous nesting levels by using
|
119
|
+
the `jump-to` command:
|
120
|
+
|
121
|
+
pry("friend"):3> jump-to 1
|
122
|
+
=> 100
|
123
|
+
pry(Hello):1>
|
124
|
+
|
125
|
+
### Runtime invocation
|
126
|
+
|
127
|
+
Pry can be invoked in the middle of a running program. It opens a Pry
|
128
|
+
session at the point it's called and makes all program state at that
|
129
|
+
point available. It can be invoked on any object using the
|
130
|
+
`my_object.pry` syntax or on the current binding (or any binding)
|
131
|
+
using `binding.pry`. The Pry session will then begin within the scope
|
132
|
+
of the object (or binding). When the session ends the program continues with any
|
133
|
+
modifications you made to it.
|
134
|
+
|
135
|
+
This functionality can be used for such things as: debugging,
|
136
|
+
implementing developer consoles and applying hot patches.
|
137
|
+
|
138
|
+
code:
|
139
|
+
|
140
|
+
# test.rb
|
141
|
+
require 'pry'
|
142
|
+
|
143
|
+
class A
|
144
|
+
def hello() puts "hello world!" end
|
145
|
+
end
|
146
|
+
|
147
|
+
a = A.new
|
148
|
+
|
149
|
+
# start a REPL session
|
150
|
+
binding.pry
|
151
|
+
|
152
|
+
# program resumes here (after pry session)
|
153
|
+
puts "program resumes here."
|
154
|
+
|
155
|
+
Pry session:
|
156
|
+
|
157
|
+
pry(main)> a.hello
|
158
|
+
hello world!
|
159
|
+
=> nil
|
160
|
+
pry(main)> def a.goodbye
|
161
|
+
pry(main)* puts "goodbye cruel world!"
|
162
|
+
pry(main)* end
|
163
|
+
=> nil
|
164
|
+
pry(main)> a.goodbye
|
165
|
+
goodbye cruel world!
|
166
|
+
=> nil
|
167
|
+
pry(main)> exit
|
168
|
+
|
169
|
+
program resumes here.
|
170
|
+
|
171
|
+
### Command Shell Integration
|
172
|
+
|
173
|
+
A line of input that begins with a '.' will be forwarded to the
|
174
|
+
command shell. This enables us to navigate the file system, spawn
|
175
|
+
editors, and run git and rake directly from within Pry.
|
176
|
+
|
177
|
+
Further, we can use the `shell-mode` command to incorporate the
|
178
|
+
present working directory into the Pry prompt and bring in (limited at this stage, sorry) file name completion.
|
179
|
+
We can also interpolate Ruby code directly into the shell by
|
180
|
+
using the normal `#{}` string interpolation syntax.
|
181
|
+
|
182
|
+
In the code below we're going to switch to `shell-mode` and edit the
|
183
|
+
`.pryrc` file in the home directory. We'll then cat its contents and
|
184
|
+
reload the file.
|
185
|
+
|
186
|
+
pry(main)> shell-mode
|
187
|
+
pry main:/home/john/ruby/projects/pry $ .cd ~
|
188
|
+
pry main:/home/john $ .emacsclient .pryrc
|
189
|
+
pry main:/home/john $ .cat .pryrc
|
190
|
+
def hello_world
|
191
|
+
puts "hello world!"
|
192
|
+
end
|
193
|
+
pry main:/home/john $ load ".pryrc"
|
194
|
+
=> true
|
195
|
+
pry main:/home/john $ hello_world
|
196
|
+
hello world!
|
197
|
+
|
198
|
+
We can also interpolate Ruby code into the shell. In the
|
199
|
+
example below we use the shell command `cat` on a random file from the
|
200
|
+
current directory and count the number of lines in that file with
|
201
|
+
`wc`:
|
202
|
+
|
203
|
+
pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
|
204
|
+
44
|
205
|
+
|
206
|
+
### Code Browsing
|
207
|
+
|
208
|
+
You can browse method source code with the `show-method` command. Nearly all Ruby methods (and some C methods, with the pry-doc
|
209
|
+
gem) can have their source viewed. Code that is longer than a page is
|
210
|
+
sent through a pager (such as less), and all code is properly syntax
|
211
|
+
highlighted (even C code).
|
212
|
+
|
213
|
+
The `show-method` command accepts two syntaxes, the typical ri
|
214
|
+
`Class#method` syntax and also simply the name of a method that's in
|
215
|
+
scope. You can optionally pass the `-l` option to show-method to
|
216
|
+
include line numbers in the output.
|
217
|
+
|
218
|
+
In the following example we will enter the `Pry` class, list the
|
219
|
+
instance methods beginning with 're' and display the source code for the `rep` method:
|
220
|
+
|
221
|
+
pry(main)> cd Pry
|
222
|
+
pry(Pry):1> ls -M --grep re
|
223
|
+
Pry#methods: re readline refresh rep repl repl_epilogue repl_prologue retrieve_line
|
224
|
+
pry(Pry):1> show-method rep -l
|
225
|
+
|
226
|
+
From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb @ line 143:
|
227
|
+
Number of lines: 6
|
228
|
+
|
229
|
+
143: def rep(target=TOPLEVEL_BINDING)
|
230
|
+
144: target = Pry.binding_for(target)
|
231
|
+
145: result = re(target)
|
232
|
+
146:
|
233
|
+
147: show_result(result) if should_print?
|
234
|
+
148: end
|
235
|
+
|
236
|
+
Note that we can also view C methods (from Ruby Core) using the
|
237
|
+
`pry-doc` plugin; we also show off the alternate syntax for
|
238
|
+
`show-method`:
|
239
|
+
|
240
|
+
pry(main)> show-method Array#select
|
241
|
+
|
242
|
+
From: array.c in Ruby Core (C Method):
|
243
|
+
Number of lines: 15
|
244
|
+
|
245
|
+
static VALUE
|
246
|
+
rb_ary_select(VALUE ary)
|
247
|
+
{
|
248
|
+
VALUE result;
|
249
|
+
long i;
|
250
|
+
|
251
|
+
RETURN_ENUMERATOR(ary, 0, 0);
|
252
|
+
result = rb_ary_new2(RARRAY_LEN(ary));
|
253
|
+
for (i = 0; i < RARRAY_LEN(ary); i++) {
|
254
|
+
if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
|
255
|
+
rb_ary_push(result, rb_ary_elt(ary, i));
|
256
|
+
}
|
257
|
+
}
|
258
|
+
return result;
|
259
|
+
}
|
260
|
+
|
261
|
+
### Documentation Browsing
|
262
|
+
|
263
|
+
One use-case for Pry is to explore a program at run-time by `cd`-ing
|
264
|
+
in and out of objects and viewing and invoking methods. In the course
|
265
|
+
of exploring it may be useful to read the documentation for a
|
266
|
+
specific method that you come across. Like `show-method` the `show-doc` command supports
|
267
|
+
two syntaxes - the normal `ri` syntax as well as accepting the name of
|
268
|
+
any method that is currently in scope.
|
269
|
+
|
270
|
+
The Pry documentation system does not rely on pre-generated `rdoc` or
|
271
|
+
`ri`, instead it grabs the comments directly above the method on
|
272
|
+
demand. This results in speedier documentation retrieval and allows
|
273
|
+
the Pry system to retrieve documentation for methods that would not be
|
274
|
+
picked up by `rdoc`. Pry also has a basic understanding of both the
|
275
|
+
rdoc and yard formats and will attempt to syntax highlight the
|
276
|
+
documentation appropriately.
|
277
|
+
|
278
|
+
Nonetheless, the `ri` functionality is very good and
|
279
|
+
has an advantage over Pry's system in that it allows documentation
|
280
|
+
lookup for classes as well as methods. Pry therefore has good
|
281
|
+
integration with `ri` through the `ri` command. The syntax
|
282
|
+
for the command is exactly as it would be in command-line -
|
283
|
+
so it is not necessary to quote strings.
|
284
|
+
|
285
|
+
In our example we will enter the `Gem` class and view the
|
286
|
+
documentation for the `try_activate` method:
|
287
|
+
|
288
|
+
pry(main)> cd Gem
|
289
|
+
pry(Gem):1> show-doc try_activate
|
290
|
+
|
291
|
+
From: /Users/john/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb @ line 201:
|
292
|
+
Number of lines: 3
|
293
|
+
|
294
|
+
Try to activate a gem containing path. Returns true if
|
295
|
+
activation succeeded or wasn't needed because it was already
|
296
|
+
activated. Returns false if it can't find the path in a gem.
|
297
|
+
pry(Gem):1>
|
298
|
+
|
299
|
+
We can also use `ri` in the normal way:
|
300
|
+
|
301
|
+
pry(main) ri Array#each
|
302
|
+
----------------------------------------------------------- Array#each
|
303
|
+
array.each {|item| block } -> array
|
304
|
+
------------------------------------------------------------------------
|
305
|
+
Calls _block_ once for each element in _self_, passing that element
|
306
|
+
as a parameter.
|
307
|
+
|
308
|
+
a = [ "a", "b", "c" ]
|
309
|
+
a.each {|x| print x, " -- " }
|
310
|
+
|
311
|
+
produces:
|
312
|
+
|
313
|
+
a -- b -- c --
|
314
|
+
|
315
|
+
### Gist integration
|
316
|
+
|
317
|
+
If the `gist` gem is installed then method source or documentation can be gisted to github with the
|
318
|
+
`gist` command. The `gist` command is capable of gisting [almost any REPL content](https://gist.github.com/cae143e4533416529726), including methods, documentation,
|
319
|
+
input expressions, command source, and so on. In the example below we will gist the C source
|
320
|
+
code for the `Symbol#to_proc` method to github:
|
321
|
+
|
322
|
+
pry(main)> gist -m Symbol#to_proc
|
323
|
+
Gist created at https://gist.github.com/5332c38afc46d902ce46 and added to clipboard.
|
324
|
+
pry(main)>
|
325
|
+
|
326
|
+
You can see the actual gist generated here: [https://gist.github.com/5332c38afc46d902ce46](https://gist.github.com/5332c38afc46d902ce46)
|
327
|
+
|
328
|
+
### Edit methods
|
329
|
+
|
330
|
+
You can use `edit Class#method` or `edit my_method`
|
331
|
+
(if the method is in scope) to open a method for editing directly in
|
332
|
+
your favorite editor. Pry has knowledge of a few different editors and
|
333
|
+
will attempt to open the file at the line the method is defined.
|
334
|
+
|
335
|
+
You can set the editor to use by assigning to the `Pry.editor`
|
336
|
+
accessor. `Pry.editor` will default to `$EDITOR` or failing that will
|
337
|
+
use `nano` as the backup default. The file that is edited will be
|
338
|
+
automatically reloaded after exiting the editor - reloading can be
|
339
|
+
suppressed by passing the `--no-reload` option to `edit`
|
340
|
+
|
341
|
+
In the example below we will set our default editor to "emacsclient"
|
342
|
+
and open the `Pry#repl` method for editing:
|
343
|
+
|
344
|
+
pry(main)> Pry.editor = "emacsclient"
|
345
|
+
pry(main)> edit Pry#repl
|
346
|
+
|
347
|
+
### Live Help System
|
348
|
+
|
349
|
+
Many other commands are available in Pry; to see the full list type
|
350
|
+
`help` at the prompt. A short description of each command is provided
|
351
|
+
with basic instructions for use; some commands have a more extensive
|
352
|
+
help that can be accessed via typing `command_name --help`. A command
|
353
|
+
will typically say in its description if the `--help` option is
|
354
|
+
avaiable.
|
355
|
+
|
356
|
+
### Use Pry as your Rails Console
|
357
|
+
|
358
|
+
The recommended way to use Pry as your Rails console is to add
|
359
|
+
[the `pry-rails` gem](https://github.com/rweng/pry-rails) to
|
360
|
+
your Gemfile. This replaces the default console with Pry, in
|
361
|
+
addition to loading the Rails console helpers and adding some
|
362
|
+
useful Rails-specific commands.
|
363
|
+
|
364
|
+
If you don't want to change your Gemfile, you can still run a Pry
|
365
|
+
console in your app's environment using Pry's `-r` flag:
|
366
|
+
|
367
|
+
pry -r ./config/environment
|
368
|
+
|
369
|
+
Also check out the [wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)
|
370
|
+
for more information about integrating Pry with Rails.
|
371
|
+
|
372
|
+
### Limitations:
|
373
|
+
|
374
|
+
* Tab completion is currently a bit broken/limited this will have a
|
375
|
+
major overhaul in a future version.
|
376
|
+
|
377
|
+
### Syntax Highlighting
|
378
|
+
|
379
|
+
Syntax highlighting is on by default in Pry. If you want to change
|
380
|
+
the colors, check out the [pry-theme](https://github.com/kyrylo/pry-theme)
|
381
|
+
gem.
|
382
|
+
|
383
|
+
You can toggle the syntax highlighting on and off in a session by
|
384
|
+
using the `toggle-color` command. Alternatively, you can turn it off
|
385
|
+
permanently by putting the line `Pry.color = false` in your `~/.pryrc`
|
386
|
+
file.
|
387
|
+
|
388
|
+
### Future Directions
|
389
|
+
|
390
|
+
Many new features are planned such as:
|
391
|
+
|
392
|
+
* Increase modularity (rely more on plugin system)
|
393
|
+
* Much improved documentation system, better support for YARD
|
394
|
+
* Better support for code and method reloading and saving code
|
395
|
+
* Extended and more sophisticated command system, allowing piping
|
396
|
+
between commands and running commands in background
|
397
|
+
|
398
|
+
### Contact
|
399
|
+
|
400
|
+
Problems or questions? file an issue at [github](https://github.com/pry/pry/issues)
|
401
|
+
|
402
|
+
### Contributors
|
403
|
+
|
404
|
+
Pry is primarily the work of [John Mair (banisterfiend)](http://github.com/banister), for full list
|
405
|
+
of contributors see the
|
406
|
+
[CONTRIBUTORS](https://github.com/pry/pry/blob/master/CONTRIBUTORS) file.
|
data/bin/pry
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# (C) John Mair (banisterfiend)
|
4
|
+
# MIT license
|
5
|
+
|
6
|
+
$0 = 'pry'
|
7
|
+
|
8
|
+
begin
|
9
|
+
require 'pry'
|
10
|
+
rescue LoadError
|
11
|
+
require 'rubygems'
|
12
|
+
require 'pry'
|
13
|
+
end
|
14
|
+
|
15
|
+
# Process command line options and run Pry
|
16
|
+
Pry::CLI.parse_options
|
data/lib/pry.rb
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
# (C) John Mair (banisterfiend) 2013
|
2
|
+
# MIT License
|
3
|
+
#
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
require 'pry/input_lock'
|
7
|
+
require 'pry/exceptions'
|
8
|
+
require 'pry/helpers/base_helpers'
|
9
|
+
require 'pry/hooks'
|
10
|
+
require 'forwardable'
|
11
|
+
|
12
|
+
class Pry
|
13
|
+
# The default hooks - display messages when beginning and ending Pry sessions.
|
14
|
+
DEFAULT_HOOKS = Pry::Hooks.new.add_hook(:before_session, :default) do |out, target, _pry_|
|
15
|
+
next if _pry_.quiet?
|
16
|
+
_pry_.run_command("whereami --quiet")
|
17
|
+
end
|
18
|
+
|
19
|
+
# The default print
|
20
|
+
DEFAULT_PRINT = proc do |output, value, _pry_|
|
21
|
+
_pry_.pager.open do |pager|
|
22
|
+
pager.print _pry_.config.output_prefix
|
23
|
+
Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# may be convenient when working with enormous objects and
|
28
|
+
# pretty_print is too slow
|
29
|
+
SIMPLE_PRINT = proc do |output, value|
|
30
|
+
begin
|
31
|
+
output.puts value.inspect
|
32
|
+
rescue RescuableException
|
33
|
+
output.puts "unknown"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# useful when playing with truly enormous objects
|
38
|
+
CLIPPED_PRINT = proc do |output, value|
|
39
|
+
output.puts Pry.view_clip(value, id: true)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Will only show the first line of the backtrace
|
43
|
+
DEFAULT_EXCEPTION_HANDLER = proc do |output, exception, _|
|
44
|
+
if UserError === exception && SyntaxError === exception
|
45
|
+
output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
|
46
|
+
else
|
47
|
+
output.puts "#{exception.class}: #{exception.message}"
|
48
|
+
output.puts "from #{exception.backtrace.first}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
DEFAULT_PROMPT_NAME = 'pry'
|
53
|
+
|
54
|
+
# The default prompt; includes the target and nesting level
|
55
|
+
DEFAULT_PROMPT = [
|
56
|
+
proc { |target_self, nest_level, pry|
|
57
|
+
"[#{pry.input_array.size}] #{pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
|
58
|
+
},
|
59
|
+
|
60
|
+
proc { |target_self, nest_level, pry|
|
61
|
+
"[#{pry.input_array.size}] #{pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
|
62
|
+
}
|
63
|
+
]
|
64
|
+
|
65
|
+
DEFAULT_PROMPT_SAFE_OBJECTS = [String, Numeric, Symbol, nil, true, false]
|
66
|
+
|
67
|
+
# A simple prompt - doesn't display target or nesting level
|
68
|
+
SIMPLE_PROMPT = [proc { ">> " }, proc { " | " }]
|
69
|
+
|
70
|
+
NO_PROMPT = [proc { '' }, proc { '' }]
|
71
|
+
|
72
|
+
SHELL_PROMPT = [
|
73
|
+
proc { |target_self, _, _pry_| "#{_pry_.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
|
74
|
+
proc { |target_self, _, _pry_| "#{_pry_.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
|
75
|
+
]
|
76
|
+
|
77
|
+
# A prompt that includes the full object path as well as
|
78
|
+
# input/output (_in_ and _out_) information. Good for navigation.
|
79
|
+
NAV_PROMPT = [
|
80
|
+
proc do |_, _, _pry_|
|
81
|
+
tree = _pry_.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
|
82
|
+
"[#{_pry_.input_array.count}] (#{_pry_.config.prompt_name}) #{tree}: #{_pry_.binding_stack.size - 1}> "
|
83
|
+
end,
|
84
|
+
proc do |_, _, _pry_|
|
85
|
+
tree = _pry_.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
|
86
|
+
"[#{_pry_.input_array.count}] (#{ _pry_.config.prompt_name}) #{tree}: #{_pry_.binding_stack.size - 1}* "
|
87
|
+
end,
|
88
|
+
]
|
89
|
+
|
90
|
+
# Deal with the ^D key being pressed. Different behaviour in different cases:
|
91
|
+
# 1. In an expression behave like `!` command.
|
92
|
+
# 2. At top-level session behave like `exit` command.
|
93
|
+
# 3. In a nested session behave like `cd ..`.
|
94
|
+
DEFAULT_CONTROL_D_HANDLER = proc do |eval_string, _pry_|
|
95
|
+
if !eval_string.empty?
|
96
|
+
eval_string.replace('') # Clear input buffer.
|
97
|
+
elsif _pry_.binding_stack.one?
|
98
|
+
_pry_.binding_stack.clear
|
99
|
+
throw(:breakout)
|
100
|
+
else
|
101
|
+
# Otherwise, saves current binding stack as old stack and pops last
|
102
|
+
# binding out of binding stack (the old stack still has that binding).
|
103
|
+
_pry_.command_state["cd"] ||= Pry::Config.from_hash({}) # FIXME
|
104
|
+
_pry_.command_state['cd'].old_stack = _pry_.binding_stack.dup
|
105
|
+
_pry_.binding_stack.pop
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
DEFAULT_SYSTEM = proc do |output, cmd, _|
|
110
|
+
if !system(cmd)
|
111
|
+
output.puts "Error: there was a problem executing system command: #{cmd}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Store the current working directory. This allows show-source etc. to work if
|
116
|
+
# your process has changed directory since boot. [Issue #675]
|
117
|
+
INITIAL_PWD = Dir.pwd
|
118
|
+
|
119
|
+
# This is to keep from breaking under Rails 3.2 for people who are doing that
|
120
|
+
# IRB = Pry thing.
|
121
|
+
module ExtendCommandBundle; end
|
122
|
+
end
|
123
|
+
|
124
|
+
require 'method_source'
|
125
|
+
require 'shellwords'
|
126
|
+
require 'stringio'
|
127
|
+
require 'coderay'
|
128
|
+
require 'slop'
|
129
|
+
require 'rbconfig'
|
130
|
+
require 'tempfile'
|
131
|
+
require 'pathname'
|
132
|
+
|
133
|
+
require 'pry/version'
|
134
|
+
require 'pry/repl'
|
135
|
+
require 'pry/rbx_path'
|
136
|
+
require 'pry/code'
|
137
|
+
require 'pry/history_array'
|
138
|
+
require 'pry/helpers'
|
139
|
+
require 'pry/code_object'
|
140
|
+
require 'pry/method'
|
141
|
+
require 'pry/wrapped_module'
|
142
|
+
require 'pry/history'
|
143
|
+
require 'pry/command'
|
144
|
+
require 'pry/command_set'
|
145
|
+
require 'pry/commands'
|
146
|
+
require 'pry/plugins'
|
147
|
+
require 'pry/core_extensions'
|
148
|
+
require 'pry/pry_class'
|
149
|
+
require 'pry/pry_instance'
|
150
|
+
require 'pry/cli'
|
151
|
+
require 'pry/color_printer'
|
152
|
+
require 'pry/pager'
|
153
|
+
require 'pry/terminal'
|
154
|
+
require 'pry/editor'
|
155
|
+
require 'pry/rubygem'
|
156
|
+
require "pry/indent"
|
157
|
+
require "pry/last_exception"
|
158
|
+
require "pry/prompt"
|
159
|
+
require "pry/inspector"
|
160
|
+
require 'pry/object_path'
|
161
|
+
require 'pry/output'
|