pry 0.9.12.2 → 0.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,69 +1,113 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Play < Pry::ClassCommand
3
- match 'play'
4
- group 'Editing'
5
- description 'Playback a string variable or a method or a file as input.'
4
+ class Command
5
+ class Play < Pry::ClassCommand
6
+ match 'play'
7
+ group 'Editing'
8
+ description 'Playback a string variable, method, line, or file as input.'
6
9
 
7
- banner <<-'BANNER'
8
- Usage: play [OPTIONS] [--help]
10
+ banner <<-'BANNER'
11
+ Usage: play [OPTIONS] [--help]
9
12
 
10
- The play command enables you to replay code from files and methods as if they
11
- were entered directly in the Pry REPL.
13
+ The play command enables you to replay code from files and methods as if they
14
+ were entered directly in the Pry REPL.
12
15
 
13
- play --lines 149..153
14
- play -i 20 --lines 1..3
15
- play Pry#repl --lines 1..-1
16
- play Rakefile --lines 5
16
+ play --lines 149..153 # assumes current context
17
+ play -i 20 --lines 1..3 # assumes lines of the input expression at 20
18
+ play -o 4 # the output of an expression at 4
19
+ play Pry#repl -l 1..-1 # play the contents of Pry#repl method
20
+ play -e 2 # play from specified line until end of valid expression
21
+ play hello.rb # play a file
22
+ play Rakefile -l 5 # play line 5 of a file
23
+ play -d hi # play documentation of hi method
24
+ play hi --open # play hi method and leave it open
17
25
 
18
- https://github.com/pry/pry/wiki/User-Input#wiki-Play
19
- BANNER
26
+ https://github.com/pry/pry/wiki/User-Input#wiki-Play
27
+ BANNER
20
28
 
21
- def options(opt)
22
- CodeCollector.inject_options(opt)
29
+ def options(opt)
30
+ CodeCollector.inject_options(opt)
23
31
 
24
- opt.on :open, 'Plays the select content except except' \
25
- ' the last line. Useful for replaying methods and leaving the method definition "open". `amend-line`' \
26
- ' can then be used to modify the method.'
27
- end
32
+ opt.on :open, 'Plays the selected content except the last line. Useful' \
33
+ ' for replaying methods and leaving the method definition' \
34
+ ' "open". `amend-line` can then be used to' \
35
+ ' modify the method.'
28
36
 
29
- def process
30
- @cc = CodeCollector.new(args, opts, _pry_)
37
+ opt.on :e, :expression=, 'Executes until end of valid expression', as: Integer
38
+ opt.on :p, :print, 'Prints executed code'
39
+ end
31
40
 
32
- perform_play
33
- run "show-input" unless Pry::Code.complete_expression?(eval_string)
34
- end
41
+ def process
42
+ @cc = CodeCollector.new(args, opts, pry_instance)
35
43
 
36
- def perform_play
37
- eval_string << (opts.present?(:open) ? restrict_to_lines(content, (0..-2)) : content)
38
- run "fix-indent"
39
- end
44
+ perform_play
45
+ show_input
46
+ end
40
47
 
41
- def should_use_default_file?
42
- !args.first && !opts.present?(:in) && !opts.present?(:out)
43
- end
48
+ def perform_play
49
+ eval_string << content_after_options
50
+ run "fix-indent"
51
+ end
52
+
53
+ def show_input
54
+ return unless opts.present?(:print)
55
+ return unless Pry::Code.complete_expression?(eval_string)
44
56
 
45
- def content
46
- if should_use_default_file?
47
- file_content
48
- else
49
- @cc.content
57
+ run 'show-input'
50
58
  end
51
- end
52
59
 
