pry 0.12.2-java → 0.13.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +110 -1
- data/LICENSE +1 -1
- data/README.md +331 -269
- data/bin/pry +5 -0
- data/lib/pry.rb +133 -119
- data/lib/pry/basic_object.rb +8 -4
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +40 -31
- data/lib/pry/code.rb +39 -27
- data/lib/pry/code/code_file.rb +28 -24
- data/lib/pry/code/code_range.rb +4 -2
- data/lib/pry/code/loc.rb +15 -8
- data/lib/pry/code_object.rb +40 -38
- data/lib/pry/color_printer.rb +47 -46
- data/lib/pry/command.rb +166 -369
- data/lib/pry/command_set.rb +76 -73
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -81
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat.rb +61 -54
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +71 -60
- data/lib/pry/commands/cat/file_formatter.rb +55 -49
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cd.rb +40 -35
- data/lib/pry/commands/change_inspector.rb +29 -22
- data/lib/pry/commands/change_prompt.rb +44 -39
- data/lib/pry/commands/clear_screen.rb +16 -10
- data/lib/pry/commands/code_collector.rb +148 -133
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +19 -30
- data/lib/pry/commands/edit.rb +184 -161
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
- data/lib/pry/commands/exit.rb +39 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -16
- data/lib/pry/commands/find_method.rb +168 -160
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +151 -150
- data/lib/pry/commands/import_set.rb +20 -16
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +35 -28
- data/lib/pry/commands/ls.rb +124 -102
- data/lib/pry/commands/ls/constants.rb +59 -42
- data/lib/pry/commands/ls/formatter.rb +50 -46
- data/lib/pry/commands/ls/globals.rb +38 -34
- data/lib/pry/commands/ls/grep.rb +17 -13
- data/lib/pry/commands/ls/instance_vars.rb +29 -27
- data/lib/pry/commands/ls/interrogatable.rb +18 -12
- data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
- data/lib/pry/commands/ls/local_names.rb +26 -22
- data/lib/pry/commands/ls/local_vars.rb +38 -28
- data/lib/pry/commands/ls/ls_entity.rb +47 -51
- data/lib/pry/commands/ls/methods.rb +44 -43
- data/lib/pry/commands/ls/methods_helper.rb +46 -42
- data/lib/pry/commands/ls/self_methods.rb +23 -22
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -82
- data/lib/pry/commands/pry_backtrace.rb +24 -17
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +27 -22
- data/lib/pry/commands/reload_code.rb +60 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +55 -45
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +51 -51
- data/lib/pry/commands/shell_mode.rb +21 -17
- data/lib/pry/commands/show_doc.rb +81 -68
- data/lib/pry/commands/show_info.rb +189 -171
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +109 -45
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +20 -16
- data/lib/pry/commands/watch_expression.rb +89 -86
- data/lib/pry/commands/watch_expression/expression.rb +32 -27
- data/lib/pry/commands/whereami.rb +156 -148
- data/lib/pry/commands/wtf.rb +75 -50
- data/lib/pry/config.rb +311 -25
- 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/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +9 -7
- data/lib/pry/editor.rb +48 -21
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +13 -16
- data/lib/pry/forwardable.rb +5 -1
- data/lib/pry/helpers.rb +2 -0
- data/lib/pry/helpers/base_helpers.rb +68 -197
- data/lib/pry/helpers/command_helpers.rb +50 -61
- data/lib/pry/helpers/documentation_helpers.rb +20 -13
- data/lib/pry/helpers/options_helpers.rb +14 -7
- data/lib/pry/helpers/platform.rb +7 -5
- data/lib/pry/helpers/table.rb +33 -26
- data/lib/pry/helpers/text.rb +17 -14
- data/lib/pry/history.rb +48 -56
- data/lib/pry/hooks.rb +21 -12
- data/lib/pry/indent.rb +54 -50
- data/lib/pry/input_completer.rb +248 -230
- data/lib/pry/input_lock.rb +8 -9
- data/lib/pry/inspector.rb +36 -24
- data/lib/pry/last_exception.rb +45 -45
- data/lib/pry/method.rb +141 -94
- data/lib/pry/method/disowned.rb +16 -4
- data/lib/pry/method/patcher.rb +12 -3
- data/lib/pry/method/weird_method_locator.rb +68 -44
- data/lib/pry/object_path.rb +33 -25
- data/lib/pry/output.rb +121 -35
- data/lib/pry/pager.rb +41 -42
- data/lib/pry/plugins.rb +25 -8
- data/lib/pry/prompt.rb +123 -54
- data/lib/pry/pry_class.rb +61 -98
- data/lib/pry/pry_instance.rb +217 -215
- data/lib/pry/repl.rb +18 -22
- data/lib/pry/repl_file_loader.rb +27 -21
- data/lib/pry/ring.rb +11 -6
- data/lib/pry/slop.rb +574 -563
- data/lib/pry/slop/commands.rb +164 -169
- data/lib/pry/slop/option.rb +172 -168
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable.rb +59 -61
- data/lib/pry/testable/evalable.rb +21 -12
- data/lib/pry/testable/mockable.rb +18 -10
- data/lib/pry/testable/pry_tester.rb +71 -56
- data/lib/pry/testable/utility.rb +29 -21
- data/lib/pry/testable/variables.rb +49 -43
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +27 -0
- data/lib/pry/wrapped_module.rb +51 -42
- data/lib/pry/wrapped_module/candidate.rb +21 -14
- metadata +31 -30
- data/lib/pry/commands.rb +0 -6
- 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 -32
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gem_readme.rb +0 -25
- data/lib/pry/commands/gem_search.rb +0 -40
- data/lib/pry/commands/gem_stats.rb +0 -83
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -54
- data/lib/pry/config/behavior.rb +0 -255
- data/lib/pry/config/convenience.rb +0 -28
- data/lib/pry/config/default.rb +0 -159
- data/lib/pry/config/memoization.rb +0 -48
- data/lib/pry/platform.rb +0 -91
- data/lib/pry/rubygem.rb +0 -84
- data/lib/pry/terminal.rb +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e3ae4ffd60475fd7653d02b380752ac8e84cd673cc6e76f232cda1e01ee303ad
|
4
|
+
data.tar.gz: 1b2c1619fce5542ab11e326c5ac3810237c872b1b6de26b469f61605c9c174af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1166e629ed40ab748089bef8665337c65b8922b05046a9b9b16c2ffab152cde437810309c8d7251c09960a916045e586d9c3783ec0e311b1d0dab43c00072af6
|
7
|
+
data.tar.gz: 7cc163e3363378ebaa2e28a8c1843b0c1bcbb0d7dd7fadbc5ac314df084ce47218525b807b1db827df9ae32bf794d6e301bf8c8140633b212d9af67dd2b1a7c7
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,112 @@
|
|
1
|
-
###
|
1
|
+
### master
|
2
|
+
|
3
|
+
### [v0.13.0][v0.13.0] (March 21, 2020)
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Added metadata to the gem (such as changelog URI, source code URI & bug
|
8
|
+
tracker URI), so it shows on https://rubygems.org/gems/pry
|
9
|
+
([#1869](https://github.com/pry/pry/pull/1869))
|
10
|
+
* Added ability to forward ARGV to a Pry session via `--` (or `-`) when
|
11
|
+
launching Pry from shell
|
12
|
+
([#1902](https://github.com/pry/pry/commit/5cd65d3c0eb053f6edcdf571eea5d0cd990626ed))
|
13
|
+
* Added `Pry::Config::LazyValue` & `Pry::Config::MemoizedValue`, which allow
|
14
|
+
storing callable procs in the config
|
15
|
+
([#2024](https://github.com/pry/pry/pull/2024))
|
16
|
+
* Added the `rc_file` config option that tells Pry the path to `pryrc`
|
17
|
+
([#2027](https://github.com/pry/pry/pull/2027))
|
18
|
+
* Added the `--code` flag to the `wtf` command, which shows code for each
|
19
|
+
backtrace frame ([#2037](https://github.com/pry/pry/pull/2037))
|
20
|
+
* Added the ability to paste method call chains with leading dots
|
21
|
+
([#2060](https://github.com/pry/pry/pull/2060))
|
22
|
+
|
23
|
+
#### API changes
|
24
|
+
|
25
|
+
* `Pry::Prompt` is a class now and it can be instantiated to create new prompts
|
26
|
+
on the fly that are not registered with `Pry::Prompt#add`. Learn more about
|
27
|
+
its API in the docs ([#1877](https://github.com/pry/pry/pull/1877))
|
28
|
+
|
29
|
+
#### Deprecations
|
30
|
+
|
31
|
+
* Deprecated `Pry.config.exception_whitelist` in favor of
|
32
|
+
`Pry.config.unrescued_exceptions`
|
33
|
+
([#1874](https://github.com/pry/pry/pull/1874))
|
34
|
+
* Deprecated `Pry.config.prompt = Pry::Prompt[:simple][:value]` in favor of
|
35
|
+
`Pry.config.prompt = Pry::Prompt[:simple]` when setting Pry prompt via
|
36
|
+
`pryrc`. `Pry::Prompt[:simple]` would return an instance of `Pry::Prompt`
|
37
|
+
instead of `Hash` ([#1877](https://github.com/pry/pry/pull/1877))
|
38
|
+
* Deprecated setting prompt via an array of two procs:
|
39
|
+
([#1877](https://github.com/pry/pry/pull/1877))
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
# Deprecated, emits a warning.
|
43
|
+
Pry.config.prompt = [proc {}, proc {}]
|
44
|
+
```
|
45
|
+
|
46
|
+
This will be removed in the next release.
|
47
|
+
* Deprecated the `show-doc` command. The `show-source -d` is the new recommended
|
48
|
+
way of reading docs ([#1934](https://github.com/pry/pry/pull/1934))
|
49
|
+
* Deprecated `Pry::Command#_pry_`. Use `Pry::Command#pry_instance` instead
|
50
|
+
([#1989](https://github.com/pry/pry/pull/1989))
|
51
|
+
|
52
|
+
#### Breaking changes
|
53
|
+
|
54
|
+
* Deleted deprecated `Pry::Platform`
|
55
|
+
([#1863](https://github.com/pry/pry/pull/1863))
|
56
|
+
* Deleted deprecated `Pry#{input/output}_array`
|
57
|
+
([#1884](https://github.com/pry/pry/pull/1864))
|
58
|
+
* Deleted deprecated `Pry::Prompt::MAP`
|
59
|
+
([#1866](https://github.com/pry/pry/pull/1866))
|
60
|
+
* Deleted deprecated methods of `Pry::Helpers::BaseHelpers` such as `mac_osx?`,
|
61
|
+
`linux?`, `windows?`, `windows_ansi?`, `jruby?`, `jruby_19?`, `mri?`,
|
62
|
+
`mri_19?`, `mri_2?` ([#1867](https://github.com/pry/pry/pull/1867))
|
63
|
+
* Deleted deprecated `Pry::Command#text`
|
64
|
+
([#1865](https://github.com/pry/pry/pull/1865))
|
65
|
+
* Deleted deprecated `Pry::Method#all_from_common`
|
66
|
+
([#1868](https://github.com/pry/pry/pull/1868))
|
67
|
+
* Deleted `install-command` ([#1979](https://github.com/pry/pry/pull/1979))
|
68
|
+
* Deleted `Pry::Helpers::BaseHelpers#command_dependencies_met?`
|
69
|
+
([#1979](https://github.com/pry/pry/pull/1979))
|
70
|
+
* Deleted commands: `gem-cd`, `gem-install`, `gem-list`, `gem-open`,
|
71
|
+
`gem-readme`, `gem-search`, `gem-stats`
|
72
|
+
([#1981](https://github.com/pry/pry/pull/1981))
|
73
|
+
* Deleted deprecated commands: `edit-method` and `show-command`
|
74
|
+
([#2001](https://github.com/pry/pry/pull/2001))
|
75
|
+
* Deleted `Pry::Command#disabled_commands`
|
76
|
+
([#2001](https://github.com/pry/pry/pull/2001))
|
77
|
+
* Deleted `Pry::BlockCommand#opts` (use `#context` instead)
|
78
|
+
([#2003](https://github.com/pry/pry/pull/2003))
|
79
|
+
* Deleted `Pry.lazy` (use `Pry::Config::LazyValue` instead)
|
80
|
+
([#2024](https://github.com/pry/pry/pull/2024))
|
81
|
+
|
82
|
+
#### Bug fixes
|
83
|
+
|
84
|
+
* Fixed bug where using `Pry.config.prompt_name` can return a
|
85
|
+
`Pry::Config::Lazy` instead of expected instance of `String`
|
86
|
+
([#1890](https://github.com/pry/pry/commit/c8f23b3464d596c08922dc923c64bb57488e6227))
|
87
|
+
* Fixed `LoadError` being raised when using auto completions and Bundler
|
88
|
+
([#1896](https://github.com/pry/pry/commit/85850f47e074fe01f93e5cb7d561e7c2de7aede9))
|
89
|
+
* Fixed bug where `Pry.input_ring` doesn't append duplicate elements
|
90
|
+
([#1898](https://github.com/pry/pry/pull/1898))
|
91
|
+
* Fixed Ruby 2.6 warning about `Binding#source_location`
|
92
|
+
([#1904](https://github.com/pry/pry/pull/1904))
|
93
|
+
* Fixed wrong `winsize` when custom `output` is passed to Pry
|
94
|
+
([#2045](https://github.com/pry/pry/pull/2045))
|
95
|
+
* Fixed `XDG_CONFIG_HOME` & `XDG_DATA_HOME` precedence. When these env variables
|
96
|
+
are set, Pry no longer uses traditional files like `~/.pryrc` &
|
97
|
+
`~/.pry_history`. Instead, the env variable paths are loaded first
|
98
|
+
([#2056](https://github.com/pry/pry/pull/2056))
|
99
|
+
* Fixed the `$SAFE will become a normal global variable in Ruby 3.0` warning on
|
100
|
+
Ruby 2.7 ([#2107](https://github.com/pry/pry/pull/2107))
|
101
|
+
* Fixed bug when `whereami -c` cannot show beginning of the class, which is on
|
102
|
+
the same line as another expression
|
103
|
+
([#2098](https://github.com/pry/pry/pull/2098))
|
104
|
+
* Fixed bug when `Object#owner` is defined, which results into somewhat broken
|
105
|
+
method introspection ([#2113](https://github.com/pry/pry/pull/2113))
|
106
|
+
* Fixed bug when indentation leaves parts of input after pressing enter when
|
107
|
+
Readline is enabled with mode indicators for vi mode. This was supposed to be
|
108
|
+
fixed in v0.12.2 but it regressed
|
109
|
+
([#2114](https://github.com/pry/pry/pull/2114))
|
2
110
|
|
3
111
|
### [v0.12.2][v0.12.2] (November 12, 2018)
|
4
112
|
|
@@ -951,3 +1059,4 @@ complete CHANGELOG:
|
|
951
1059
|
[v0.12.0]: https://github.com/pry/pry/releases/tag/v0.12.0
|
952
1060
|
[v0.12.1]: https://github.com/pry/pry/releases/tag/v0.12.1
|
953
1061
|
[v0.12.2]: https://github.com/pry/pry/releases/tag/v0.12.2
|
1062
|
+
[v0.13.0]: https://github.com/pry/pry/releases/tag/v0.13.0
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,20 +1,62 @@
|
|
1
|
+
Pry
|
2
|
+
===
|
3
|
+
|
1
4
|
[![Circle Build Status](https://circleci.com/gh/pry/pry.svg?style=shield)](https://circleci.com/gh/pry/pry)
|
2
5
|
[![Code Climate](https://codeclimate.com/github/pry/pry.svg)](https://codeclimate.com/github/pry/pry)
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/pry.svg)](
|
4
|
-
[![Documentation Status](
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/pry.svg)](https://badge.fury.io/rb/pry)
|
7
|
+
[![Documentation Status](https://inch-ci.org/github/pry/pry.svg?branch=master)](https://inch-ci.org/github/pry/pry)
|
5
8
|
[![Downloads](https://img.shields.io/gem/dt/pry.svg?style=flat)](https://rubygems.org/gems/pry)
|
6
|
-
<br><br>
|
7
|
-
![logo for Pry](https://www.dropbox.com/s/zp8o63kquby2rln/pry_logo_350.png?raw=1)
|
8
9
|
|
9
|
-
|
10
|
+
![Pry logo](https://www.dropbox.com/s/zp8o63kquby2rln/pry_logo_350.png?raw=1)
|
11
|
+
|
12
|
+
© John Mair ([banisterfiend](https://twitter.com/banisterfiend)) 2018<br> (Creator)
|
13
|
+
|
14
|
+
© Kyrylo Silin ([kyrylosilin](https://twitter.com/kyrylosilin)) 2018<br> (Maintainer)
|
15
|
+
|
16
|
+
**Alumni:**
|
17
|
+
|
18
|
+
* Conrad Irwin
|
19
|
+
* Ryan Fitzgerald
|
20
|
+
* Robert Gleeson
|
21
|
+
|
22
|
+
**Links:**
|
23
|
+
|
24
|
+
* https://pryrepl.org/
|
25
|
+
* [YARD API documentation](https://www.rubydoc.info/gems/pry)
|
26
|
+
* [Wiki](https://github.com/pry/pry/wiki)
|
27
|
+
|
28
|
+
Table of Contents
|
29
|
+
=================
|
30
|
+
|
31
|
+
* [Introduction](#introduction)
|
32
|
+
* [Key features](#key-features)
|
33
|
+
* [Installation](#installation)
|
34
|
+
* [Overview](#overview)
|
35
|
+
* [Commands](#commands)
|
36
|
+
* [Navigating around state](#navigating-around-state)
|
37
|
+
* [Runtime invocation](#runtime-invocation)
|
38
|
+
* [Command Shell Integration](#command-shell-integration)
|
39
|
+
* [Code Browsing](#code-browsing)
|
40
|
+
* [Documentation Browsing](#documentation-browsing)
|
41
|
+
* [Gist integration](#gist-integration)
|
42
|
+
* [Edit methods](#edit-methods)
|
43
|
+
* [Live Help System](#live-help-system)
|
44
|
+
* [Use Pry as your Rails Console](#use-pry-as-your-rails-console)
|
45
|
+
* [Syntax Highlighting](#syntax-highlighting)
|
46
|
+
* [Supported Rubies](#supported-rubies)
|
47
|
+
* [Contact](#contact)
|
48
|
+
* [License](#license)
|
49
|
+
* [Contributors](#contributors)
|
10
50
|
|
11
|
-
|
12
|
-
|
51
|
+
Introduction
|
52
|
+
------------
|
13
53
|
|
54
|
+
Pry is a runtime developer console and IRB alternative with powerful
|
55
|
+
introspection capabilities. Pry aims to be more than an IRB replacement. It is
|
56
|
+
an attempt to bring REPL driven programming to the Ruby language.
|
14
57
|
|
15
|
-
|
16
|
-
|
17
|
-
including:
|
58
|
+
Key features
|
59
|
+
------------
|
18
60
|
|
19
61
|
* Source code browsing (including core C source with the pry-doc gem)
|
20
62
|
* Documentation browsing
|
@@ -26,103 +68,117 @@ including:
|
|
26
68
|
* Navigation around state (`cd`, `ls` and friends)
|
27
69
|
* Runtime invocation (use Pry as a developer console or debugger)
|
28
70
|
* Exotic object support (BasicObject instances, IClasses, ...)
|
29
|
-
* A
|
71
|
+
* A powerful and flexible command system
|
30
72
|
* Ability to view and replay history
|
31
|
-
* Many convenience commands inspired by IPython, Smalltalk and other advanced
|
32
|
-
|
73
|
+
* Many convenience commands inspired by IPython, Smalltalk and other advanced
|
74
|
+
REPLs
|
75
|
+
* A wide-range number of
|
76
|
+
[plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide
|
77
|
+
remote sessions, full debugging functionality, and more.
|
78
|
+
|
79
|
+
Installation
|
80
|
+
------------
|
81
|
+
|
82
|
+
### Bundler
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
gem 'pry', '~> 0.12.2'
|
86
|
+
```
|
87
|
+
|
88
|
+
### Manual
|
89
|
+
|
90
|
+
```sh
|
91
|
+
gem install pry
|
92
|
+
```
|
33
93
|
|
34
|
-
|
35
|
-
|
36
|
-
currently not as powerful as tools like [SLIME](https://en.wikipedia.org/wiki/SLIME) for lisp, but that is the
|
37
|
-
general direction Pry is heading.
|
94
|
+
Overview
|
95
|
+
--------
|
38
96
|
|
39
|
-
Pry is
|
40
|
-
[customization](https://github.com/pry/pry/wiki/Customization-and-configuration)
|
41
|
-
is trivial to
|
42
|
-
`puts` method
|
43
|
-
it a good choice for implementing custom shells.
|
97
|
+
Pry is fairly flexible and allows significant user
|
98
|
+
[customization](https://github.com/pry/pry/wiki/Customization-and-configuration).
|
99
|
+
It is trivial to read from any object that has a `readline` method and
|
100
|
+
write to any object that has a `puts` method. Many other aspects of Pry are
|
101
|
+
also configurable, making it a good choice for implementing custom shells.
|
44
102
|
|
45
|
-
Pry comes with an executable so it can be invoked at the command line.
|
103
|
+
Pry comes with an executable so it can be invoked at the command line. Just
|
46
104
|
enter `pry` to start. A `pryrc` file in `$XDG_CONFIG_HOME/pry/` or the user's
|
47
105
|
home directory will be loaded if it exists. Type `pry --help` at the command
|
48
106
|
line for more information.
|
49
107
|
|
50
|
-
Try `gem install pry-doc` for additional documentation on Ruby Core
|
51
|
-
methods. The additional docs are accessed through the `show-doc` and
|
52
|
-
`show-method` commands.
|
53
|
-
|
54
|
-
* Install the [gem](https://rubygems.org/gems/pry): `gem install pry`
|
55
|
-
* Browse the comprehensive [documentation at the official Pry wiki](https://github.com/pry/pry/wiki)
|
56
|
-
* Read the [YARD API documentation](http://www.rubydoc.info/github/pry/pry/)
|
57
|
-
* See the [source code](https://github.com/pry/pry)
|
58
|
-
|
59
108
|
### Commands
|
60
109
|
|
61
|
-
Nearly every piece of functionality in a Pry session is implemented as
|
62
|
-
|
63
|
-
whitespace in between. Commands support a flexible syntax and allow
|
64
|
-
'options' in the same way as shell commands, for example the following
|
65
|
-
|
66
|
-
|
110
|
+
Nearly every piece of functionality in a Pry session is implemented as a
|
111
|
+
command. Commands are not methods and must start at the beginning of a line,
|
112
|
+
with no whitespace in between. Commands support a flexible syntax and allow
|
113
|
+
'options' in the same way as shell commands, for example the following Pry
|
114
|
+
command will show a list of all private instance methods (in scope) that begin
|
115
|
+
with 'pa'
|
67
116
|
|
68
|
-
|
69
|
-
|
117
|
+
```ruby
|
118
|
+
pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
|
119
|
+
YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
|
120
|
+
```
|
70
121
|
|
71
122
|
### Navigating around state
|
72
123
|
|
73
|
-
Pry allows us to pop in and out of different scopes (objects) using
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
124
|
+
Pry allows us to pop in and out of different scopes (objects) using the `cd`
|
125
|
+
command. This enables us to explore the run-time view of a program or
|
126
|
+
library. To view which variables and methods are available within a particular
|
127
|
+
scope we use the versatile [ls
|
128
|
+
command.](https://gist.github.com/c0fc686ef923c8b87715)
|
129
|
+
|
130
|
+
Here we will begin Pry at top-level, then Pry on a class and then on an instance
|
131
|
+
variable inside that class:
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
pry(main)> class Hello
|
135
|
+
pry(main)* @x = 20
|
136
|
+
pry(main)* end
|
137
|
+
=> 20
|
138
|
+
pry(main)> cd Hello
|
139
|
+
pry(Hello):1> ls -i
|
140
|
+
instance variables: @x
|
141
|
+
pry(Hello):1> cd @x
|
142
|
+
pry(20):2> self + 10
|
143
|
+
=> 30
|
144
|
+
pry(20):2> cd ..
|
145
|
+
pry(Hello):1> cd ..
|
146
|
+
pry(main)> cd ..
|
147
|
+
```
|
148
|
+
|
149
|
+
The number after the `:` in the pry prompt indicates the nesting level. To
|
150
|
+
display more information about nesting, use the `nesting` command. E.g
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
pry("friend"):3> nesting
|
154
|
+
Nesting status:
|
155
|
+
0. main (Pry top level)
|
156
|
+
1. Hello
|
157
|
+
2. 100
|
158
|
+
3. "friend"
|
159
|
+
=> nil
|
160
|
+
```
|
161
|
+
|
162
|
+
We can then jump back to any of the previous nesting levels by using the
|
163
|
+
`jump-to` command:
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
pry("friend"):3> jump-to 1
|
167
|
+
=> 100
|
168
|
+
pry(Hello):1>
|
169
|
+
```
|
113
170
|
|
114
171
|
### Runtime invocation
|
115
172
|
|
116
|
-
Pry can be invoked in the middle of a running program. It opens a Pry
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
modifications you made to it.
|
173
|
+
Pry can be invoked in the middle of a running program. It opens a Pry session at
|
174
|
+
the point it's called and makes all program state at that point available. It
|
175
|
+
can be invoked on any object using the `my_object.pry` syntax or on the current
|
176
|
+
binding (or any binding) using `binding.pry`. The Pry session will then begin
|
177
|
+
within the scope of the object (or binding). When the session ends the program
|
178
|
+
continues with any modifications you made to it.
|
123
179
|
|
124
|
-
This functionality can be used for such things as: debugging,
|
125
|
-
|
180
|
+
This functionality can be used for such things as: debugging, implementing
|
181
|
+
developer consoles and applying hot patches.
|
126
182
|
|
127
183
|
code:
|
128
184
|
|
@@ -145,246 +201,252 @@ puts "program resumes here."
|
|
145
201
|
|
146
202
|
Pry session:
|
147
203
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
204
|
+
```ruby
|
205
|
+
pry(main)> a.hello
|
206
|
+
hello world!
|
207
|
+
=> nil
|
208
|
+
pry(main)> def a.goodbye
|
209
|
+
pry(main)* puts "goodbye cruel world!"
|
210
|
+
pry(main)* end
|
211
|
+
=> nil
|
212
|
+
pry(main)> a.goodbye
|
213
|
+
goodbye cruel world!
|
214
|
+
=> nil
|
215
|
+
pry(main)> exit
|
216
|
+
|
217
|
+
program resumes here.
|
218
|
+
```
|
161
219
|
|
162
220
|
### Command Shell Integration
|
163
221
|
|
164
|
-
A line of input that begins with a '.' will be forwarded to the
|
165
|
-
|
166
|
-
|
222
|
+
A line of input that begins with a '.' will be forwarded to the command
|
223
|
+
shell. This enables us to navigate the file system, spawn editors, and run git
|
224
|
+
and rake directly from within Pry.
|
167
225
|
|
168
|
-
Further, we can use the `shell-mode` command to incorporate the
|
169
|
-
|
170
|
-
We can also interpolate Ruby code directly into the shell by
|
226
|
+
Further, we can use the `shell-mode` command to incorporate the present working
|
227
|
+
directory into the Pry prompt and bring in (limited at this stage, sorry) file
|
228
|
+
name completion. We can also interpolate Ruby code directly into the shell by
|
171
229
|
using the normal `#{}` string interpolation syntax.
|
172
230
|
|
173
231
|
In the code below we're going to switch to `shell-mode` and edit the `pryrc`
|
174
232
|
file. We'll then cat its contents and reload the file.
|
175
233
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
example below we use the shell command `cat` on a random file from the
|
190
|
-
current directory and count the number of lines in that file with
|
191
|
-
`wc`:
|
192
|
-
|
193
|
-
pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
|
194
|
-
44
|
234
|
+
```ruby
|
235
|
+
pry(main)> shell-mode
|
236
|
+
pry main:/home/john/ruby/projects/pry $ .cd ~
|
237
|
+
pry main:/home/john $ .emacsclient .pryrc
|
238
|
+
pry main:/home/john $ .cat .pryrc
|
239
|
+
def hello_world
|
240
|
+
puts "hello world!"
|
241
|
+
end
|
242
|
+
pry main:/home/john $ load ".pryrc"
|
243
|
+
=> true
|
244
|
+
pry main:/home/john $ hello_world
|
245
|
+
hello world!
|
246
|
+
```
|
195
247
|
|
196
|
-
|
248
|
+
We can also interpolate Ruby code into the shell. In the example below we use
|
249
|
+
the shell command `cat` on a random file from the current directory and count
|
250
|
+
the number of lines in that file with `wc`:
|
197
251
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
252
|
+
```ruby
|
253
|
+
pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
|
254
|
+
44
|
255
|
+
```
|
202
256
|
|
203
|
-
|
204
|
-
`Class#method` syntax and also simply the name of a method that's in
|
205
|
-
scope. You can optionally pass the `-l` option to show-method to
|
206
|
-
include line numbers in the output.
|
257
|
+
### Code Browsing
|
207
258
|
|
208
|
-
|
209
|
-
|
259
|
+
You can browse method source code with the `show-source` command. Nearly all
|
260
|
+
Ruby methods (and some C methods, with the pry-doc gem) can have their source
|
261
|
+
viewed. Code that is longer than a page is sent through a pager (such as less),
|
262
|
+
and all code is properly syntax highlighted (even C code).
|
210
263
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
pry(Pry):1> show-method rep -l
|
264
|
+
The `show-source` command accepts two syntaxes, the typical ri `Class#method`
|
265
|
+
syntax and also simply the name of a method that's in scope. You can optionally
|
266
|
+
pass the `-l` option to `show-source` to include line numbers in the output.
|
215
267
|
|
216
|
-
|
217
|
-
|
268
|
+
In the following example we will enter the `Pry` class, list the instance
|
269
|
+
methods beginning with 're' and display the source code for the `rep` method:
|
218
270
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
271
|
+
```ruby
|
272
|
+
pry(main)> cd Pry
|
273
|
+
pry(Pry):1> ls -M --grep re
|
274
|
+
Pry#methods: re readline refresh rep repl repl_epilogue repl_prologue retrieve_line
|
275
|
+
pry(Pry):1> show-source rep -l
|
276
|
+
|
277
|
+
From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb:143
|
278
|
+
Number of lines: 6
|
279
|
+
|
280
|
+
143: def rep(target=TOPLEVEL_BINDING)
|
281
|
+
144: target = Pry.binding_for(target)
|
282
|
+
145: result = re(target)
|
283
|
+
146:
|
284
|
+
147: show_result(result) if should_print?
|
285
|
+
148: end
|
286
|
+
```
|
225
287
|
|
226
288
|
Note that we can also view C methods (from Ruby Core) using the
|
227
289
|
`pry-doc` plugin; we also show off the alternate syntax for
|
228
|
-
`show-
|
290
|
+
`show-source`:
|
229
291
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
292
|
+
```ruby
|
293
|
+
pry(main)> show-source Array#select
|
294
|
+
|
295
|
+
From: array.c in Ruby Core (C Method):
|
296
|
+
Number of lines: 15
|
297
|
+
|
298
|
+
static VALUE
|
299
|
+
rb_ary_select(VALUE ary)
|
300
|
+
{
|
301
|
+
VALUE result;
|
302
|
+
long i;
|
303
|
+
|
304
|
+
RETURN_ENUMERATOR(ary, 0, 0);
|
305
|
+
result = rb_ary_new2(RARRAY_LEN(ary));
|
306
|
+
for (i = 0; i < RARRAY_LEN(ary); i++) {
|
307
|
+
if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
|
308
|
+
rb_ary_push(result, rb_ary_elt(ary, i));
|
247
309
|
}
|
248
|
-
return result;
|
249
310
|
}
|
311
|
+
return result;
|
312
|
+
}
|
313
|
+
```
|
250
314
|
|
251
315
|
### Documentation Browsing
|
252
316
|
|
253
|
-
One use-case for Pry is to explore a program at run-time by `cd`-ing
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
The Pry documentation system does not rely on pre-generated `rdoc` or
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
integration with `ri` through the `ri` command. The syntax
|
272
|
-
for the command is exactly as it would be in command-line -
|
317
|
+
One use-case for Pry is to explore a program at run-time by `cd`-ing in and out
|
318
|
+
of objects and viewing and invoking methods. In the course of exploring it may
|
319
|
+
be useful to read the documentation for a specific method that you come
|
320
|
+
across. Like `show-source` the `show-doc` command supports two syntaxes - the
|
321
|
+
normal `ri` syntax as well as accepting the name of any method that is currently
|
322
|
+
in scope.
|
323
|
+
|
324
|
+
The Pry documentation system does not rely on pre-generated `rdoc` or `ri`,
|
325
|
+
instead it grabs the comments directly above the method on demand. This results
|
326
|
+
in speedier documentation retrieval and allows the Pry system to retrieve
|
327
|
+
documentation for methods that would not be picked up by `rdoc`. Pry also has a
|
328
|
+
basic understanding of both the rdoc and yard formats and will attempt to syntax
|
329
|
+
highlight the documentation appropriately.
|
330
|
+
|
331
|
+
Nonetheless, the `ri` functionality is very good and has an advantage over Pry's
|
332
|
+
system in that it allows documentation lookup for classes as well as
|
333
|
+
methods. Pry therefore has good integration with `ri` through the `ri`
|
334
|
+
command. The syntax for the command is exactly as it would be in command-line -
|
273
335
|
so it is not necessary to quote strings.
|
274
336
|
|
275
|
-
In our example we will enter the `Gem` class and view the
|
276
|
-
|
337
|
+
In our example we will enter the `Gem` class and view the documentation for the
|
338
|
+
`try_activate` method:
|
277
339
|
|
278
|
-
|
279
|
-
|
340
|
+
```ruby
|
341
|
+
pry(main)> cd Gem
|
342
|
+
pry(Gem):1> show-doc try_activate
|
280
343
|
|
281
|
-
|
282
|
-
|
344
|
+
From: /Users/john/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:201
|
345
|
+
Number of lines: 3
|
283
346
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
347
|
+
Try to activate a gem containing path. Returns true if
|
348
|
+
activation succeeded or wasn't needed because it was already
|
349
|
+
activated. Returns false if it can't find the path in a gem.
|
350
|
+
pry(Gem):1>
|
351
|
+
```
|
288
352
|
|
289
353
|
We can also use `ri` in the normal way:
|
290
354
|
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
a = [ "a", "b", "c" ]
|
299
|
-
a.each {|x| print x, " -- " }
|
300
|
-
|
301
|
-
produces:
|
302
|
-
|
303
|
-
a -- b -- c --
|
304
|
-
|
305
|
-
### Gist integration
|
355
|
+
```ruby
|
356
|
+
pry(main) ri Array#each
|
357
|
+
----------------------------------------------------------- Array#each
|
358
|
+
array.each {|item| block } -> array
|
359
|
+
------------------------------------------------------------------------
|
360
|
+
Calls _block_ once for each element in _self_, passing that element
|
361
|
+
as a parameter.
|
306
362
|
|
307
|
-
|
308
|
-
|
309
|
-
input expressions, command source, and so on. In the example below we will gist the C source
|
310
|
-
code for the `Symbol#to_proc` method to GitHub:
|
363
|
+
a = [ "a", "b", "c" ]
|
364
|
+
a.each {|x| print x, " -- " }
|
311
365
|
|
312
|
-
|
313
|
-
Gist created at https://gist.github.com/5332c38afc46d902ce46 and added to clipboard.
|
314
|
-
pry(main)>
|
366
|
+
produces:
|
315
367
|
|
316
|
-
|
368
|
+
a -- b -- c --
|
369
|
+
```
|
317
370
|
|
318
371
|
### Edit methods
|
319
372
|
|
320
|
-
You can use `edit Class#method` or `edit my_method`
|
321
|
-
|
322
|
-
|
323
|
-
|
373
|
+
You can use `edit Class#method` or `edit my_method` (if the method is in scope)
|
374
|
+
to open a method for editing directly in your favorite editor. Pry has knowledge
|
375
|
+
of a few different editors and will attempt to open the file at the line the
|
376
|
+
method is defined.
|
324
377
|
|
325
378
|
You can set the editor to use by assigning to the `Pry.editor`
|
326
|
-
accessor. `Pry.editor` will default to `$EDITOR` or failing that will
|
327
|
-
|
328
|
-
|
329
|
-
|
379
|
+
accessor. `Pry.editor` will default to `$EDITOR` or failing that will use `nano`
|
380
|
+
as the backup default. The file that is edited will be automatically reloaded
|
381
|
+
after exiting the editor - reloading can be suppressed by passing the
|
382
|
+
`--no-reload` option to `edit`
|
330
383
|
|
331
|
-
In the example below we will set our default editor to "emacsclient"
|
332
|
-
|
384
|
+
In the example below we will set our default editor to "emacsclient" and open
|
385
|
+
the `Pry#repl` method for editing:
|
333
386
|
|
334
|
-
|
335
|
-
|
387
|
+
```ruby
|
388
|
+
pry(main)> Pry.editor = "emacsclient"
|
389
|
+
pry(main)> edit Pry#repl
|
390
|
+
```
|
336
391
|
|
337
392
|
### Live Help System
|
338
393
|
|
339
|
-
Many other commands are available in Pry; to see the full list type
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
available.
|
394
|
+
Many other commands are available in Pry; to see the full list type `help` at
|
395
|
+
the prompt. A short description of each command is provided with basic
|
396
|
+
instructions for use; some commands have a more extensive help that can be
|
397
|
+
accessed via typing `command_name --help`. A command will typically say in its
|
398
|
+
description if the `--help` option is available.
|
345
399
|
|
346
400
|
### Use Pry as your Rails Console
|
347
401
|
|
348
|
-
The recommended way to use Pry as your Rails console is to add
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
useful Rails-specific commands.
|
402
|
+
The recommended way to use Pry as your Rails console is to add [the `pry-rails`
|
403
|
+
gem](https://github.com/rweng/pry-rails) to your Gemfile. This replaces the
|
404
|
+
default console with Pry, in addition to loading the Rails console helpers and
|
405
|
+
adding some useful Rails-specific commands.
|
353
406
|
|
354
|
-
If you don't want to change your Gemfile, you can still run a Pry
|
355
|
-
|
407
|
+
If you don't want to change your Gemfile, you can still run a Pry console in
|
408
|
+
your app's environment using Pry's `-r` flag:
|
356
409
|
|
357
|
-
|
410
|
+
```sh
|
411
|
+
pry -r ./config/environment
|
412
|
+
```
|
358
413
|
|
359
|
-
Also check out the
|
414
|
+
Also check out the
|
415
|
+
[wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)
|
360
416
|
for more information about integrating Pry with Rails.
|
361
417
|
|
362
|
-
###
|
418
|
+
### Syntax Highlighting
|
363
419
|
|
364
|
-
|
365
|
-
|
420
|
+
Syntax highlighting is on by default in Pry. If you want to change the colors,
|
421
|
+
check out the [pry-theme](https://github.com/kyrylo/pry-theme) gem.
|
366
422
|
|
367
|
-
|
423
|
+
You can toggle the syntax highlighting on and off in a session by using the
|
424
|
+
`toggle-color` command. Alternatively, you can turn it off permanently by
|
425
|
+
putting the line `Pry.color = false` in your `pryrc` file.
|
426
|
+
|
427
|
+
Supported Rubies
|
428
|
+
----------------
|
429
|
+
|
430
|
+
* CRuby >= 1.9.3
|
431
|
+
* JRuby >= 1.7
|
368
432
|
|
369
|
-
|
370
|
-
|
371
|
-
gem.
|
433
|
+
Contact
|
434
|
+
-------
|
372
435
|
|
373
|
-
|
374
|
-
using the `toggle-color` command. Alternatively, you can turn it off
|
375
|
-
permanently by putting the line `Pry.color = false` in your `pryrc`
|
376
|
-
file.
|
436
|
+
In case you have a problem, question or a bug report, feel free to:
|
377
437
|
|
378
|
-
|
438
|
+
* ask a question on IRC (#pry on Freenode)
|
439
|
+
* [file an issue](https://github.com/pry/pry/issues)
|
440
|
+
* [tweet at us](https://twitter.com/pryruby)
|
379
441
|
|
380
|
-
|
442
|
+
License
|
443
|
+
-------
|
381
444
|
|
382
|
-
|
383
|
-
* Much improved documentation system, better support for YARD
|
384
|
-
* Better support for code and method reloading and saving code
|
385
|
-
* Extended and more sophisticated command system, allowing piping
|
386
|
-
between commands and running commands in background
|
445
|
+
The project uses the MIT License. See LICENSE.md for details.
|
387
446
|
|
388
|
-
|
447
|
+
Contributors
|
448
|
+
------------
|
389
449
|
|
390
|
-
|
450
|
+
Pry is primarily the work of [John Mair (banisterfiend)](https://github.com/banister), for full list
|
451
|
+
of contributors see the
|
452
|
+
[contributors graph](https://github.com/pry/pry/graphs/contributors).
|