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.
Files changed (237) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1141 -0
  3. data/LICENSE +2 -2
  4. data/README.md +466 -0
  5. data/bin/pry +4 -7
  6. data/lib/pry/basic_object.rb +10 -0
  7. data/lib/pry/block_command.rb +22 -0
  8. data/lib/pry/class_command.rb +194 -0
  9. data/lib/pry/cli.rb +97 -92
  10. data/lib/pry/code/code_file.rb +114 -0
  11. data/lib/pry/code/code_range.rb +7 -4
  12. data/lib/pry/code/loc.rb +27 -14
  13. data/lib/pry/code.rb +62 -90
  14. data/lib/pry/code_object.rb +83 -39
  15. data/lib/pry/color_printer.rb +66 -0
  16. data/lib/pry/command.rb +202 -371
  17. data/lib/pry/command_set.rb +151 -133
  18. data/lib/pry/command_state.rb +31 -0
  19. data/lib/pry/commands/amend_line.rb +86 -82
  20. data/lib/pry/commands/bang.rb +18 -14
  21. data/lib/pry/commands/bang_pry.rb +15 -11
  22. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  23. data/lib/pry/commands/cat/exception_formatter.rb +85 -73
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -63
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +64 -47
  27. data/lib/pry/commands/cd.rb +42 -26
  28. data/lib/pry/commands/change_inspector.rb +34 -0
  29. data/lib/pry/commands/change_prompt.rb +51 -0
  30. data/lib/pry/commands/clear_screen.rb +20 -0
  31. data/lib/pry/commands/code_collector.rb +148 -131
  32. data/lib/pry/commands/disable_pry.rb +23 -19
  33. data/lib/pry/commands/easter_eggs.rb +23 -34
  34. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  35. data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
  36. data/lib/pry/commands/edit.rb +183 -167
  37. data/lib/pry/commands/exit.rb +40 -35
  38. data/lib/pry/commands/exit_all.rb +24 -20
  39. data/lib/pry/commands/exit_program.rb +20 -17
  40. data/lib/pry/commands/find_method.rb +167 -167
  41. data/lib/pry/commands/fix_indent.rb +16 -12
  42. data/lib/pry/commands/help.rb +140 -133
  43. data/lib/pry/commands/hist.rb +153 -132
  44. data/lib/pry/commands/import_set.rb +20 -15
  45. data/lib/pry/commands/jump_to.rb +25 -21
  46. data/lib/pry/commands/list_inspectors.rb +42 -0
  47. data/lib/pry/commands/ls/constants.rb +75 -0
  48. data/lib/pry/commands/ls/formatter.rb +55 -0
  49. data/lib/pry/commands/ls/globals.rb +50 -0
  50. data/lib/pry/commands/ls/grep.rb +23 -0
  51. data/lib/pry/commands/ls/instance_vars.rb +40 -0
  52. data/lib/pry/commands/ls/interrogatable.rb +24 -0
  53. data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
  54. data/lib/pry/commands/ls/local_names.rb +37 -0
  55. data/lib/pry/commands/ls/local_vars.rb +47 -0
  56. data/lib/pry/commands/ls/ls_entity.rb +65 -0
  57. data/lib/pry/commands/ls/methods.rb +55 -0
  58. data/lib/pry/commands/ls/methods_helper.rb +50 -0
  59. data/lib/pry/commands/ls/self_methods.rb +34 -0
  60. data/lib/pry/commands/ls.rb +100 -303
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +93 -49
  63. data/lib/pry/commands/pry_backtrace.rb +22 -18
  64. data/lib/pry/commands/pry_version.rb +15 -11
  65. data/lib/pry/commands/raise_up.rb +33 -27
  66. data/lib/pry/commands/reload_code.rb +57 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -38
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +66 -34
  71. data/lib/pry/commands/shell_mode.rb +22 -20
  72. data/lib/pry/commands/show_doc.rb +80 -65
  73. data/lib/pry/commands/show_info.rb +193 -159
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +113 -33
  76. data/lib/pry/commands/stat.rb +35 -31
  77. data/lib/pry/commands/switch_to.rb +21 -15
  78. data/lib/pry/commands/toggle_color.rb +21 -13
  79. data/lib/pry/commands/watch_expression/expression.rb +43 -0
  80. data/lib/pry/commands/watch_expression.rb +110 -0
  81. data/lib/pry/commands/whereami.rb +157 -134
  82. data/lib/pry/commands/wtf.rb +78 -40
  83. data/lib/pry/config/attributable.rb +22 -0
  84. data/lib/pry/config/lazy_value.rb +29 -0
  85. data/lib/pry/config/memoized_value.rb +34 -0
  86. data/lib/pry/config/value.rb +24 -0
  87. data/lib/pry/config.rb +290 -220
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +50 -27
  90. data/lib/pry/editor.rb +130 -102
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +73 -0
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +22 -151
  96. data/lib/pry/helpers/command_helpers.rb +55 -63
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -13
  98. data/lib/pry/helpers/options_helpers.rb +15 -8
  99. data/lib/pry/helpers/platform.rb +55 -0
  100. data/lib/pry/helpers/table.rb +44 -32
  101. data/lib/pry/helpers/text.rb +96 -86
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +101 -70
  104. data/lib/pry/hooks.rb +67 -137
  105. data/lib/pry/indent.rb +79 -73
  106. data/lib/pry/input_completer.rb +283 -0
  107. data/lib/pry/input_lock.rb +129 -0
  108. data/lib/pry/inspector.rb +39 -0
  109. data/lib/pry/last_exception.rb +61 -0
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
  112. data/lib/pry/method/weird_method_locator.rb +80 -44
  113. data/lib/pry/method.rb +225 -176
  114. data/lib/pry/object_path.rb +91 -0
  115. data/lib/pry/output.rb +136 -0
  116. data/lib/pry/pager.rb +227 -68
  117. data/lib/pry/prompt.rb +214 -0
  118. data/lib/pry/pry_class.rb +216 -289
  119. data/lib/pry/pry_instance.rb +438 -500
  120. data/lib/pry/repl.rb +256 -0
  121. data/lib/pry/repl_file_loader.rb +34 -35
  122. data/lib/pry/ring.rb +89 -0
  123. data/lib/pry/slop/LICENSE +20 -0
  124. data/lib/pry/slop/commands.rb +190 -0
  125. data/lib/pry/slop/option.rb +210 -0
  126. data/lib/pry/slop.rb +672 -0
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable/evalable.rb +24 -0
  130. data/lib/pry/testable/mockable.rb +22 -0
  131. data/lib/pry/testable/pry_tester.rb +88 -0
  132. data/lib/pry/testable/utility.rb +34 -0
  133. data/lib/pry/testable/variables.rb +52 -0
  134. data/lib/pry/testable.rb +68 -0
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +20 -0
  137. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
  138. data/lib/pry/wrapped_module.rb +102 -103
  139. data/lib/pry.rb +135 -261
  140. metadata +94 -283
  141. data/.document +0 -2
  142. data/.gitignore +0 -16
  143. data/.travis.yml +0 -21
  144. data/.yardopts +0 -1
  145. data/CHANGELOG +0 -534
  146. data/CONTRIBUTORS +0 -55
  147. data/Gemfile +0 -9
  148. data/Guardfile +0 -62
  149. data/README.markdown +0 -400
  150. data/Rakefile +0 -140
  151. data/TODO +0 -117
  152. data/lib/pry/commands/disabled_commands.rb +0 -2
  153. data/lib/pry/commands/gem_cd.rb +0 -26
  154. data/lib/pry/commands/gem_install.rb +0 -29
  155. data/lib/pry/commands/gem_list.rb +0 -33
  156. data/lib/pry/commands/gem_open.rb +0 -29
  157. data/lib/pry/commands/gist.rb +0 -102
  158. data/lib/pry/commands/install_command.rb +0 -51
  159. data/lib/pry/commands/simple_prompt.rb +0 -22
  160. data/lib/pry/commands.rb +0 -6
  161. data/lib/pry/completion.rb +0 -304
  162. data/lib/pry/custom_completions.rb +0 -6
  163. data/lib/pry/history_array.rb +0 -116
  164. data/lib/pry/plugins.rb +0 -103
  165. data/lib/pry/rbx_method.rb +0 -13
  166. data/lib/pry/rbx_path.rb +0 -22
  167. data/lib/pry/rubygem.rb +0 -74
  168. data/lib/pry/terminal.rb +0 -78
  169. data/lib/pry/test/helper.rb +0 -185
  170. data/man/pry.1 +0 -195
  171. data/man/pry.1.html +0 -204
  172. data/man/pry.1.ronn +0 -141
  173. data/pry.gemspec +0 -30
  174. data/spec/Procfile +0 -3
  175. data/spec/cli_spec.rb +0 -78
  176. data/spec/code_object_spec.rb +0 -277
  177. data/spec/code_spec.rb +0 -219
  178. data/spec/command_helpers_spec.rb +0 -29
  179. data/spec/command_integration_spec.rb +0 -644
  180. data/spec/command_set_spec.rb +0 -627
  181. data/spec/command_spec.rb +0 -821
  182. data/spec/commands/amend_line_spec.rb +0 -247
  183. data/spec/commands/bang_spec.rb +0 -19
  184. data/spec/commands/cat_spec.rb +0 -164
  185. data/spec/commands/cd_spec.rb +0 -250
  186. data/spec/commands/disable_pry_spec.rb +0 -25
  187. data/spec/commands/edit_spec.rb +0 -727
  188. data/spec/commands/exit_all_spec.rb +0 -34
  189. data/spec/commands/exit_program_spec.rb +0 -19
  190. data/spec/commands/exit_spec.rb +0 -34
  191. data/spec/commands/find_method_spec.rb +0 -70
  192. data/spec/commands/gem_list_spec.rb +0 -26
  193. data/spec/commands/gist_spec.rb +0 -79
  194. data/spec/commands/help_spec.rb +0 -56
  195. data/spec/commands/hist_spec.rb +0 -181
  196. data/spec/commands/jump_to_spec.rb +0 -15
  197. data/spec/commands/ls_spec.rb +0 -181
  198. data/spec/commands/play_spec.rb +0 -140
  199. data/spec/commands/raise_up_spec.rb +0 -56
  200. data/spec/commands/save_file_spec.rb +0 -177
  201. data/spec/commands/show_doc_spec.rb +0 -510
  202. data/spec/commands/show_input_spec.rb +0 -17
  203. data/spec/commands/show_source_spec.rb +0 -782
  204. data/spec/commands/whereami_spec.rb +0 -203
  205. data/spec/completion_spec.rb +0 -239
  206. data/spec/control_d_handler_spec.rb +0 -58
  207. data/spec/documentation_helper_spec.rb +0 -73
  208. data/spec/editor_spec.rb +0 -79
  209. data/spec/exception_whitelist_spec.rb +0 -21
  210. data/spec/fixtures/candidate_helper1.rb +0 -11
  211. data/spec/fixtures/candidate_helper2.rb +0 -8
  212. data/spec/fixtures/example.erb +0 -5
  213. data/spec/fixtures/example_nesting.rb +0 -33
  214. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  215. data/spec/fixtures/testrc +0 -2
  216. data/spec/fixtures/testrcbad +0 -2
  217. data/spec/fixtures/whereami_helper.rb +0 -6
  218. data/spec/helper.rb +0 -34
  219. data/spec/helpers/bacon.rb +0 -86
  220. data/spec/helpers/mock_pry.rb +0 -43
  221. data/spec/helpers/table_spec.rb +0 -105
  222. data/spec/history_array_spec.rb +0 -67
  223. data/spec/hooks_spec.rb +0 -522
  224. data/spec/indent_spec.rb +0 -301
  225. data/spec/input_stack_spec.rb +0 -90
  226. data/spec/method_spec.rb +0 -482
  227. data/spec/prompt_spec.rb +0 -60
  228. data/spec/pry_defaults_spec.rb +0 -419
  229. data/spec/pry_history_spec.rb +0 -99
  230. data/spec/pry_output_spec.rb +0 -95
  231. data/spec/pry_spec.rb +0 -504
  232. data/spec/run_command_spec.rb +0 -25
  233. data/spec/sticky_locals_spec.rb +0 -157
  234. data/spec/syntax_checking_spec.rb +0 -81
  235. data/spec/wrapped_module_spec.rb +0 -261
  236. data/wiki/Customizing-pry.md +0 -397
  237. data/wiki/Home.md +0 -4