53
- # The file to play from when no code object is specified.
54
- # e.g `play --lines 4..10`
55
- def default_file
56
- target.eval("__FILE__") && File.expand_path(target.eval("__FILE__"))
57
- end
60
+ def content_after_options
61
+ if opts.present?(:open)
62
+ restrict_to_lines(content, (0..-2))
63
+ elsif opts.present?(:expression)
64
+ content_at_expression
65
+ else
66
+ content
67
+ end
68
+ end
69
+
70
+ def content_at_expression
71
+ code_object.expression_at(opts[:expression])
72
+ end
73
+
74
+ def code_object
75
+ Pry::Code.new(content)
76
+ end
77
+
78
+ def should_use_default_file?
79
+ !args.first && !opts.present?(:in) && !opts.present?(:out)
80
+ end
81
+
82
+ def content
83
+ if should_use_default_file?
84
+ file_content
85
+ else
86
+ @cc.content
87
+ end
88
+ end
89
+
90
+ # The file to play from when no code object is specified.
91
+ # e.g `play --lines 4..10`
92
+ def default_file
93
+ file =
94
+ if target.respond_to?(:source_location)
95
+ target.source_location.first
96
+ else
97
+ target.eval("__FILE__")
98
+ end
99
+ file && File.expand_path(file)
100
+ end
101
+
102
+ def file_content
103
+ if !default_file || !File.exist?(default_file)
104
+ raise CommandError, "File does not exist! File was: #{default_file.inspect}"
105
+ end
58
106
 
59
- def file_content
60
- if default_file && File.exists?(default_file)
61
107
  @cc.restrict_to_lines(File.read(default_file), @cc.line_range)
62
- else
63
- raise CommandError, "File does not exist! File was: #{default_file.inspect}"
64
108
  end
65
109
  end
66
- end
67
110
 
68
- Pry::Commands.add_command(Pry::Command::Play)
111
+ Pry::Commands.add_command(Pry::Command::Play)
112
+ end
69
113
  end
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::PryBacktrace < Pry::ClassCommand
3
- match 'pry-backtrace'
4
- group 'Context'
5
- description 'Show the backtrace for the Pry session.'
4
+ class Command
5
+ class PryBacktrace < Pry::ClassCommand
6
+ match 'pry-backtrace'
7
+ group 'Context'
8
+ description 'Show the backtrace for the Pry session.'
6
9
 
7
- banner <<-BANNER
8
- Usage: pry-backtrace [OPTIONS] [--help]
10
+ banner <<-BANNER
11
+ Usage: pry-backtrace [OPTIONS] [--help]
9
12
 
10
- Show the backtrace for the position in the code where Pry was started. This can
11
- be used to infer the behavior of the program immediately before it entered Pry,
12
- just like the backtrace property of an exception.
13
+ Show the backtrace for the position in the code where Pry was started. This can
14
+ be used to infer the behavior of the program immediately before it entered Pry,
15
+ just like the backtrace property of an exception.
13
16
 
14
- NOTE: if you are looking for the backtrace of the most recent exception raised,
15
- just type: `_ex_.backtrace` instead.
16
- See: https://github.com/pry/pry/wiki/Special-Locals
17
- BANNER
17
+ NOTE: if you are looking for the backtrace of the most recent exception raised,
18
+ just type: `_ex_.backtrace` instead.
19
+ See: https://github.com/pry/pry/wiki/Special-Locals
20
+ BANNER
18
21
 
19
- def process
20
- stagger_output text.bold('Backtrace:') +
21
- "\n--\n" + _pry_.backtrace.join("\n")
22
+ def process
23
+ text = "#{bold('Backtrace:')}\n--\n#{pry_instance.backtrace.join("\n")}"
24
+ pry_instance.pager.page(text)
25
+ end
22
26
  end
23
- end
24
27
 
25
- Pry::Commands.add_command(Pry::Command::PryBacktrace)
28
+ Pry::Commands.add_command(Pry::Command::PryBacktrace)
29
+ end
26
30
  end
@@ -1,17 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Version < Pry::ClassCommand
3
- match 'pry-version'
4
- group 'Misc'
5
- description 'Show Pry version.'
4
+ class Command
5
+ class Version < Pry::ClassCommand
6
+ match 'pry-version'
7
+ group 'Misc'
8
+ description 'Show Pry version.'
6
9
 
7
- banner <<-'BANNER'
8
- Show Pry version.
9
- BANNER
10
+ banner <<-'BANNER'
11
+ Show Pry version.
12
+ BANNER
10
13
 
