pry 0.9.12.2 → 0.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1141 -0
- data/LICENSE +2 -2
- data/README.md +466 -0
- data/bin/pry +4 -7
- data/lib/pry/basic_object.rb +10 -0
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +97 -92
- data/lib/pry/code/code_file.rb +114 -0
- data/lib/pry/code/code_range.rb +7 -4
- data/lib/pry/code/loc.rb +27 -14
- data/lib/pry/code.rb +62 -90
- data/lib/pry/code_object.rb +83 -39
- data/lib/pry/color_printer.rb +66 -0
- data/lib/pry/command.rb +202 -371
- data/lib/pry/command_set.rb +151 -133
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -82
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +85 -73
- data/lib/pry/commands/cat/file_formatter.rb +56 -63
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +64 -47
- data/lib/pry/commands/cd.rb +42 -26
- data/lib/pry/commands/change_inspector.rb +34 -0
- data/lib/pry/commands/change_prompt.rb +51 -0
- data/lib/pry/commands/clear_screen.rb +20 -0
- data/lib/pry/commands/code_collector.rb +148 -131
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +23 -34
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
- data/lib/pry/commands/edit.rb +183 -167
- data/lib/pry/commands/exit.rb +40 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -17
- data/lib/pry/commands/find_method.rb +167 -167
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +153 -132
- data/lib/pry/commands/import_set.rb +20 -15
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +42 -0
- data/lib/pry/commands/ls/constants.rb +75 -0
- data/lib/pry/commands/ls/formatter.rb +55 -0
- data/lib/pry/commands/ls/globals.rb +50 -0
- data/lib/pry/commands/ls/grep.rb +23 -0
- data/lib/pry/commands/ls/instance_vars.rb +40 -0
- data/lib/pry/commands/ls/interrogatable.rb +24 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
- data/lib/pry/commands/ls/local_names.rb +37 -0
- data/lib/pry/commands/ls/local_vars.rb +47 -0
- data/lib/pry/commands/ls/ls_entity.rb +65 -0
- data/lib/pry/commands/ls/methods.rb +55 -0
- data/lib/pry/commands/ls/methods_helper.rb +50 -0
- data/lib/pry/commands/ls/self_methods.rb +34 -0
- data/lib/pry/commands/ls.rb +100 -303
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -49
- data/lib/pry/commands/pry_backtrace.rb +22 -18
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +33 -27
- data/lib/pry/commands/reload_code.rb +57 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -38
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +66 -34
- data/lib/pry/commands/shell_mode.rb +22 -20
- data/lib/pry/commands/show_doc.rb +80 -65
- data/lib/pry/commands/show_info.rb +193 -159
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +113 -33
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +21 -13
- data/lib/pry/commands/watch_expression/expression.rb +43 -0
- data/lib/pry/commands/watch_expression.rb +110 -0
- data/lib/pry/commands/whereami.rb +157 -134
- data/lib/pry/commands/wtf.rb +78 -40
- data/lib/pry/config/attributable.rb +22 -0
- data/lib/pry/config/lazy_value.rb +29 -0
- data/lib/pry/config/memoized_value.rb +34 -0
- data/lib/pry/config/value.rb +24 -0
- data/lib/pry/config.rb +290 -220
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +50 -27
- data/lib/pry/editor.rb +130 -102
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +73 -0
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +22 -151
- data/lib/pry/helpers/command_helpers.rb +55 -63
- data/lib/pry/helpers/documentation_helpers.rb +21 -13
- data/lib/pry/helpers/options_helpers.rb +15 -8
- data/lib/pry/helpers/platform.rb +55 -0
- data/lib/pry/helpers/table.rb +44 -32
- data/lib/pry/helpers/text.rb +96 -86
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +101 -70
- data/lib/pry/hooks.rb +67 -137
- data/lib/pry/indent.rb +79 -73
- data/lib/pry/input_completer.rb +283 -0
- data/lib/pry/input_lock.rb +129 -0
- data/lib/pry/inspector.rb +39 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
- data/lib/pry/method/weird_method_locator.rb +80 -44
- data/lib/pry/method.rb +225 -176
- data/lib/pry/object_path.rb +91 -0
- data/lib/pry/output.rb +136 -0
- data/lib/pry/pager.rb +227 -68
- data/lib/pry/prompt.rb +214 -0
- data/lib/pry/pry_class.rb +216 -289
- data/lib/pry/pry_instance.rb +438 -500
- data/lib/pry/repl.rb +256 -0
- data/lib/pry/repl_file_loader.rb +34 -35
- data/lib/pry/ring.rb +89 -0
- data/lib/pry/slop/LICENSE +20 -0
- data/lib/pry/slop/commands.rb +190 -0
- data/lib/pry/slop/option.rb +210 -0
- data/lib/pry/slop.rb +672 -0
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable/evalable.rb +24 -0
- data/lib/pry/testable/mockable.rb +22 -0
- data/lib/pry/testable/pry_tester.rb +88 -0
- data/lib/pry/testable/utility.rb +34 -0
- data/lib/pry/testable/variables.rb +52 -0
- data/lib/pry/testable.rb +68 -0
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +20 -0
- data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
- data/lib/pry/wrapped_module.rb +102 -103
- data/lib/pry.rb +135 -261
- metadata +94 -283
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -21
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -9
- data/Guardfile +0 -62
- data/README.markdown +0 -400
- data/Rakefile +0 -140
- data/TODO +0 -117
- data/lib/pry/commands/disabled_commands.rb +0 -2
- data/lib/pry/commands/gem_cd.rb +0 -26
- data/lib/pry/commands/gem_install.rb +0 -29
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -51
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/completion.rb +0 -304
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/history_array.rb +0 -116
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_method.rb +0 -13
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -74
- data/lib/pry/terminal.rb +0 -78
- data/lib/pry/test/helper.rb +0 -185
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -30
- data/spec/Procfile +0 -3
- data/spec/cli_spec.rb +0 -78
- data/spec/code_object_spec.rb +0 -277
- data/spec/code_spec.rb +0 -219
- data/spec/command_helpers_spec.rb +0 -29
- data/spec/command_integration_spec.rb +0 -644
- data/spec/command_set_spec.rb +0 -627
- data/spec/command_spec.rb +0 -821
- data/spec/commands/amend_line_spec.rb +0 -247
- data/spec/commands/bang_spec.rb +0 -19
- data/spec/commands/cat_spec.rb +0 -164
- data/spec/commands/cd_spec.rb +0 -250
- data/spec/commands/disable_pry_spec.rb +0 -25
- data/spec/commands/edit_spec.rb +0 -727
- data/spec/commands/exit_all_spec.rb +0 -34
- data/spec/commands/exit_program_spec.rb +0 -19
- data/spec/commands/exit_spec.rb +0 -34
- data/spec/commands/find_method_spec.rb +0 -70
- data/spec/commands/gem_list_spec.rb +0 -26
- data/spec/commands/gist_spec.rb +0 -79
- data/spec/commands/help_spec.rb +0 -56
- data/spec/commands/hist_spec.rb +0 -181
- data/spec/commands/jump_to_spec.rb +0 -15
- data/spec/commands/ls_spec.rb +0 -181
- data/spec/commands/play_spec.rb +0 -140
- data/spec/commands/raise_up_spec.rb +0 -56
- data/spec/commands/save_file_spec.rb +0 -177
- data/spec/commands/show_doc_spec.rb +0 -510
- data/spec/commands/show_input_spec.rb +0 -17
- data/spec/commands/show_source_spec.rb +0 -782
- data/spec/commands/whereami_spec.rb +0 -203
- data/spec/completion_spec.rb +0 -239
- data/spec/control_d_handler_spec.rb +0 -58
- data/spec/documentation_helper_spec.rb +0 -73
- data/spec/editor_spec.rb +0 -79
- data/spec/exception_whitelist_spec.rb +0 -21
- data/spec/fixtures/candidate_helper1.rb +0 -11
- data/spec/fixtures/candidate_helper2.rb +0 -8
- data/spec/fixtures/example.erb +0 -5
- data/spec/fixtures/example_nesting.rb +0 -33
- data/spec/fixtures/show_source_doc_examples.rb +0 -15
- data/spec/fixtures/testrc +0 -2
- data/spec/fixtures/testrcbad +0 -2
- data/spec/fixtures/whereami_helper.rb +0 -6
- data/spec/helper.rb +0 -34
- data/spec/helpers/bacon.rb +0 -86
- data/spec/helpers/mock_pry.rb +0 -43
- data/spec/helpers/table_spec.rb +0 -105
- data/spec/history_array_spec.rb +0 -67
- data/spec/hooks_spec.rb +0 -522
- data/spec/indent_spec.rb +0 -301
- data/spec/input_stack_spec.rb +0 -90
- data/spec/method_spec.rb +0 -482
- data/spec/prompt_spec.rb +0 -60
- data/spec/pry_defaults_spec.rb +0 -419
- data/spec/pry_history_spec.rb +0 -99
- data/spec/pry_output_spec.rb +0 -95
- data/spec/pry_spec.rb +0 -504
- data/spec/run_command_spec.rb +0 -25
- data/spec/sticky_locals_spec.rb +0 -157
- data/spec/syntax_checking_spec.rb +0 -81
- data/spec/wrapped_module_spec.rb +0 -261
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/README.markdown
DELETED
@@ -1,400 +0,0 @@
|
|
1
|
-
[![Build Status](https://secure.travis-ci.org/pry/pry.png)](http://travis-ci.org/pry/pry)
|
2
|
-
|
3
|
-
<center>
|
4
|
-
![The Pry Logo](https://dl.dropbox.com/u/26521875/pry%20stuff/logo/pry_logo_350.png)
|
5
|
-
|
6
|
-
© John Mair (banisterfiend) 2012<br>
|
7
|
-
|
8
|
-
**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!
|
9
|
-
|
10
|
-
**Sponsors**
|
11
|
-
|
12
|
-
[Atomic Object](http://www.atomicobject.com/)<br/>
|
13
|
-
[Bendyworks](http://bendyworks.com/)<br/>
|
14
|
-
[Intridea](http://intridea.com/)<br/>
|
15
|
-
[Gaslight](http://gaslight.co/home)<br/>
|
16
|
-
|
17
|
-
**Other Resources**
|
18
|
-
|
19
|
-
[Skip to the website (recommended)](http://pry.github.com) <br />
|
20
|
-
[Skip to the wiki](https://github.com/pry/pry/wiki)
|
21
|
-
</center>
|
22
|
-
|
23
|
-
Pry is a powerful alternative to the standard IRB shell for Ruby. It is
|
24
|
-
written from scratch to provide a number of advanced features,
|
25
|
-
including:
|
26
|
-
|
27
|
-
* Source code browsing (including core C source with the pry-doc gem)
|
28
|
-
* Documentation browsing
|
29
|
-
* Live help system
|
30
|
-
* Open methods in editors (`edit-method Class#method`)
|
31
|
-
* Syntax highlighting
|
32
|
-
* Command shell integration (start editors, run git, and rake from within Pry)
|
33
|
-
* Gist integration
|
34
|
-
* Navigation around state (`cd`, `ls` and friends)
|
35
|
-
* Runtime invocation (use Pry as a developer console or debugger)
|
36
|
-
* Exotic object support (BasicObject instances, IClasses, ...)
|
37
|
-
* A Powerful and flexible command system
|
38
|
-
* Ability to view and replay history
|
39
|
-
|
40
|
-
* Many convenience commands inspired by IPython, Smalltalk and other advanced REPLs
|
41
|
-
* A wide-range number of [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide remote sessions, full debugging functionality, and more.
|
42
|
-
|
43
|
-
Pry also aims to be more than an IRB replacement; it is an
|
44
|
-
attempt to bring REPL driven programming to the Ruby language. It is
|
45
|
-
currently not as powerful as tools like [SLIME](http://en.wikipedia.org/wiki/SLIME) for lisp, but that is the
|
46
|
-
general direction Pry is heading.
|
47
|
-
|
48
|
-
Pry is also fairly flexible and allows significant user
|
49
|
-
[customization](https://github.com/pry/pry/wiki/Customization-and-configuration)
|
50
|
-
is trivial to set it to read from any object that has a `readline` method and write to any object that has a
|
51
|
-
`puts` method - many other aspects of Pry are also configurable making
|
52
|
-
it a good choice for implementing custom shells.
|
53
|
-
|
54
|
-
Pry comes with an executable so it can be invoked at the command line.
|
55
|
-
Just enter `pry` to start. A `.pryrc` file in the user's home directory will
|
56
|
-
be loaded if it exists. Type `pry --help` at the command line for more
|
57
|
-
information.
|
58
|
-
|
59
|
-
Try `gem install pry-doc` for additional documentation on Ruby Core
|
60
|
-
methods. The additional docs are accessed through the `show-doc` and
|
61
|
-
`show-method` commands.
|
62
|
-
|
63
|
-
* Install the [gem](https://rubygems.org/gems/pry): `gem install pry`
|
64
|
-
* Browse the comprehensive [documentation at the official Pry wiki](https://github.com/pry/pry/wiki)
|
65
|
-
* Read the [YARD API documentation](http://rdoc.info/github/pry/pry/master/file/README.markdown)
|
66
|
-
* See the [source code](http://github.com/pry/pry)
|
67
|
-
|
68
|
-
Pry also has `rubygems-test` support; to participate, first install
|
69
|
-
Pry, then:
|
70
|
-
|
71
|
-
1. Install rubygems-test: `gem install rubygems-test`
|
72
|
-
2. Run the test: `gem test pry`
|
73
|
-
3. Finally choose 'Yes' to upload the results.
|
74
|
-
|
75
|
-
### Commands
|
76
|
-
|
77
|
-
Nearly every piece of functionality in a Pry session is implemented as
|
78
|
-
a command. Commands are not methods and must start at the beginning of a line, with no
|
79
|
-
whitespace in between. Commands support a flexible syntax and allow
|
80
|
-
'options' in the same way as shell commands, for example the following
|
81
|
-
Pry command will show a list of all private instance methods (in
|
82
|
-
scope) that begin with 'pa'
|
83
|
-
|
84
|
-
pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
|
85
|
-
YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
|
86
|
-
|
87
|
-
### Navigating around state
|
88
|
-
|
89
|
-
Pry allows us to pop in and out of different scopes (objects) using
|
90
|
-
the `cd` command. This enables us to explore the run-time view of a
|
91
|
-
program or library. To view which variables and methods are available
|
92
|
-
within a particular scope we use the versatile [ls command.](https://gist.github.com/c0fc686ef923c8b87715)
|
93
|
-
|
94
|
-
Here we will begin Pry at top-level, then Pry on a class and then on
|
95
|
-
an instance variable inside that class:
|
96
|
-
|
97
|
-
pry(main)> class Hello
|
98
|
-
pry(main)* @x = 20
|
99
|
-
pry(main)* end
|
100
|
-
=> 20
|
101
|
-
pry(main)> cd Hello
|
102
|
-
pry(Hello):1> ls -i
|
103
|
-
instance variables: @x
|
104
|
-
pry(Hello):1> cd @x
|
105
|
-
pry(20:2)> self + 10
|
106
|
-
=> 30
|
107
|
-
pry(20:2)> cd ..
|
108
|
-
pry(Hello):1> cd ..
|
109
|
-
pry(main)> cd ..
|
110
|
-
|
111
|
-
The number after the `:` in the pry prompt indicates the nesting
|
112
|
-
level. To display more information about nesting, use the `nesting`
|
113
|
-
command. E.g
|
114
|
-
|
115
|
-
pry("friend":3)> nesting
|
116
|
-
Nesting status:
|
117
|
-
0. main (Pry top level)
|
118
|
-
1. Hello
|
119
|
-
2. 100
|
120
|
-
3. "friend"
|
121
|
-
=> nil
|
122
|
-
|
123
|
-
We can then jump back to any of the previous nesting levels by using
|
124
|
-
the `jump-to` command:
|
125
|
-
|
126
|
-
pry("friend":3)> jump-to 1
|
127
|
-
=> 100
|
128
|
-
pry(Hello):1>
|
129
|
-
|
130
|
-
### Runtime invocation
|
131
|
-
|
132
|
-
Pry can be invoked in the middle of a running program. It opens a Pry
|
133
|
-
session at the point it's called and makes all program state at that
|
134
|
-
point available. It can be invoked on any object using the
|
135
|
-
`my_object.pry` syntax or on the current binding (or any binding)
|
136
|
-
using `binding.pry`. The Pry session will then begin within the scope
|
137
|
-
of the object (or binding). When the session ends the program continues with any
|
138
|
-
modifications you made to it.
|
139
|
-
|
140
|
-
This functionality can be used for such things as: debugging,
|
141
|
-
implementing developer consoles and applying hot patches.
|
142
|
-
|
143
|
-
code:
|
144
|
-
|
145
|
-
# test.rb
|
146
|
-
require 'pry'
|
147
|
-
|
148
|
-
class A
|
149
|
-
def hello() puts "hello world!" end
|
150
|
-
end
|
151
|
-
|
152
|
-
a = A.new
|
153
|
-
|
154
|
-
# start a REPL session
|
155
|
-
binding.pry
|
156
|
-
|
157
|
-
# program resumes here (after pry session)
|
158
|
-
puts "program resumes here."
|
159
|
-
|
160
|
-
Pry session:
|
161
|
-
|
162
|
-
pry(main)> a.hello
|
163
|
-
hello world!
|
164
|
-
=> nil
|
165
|
-
pry(main)> def a.goodbye
|
166
|
-
pry(main)* puts "goodbye cruel world!"
|
167
|
-
pry(main)* end
|
168
|
-
=> nil
|
169
|
-
pry(main)> a.goodbye
|
170
|
-
goodbye cruel world!
|
171
|
-
=> nil
|
172
|
-
pry(main)> exit
|
173
|
-
|
174
|
-
program resumes here.
|
175
|
-
|
176
|
-
### Command Shell Integration
|
177
|
-
|
178
|
-
A line of input that begins with a '.' will be forwarded to the
|
179
|
-
command shell. This enables us to navigate the file system, spawn
|
180
|
-
editors, and run git and rake directly from within Pry.
|
181
|
-
|
182
|
-
Further, we can use the `shell-mode` command to incorporate the
|
183
|
-
present working directory into the Pry prompt and bring in (limited at this stage, sorry) file name completion.
|
184
|
-
We can also interpolate Ruby code directly into the shell by
|
185
|
-
using the normal `#{}` string interpolation syntax.
|
186
|
-
|
187
|
-
In the code below we're going to switch to `shell-mode` and edit the
|
188
|
-
`.pryrc` file in the home directory. We'll then cat its contents and
|
189
|
-
reload the file.
|
190
|
-
|
191
|
-
pry(main)> shell-mode
|
192
|
-
pry main:/home/john/ruby/projects/pry $ .cd ~
|
193
|
-
pry main:/home/john $ .emacsclient .pryrc
|
194
|
-
pry main:/home/john $ .cat .pryrc
|
195
|
-
def hello_world
|
196
|
-
puts "hello world!"
|
197
|
-
end
|
198
|
-
pry main:/home/john $ load ".pryrc"
|
199
|
-
=> true
|
200
|
-
pry main:/home/john $ hello_world
|
201
|
-
hello world!
|
202
|
-
|
203
|
-
We can also interpolate Ruby code into the shell. In the
|
204
|
-
example below we use the shell command `cat` on a random file from the
|
205
|
-
current directory and count the number of lines in that file with
|
206
|
-
`wc`:
|
207
|
-
|
208
|
-
pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
|
209
|
-
44
|
210
|
-
|
211
|
-
### Code Browsing
|
212
|
-
|
213
|
-
You can browse method source code with the `show-method` command. Nearly all Ruby methods (and some C methods, with the pry-doc
|
214
|
-
gem) can have their source viewed. Code that is longer than a page is
|
215
|
-
sent through a pager (such as less), and all code is properly syntax
|
216
|
-
highlighted (even C code).
|
217
|
-
|
218
|
-
The `show-method` command accepts two syntaxes, the typical ri
|
219
|
-
`Class#method` syntax and also simply the name of a method that's in
|
220
|
-
scope. You can optionally pass the `-l` option to show-method to
|
221
|
-
include line numbers in the output.
|
222
|
-
|
223
|
-
In the following example we will enter the `Pry` class, list the
|
224
|
-
instance methods beginning with 're' and display the source code for the `rep` method:
|
225
|
-
|
226
|
-
pry(main)> cd Pry
|
227
|
-
pry(Pry)> ls -M --grep re
|
228
|
-
Pry#methods: re readline refresh rep repl repl_epilogue repl_prologue retrieve_line
|
229
|
-
pry(Pry):1> show-method rep -l
|
230
|
-
|
231
|
-
From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb @ line 143:
|
232
|
-
Number of lines: 6
|
233
|
-
|
234
|
-
143: def rep(target=TOPLEVEL_BINDING)
|
235
|
-
144: target = Pry.binding_for(target)
|
236
|
-
145: result = re(target)
|
237
|
-
146:
|
238
|
-
147: show_result(result) if should_print?
|
239
|
-
148: end
|
240
|
-
|
241
|
-
Note that we can also view C methods (from Ruby Core) using the
|
242
|
-
`pry-doc` plugin; we also show off the alternate syntax for
|
243
|
-
`show-method`:
|
244
|
-
|
245
|
-
pry(main)> show-method Array#select
|
246
|
-
|
247
|
-
From: array.c in Ruby Core (C Method):
|
248
|
-
Number of lines: 15
|
249
|
-
|
250
|
-
static VALUE
|
251
|
-
rb_ary_select(VALUE ary)
|
252
|
-
{
|
253
|
-
VALUE result;
|
254
|
-
long i;
|
255
|
-
|
256
|
-
RETURN_ENUMERATOR(ary, 0, 0);
|
257
|
-
result = rb_ary_new2(RARRAY_LEN(ary));
|
258
|
-
for (i = 0; i < RARRAY_LEN(ary); i++) {
|
259
|
-
if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
|
260
|
-
rb_ary_push(result, rb_ary_elt(ary, i));
|
261
|
-
}
|
262
|
-
}
|
263
|
-
return result;
|
264
|
-
}
|
265
|
-
|
266
|
-
### Documentation Browsing
|
267
|
-
|
268
|
-
One use-case for Pry is to explore a program at run-time by `cd`-ing
|
269
|
-
in and out of objects and viewing and invoking methods. In the course
|
270
|
-
of exploring it may be useful to read the documentation for a
|
271
|
-
specific method that you come across. Like `show-method` the `show-doc` command supports
|
272
|
-
two syntaxes - the normal `ri` syntax as well as accepting the name of
|
273
|
-
any method that is currently in scope.
|
274
|
-
|
275
|
-
The Pry documentation system does not rely on pre-generated `rdoc` or
|
276
|
-
`ri`, instead it grabs the comments directly above the method on
|
277
|
-
demand. This results in speedier documentation retrieval and allows
|
278
|
-
the Pry system to retrieve documentation for methods that would not be
|
279
|
-
picked up by `rdoc`. Pry also has a basic understanding of both the
|
280
|
-
rdoc and yard formats and will attempt to syntax highlight the
|
281
|
-
documentation appropriately.
|
282
|
-
|
283
|
-
Nonetheless, the `ri` functionality is very good and
|
284
|
-
has an advantage over Pry's system in that it allows documentation
|
285
|
-
lookup for classes as well as methods. Pry therefore has good
|
286
|
-
integration with `ri` through the `ri` command. The syntax
|
287
|
-
for the command is exactly as it would be in command-line -
|
288
|
-
so it is not necessary to quote strings.
|
289
|
-
|
290
|
-
In our example we will enter the `Gem` class and view the
|
291
|
-
documentation for the `try_activate` method:
|
292
|
-
|
293
|
-
pry(main)> cd Gem
|
294
|
-
pry(Gem):1> show-doc try_activate
|
295
|
-
|
296
|
-
From: /Users/john/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb @ line 201:
|
297
|
-
Number of lines: 3
|
298
|
-
|
299
|
-
Try to activate a gem containing path. Returns true if
|
300
|
-
activation succeeded or wasn't needed because it was already
|
301
|
-
activated. Returns false if it can't find the path in a gem.
|
302
|
-
pry(Gem):1>
|
303
|
-
|
304
|
-
We can also use `ri` in the normal way:
|
305
|
-
|
306
|
-
pry(main) ri Array#each
|
307
|
-
----------------------------------------------------------- Array#each
|
308
|
-
array.each {|item| block } -> array
|
309
|
-
------------------------------------------------------------------------
|
310
|
-
Calls _block_ once for each element in _self_, passing that element
|
311
|
-
as a parameter.
|
312
|
-
|
313
|
-
a = [ "a", "b", "c" ]
|
314
|
-
a.each {|x| print x, " -- " }
|
315
|
-
|
316
|
-
produces:
|
317
|
-
|
318
|
-
a -- b -- c --
|
319
|
-
|
320
|
-
### Gist integration
|
321
|
-
|
322
|
-
If the `gist` gem is installed then method source or documentation can be gisted to github with the
|
323
|
-
`gist` command. The `gist` command is capable of gisting [almost any REPL content](https://gist.github.com/cae143e4533416529726), including methods, documentation,
|
324
|
-
input expressions, command source, and so on. In the example below we will gist the C source
|
325
|
-
code for the `Symbol#to_proc` method to github:
|
326
|
-
|
327
|
-
pry(main)> gist -m Symbol#to_proc
|
328
|
-
Gist created at https://gist.github.com/5332c38afc46d902ce46 and added to clipboard.
|
329
|
-
pry(main)>
|
330
|
-
|
331
|
-
You can see the actual gist generated here: [https://gist.github.com/5332c38afc46d902ce46](https://gist.github.com/5332c38afc46d902ce46)
|
332
|
-
|
333
|
-
### Edit methods
|
334
|
-
|
335
|
-
You can use `edit-method Class#method` or `edit-method my_method`
|
336
|
-
(if the method is in scope) to open a method for editing directly in
|
337
|
-
your favorite editor. Pry has knowledge of a few different editors and
|
338
|
-
will attempt to open the file at the line the method is defined.
|
339
|
-
|
340
|
-
You can set the editor to use by assigning to the `Pry.editor`
|
341
|
-
accessor. `Pry.editor` will default to `$EDITOR` or failing that will
|
342
|
-
use `nano` as the backup default. The file that is edited will be
|
343
|
-
automatically reloaded after exiting the editor - reloading can be
|
344
|
-
suppressed by passing the `--no-reload` option to `edit-method`
|
345
|
-
|
346
|
-
In the example below we will set our default editor to "emacsclient"
|
347
|
-
and open the `Pry#repl` method for editing:
|
348
|
-
|
349
|
-
pry(main)> Pry.editor = "emacsclient"
|
350
|
-
pry(main)> edit-method Pry#repl
|
351
|
-
|
352
|
-
### Live Help System
|
353
|
-
|
354
|
-
Many other commands are available in Pry; to see the full list type
|
355
|
-
`help` at the prompt. A short description of each command is provided
|
356
|
-
with basic instructions for use; some commands have a more extensive
|
357
|
-
help that can be accessed via typing `command_name --help`. A command
|
358
|
-
will typically say in its description if the `--help` option is
|
359
|
-
avaiable.
|
360
|
-
|
361
|
-
### Use Pry as your Rails Console
|
362
|
-
|
363
|
-
pry -r ./config/environment
|
364
|
-
|
365
|
-
MyArtChannel has kindly provided a hack to replace the `rails console` command in Rails 3: [https://gist.github.com/941174](https://gist.github.com/941174) This is not recommended for code bases with multiple developers, as they may not all want to use Pry.
|
366
|
-
|
367
|
-
Also check out the [wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry) for other strategies on integrating Pry with rails, notably the [pry-rails](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry#wiki-pry_rails) plugin.
|
368
|
-
|
369
|
-
### Limitations:
|
370
|
-
|
371
|
-
* Tab completion is currently a bit broken/limited this will have a
|
372
|
-
major overhaul in a future version.
|
373
|
-
|
374
|
-
### Syntax Highlighting
|
375
|
-
|
376
|
-
Syntax highlighting is on by default in Pry. You can toggle it on and
|
377
|
-
off in a session by using the `toggle-color` command. Alternatively,
|
378
|
-
you can turn it off permanently by putting the line `Pry.color =
|
379
|
-
false` in your `~/.pryrc` file.
|
380
|
-
|
381
|
-
### Future Directions
|
382
|
-
|
383
|
-
Many new features are planned such as:
|
384
|
-
|
385
|
-
* Increase modularity (rely more on plugin system)
|
386
|
-
* Much improved tab completion (using [Bond](http://github.com/cldwalker/bond))
|
387
|
-
* Much improved documentation system, better support for YARD
|
388
|
-
* Better support for code and method reloading and saving code
|
389
|
-
* Extended and more sophisticated command system, allowing piping
|
390
|
-
between commands and running commands in background
|
391
|
-
|
392
|
-
### Contact
|
393
|
-
|
394
|
-
Problems or questions? file an issue at [github](https://github.com/pry/pry/issues)
|
395
|
-
|
396
|
-
### Contributors
|
397
|
-
|
398
|
-
Pry is primarily the work of [John Mair (banisterfiend)](http://github.com/banister), for full list
|
399
|
-
of contributors see the
|
400
|
-
[CONTRIBUTORS](https://github.com/pry/pry/blob/master/CONTRIBUTORS) file.
|
data/Rakefile
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
require 'rake/clean'
|
2
|
-
require 'rubygems/package_task'
|
3
|
-
|
4
|
-
$:.unshift 'lib'
|
5
|
-
require 'pry/version'
|
6
|
-
|
7
|
-
CLOBBER.include('**/*~', '**/*#*', '**/*.log')
|
8
|
-
CLEAN.include('**/*#*', '**/*#*.*', '**/*_flymake*.*', '**/*_flymake', '**/*.rbc', '**/.#*.*')
|
9
|
-
|
10
|
-
def check_dependencies
|
11
|
-
require 'bundler'
|
12
|
-
Bundler.definition.missing_specs
|
13
|
-
|
14
|
-
eval('nil', TOPLEVEL_BINDING, '<main>') # workaround for issue #395
|
15
|
-
rescue LoadError
|
16
|
-
# if Bundler isn't installed, we'll just assume your setup is ok.
|
17
|
-
rescue Bundler::GemNotFound
|
18
|
-
raise RuntimeError, "You're missing one or more required gems. Run `bundle install` first."
|
19
|
-
end
|
20
|
-
|
21
|
-
desc "Set up and run tests"
|
22
|
-
task :default => [:test]
|
23
|
-
|
24
|
-
unless [].respond_to? :shuffle!
|
25
|
-
class Array
|
26
|
-
def shuffle!
|
27
|
-
# TODO: fill this in if anyone cares
|
28
|
-
self
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def run_specs paths
|
34
|
-
quiet = ENV['VERBOSE'] ? '' : '-q'
|
35
|
-
exec "bacon -Ispec -rubygems #{quiet} #{paths.join ' '}"
|
36
|
-
end
|
37
|
-
|
38
|
-
desc "Run tests"
|
39
|
-
task :test do
|
40
|
-
check_dependencies unless ENV['SKIP_DEP_CHECK']
|
41
|
-
paths =
|
42
|
-
if explicit_list = ENV['run']
|
43
|
-
explicit_list.split(',')
|
44
|
-
else
|
45
|
-
Dir['spec/**/*_spec.rb'].shuffle!
|
46
|
-
end
|
47
|
-
run_specs paths
|
48
|
-
end
|
49
|
-
task :spec => :test
|
50
|
-
|
51
|
-
task :recspec do
|
52
|
-
all = Dir['spec/**/*_spec.rb'].sort_by{|path| File.mtime(path)}.reverse
|
53
|
-
warn "Running all, sorting by mtime: #{all[0..2].join(' ')} ...etc."
|
54
|
-
run_specs all
|
55
|
-
end
|
56
|
-
|
57
|
-
desc "Run pry"
|
58
|
-
task :pry do
|
59
|
-
check_dependencies unless ENV['SKIP_DEP_CHECK']
|
60
|
-
load 'bin/pry'
|
61
|
-
end
|
62
|
-
|
63
|
-
desc "Show pry version"
|
64
|
-
task :version do
|
65
|
-
puts "Pry version: #{Pry::VERSION}"
|
66
|
-
end
|
67
|
-
|
68
|
-
desc "Profile pry's startup time"
|
69
|
-
task :profile do
|
70
|
-
require 'profile'
|
71
|
-
require 'pry'
|
72
|
-
Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
|
73
|
-
end
|
74
|
-
|
75
|
-
def modify_base_gemspec
|
76
|
-
eval(File.read('pry.gemspec')).tap { |s| yield s }
|
77
|
-
end
|
78
|
-
|
79
|
-
namespace :ruby do
|
80
|
-
spec = modify_base_gemspec do |s|
|
81
|
-
s.platform = Gem::Platform::RUBY
|
82
|
-
end
|
83
|
-
|
84
|
-
Gem::PackageTask.new(spec) do |pkg|
|
85
|
-
pkg.need_zip = false
|
86
|
-
pkg.need_tar = false
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
namespace :jruby do
|
91
|
-
spec = modify_base_gemspec do |s|
|
92
|
-
s.add_dependency('spoon', '~> 0.0')
|
93
|
-
s.platform = 'java'
|
94
|
-
end
|
95
|
-
|
96
|
-
Gem::PackageTask.new(spec) do |pkg|
|
97
|
-
pkg.need_zip = false
|
98
|
-
pkg.need_tar = false
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
[:mingw32, :mswin32].each do |v|
|
104
|
-
namespace v do
|
105
|
-
spec = modify_base_gemspec do |s|
|
106
|
-
s.add_dependency('win32console', '~> 1.3')
|
107
|
-
s.platform = "i386-#{v}"
|
108
|
-
end
|
109
|
-
|
110
|
-
Gem::PackageTask.new(spec) do |pkg|
|
111
|
-
pkg.need_zip = false
|
112
|
-
pkg.need_tar = false
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
desc "build all platform gems at once"
|
118
|
-
task :gems => [:clean, :rmgems, 'ruby:gem', 'mswin32:gem', 'mingw32:gem', 'jruby:gem']
|
119
|
-
|
120
|
-
desc "remove all platform gems"
|
121
|
-
task :rmgems => ['ruby:clobber_package']
|
122
|
-
task :rm_gems => :rmgems
|
123
|
-
task :rm_pkgs => :rmgems
|
124
|
-
|
125
|
-
desc "reinstall gem"
|
126
|
-
task :reinstall => :gems do
|
127
|
-
sh "gem uninstall pry" rescue nil
|
128
|
-
sh "gem install #{File.dirname(__FILE__)}/pkg/pry-#{Pry::VERSION}.gem"
|
129
|
-
end
|
130
|
-
|
131
|
-
task :install => :reinstall
|
132
|
-
|
133
|
-
desc "build and push latest gems"
|
134
|
-
task :pushgems => :gems do
|
135
|
-
chdir("#{File.dirname(__FILE__)}/pkg") do
|
136
|
-
Dir["*.gem"].each do |gemfile|
|
137
|
-
sh "gem push #{gemfile}"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
data/TODO
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
0.9.5
|
2
|
-
* include method visiblity in show-doc and stat output
|
3
|
-
* tempfile should end in .rb (for edit -t)
|
4
|
-
* ls output should not be in array format
|
5
|
-
* exceptions should allow access to previous items in the backtrace
|
6
|
-
* input should allow multiple objects which are switched to automatically when EOF is reached on the preceding one
|
7
|
-
* pry -r should happen in pry
|
8
|
-
* more plugin-related commands in pry - see installed ones, see activated ones, see available on rubygems
|
9
|
-
* should also allow plugins be explicitly activated as a command line option
|
10
|
-
* should not raise if plugin activation fails (should show warning instead)
|
11
|
-
* more documentation on CommandContext, etc and also command helpers
|
12
|
-
* fix history saving (should not save all of Readline::HISTORY, but only what changed)
|
13
|
-
* prevent blank lines going to Readline::HISTORY
|
14
|
-
* ensure that cat --ex emulates the `whereami` format - includes line numbers and formatted the same, etc
|
15
|
-
* rename inp and out to _inp_ and _out_ otherwise than can overwrite locals by those names when debugging (not good)
|
16
|
-
* add source file to stat command
|
17
|
-
* make plugins use hash instead of array
|
18
|
-
* ensure edit -t has 'edit' alias (no parameters) and dumps eval_string into buffer
|
19
|
-
* whitelist exceptions
|
20
|
-
* hooks system
|
21
|
-
* jruby shell command support
|
22
|
-
|
23
|
-
0.9.3
|
24
|
-
* hist command now excludes last line of input (the command invocation itself)
|
25
|
-
* hist now has `history` alias
|
26
|
-
* `pry -r` requires now happen after plugin loading (so as not to interfere with
|
27
|
-
* new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related
|
28
|
-
* add better error messages for `cd` command
|
29
|
-
* add command_prefix
|
30
|
-
* change some command names to include hyphen, e.g version => pry-version, install => install-command
|
31
|
-
* do cat --ex and edit --ex
|
32
|
-
* add reload-method
|
33
|
-
* fixed exotic object regression - BasicObject.new etc now return "=> unknown"
|
34
|
-
* converted: import => import-set, version => pry-version, install => install-command
|
35
|
-
* fix show-doc bug for ruby 1.8 and Kernel.fork
|
36
|
-
* edit -t (opens a temporary file and evals it in current context when closed)
|
37
|
-
|
38
|
-
0.9.0
|
39
|
-
Major features
|
40
|
-
--------------
|
41
|
-
* Restructure command system and helpers (almost complete)
|
42
|
-
* Delete unnecessary commands, add a couple of new ones (e.g amend-line)
|
43
|
-
* Readline history
|
44
|
-
* Plugin support
|
45
|
-
* Support Rubinius core methods
|
46
|
-
* in[] and out[] arrays
|
47
|
-
* Improve test coverage (test some commands, etc)
|
48
|
-
|
49
|
-
Minor changes
|
50
|
-
-------------
|
51
|
-
* improve edit-method support for various editors
|
52
|
-
* ensure all commands have appropriate error handing and informative error messages
|
53
|
-
* show-doc should include signature of method
|
54
|
-
|
55
|
-
Optional
|
56
|
-
--------
|
57
|
-
* multi-line readline support
|
58
|
-
|
59
|
-
|
60
|
-
0.8.0
|
61
|
-
* allow #{} interpolation of all commands
|
62
|
-
* update documentation! new commands and features and change in behaviour of `run`
|
63
|
-
* add ; at end of line to suppress return value output
|
64
|
-
* Remove message spam (before/after hooks)
|
65
|
-
* stop commands returning a value
|
66
|
-
* use `redo` in the r() method when encounter a command
|
67
|
-
* shell functionality should just use system(), but redirect in and
|
68
|
-
out to Pry.input and Pry.output by reassining $stdin and $stdout
|
69
|
-
for duration of block.
|
70
|
-
* basicobject and no to_s/inspect support
|
71
|
-
* fix documentation, support rdoc and yard properly
|
72
|
-
* only load Ripper if 1.9 AND MRI (support jruby 1.9, using
|
73
|
-
RubyParser)
|
74
|
-
* shell commands invokable file .<command>
|
75
|
-
* supercharge cat-file so it can syntax highlight sourcecode files
|
76
|
-
|
77
|
-
|
78
|
-
0.7.0
|
79
|
-
* add pry-doc support with syntax highlighting for docs
|
80
|
-
* add 'mj' option to ls (restrict to singleton methods)
|
81
|
-
* add _ex_ local to hold last exception raised in an exception
|
82
|
-
|
83
|
-
0.6.8
|
84
|
-
* add whereami command, a la the `ir_b` gem
|
85
|
-
* make .pryrc be loaded by run-time pry sessions
|
86
|
-
|
87
|
-
0.6.7
|
88
|
-
* color support
|
89
|
-
* --simple-prompt for pry commandline
|
90
|
-
* -I mode for pry commandline
|
91
|
-
* --color mode for pry commandline
|
92
|
-
* clean up requires (put them all in one place)
|
93
|
-
* simple-prompt command and toggle-color commandd.
|
94
|
-
|
95
|
-
0.6.1
|
96
|
-
* !@ command alias for exit_all
|
97
|
-
* `cd /` for breaking out to pry top level (jump-to 0)
|
98
|
-
* made `-e` option work in a more effective way for `pry` command line invocation
|
99
|
-
* exit and exit-all commands now accept a parameter, this parameter becomes the return value of repl()
|
100
|
-
* `command` method from CommandBase now accepts a :keep_retval arg that determines if command value is returned to pry session or just `nil` (`nil` was old behaviour)
|
101
|
-
* tests for new :keep_retval and exit-all/exit behaviour; :keep_retval will remain undocumented.
|
102
|
-
|
103
|
-
0.5.0 release:
|
104
|
-
* !!!! UPDATE DOCUMENTATION !!!!
|
105
|
-
* Use clipped version of Pry.view() for large objects
|
106
|
-
* Exit Pry session on ^d
|
107
|
-
* Use Shellwords for breaking up parameters to pry commands
|
108
|
-
* Use OptionParser to parse options for default pry commands
|
109
|
-
* Add version command
|
110
|
-
* Refactor 'status' command: add current method info
|
111
|
-
* Add meth_name_from_binding utility lambda to commands.rb
|
112
|
-
* Add -M, -m, -v(erbose), -a(ll), -s(uper), -l(ocals), -i(ivars), -k(klass vars) options to ls
|
113
|
-
* add -i(nstance) option to show-method
|
114
|
-
* add --help option to most commands
|
115
|
-
* Get rid of ls_method and ls_imethods (subsumed by more powerful ls)
|
116
|
-
* Get rid of show_idoc and show_imethod
|
117
|
-
* Add special eval-file command that evals target file in current context
|
data/lib/pry/commands/gem_cd.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::GemCd < Pry::ClassCommand
|
3
|
-
match 'gem-cd'
|
4
|
-
group 'Gems'
|
5
|
-
description "Change working directory to specified gem's directory."
|
6
|
-
command_options :argument_required => true
|
7
|
-
|
8
|
-
banner <<-'BANNER'
|
9
|
-
Usage: gem-cd GEM_NAME
|
10
|
-
|
11
|
-
Change the current working directory to that in which the given gem is
|
12
|
-
installed.
|
13
|
-
BANNER
|
14
|
-
|
15
|
-
def process(gem)
|
16
|
-
Dir.chdir(Rubygem.spec(gem).full_gem_path)
|
17
|
-
output.puts(Dir.pwd)
|
18
|
-
end
|
19
|
-
|
20
|
-
def complete(str)
|
21
|
-
Rubygem.complete(str)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
Pry::Commands.add_command(Pry::Command::GemCd)
|
26
|
-
end
|