data/LICENSE CHANGED
@@ -1,9 +1,9 @@
1
1
  License
2
2
  -------
3
3
 
4
- (The MIT License)
4
+ (The MIT License)
5
5
 
6
- Copyright (c) 2011 John Mair (banisterfiend)
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 ADDED
@@ -0,0 +1,466 @@
1
+ Pry
2
+ ===
3
+
4
+ [![Pry Build Status](https://github.com/pry/pry/workflows/pry/badge.svg)](https://github.com/pry/pry/actions)
5
+ [![Code Climate](https://codeclimate.com/github/pry/pry.svg)](https://codeclimate.com/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)
8
+ [![Downloads](https://img.shields.io/gem/dt/pry.svg?style=flat)](https://rubygems.org/gems/pry)
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://pry.github.io/
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
+ * [Edit methods](#edit-methods)
42
+ * [Live Help System](#live-help-system)
43
+ * [Use Pry as your Rails Console](#use-pry-as-your-rails-console)
44
+ * [Syntax Highlighting](#syntax-highlighting)
45
+ * [Supported Rubies](#supported-rubies)
46
+ * [Contact](#contact)
47
+ * [License](#license)
48
+ * [Contributors](#contributors)
49
+
50
+ Introduction
51
+ ------------
52
+
53
+ Pry is a runtime developer console and IRB alternative with powerful
54
+ introspection capabilities. Pry aims to be more than an IRB replacement. It is
55
+ an attempt to bring REPL driven programming to the Ruby language.
56
+
57
+ Key features
58
+ ------------
59
+
60
+ * Source code browsing (including core C source with the pry-doc gem)
61
+ * Documentation browsing
62
+ * Live help system
63
+ * Open methods in editors (`edit Class#method`)
64
+ * Syntax highlighting
65
+ * Command shell integration (start editors, run git, and rake from within Pry)
66
+ * Gist integration
67
+ * Navigation around state (`cd`, `ls` and friends)
68
+ * Runtime invocation (use Pry as a developer console or debugger)
69
+ * Exotic object support (BasicObject instances, IClasses, ...)
70
+ * A powerful and flexible command system
71
+ * Ability to view and replay history
72
+ * Many convenience commands inspired by IPython, Smalltalk and other advanced
73
+ REPLs
74
+ * A wide-range number of
75
+ [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide
76
+ remote sessions, full debugging functionality, and more.
77
+
78
+ Installation
79
+ ------------
80
+
81
+ ### Bundler
82
+
83
+ ```ruby
84
+ gem 'pry', '~> 0.13.1'
85
+ ```
86
+
87
+ ### Manual
88
+
89
+ ```sh
90
+ gem install pry
91
+ ```
92
+
93
+ Overview
94
+ --------
95
+
96
+ Pry is fairly flexible and allows significant user
97
+ [customization](https://github.com/pry/pry/wiki/Customization-and-configuration).
98
+ It is trivial to read from any object that has a `readline` method and
99
+ write to any object that has a `puts` method. Many other aspects of Pry are
100
+ also configurable, making it a good choice for implementing custom shells.
101
+
102
+ Pry comes with an executable so it can be invoked at the command line. Just
103
+ enter `pry` to start. A `pryrc` file in `$XDG_CONFIG_HOME/pry/` or the user's
104
+ home directory will be loaded if it exists. Type `pry --help` at the command
105
+ line for more information.
106
+
107
+ ### Commands
108
+
109
+ Nearly every piece of functionality in a Pry session is implemented as a
110
+ command. Commands are not methods and must start at the beginning of a line,
111
+ with no whitespace in between. Commands support a flexible syntax and allow
112
+ 'options' in the same way as shell commands, for example the following Pry
113
+ command will show a list of all private instance methods (in scope) that begin
114
+ with 'pa'
115
+
116
+ ```ruby
117
+ pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
118
+ YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename
119
+ ```
120
+
121
+ ### Navigating around state
122
+
123
+ Pry allows us to pop in and out of different scopes (objects) using the `cd`
124
+ command. This enables us to explore the run-time view of a program or
125
+ library. To view which variables and methods are available within a particular
126
+ scope we use the versatile [ls
127
+ command.](https://gist.github.com/c0fc686ef923c8b87715)
128
+
129
+ Here we will begin Pry at top-level, then Pry on a class and then on an instance
130
+ variable inside that class:
131
+
132
+ ```ruby
133
+ pry(main)> class Hello
134
+ pry(main)* @x = 20
135
+ pry(main)* end
136
+ => 20
137
+ pry(main)> cd Hello
138
+ pry(Hello):1> ls -i
139
+ instance variables: @x
140
+ pry(Hello):1> cd @x
141
+ pry(20):2> self + 10
142
+ => 30
143
+ pry(20):2> cd ..
144
+ pry(Hello):1> cd ..
145
+ pry(main)> cd ..
146
+ ```
147
+
148
+ The number after the `:` in the pry prompt indicates the nesting level. To
149
+ display more information about nesting, use the `nesting` command. E.g
150
+
151
+ ```ruby
152
+ pry("friend"):3> nesting
153
+ Nesting status:
154
+ 0. main (Pry top level)
155
+ 1. Hello
156
+ 2. 100
157
+ 3. "friend"
158
+ => nil
159
+ ```
160
+
161
+ We can then jump back to any of the previous nesting levels by using the
162
+ `jump-to` command:
163
+
164
+ ```ruby
165
+ pry("friend"):3> jump-to 1
166
+ => 100
167
+ pry(Hello):1>
168
+ ```
169
+
170
+ ### Runtime invocation
171
+
172
+ Pry can be invoked in the middle of a running program. It opens a Pry session at
173
+ the point it's called and makes all program state at that point available. It
174
+ can be invoked on any object using the `my_object.pry` syntax or on the current
175
+ binding (or any binding) using `binding.pry`. The Pry session will then begin
176
+ within the scope of the object (or binding). When the session ends the program
177
+ continues with any modifications you made to it.
178
+
179
+ This functionality can be used for such things as: debugging, implementing
180
+ developer consoles and applying hot patches.
181
+
182
+ code:
183
+
184
+ ```ruby
185
+ # test.rb
186
+ require 'pry'
187
+
188
+ class A
189
+ def hello() puts "hello world!" end
190
+ end
191
+
192
+ a = A.new
193
+
194
+ # start a REPL session
195
+ binding.pry
196
+
197
+ # program resumes here (after pry session)
198
+ puts "program resumes here."
199
+ ```
200
+
201
+ Pry session:
202
+
203
+ ```ruby
204
+ pry(main)> a.hello
205
+ hello world!
206
+ => nil
207
+ pry(main)> def a.goodbye
208
+ pry(main)* puts "goodbye cruel world!"
209
+ pry(main)* end
210
+ => :goodbye
211
+ pry(main)> a.goodbye
212
+ goodbye cruel world!
213
+ => nil
214
+ pry(main)> exit
215
+
216
+ program resumes here.
217
+ ```
218
+
219
+ ### Command Shell Integration
220
+
221
+ A line of input that begins with a '.' will be forwarded to the command
222
+ shell. This enables us to navigate the file system, spawn editors, and run git
223
+ and rake directly from within Pry.
224
+
225
+ Further, we can use the `shell-mode` command to incorporate the present working
226
+ directory into the Pry prompt and bring in (limited at this stage, sorry) file
227
+ name completion. We can also interpolate Ruby code directly into the shell by
228
+ using the normal `#{}` string interpolation syntax.
229
+
230
+ In the code below we're going to switch to `shell-mode` and edit the `pryrc`
231
+ file. We'll then cat its contents and reload the file.
232
+
233
+ ```ruby
234
+ pry(main)> shell-mode
235
+ pry main:/home/john/ruby/projects/pry $ .cd ~
236
+ pry main:/home/john $ .emacsclient .pryrc
237
+ pry main:/home/john $ .cat .pryrc
238
+ def hello_world
239
+ puts "hello world!"
240
+ end
241
+ pry main:/home/john $ load ".pryrc"
242
+ => true
243
+ pry main:/home/john $ hello_world
244
+ hello world!
245
+ ```
246
+
247
+ We can also interpolate Ruby code into the shell. In the example below we use
248
+ the shell command `cat` on a random file from the current directory and count
249
+ the number of lines in that file with `wc`:
250
+
251
+ ```ruby
252
+ pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l
253
+ 44
254
+ ```
255
+
256
+ ### Code Browsing
257
+
258
+ You can browse method source code with the `show-source` command. Nearly all
259
+ Ruby methods (and some C methods, with the pry-doc gem) can have their source
260
+ viewed. Code that is longer than a page is sent through a pager (such as less),
261
+ and all code is properly syntax highlighted (even C code).
262
+
263
+ The `show-source` command accepts two syntaxes, the typical ri `Class#method`
264
+ syntax and also simply the name of a method that's in scope. You can optionally
265
+ pass the `-l` option to `show-source` to include line numbers in the output.
266
+
267
+ In the following example we will enter the `Pry` class, list the instance
268
+ methods beginning with 'se' and display the source code for the `set_last_result` method:
269
+
270
+ ```ruby
271
+ pry(main)> cd Pry
272
+ pry(Pry):1> ls -M --grep se
273
+ Pry#methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result
274
+ pry(Pry):1> show-source set_last_result -l
275
+
276
+ From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb:405:
277
+ Owner: Pry
278
+ Visibility: public
279
+ Signature: set_last_result(result, code=?)
280
+ Number of lines: 6
281
+
282
+ 405: def set_last_result(result, code = "")
283
+ 406: @last_result_is_exception = false
284
+ 407: @output_ring << result
285
+ 408:
286
+ 409: self.last_result = result unless code =~ /\A\s*\z/
287
+ 410: end
288
+ ```
289
+
290
+ Note that we can also view C methods (from Ruby Core) using the
291
+ `pry-doc` plugin; we also show off the alternate syntax for
292
+ `show-source`:
293
+
294
+ ```ruby
295
+ pry(main)> show-source Array#select
296
+
297
+ From: array.c in Ruby Core (C Method):
298
+ Number of lines: 15
299
+
300
+ static VALUE
301
+ rb_ary_select(VALUE ary)
302
+ {
303
+ VALUE result;
304
+ long i;
305
+
306
+ RETURN_ENUMERATOR(ary, 0, 0);
307
+ result = rb_ary_new2(RARRAY_LEN(ary));
308
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
309
+ if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
310
+ rb_ary_push(result, rb_ary_elt(ary, i));
311
+ }
312
+ }
313
+ return result;
314
+ }
315
+ ```
316
+
317
+ ### Documentation Browsing
318
+
319
+ One use-case for Pry is to explore a program at run-time by `cd`-ing in and out
320
+ of objects and viewing and invoking methods. In the course of exploring it may
321
+ be useful to read the documentation for a specific method that you come
322
+ across. `show-source` command supports two syntaxes - the
323
+ normal `ri` syntax as well as accepting the name of any method that is currently
324
+ in scope.
325
+
326
+ The Pry documentation system does not rely on pre-generated `rdoc` or `ri`,
327
+ instead it grabs the comments directly above the method on demand. This results
328
+ in speedier documentation retrieval and allows the Pry system to retrieve
329
+ documentation for methods that would not be picked up by `rdoc`. Pry also has a
330
+ basic understanding of both the rdoc and yard formats and will attempt to syntax
331
+ highlight the documentation appropriately.
332
+
333
+ Nonetheless, the `ri` functionality is very good and has an advantage over Pry's
334
+ system in that it allows documentation lookup for classes as well as
335
+ methods. Pry therefore has good integration with `ri` through the `ri`
336
+ command. The syntax for the command is exactly as it would be in command-line -
337
+ so it is not necessary to quote strings.
338
+
339
+ In our example we will enter the `Gem` class and view the documentation for the
340
+ `try_activate` method:
341
+
342
+ ```ruby
343
+ pry(main)> cd Gem
344
+ pry(Gem):1> show-source try_activate -d
345
+
346
+ From: /Users/john/rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems.rb:194:
347
+ Owner: #<Class:Gem>
348
+ Visibility: public
349
+ Signature: try_activate(path)
350
+ Number of lines: 28
351
+
352
+ Try to activate a gem containing path. Returns true if
353
+ activation succeeded or wasn't needed because it was already
354
+ activated. Returns false if it can't find the path in a gem.
355
+
356
+ def self.try_activate(path)
357
+ # finds the _latest_ version... regardless of loaded specs and their deps
358
+ # if another gem had a requirement that would mean we shouldn't
359
+ # activate the latest version, then either it would already be activated
360
+ # or if it was ambiguous (and thus unresolved) the code in our custom
361
+ # require will try to activate the more specific version.
362
+
363
+ spec = Gem::Specification.find_by_path path
364
+ pry(Gem):1>
365
+ ```
366
+
367
+ We can also use `ri` in the normal way:
368
+
369
+ ```ruby
370
+ pry(main) ri Array#each
371
+ ----------------------------------------------------------- Array#each
372
+ array.each {|item| block } -> array
373
+ ------------------------------------------------------------------------
374
+ Calls _block_ once for each element in _self_, passing that element
375
+ as a parameter.
376
+
377
+ a = [ "a", "b", "c" ]
378
+ a.each {|x| print x, " -- " }
379
+
380
+ produces:
381
+
382
+ a -- b -- c --
383
+ ```
384
+
385
+ ### Edit methods
386
+
387
+ You can use `edit Class#method` or `edit my_method` (if the method is in scope)
388
+ to open a method for editing directly in your favorite editor. Pry has knowledge
389
+ of a few different editors and will attempt to open the file at the line the
390
+ method is defined.
391
+
392
+ You can set the editor to use by assigning to the `Pry.editor`
393
+ accessor. `Pry.editor` will default to `$EDITOR` or failing that will use `nano`
394
+ as the backup default. The file that is edited will be automatically reloaded
395
+ after exiting the editor - reloading can be suppressed by passing the
396
+ `--no-reload` option to `edit`
397
+
398
+ In the example below we will set our default editor to "emacsclient" and open
399
+ the `Pry#repl` method for editing:
400
+
401
+ ```ruby
402
+ pry(main)> Pry.editor = "emacsclient"
403
+ pry(main)> edit Pry#repl
404
+ ```
405
+
406
+ ### Live Help System
407
+
408
+ Many other commands are available in Pry; to see the full list type `help` at
409
+ the prompt. A short description of each command is provided with basic
410
+ instructions for use; some commands have a more extensive help that can be
411
+ accessed via typing `command_name --help`. A command will typically say in its
412
+ description if the `--help` option is available.
413
+
414
+ ### Use Pry as your Rails Console
415
+
416
+ The recommended way to use Pry as your Rails console is to add [the `pry-rails`
417
+ gem](https://github.com/rweng/pry-rails) to your Gemfile. This replaces the
418
+ default console with Pry, in addition to loading the Rails console helpers and
419
+ adding some useful Rails-specific commands.
420
+
421
+ If you don't want to change your Gemfile, you can still run a Pry console in
422
+ your app's environment using Pry's `-r` flag:
423
+
424
+ ```sh
425
+ pry -r ./config/environment
426
+ ```
427
+
428
+ Also check out the
429
+ [wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry)
430
+ for more information about integrating Pry with Rails.
431
+
432
+ ### Syntax Highlighting
433
+
434
+ Syntax highlighting is on by default in Pry. If you want to change the colors,
435
+ check out the [pry-theme](https://github.com/kyrylo/pry-theme) gem.
436
+
437
+ You can toggle the syntax highlighting on and off in a session by using the
438
+ `toggle-color` command. Alternatively, you can turn it off permanently by
439
+ putting the line `Pry.color = false` in your `pryrc` file.
440
+
441
+ Supported Rubies
442
+ ----------------
443
+
444
+ * CRuby >= 2.0.0
445
+ * JRuby >= 9.0
446
+
447
+ Contact
448
+ -------
449
+
450
+ In case you have a problem, question or a bug report, feel free to:
451
+
452
+ * ask a question on IRC (#pry on Freenode)
453
+ * [file an issue](https://github.com/pry/pry/issues)
454
+ * [tweet at us](https://twitter.com/pryruby)
455
+
456
+ License
457
+ -------
458
+
459
+ The project uses the MIT License. See LICENSE.md for details.
460
+
461
+ Contributors
462
+ ------------
463
+
464
+ Pry is primarily the work of [John Mair (banisterfiend)](https://github.com/banister), for full list
465
+ of contributors see the
466
+ [contributors graph](https://github.com/pry/pry/graphs/contributors).
data/bin/pry CHANGED
@@ -1,16 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  # (C) John Mair (banisterfiend)
4
5
  # MIT license
5
6
 
6
7
  $0 = 'pry'
7
8
 
8
- begin
9
- require 'pry'
10
- rescue LoadError
11
- require 'rubygems'
12
- require 'pry'
13
- end
9
+ require 'pry'
14
10
 
15
11
  # Process command line options and run Pry
16
- Pry::CLI.parse_options
12
+ opts = Pry::CLI.parse_options
13
+ Pry::CLI.start(opts)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ class BasicObject < BasicObject
5
+ %i[Kernel File Dir LoadError ENV Pry].each do |constant|
6
+ const_set constant, ::Object.const_get(constant)
7
+ end
8
+ include Kernel
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ # A super-class for Commands that are created with a single block.
5
+ #
6
+ # This class ensures that the block is called with the correct number of
7
+ # arguments and the right context.
8
+ #
9
+ # Create subclasses using {Pry::CommandSet#command}.
10
+ class BlockCommand < Command
11
+ # Call the block that was registered with this command.
12
+ # @param [Array<String>] args The arguments passed
13
+ # @return [Object] The return value of the block
14
+ def call(*args)
15
+ instance_exec(*normalize_method_args(block, args), &block)
16
+ end
17
+
18
+ def help
19
+ "#{command_options[:listing].to_s.ljust(18)} #{description}"
20
+ end
21
+ end
22
+ end