11
- def process
12
- output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
14
+ def process
15
+ output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
16
+ end
13
17
  end
14
- end
15
18
 
16
- Pry::Commands.add_command(Pry::Command::Version)
19
+ Pry::Commands.add_command(Pry::Command::Version)
20
+ end
17
21
  end
@@ -1,32 +1,38 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  # N.B. using a regular expresion here so that "raise-up 'foo'" does the right thing.
3
- class Command::RaiseUp < Pry::ClassCommand
4
- match /raise-up(!?\b.*)/
5
- group 'Context'
6
- description 'Raise an exception out of the current pry instance.'
7
- command_options :listing => 'raise-up'
8
-
9
- banner <<-BANNER
10
- Raise up, like exit, allows you to quit pry. Instead of returning a value
11
- however, it raises an exception. If you don't provide the exception to be
12
- raised, it will use the most recent exception (in pry `_ex_`).
13
-
14
- When called as raise-up! (with an exclamation mark), this command raises the
15
- exception through any nested prys you have created by "cd"ing into objects.
16
-
17
- raise-up "get-me-out-of-here"
18
-
19
- # This is equivalent to the command above.
20
- raise "get-me-out-of-here"
21
- raise-up
22
- BANNER
23
-
24
- def process
25
- return stagger_output help if captures[0] =~ /(-h|--help)\b/
26
- # Handle 'raise-up', 'raise-up "foo"', 'raise-up RuntimeError, 'farble' in a rubyesque manner
27
- target.eval("_pry_.raise_up#{captures[0]}")
5
+ class Command
6
+ class RaiseUp < Pry::ClassCommand
7
+ match(/raise-up(!?\b.*)/)
8
+ group 'Context'
9
+ description 'Raise an exception out of the current pry instance.'
10
+ command_options listing: 'raise-up'
11
+
12
+ banner <<-BANNER
13
+ Raise up, like exit, allows you to quit pry. Instead of returning a value
14
+ however, it raises an exception. If you don't provide the exception to be
15
+ raised, it will use the most recent exception (in pry `_ex_`).
16
+
17
+ When called as raise-up! (with an exclamation mark), this command raises the
18
+ exception through any nested prys you have created by "cd"ing into objects.
19
+
20
+ raise-up "get-me-out-of-here"
21
+
22
+ # This is equivalent to the command above.
23
+ raise "get-me-out-of-here"
24
+ raise-up
25
+ BANNER
26
+
27
+ def process
28
+ return _pry.pager.page help if captures[0] =~ /(-h|--help)\b/
29
+
30
+ # Handle 'raise-up', 'raise-up "foo"', 'raise-up RuntimeError, 'farble'
31
+ # in a rubyesque manner
32
+ target.eval("pry_instance.raise_up#{captures[0]}")
33
+ end
28
34
  end
29
- end
30
35
 
31
- Pry::Commands.add_command(Pry::Command::RaiseUp)
36
+ Pry::Commands.add_command(Pry::Command::RaiseUp)
37
+ end
32
38
  end
@@ -1,65 +1,74 @@
1
- class Pry
2
- class Command::ReloadCode < Pry::ClassCommand
3
- match 'reload-code'
4
- group 'Misc'
5
- description 'Reload the source file that contains the specified code object.'
1
+ # frozen_string_literal: true
6
2
 
7
- banner <<-'BANNER'
8
- Reload the source file that contains the specified code object.
3
+ class Pry
4
+ class Command
5
+ class ReloadCode < Pry::ClassCommand
6
+ match 'reload-code'
7
+ group 'Misc'
8
+ description 'Reload the source file that contains the specified code object.'
9
9
 
10
- e.g reload-code MyClass#my_method #=> reload a method
11
- reload-code MyClass #=> reload a class
12
- reload-code my-command #=> reload a pry command
13
- reload-code self #=> reload the 'current' object
14
- reload-code #=> identical to reload-code self
15
- BANNER
10
+ banner <<-'BANNER'
11
+ Reload the source file that contains the specified code object.
16
12
 
