pry 0.12.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +110 -1
  3. data/LICENSE +1 -1
  4. data/README.md +331 -269
  5. data/bin/pry +5 -0
  6. data/lib/pry.rb +133 -119
  7. data/lib/pry/basic_object.rb +8 -4
  8. data/lib/pry/block_command.rb +22 -0
  9. data/lib/pry/class_command.rb +194 -0
  10. data/lib/pry/cli.rb +40 -31
  11. data/lib/pry/code.rb +39 -27
  12. data/lib/pry/code/code_file.rb +28 -24
  13. data/lib/pry/code/code_range.rb +4 -2
  14. data/lib/pry/code/loc.rb +15 -8
  15. data/lib/pry/code_object.rb +40 -38
  16. data/lib/pry/color_printer.rb +47 -46
  17. data/lib/pry/command.rb +166 -369
  18. data/lib/pry/command_set.rb +76 -73
  19. data/lib/pry/command_state.rb +31 -0
  20. data/lib/pry/commands/amend_line.rb +86 -81
  21. data/lib/pry/commands/bang.rb +18 -14
  22. data/lib/pry/commands/bang_pry.rb +15 -11
  23. data/lib/pry/commands/cat.rb +61 -54
  24. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  25. data/lib/pry/commands/cat/exception_formatter.rb +71 -60
  26. data/lib/pry/commands/cat/file_formatter.rb +55 -49
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  28. data/lib/pry/commands/cd.rb +40 -35
  29. data/lib/pry/commands/change_inspector.rb +29 -22
  30. data/lib/pry/commands/change_prompt.rb +44 -39
  31. data/lib/pry/commands/clear_screen.rb +16 -10
  32. data/lib/pry/commands/code_collector.rb +148 -133
  33. data/lib/pry/commands/disable_pry.rb +23 -19
  34. data/lib/pry/commands/easter_eggs.rb +19 -30
  35. data/lib/pry/commands/edit.rb +184 -161
  36. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  37. data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
  38. data/lib/pry/commands/exit.rb +39 -35
  39. data/lib/pry/commands/exit_all.rb +24 -20
  40. data/lib/pry/commands/exit_program.rb +20 -16
  41. data/lib/pry/commands/find_method.rb +168 -160
  42. data/lib/pry/commands/fix_indent.rb +16 -12
  43. data/lib/pry/commands/help.rb +140 -133
  44. data/lib/pry/commands/hist.rb +151 -150
  45. data/lib/pry/commands/import_set.rb +20 -16
  46. data/lib/pry/commands/jump_to.rb +25 -21
  47. data/lib/pry/commands/list_inspectors.rb +35 -28
  48. data/lib/pry/commands/ls.rb +124 -102
  49. data/lib/pry/commands/ls/constants.rb +59 -42
  50. data/lib/pry/commands/ls/formatter.rb +50 -46
  51. data/lib/pry/commands/ls/globals.rb +38 -34
  52. data/lib/pry/commands/ls/grep.rb +17 -13
  53. data/lib/pry/commands/ls/instance_vars.rb +29 -27
  54. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  55. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  56. data/lib/pry/commands/ls/local_names.rb +26 -22
  57. data/lib/pry/commands/ls/local_vars.rb +38 -28
  58. data/lib/pry/commands/ls/ls_entity.rb +47 -51
  59. data/lib/pry/commands/ls/methods.rb +44 -43
  60. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  61. data/lib/pry/commands/ls/self_methods.rb +23 -22
  62. data/lib/pry/commands/nesting.rb +21 -17
  63. data/lib/pry/commands/play.rb +93 -82
  64. data/lib/pry/commands/pry_backtrace.rb +24 -17
  65. data/lib/pry/commands/pry_version.rb +15 -11
  66. data/lib/pry/commands/raise_up.rb +27 -22
  67. data/lib/pry/commands/reload_code.rb +60 -48
  68. data/lib/pry/commands/reset.rb +16 -12
  69. data/lib/pry/commands/ri.rb +55 -45
  70. data/lib/pry/commands/save_file.rb +45 -43
  71. data/lib/pry/commands/shell_command.rb +51 -51
  72. data/lib/pry/commands/shell_mode.rb +21 -17
  73. data/lib/pry/commands/show_doc.rb +81 -68
  74. data/lib/pry/commands/show_info.rb +189 -171
  75. data/lib/pry/commands/show_input.rb +16 -11
  76. data/lib/pry/commands/show_source.rb +109 -45
  77. data/lib/pry/commands/stat.rb +35 -31
  78. data/lib/pry/commands/switch_to.rb +21 -15
  79. data/lib/pry/commands/toggle_color.rb +20 -16
  80. data/lib/pry/commands/watch_expression.rb +89 -86
  81. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  82. data/lib/pry/commands/whereami.rb +156 -148
  83. data/lib/pry/commands/wtf.rb +75 -50
  84. data/lib/pry/config.rb +311 -25
  85. data/lib/pry/config/attributable.rb +22 -0
  86. data/lib/pry/config/lazy_value.rb +29 -0
  87. data/lib/pry/config/memoized_value.rb +34 -0
  88. data/lib/pry/config/value.rb +24 -0
  89. data/lib/pry/control_d_handler.rb +28 -0
  90. data/lib/pry/core_extensions.rb +9 -7
  91. data/lib/pry/editor.rb +48 -21
  92. data/lib/pry/env.rb +18 -0
  93. data/lib/pry/exception_handler.rb +43 -0
  94. data/lib/pry/exceptions.rb +13 -16
  95. data/lib/pry/forwardable.rb +5 -1
  96. data/lib/pry/helpers.rb +2 -0
  97. data/lib/pry/helpers/base_helpers.rb +68 -197
  98. data/lib/pry/helpers/command_helpers.rb +50 -61
  99. data/lib/pry/helpers/documentation_helpers.rb +20 -13
  100. data/lib/pry/helpers/options_helpers.rb +14 -7
  101. data/lib/pry/helpers/platform.rb +7 -5
  102. data/lib/pry/helpers/table.rb +33 -26
  103. data/lib/pry/helpers/text.rb +17 -14
  104. data/lib/pry/history.rb +48 -56
  105. data/lib/pry/hooks.rb +21 -12
  106. data/lib/pry/indent.rb +54 -50
  107. data/lib/pry/input_completer.rb +248 -230
  108. data/lib/pry/input_lock.rb +8 -9
  109. data/lib/pry/inspector.rb +36 -24
  110. data/lib/pry/last_exception.rb +45 -45
  111. data/lib/pry/method.rb +141 -94
  112. data/lib/pry/method/disowned.rb +16 -4
  113. data/lib/pry/method/patcher.rb +12 -3
  114. data/lib/pry/method/weird_method_locator.rb +68 -44
  115. data/lib/pry/object_path.rb +33 -25
  116. data/lib/pry/output.rb +121 -35
  117. data/lib/pry/pager.rb +41 -42
  118. data/lib/pry/plugins.rb +25 -8
  119. data/lib/pry/prompt.rb +123 -54
  120. data/lib/pry/pry_class.rb +61 -98
  121. data/lib/pry/pry_instance.rb +217 -215
  122. data/lib/pry/repl.rb +18 -22
  123. data/lib/pry/repl_file_loader.rb +27 -21
  124. data/lib/pry/ring.rb +11 -6
  125. data/lib/pry/slop.rb +574 -563
  126. data/lib/pry/slop/commands.rb +164 -169
  127. data/lib/pry/slop/option.rb +172 -168
  128. data/lib/pry/syntax_highlighter.rb +26 -0
  129. data/lib/pry/system_command_handler.rb +17 -0
  130. data/lib/pry/testable.rb +59 -61
  131. data/lib/pry/testable/evalable.rb +21 -12
  132. data/lib/pry/testable/mockable.rb +18 -10
  133. data/lib/pry/testable/pry_tester.rb +71 -56
  134. data/lib/pry/testable/utility.rb +29 -21
  135. data/lib/pry/testable/variables.rb +49 -43
  136. data/lib/pry/version.rb +3 -1
  137. data/lib/pry/warning.rb +27 -0
  138. data/lib/pry/wrapped_module.rb +51 -42
  139. data/lib/pry/wrapped_module/candidate.rb +21 -14
  140. metadata +31 -30
  141. data/lib/pry/commands.rb +0 -6
  142. data/lib/pry/commands/disabled_commands.rb +0 -2
  143. data/lib/pry/commands/gem_cd.rb +0 -26
  144. data/lib/pry/commands/gem_install.rb +0 -32
  145. data/lib/pry/commands/gem_list.rb +0 -33
  146. data/lib/pry/commands/gem_open.rb +0 -29
  147. data/lib/pry/commands/gem_readme.rb +0 -25
  148. data/lib/pry/commands/gem_search.rb +0 -40
  149. data/lib/pry/commands/gem_stats.rb +0 -83
  150. data/lib/pry/commands/gist.rb +0 -102
  151. data/lib/pry/commands/install_command.rb +0 -54
  152. data/lib/pry/config/behavior.rb +0 -255
  153. data/lib/pry/config/convenience.rb +0 -28
  154. data/lib/pry/config/default.rb +0 -159
  155. data/lib/pry/config/memoization.rb +0 -48
  156. data/lib/pry/platform.rb +0 -91
  157. data/lib/pry/rubygem.rb +0 -84
  158. data/lib/pry/terminal.rb +0 -91
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6320662aa62bb2b7410cb900e5e0d75e075413da
4
- data.tar.gz: d72635ecb0613ee87e6bf7fbc37c71573f1137ce
2
+ SHA256:
3
+ metadata.gz: b865c24d66f239abbf5016520572f80d1074c66a3032243a3c607c3728689646
4
+ data.tar.gz: 1b2c1619fce5542ab11e326c5ac3810237c872b1b6de26b469f61605c9c174af
5
5
  SHA512:
6
- metadata.gz: 396ab2db71196633ab518104409ae367d67c9c9e64a318bdecbef0e40010364cc207211f808f2e616d9909ec93b256b5bc0f58a458f7ac97d195eee8ee6d7e71
7
- data.tar.gz: f74d3c223f09b7d06af0a30500176a6caa10474646ce59fb787d6a5936ab420828a399679d55f7fa0a106ab2f5f45d622748cb13804af85032621151c1147a94
6
+ metadata.gz: abc950c4f27b952c15cd54d1274006b2aa1e4021e024506455371df3b3439e3f7962966b777e27ae3fd66ed86035baeb836590b10653c3366f29cb71aeee8776
7
+ data.tar.gz: 7cc163e3363378ebaa2e28a8c1843b0c1bcbb0d7dd7fadbc5ac314df084ce47218525b807b1db827df9ae32bf794d6e301bf8c8140633b212d9af67dd2b1a7c7
@@ -1,4 +1,112 @@
1
- ### HEAD
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
@@ -3,7 +3,7 @@ License
3
3
 
4
4
  (The MIT License)
5
5
 
6
- Copyright (c) 2018 The Pry Team
6
+ Copyright (c) 2018 John Mair (banisterfiend)
7
7
 
8
8
  Permission is hereby granted, free of charge, to any person obtaining