17
- def process
13
+ e.g reload-code MyClass#my_method #=> reload a method
14
+ reload-code MyClass #=> reload a class
15
+ reload-code my-command #=> reload a pry command
16
+ reload-code self #=> reload the current object
17
+ reload-code #=> reload the current file or object
18
+ BANNER
18
19
 
19
- if obj_name.empty?
20
- # if no parameters were provided then try to reload the
21
- # current file (i.e target.eval("__FILE__"))
22
- reload_current_file
23
- else
24
- code_object = Pry::CodeObject.lookup(obj_name, _pry_)
25
- reload_code_object(code_object)
20
+ def process
21
+ if !args.empty?
22
+ reload_object(args.join(" "))
23
+ elsif internal_binding?(target)
24
+ reload_object("self")
25
+ else
26
+ reload_current_file
27
+ end
26
28
  end
27
- end
28
29
 
29
- private
30
+ private
30
31
 
31
- def current_file
32
- File.expand_path target.eval("__FILE__")
33
- end
32
+ def current_file
33
+ file =
34
+ if target.respond_to?(:source_location)
35
+ target.source_location.first
36
+ else
37
+ target.eval("__FILE__")
38
+ end
39
+ File.expand_path file
40
+ end
41
+
42
+ def reload_current_file
43
+ unless File.exist?(current_file)
44
+ raise CommandError, "Current file: #{current_file} cannot be found on disk!"
45
+ end
34
46
 
35
- def reload_current_file
36
- if !File.exists?(current_file)
37
- raise CommandError, "Current file: #{current_file} cannot be found on disk!"
47
+ load current_file
48
+ output.puts "The current file: #{current_file} was reloaded!"
38
49
  end
39
50
 
40
- load current_file
41
- output.puts "The current file: #{current_file} was reloaded!"
42
- end
51
+ def reload_object(identifier)
52
+ code_object = Pry::CodeObject.lookup(identifier, pry_instance)
53
+ check_for_reloadability(code_object, identifier)
54
+ load code_object.source_file
55
+ output.puts "#{identifier} was reloaded!"
56
+ end
43
57
 
44
- def reload_code_object(code_object)
45
- check_for_reloadability(code_object)
46
- load code_object.source_file
47
- output.puts "#{obj_name} was reloaded!"
48
- end
58
+ def check_for_reloadability(code_object, identifier)
59
+ if !code_object || !code_object.source_file
60
+ raise CommandError, "Cannot locate #{identifier}!"
61
+ end
49
62
 
50
- def obj_name
51
- @obj_name ||= args.join(" ")
52
- end
63
+ return if File.exist?(code_object.source_file)
53
64
 
54
- def check_for_reloadability(code_object)
55
- if !code_object || !code_object.source_file
56
- raise CommandError, "Cannot locate #{obj_name}!"
57
- elsif !File.exists?(code_object.source_file)
58
- raise CommandError, "Cannot reload #{obj_name} as it has no associated file on disk. File found was: #{code_object.source_file}"
65
+ raise CommandError,
66
+ "Cannot reload #{identifier} as it has no associated file on disk. " \
67
+ "File found was: #{code_object.source_file}"
59
68
  end
60
69
  end
61
- end
62
70
 
63
- Pry::Commands.add_command(Pry::Command::ReloadCode)
64
- Pry::Commands.alias_command 'reload-method', 'reload-code'
71
+ Pry::Commands.add_command(Pry::Command::ReloadCode)
72
+ Pry::Commands.alias_command 'reload-method', 'reload-code'
73
+ end
65
74
  end
@@ -1,18 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Reset < Pry::ClassCommand
3
- match 'reset'
4
- group 'Context'
5
- description 'Reset the REPL to a clean state.'
4
+ class Command
5
+ class Reset < Pry::ClassCommand
6
+ match 'reset'
7
+ group 'Context'
8
+ description 'Reset the REPL to a clean state.'
6
9
 
7
- banner <<-'BANNER'
8
- Reset the REPL to a clean state.
9
- BANNER
10
+ banner <<-'BANNER'
11
+ Reset the REPL to a clean state.
12
+ BANNER
10
13
 
11
- def process
12
- output.puts 'Pry reset.'
13
- exec 'pry'
14
+ def process
15
+ output.puts 'Pry reset.'
16
+ exec 'pry'
17
+ end
14
18
  end
15
- end
16
19
 
17
- Pry::Commands.add_command(Pry::Command::Reset)
20
+ Pry::Commands.add_command(Pry::Command::Reset)
21
+ end
18
22
  end
@@ -1,56 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
1
5
  class Pry
2
- class Command::Ri < Pry::ClassCommand
3
- match 'ri'
4
- group 'Introspection'
5
- description 'View ri documentation.'
6
+ class Command
7
+ class Ri < Pry::ClassCommand
8
+ match 'ri'
9
+ group 'Introspection'
10
+ description 'View ri documentation.'
6
11
 
7
- banner <<-'BANNER'
8
- Usage: ri [spec]
12
+ banner <<-'BANNER'
13
+ Usage: ri [spec]
9
14
 
10
- View ri documentation. Relies on the "rdoc" gem being installed.
11
- See also "show-doc" command.
15
+ View ri documentation. Relies on the "rdoc" gem being installed.
16
+ See also "show-doc" command.
12
17
 
13
- ri Array#each
14
- BANNER
18
+ ri Array#each
19
+ BANNER
15
20
 
16
- def process(spec)
17
- # Lazily load RI
18
- require 'rdoc/ri/driver'
21
+ def process(spec)
22
+ unless spec
23
+ return output.puts(
24
+ "Please provide a class, module, or method name (e.g: ri Array#push)"
25
+ )
26
+ end
19
27
 
20
- unless defined? RDoc::RI::PryDriver
28
+ # Lazily load RI
29
+ require 'rdoc/ri/driver'
21
30
 
22
- # Subclass RI so that it formats its output nicely, and uses `lesspipe`.
23
- subclass = Class.new(RDoc::RI::Driver) # the hard way.
31
+ unless defined? RDoc::RI::PryDriver
24
32
 
25
- subclass.class_eval do
26
- def page
27
- paging_text = StringIO.new
28
- yield paging_text
29
- Pry::Pager.page(paging_text.string)
30
- end
33
+ # Subclass RI so that it formats its output nicely, and uses `lesspipe`.
34
+ subclass = Class.new(RDoc::RI::Driver) # the hard way.
35
+
36
+ subclass.class_eval do
37
+ def initialize(pager, opts)
38
+ @pager = pager
39
+ super opts
40
+ end
41
+
42
+ def page
43
+ paging_text = StringIO.new
44
+ yield paging_text
45
+ @pager.page(paging_text.string)
46
+ end
31
47
 
32
- def formatter(io)
33
- if @formatter_klass then
34
- @formatter_klass.new
35
- else
36
- RDoc::Markup::ToAnsi.new
48
+ def formatter(_io)
49
+ if @formatter_klass
50
+ @formatter_klass.new
51
+ else
52
+ RDoc::Markup::ToAnsi.new
53
+ end
37
54
  end
38
55
  end
39
- end
40
56
 
41
- RDoc::RI.const_set :PryDriver, subclass # hook it up!
42
- end
57
+ RDoc::RI.const_set :PryDriver, subclass # hook it up!
58
+ end
43
59
 
44
- # Spin-up an RI insance.
45
- ri = RDoc::RI::PryDriver.new :use_stdout => true, :interactive => false
60
+ # Spin-up an RI insance.
61
+ ri = RDoc::RI::PryDriver.new(
62
+ pry_instance.pager, use_stdout: true, interactive: false
63
+ )
46
64
 
47
- begin
48
- ri.display_names [spec] # Get the documentation (finally!)
49
- rescue RDoc::RI::Driver::NotFoundError => e
50
- output.puts "error: '#{e.name}' not found"
65
+ begin
66
+ ri.display_names [spec] # Get the documentation (finally!)
67
+ rescue RDoc::RI::Driver::NotFoundError => e
68
+ output.puts "error: '#{e.name}' not found"
69
+ end
51
70
  end
52
71
  end
53
- end
54
72
 
55
- Pry::Commands.add_command(Pry::Command::Ri)
73
+ Pry::Commands.add_command(Pry::Command::Ri)
74
+ end
56
75
  end