9
9
  a copy of this software and associated documentation files (the
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)](http://badge.fury.io/rb/pry)
4
- [![Documentation Status](http://inch-ci.org/github/pry/pry.svg?branch=master)](http://inch-ci.org/github/pry/pry)
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
- **Other Resources**
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
- [Skip to the website (recommended)](http://pryrepl.org/) <br />
12
- [Skip to the wiki](https://github.com/pry/pry/wiki)
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
- Pry is a powerful alternative to the standard IRB shell for Ruby. It is
16
- written from scratch to provide a number of advanced features,
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 Powerful and flexible command system
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 REPLs
32
- * A wide-range number of [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide remote sessions, full debugging functionality, and more.
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
- Pry also aims to be more than an IRB replacement; it is an
35
- attempt to bring REPL driven programming to the Ruby language. It is
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 also fairly flexible and allows significant user
40
- [customization](https://github.com/pry/pry/wiki/Customization-and-configuration)
41
- is trivial to set it to read from any object that has a `readline` method and write to any object that has a
42
- `puts` method - many other aspects of Pry are also configurable making
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. Just
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
- a command. Commands are not methods and must start at the beginning of a line, with no
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
- Pry command will show a list of all private instance methods (in
66
- scope) that begin with 'pa'
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
- pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
69
- YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
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
- the `cd` command. This enables us to explore the run-time view of a
75
- program or library. To view which variables and methods are available
76
- within a particular scope we use the versatile [ls command.](https://gist.github.com/c0fc686ef923c8b87715)
77
-
78
- Here we will begin Pry at top-level, then Pry on a class and then on
79
- an instance variable inside that class:
80
-
81
- pry(main)> class Hello
82
- pry(main)* @x = 20
83
- pry(main)* end
84
- => 20
85
- pry(main)> cd Hello
86
- pry(Hello):1> ls -i
87
- instance variables: @x
88
- pry(Hello):1> cd @x
89
- pry(20):2> self + 10
90
- => 30
91
- pry(20):2> cd ..
92
- pry(Hello):1> cd ..
93
- pry(main)> cd ..
94
-
95
- The number after the `:` in the pry prompt indicates the nesting
96
- level. To display more information about nesting, use the `nesting`
97
- command. E.g
98
-
99
- pry("friend"):3> nesting
100
- Nesting status:
101
- 0. main (Pry top level)
102
- 1. Hello
103
- 2. 100
104
- 3. "friend"
105
- => nil
106
-
107
- We can then jump back to any of the previous nesting levels by using
108
- the `jump-to` command:
109
-
110
- pry("friend"):3> jump-to 1
111
- => 100
112
- pry(Hello):1>
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
- session at the point it's called and makes all program state at that
118
- point available. It can be invoked on any object using the
119
- `my_object.pry` syntax or on the current binding (or any binding)
120
- using `binding.pry`. The Pry session will then begin within the scope
121
- of the object (or binding). When the session ends the program continues with any
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
- implementing developer consoles and applying hot patches.
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
- pry(main)> a.hello
149
- hello world!
150
- => nil
151
- pry(main)> def a.goodbye
152
- pry(main)* puts "goodbye cruel world!"
153
- pry(main)* end
154
- => nil
155
- pry(main)> a.goodbye
156
- goodbye cruel world!
157
- => nil
158
- pry(main)> exit
159
-
160
- program resumes here.
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
- command shell. This enables us to navigate the file system, spawn
166
- editors, and run git and rake directly from within Pry.
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
- present working directory into the Pry prompt and bring in (limited at this stage, sorry) file name completion.
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
- pry(main)> shell-mode
177
- pry main:/home/john/ruby/projects/pry $ .cd ~
178
- pry main:/home/john $ .emacsclient .pryrc
179
- pry main:/home/john $ .cat .pryrc
180
- def hello_world
181
- puts "hello world!"
182
- end
183
- pry main:/home/john $ load ".pryrc"
184
- => true
185
- pry main:/home/john $ hello_world
186
- hello world!
187
-
188
- We can also interpolate Ruby code into the shell. In the
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
- ### Code Browsing
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
- You can browse method source code with the `show-method` command. Nearly all Ruby methods (and some C methods, with the pry-doc
199
- gem) can have their source viewed. Code that is longer than a page is
200
- sent through a pager (such as less), and all code is properly syntax
201
- highlighted (even C code).
252
+ ```ruby
253
+ pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
254
+ 44
255
+ ```
202
256
 
203
- The `show-method` command accepts two syntaxes, the typical ri
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
- In the following example we will enter the `Pry` class, list the
209
- instance methods beginning with 're' and display the source code for the `rep` method:
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
- pry(main)> cd Pry
212
- pry(Pry):1> ls -M --grep re
213
- Pry#methods: re readline refresh rep repl repl_epilogue repl_prologue retrieve_line
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
- From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb @ line 143:
217
- Number of lines: 6
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
- 143: def rep(target=TOPLEVEL_BINDING)
220
- 144: target = Pry.binding_for(target)
221
- 145: result = re(target)
222
- 146:
223
- 147: show_result(result) if should_print?
224
- 148: end
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-method`:
290
+ `show-source`:
229
291
 
230
- pry(main)> show-method Array#select
231
-
232
- From: array.c in Ruby Core (C Method):
233
- Number of lines: 15
234
-
235
- static VALUE
236
- rb_ary_select(VALUE ary)
237
- {
238
- VALUE result;
239
- long i;
240
-
241
- RETURN_ENUMERATOR(ary, 0, 0);
242
- result = rb_ary_new2(RARRAY_LEN(ary));
243
- for (i = 0; i < RARRAY_LEN(ary); i++) {
244
- if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
245
- rb_ary_push(result, rb_ary_elt(ary, i));
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
- in and out of objects and viewing and invoking methods. In the course
255
- of exploring it may be useful to read the documentation for a
256
- specific method that you come across. Like `show-method` the `show-doc` command supports
257
- two syntaxes - the normal `ri` syntax as well as accepting the name of
258
- any method that is currently in scope.
259
-
260
- The Pry documentation system does not rely on pre-generated `rdoc` or
261
- `ri`, instead it grabs the comments directly above the method on
262
- demand. This results in speedier documentation retrieval and allows
263
- the Pry system to retrieve documentation for methods that would not be
264
- picked up by `rdoc`. Pry also has a basic understanding of both the
265
- rdoc and yard formats and will attempt to syntax highlight the
266
- documentation appropriately.
267
-
268
- Nonetheless, the `ri` functionality is very good and
269
- has an advantage over Pry's system in that it allows documentation
270
- lookup for classes as well as methods. Pry therefore has good
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
- documentation for the `try_activate` method:
337
+ In our example we will enter the `Gem` class and view the documentation for the
338
+ `try_activate` method:
277
339
 
278
- pry(main)> cd Gem
279
- pry(Gem):1> show-doc try_activate
340
+ ```ruby
341
+ pry(main)> cd Gem
342
+ pry(Gem):1> show-doc try_activate
280
343
 
281
- From: /Users/john/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb @ line 201:
282
- Number of lines: 3
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
- Try to activate a gem containing path. Returns true if
285
- activation succeeded or wasn't needed because it was already
286
- activated. Returns false if it can't find the path in a gem.
287
- pry(Gem):1>
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
- pry(main) ri Array#each
292
- ----------------------------------------------------------- Array#each
293
- array.each {|item| block } -> array
294
- ------------------------------------------------------------------------
295
- Calls _block_ once for each element in _self_, passing that element
296
- as a parameter.
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
- If the `gist` gem is installed then method source or documentation can be gisted to GitHub with the
308
- `gist` command. The `gist` command is capable of gisting [almost any REPL content](https://gist.github.com/cae143e4533416529726), including methods, documentation,
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
- pry(main)> gist -m Symbol#to_proc
313
- Gist created at https://gist.github.com/5332c38afc46d902ce46 and added to clipboard.
314
- pry(main)>
366
+ produces:
315
367
 
316
- You can see the actual gist generated here: [https://gist.github.com/5332c38afc46d902ce46](https://gist.github.com/5332c38afc46d902ce46)
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
- (if the method is in scope) to open a method for editing directly in
322
- your favorite editor. Pry has knowledge of a few different editors and
323
- will attempt to open the file at the line the method is defined.
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
- use `nano` as the backup default. The file that is edited will be
328
- automatically reloaded after exiting the editor - reloading can be
329
- suppressed by passing the `--no-reload` option to `edit`
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
- and open the `Pry#repl` method for editing:
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
- pry(main)> Pry.editor = "emacsclient"
335
- pry(main)> edit Pry#repl
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
- `help` at the prompt. A short description of each command is provided
341
- with basic instructions for use; some commands have a more extensive
342
- help that can be accessed via typing `command_name --help`. A command
343
- will typically say in its description if the `--help` option is
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
- [the `pry-rails` gem](https://github.com/rweng/pry-rails) to
350
- your Gemfile. This replaces the default console with Pry, in
351
- addition to loading the Rails console helpers and adding some
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
- console in your app's environment using Pry's `-r` flag:
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
- pry -r ./config/environment
410
+ ```sh
411
+ pry -r ./config/environment
412
+ ```
358
413
 
359
- Also check out the [wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)
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
- ### Limitations:
418
+ ### Syntax Highlighting
363
419
 
364
- * Tab completion is currently a bit broken/limited this will have a
365
- major overhaul in a future version.
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
- ### Syntax Highlighting
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
- Syntax highlighting is on by default in Pry. If you want to change
370
- the colors, check out the [pry-theme](https://github.com/kyrylo/pry-theme)
371
- gem.
433
+ Contact
434
+ -------
372
435
 
373
- You can toggle the syntax highlighting on and off in a session by
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
- ### Future Directions
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
- Many new features are planned such as:
442
+ License
443
+ -------
381
444
 
382
- * Increase modularity (rely more on plugin system)
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
- ### Contact
447
+ Contributors
448
+ ------------
389
449
 
390
- Problems or questions? File an issue at [GitHub](https://github.com/pry/pry/issues).
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).