pry 0.10.3 → 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 (159) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +439 -16
  3. data/LICENSE +1 -1
  4. data/README.md +362 -302
  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 +84 -97
  10. data/lib/pry/code/code_file.rb +37 -26
  11. data/lib/pry/code/code_range.rb +7 -5
  12. data/lib/pry/code/loc.rb +26 -13
  13. data/lib/pry/code.rb +42 -31
  14. data/lib/pry/code_object.rb +53 -28
  15. data/lib/pry/color_printer.rb +46 -35
  16. data/lib/pry/command.rb +197 -369
  17. data/lib/pry/command_set.rb +89 -114
  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 -72
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -46
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +62 -54
  27. data/lib/pry/commands/cd.rb +40 -35
  28. data/lib/pry/commands/change_inspector.rb +29 -22
  29. data/lib/pry/commands/change_prompt.rb +48 -23
  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 +34 -23
  36. data/lib/pry/commands/edit.rb +185 -157
  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 -16
  40. data/lib/pry/commands/find_method.rb +168 -162
  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 +151 -149
  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 +35 -28
  47. data/lib/pry/commands/ls/constants.rb +59 -31
  48. data/lib/pry/commands/ls/formatter.rb +42 -36
  49. data/lib/pry/commands/ls/globals.rb +38 -36
  50. data/lib/pry/commands/ls/grep.rb +17 -15
  51. data/lib/pry/commands/ls/instance_vars.rb +29 -28
  52. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  53. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  54. data/lib/pry/commands/ls/local_names.rb +26 -24
  55. data/lib/pry/commands/ls/local_vars.rb +38 -30
  56. data/lib/pry/commands/ls/ls_entity.rb +47 -52
  57. data/lib/pry/commands/ls/methods.rb +49 -51
  58. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  59. data/lib/pry/commands/ls/self_methods.rb +23 -21
  60. data/lib/pry/commands/ls.rb +124 -103
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +92 -82
  63. data/lib/pry/commands/pry_backtrace.rb +22 -17
  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 +60 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -42
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +56 -29
  71. data/lib/pry/commands/shell_mode.rb +22 -18
  72. data/lib/pry/commands/show_doc.rb +80 -70
  73. data/lib/pry/commands/show_info.rb +194 -155
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +110 -42
  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 +20 -16
  79. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  80. data/lib/pry/commands/watch_expression.rb +89 -84
  81. data/lib/pry/commands/whereami.rb +156 -141
  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 +310 -20
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +22 -9
  90. data/lib/pry/editor.rb +56 -34
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +13 -18
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +20 -62
  96. data/lib/pry/helpers/command_helpers.rb +52 -62
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -12
  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 -85
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +81 -55
  104. data/lib/pry/hooks.rb +60 -110
  105. data/lib/pry/indent.rb +74 -68
  106. data/lib/pry/input_completer.rb +199 -158
  107. data/lib/pry/input_lock.rb +7 -10
  108. data/lib/pry/inspector.rb +36 -24
  109. data/lib/pry/last_exception.rb +45 -45
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/method/patcher.rb +14 -8
  112. data/lib/pry/method/weird_method_locator.rb +79 -45
  113. data/lib/pry/method.rb +178 -124
  114. data/lib/pry/object_path.rb +37 -28
  115. data/lib/pry/output.rb +102 -16
  116. data/lib/pry/pager.rb +187 -174
  117. data/lib/pry/prompt.rb +213 -25
  118. data/lib/pry/pry_class.rb +119 -98
  119. data/lib/pry/pry_instance.rb +261 -224
  120. data/lib/pry/repl.rb +83 -29
  121. data/lib/pry/repl_file_loader.rb +27 -22
  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} +35 -32
  138. data/lib/pry/wrapped_module.rb +68 -63
  139. data/lib/pry.rb +133 -149
  140. metadata +58 -69
  141. data/lib/pry/commands/disabled_commands.rb +0 -2
  142. data/lib/pry/commands/gem_cd.rb +0 -26
  143. data/lib/pry/commands/gem_install.rb +0 -32
  144. data/lib/pry/commands/gem_list.rb +0 -33
  145. data/lib/pry/commands/gem_open.rb +0 -29
  146. data/lib/pry/commands/gist.rb +0 -101
  147. data/lib/pry/commands/install_command.rb +0 -53
  148. data/lib/pry/commands/list_prompts.rb +0 -35
  149. data/lib/pry/commands/simple_prompt.rb +0 -22
  150. data/lib/pry/commands.rb +0 -6
  151. data/lib/pry/config/behavior.rb +0 -139
  152. data/lib/pry/config/convenience.rb +0 -25
  153. data/lib/pry/config/default.rb +0 -161
  154. data/lib/pry/history_array.rb +0 -121
  155. data/lib/pry/plugins.rb +0 -103
  156. data/lib/pry/rbx_path.rb +0 -22
  157. data/lib/pry/rubygem.rb +0 -82
  158. data/lib/pry/terminal.rb +0 -79
  159. data/lib/pry/test/helper.rb +0 -170
@@ -1,114 +1,135 @@
1
- require 'pry/commands/ls/ls_entity'
1
+ # frozen_string_literal: true
2
+
2
3
  class Pry
3
- class Command::Ls < Pry::ClassCommand
4
- DEFAULT_OPTIONS = {
5
- :heading_color => :bright_blue,
6
- :public_method_color => :default,
7
- :private_method_color => :blue,
8
- :protected_method_color => :blue,
9
- :method_missing_color => :bright_red,
10
- :local_var_color => :yellow,
11
- :pry_var_color => :default, # e.g. _, _pry_, _file_
12
- :instance_var_color => :blue, # e.g. @foo
13
- :class_var_color => :bright_blue, # e.g. @@foo
14
- :global_var_color => :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
15
- :builtin_global_color => :cyan, # e.g. $stdin, $-w, $PID
16
- :pseudo_global_color => :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
17
- :constant_color => :default, # e.g. VERSION, ARGF
18
- :class_constant_color => :blue, # e.g. Object, Kernel
19
- :exception_constant_color => :magenta, # e.g. Exception, RuntimeError
20
- :unloaded_constant_color => :yellow, # Any constant that is still in .autoload? state
21
- :separator => " ",
22
- :ceiling => [Object, Module, Class]
23
- }
24
-
25
-
26
- match 'ls'
27
- group 'Context'
28
- description 'Show the list of vars and methods in the current scope.'
29
- command_options :shellwords => false, :interpolate => false
30
-
31
- banner <<-'BANNER'
32
- Usage: ls [-m|-M|-p|-pM] [-q|-v] [-c|-i] [Object]
33
- ls [-g] [-l]
34
-
35
- ls shows you which methods, constants and variables are accessible to Pry. By
36
- default it shows you the local variables defined in the current shell, and any
37
- public methods or instance variables defined on the current object.
38
-
39
- The colours used are configurable using Pry.config.ls.*_color, and the separator
40
- is Pry.config.ls.separator.
41
-
42
- Pry.config.ls.ceiling is used to hide methods defined higher up in the
43
- inheritance chain, this is by default set to [Object, Module, Class] so that
44
- methods defined on all Objects are omitted. The -v flag can be used to ignore
45
- this setting and show all methods, while the -q can be used to set the ceiling
46
- much lower and show only methods defined on the object or its direct class.
47
-
48
- Also check out `find-method` command (run `help find-method`).
49
- BANNER
50
-
51
-
52
- def options(opt)
53
- opt.on :m, :methods, "Show public methods defined on the Object"
54
- opt.on :M, "instance-methods", "Show public methods defined in a Module or Class"
55
- opt.on :p, :ppp, "Show public, protected (in yellow) and private (in green) methods"
56
- opt.on :q, :quiet, "Show only methods defined on object.singleton_class and object.class"
57
- opt.on :v, :verbose, "Show methods and constants on all super-classes (ignores Pry.config.ls.ceiling)"
58
- opt.on :g, :globals, "Show global variables, including those builtin to Ruby (in cyan)"
59
- opt.on :l, :locals, "Show hash of local vars, sorted by descending size"
60
- opt.on :c, :constants, "Show constants, highlighting classes (in blue), and exceptions (in purple).\n" <<
61
- " " * 32 << "Constants that are pending autoload? are also shown (in yellow)"
62
- opt.on :i, :ivars, "Show instance variables (in blue) and class variables (in bright blue)"
63
- opt.on :G, :grep, "Filter output by regular expression", :argument => true
64
-
65
- if jruby?
66
- opt.on :J, "all-java", "Show all the aliases for methods from java (default is to show only prettiest)"
4
+ class Command
5
+ class Ls < Pry::ClassCommand
6
+ DEFAULT_OPTIONS = {
7
+ heading_color: :bright_blue,
8
+ public_method_color: :default,
9
+ private_method_color: :blue,
10
+ protected_method_color: :blue,
11
+ method_missing_color: :bright_red,
12
+ local_var_color: :yellow,
13
+ pry_var_color: :default, # e.g. _, pry_instance, _file_
14
+ instance_var_color: :blue, # e.g. @foo
15
+ class_var_color: :bright_blue, # e.g. @@foo
16
+ global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
17
+ builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID
18
+ pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
19
+ constant_color: :default, # e.g. VERSION, ARGF
20
+ class_constant_color: :blue, # e.g. Object, Kernel
21
+ exception_constant_color: :magenta, # e.g. Exception, RuntimeError
22
+ unloaded_constant_color: :yellow, # Any constant that is still in .autoload? state
23
+ separator: " ",
24
+ ceiling: [Object, Module, Class]
25
+ }.freeze
26
+
27
+ match 'ls'
28
+ group 'Context'
29
+ description 'Show the list of vars and methods in the current scope.'
30
+ command_options shellwords: false, interpolate: false
31
+
32
+ banner <<-'BANNER'
33
+ Usage: ls [-m|-M|-p|-pM] [-q|-v] [-c|-i] [Object]
34
+ ls [-g] [-l]
35
+
36
+ ls shows you which methods, constants and variables are accessible to Pry. By
37
+ default it shows you the local variables defined in the current shell, and any
38
+ public methods or instance variables defined on the current object.
39
+
40
+ The colours used are configurable using Pry.config.ls.*_color, and the separator
41
+ is Pry.config.ls.separator.
42
+
43
+ Pry.config.ls.ceiling is used to hide methods defined higher up in the
44
+ inheritance chain, this is by default set to [Object, Module, Class] so that
45
+ methods defined on all Objects are omitted. The -v flag can be used to ignore
46
+ this setting and show all methods, while the -q can be used to set the ceiling
47
+ much lower and show only methods defined on the object or its direct class.
48
+
49
+ Also check out `find-method` command (run `help find-method`).
50
+ BANNER
51
+
52
+ def options(opt)
53
+ opt.on :m, :methods, "Show public methods defined on the Object"
54
+ opt.on :M, "instance-methods", "Show public methods defined in a " \
55
+ "Module or Class"
56
+ opt.on :p, :ppp, "Show public, protected (in yellow) and private " \
57
+ "(in green) methods"
58
+ opt.on :q, :quiet, "Show only methods defined on object.singleton_class " \
59
+ "and object.class"
60
+ opt.on :v, :verbose, "Show methods and constants on all super-classes " \
61
+ "(ignores Pry.config.ls.ceiling)"
62
+ opt.on :g, :globals, "Show global variables, including those builtin to " \
63
+ "Ruby (in cyan)"
64
+ opt.on :l, :locals, "Show hash of local vars, sorted by descending size"
65
+ opt.on :c, :constants, "Show constants, highlighting classes (in blue), " \
66
+ "and exceptions (in purple).\n" \
67
+ "#{' ' * 32}Constants that are pending autoload? " \
68
+ "are also shown (in yellow)"
69
+ opt.on :i, :ivars, "Show instance variables (in blue) and class " \
70
+ "variables (in bright blue)"
71
+ opt.on :G, :grep, "Filter output by regular expression", argument: true
72
+
73
+ if Object.respond_to?(:deprecate_constant)
74
+ opt.on :d, :dconstants, "Show deprecated constants"
75
+ end
76
+
77
+ return unless Helpers::Platform.jruby?
78
+
79
+ opt.on :J, "all-java", "Show all the aliases for methods from java " \
80
+ "(default is to show only prettiest)"
67
81
  end
68
- end
69
82
 
70
- # Exclude -q, -v and --grep because they,
71
- # don't specify what the user wants to see.
72
- def no_user_opts?
73
- !(opts[:methods] || opts['instance-methods'] || opts[:ppp] ||
74
- opts[:globals] || opts[:locals] || opts[:constants] || opts[:ivars])
75
- end
83
+ # Exclude -q, -v and --grep because they,
84
+ # don't specify what the user wants to see.
85
+ def no_user_opts?
86
+ !(opts[:methods] || opts['instance-methods'] || opts[:ppp] ||
87
+ opts[:globals] || opts[:locals] || opts[:constants] || opts[:ivars])
88
+ end
76
89
 
77
- def process
78
- @interrogatee = args.empty? ? target_self : target.eval(args.join(' '))
79
- raise_errors_if_arguments_are_weird
80
- ls_entity = LsEntity.new({
81
- :interrogatee => @interrogatee,
82
- :no_user_opts => no_user_opts?,
83
- :opts => opts,
84
- :args => args,
85
- :_pry_ => _pry_
86
- })
87
-
88
- _pry_.pager.page ls_entity.entities_table
89
- end
90
+ def process
91
+ @interrogatee = args.empty? ? target_self : target.eval(args.join(' '))
92
+ raise_errors_if_arguments_are_weird
93
+ ls_entity = LsEntity.new(
94
+ interrogatee: @interrogatee,
95
+ no_user_opts: no_user_opts?,
96
+ opts: opts,
97
+ args: args,
98
+ pry_instance: pry_instance
99
+ )
100
+
101
+ pry_instance.pager.page ls_entity.entities_table
102
+ end
90
103
 
91
- private
92
-
93
- def error_list
94
- any_args = args.any?
95
- non_mod_interrogatee = !(Module === @interrogatee)
96
- [
97
- ['-l does not make sense with a specified Object', :locals, any_args],
98
- ['-g does not make sense with a specified Object', :globals, any_args],
99
- ['-q does not make sense with -v', :quiet, opts.present?(:verbose)],
100
- ['-M only makes sense with a Module or a Class', 'instance-methods', non_mod_interrogatee],
101
- ['-c only makes sense with a Module or a Class', :constants, any_args && non_mod_interrogatee]
102
- ]
103
- end
104
+ private
105
+
106
+ def error_list
107
+ any_args = args.any?
108
+ # rubocop:disable Style/CaseEquality
109
+ non_mod_interrogatee = !(Module === @interrogatee)
110
+ # rubocop:enable Style/CaseEquality
111
+ [
112
+ ['-l does not make sense with a specified Object', :locals, any_args],
113
+ ['-g does not make sense with a specified Object', :globals, any_args],
114
+ ['-q does not make sense with -v', :quiet, opts.present?(:verbose)],
115
+ [
116
+ '-M only makes sense with a Module or a Class', 'instance-methods',
117
+ non_mod_interrogatee
118
+ ],
119
+ [
120
+ '-c only makes sense with a Module or a Class', :constants,
121
+ any_args && non_mod_interrogatee
122
+ ]
123
+ ]
124
+ end
104
125
 
105
- def raise_errors_if_arguments_are_weird
106
- error_list.each do |message, option, invalid_expr|
107
- raise Pry::CommandError, message if opts.present?(option) && invalid_expr
126
+ def raise_errors_if_arguments_are_weird
127
+ error_list.each do |message, option, invalid_expr|
128
+ raise Pry::CommandError, message if opts.present?(option) && invalid_expr
129
+ end
108
130
  end
109
131
  end
110
132
 
133
+ Pry::Commands.add_command(Pry::Command::Ls)
111
134
  end
112
-
113
- Pry::Commands.add_command(Pry::Command::Ls)
114
135
  end
@@ -1,25 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Nesting < Pry::ClassCommand
3
- match 'nesting'
4
- group 'Navigating Pry'
5
- description 'Show nesting information.'
4
+ class Command
5
+ class Nesting < Pry::ClassCommand
6
+ match 'nesting'
7
+ group 'Navigating Pry'
8
+ description 'Show nesting information.'
6
9
 
7
- banner <<-'BANNER'
8
- Show nesting information.
9
- BANNER
10
+ banner <<-'BANNER'
11
+ Show nesting information.
12
+ BANNER
10
13
 
11
- def process
12
- output.puts 'Nesting status:'
13
- output.puts '--'
14
- _pry_.binding_stack.each_with_index do |obj, level|
15
- if level == 0
16
- output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))} (Pry top level)"
17
- else
18
- output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))}"
14
+ def process
15
+ output.puts 'Nesting status:'
16
+ output.puts '--'
17
+ pry_instance.binding_stack.each_with_index do |obj, level|
18
+ if level == 0
19
+ output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))} (Pry top level)"
20
+ else
21
+ output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))}"
22
+ end
19
23
  end
20
24
  end
21
25
  end
22
- end
23
26
 
24
- Pry::Commands.add_command(Pry::Command::Nesting)
27
+ Pry::Commands.add_command(Pry::Command::Nesting)
28
+ end
25
29
  end
@@ -1,103 +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, method, line, or file as input.'
6
-
7
- banner <<-'BANNER'
8
- Usage: play [OPTIONS] [--help]
9
-
10
- The play command enables you to replay code from files and methods as if they
11
- were entered directly in the Pry REPL.
12
-
13
- play --lines 149..153 # assumes current context
14
- play -i 20 --lines 1..3 # assumes lines of the input expression at 20
15
- play -o 4 # the output of of an expression at 4
16
- play Pry#repl -l 1..-1 # play the contents of Pry#repl method
17
- play -e 2 # play from specified line until end of valid expression
18
- play hello.rb # play a file
19
- play Rakefile -l 5 # play line 5 of a file
20
- play -d hi # play documentation of hi method
21
- play hi --open # play hi method and leave it open
22
-
23
- https://github.com/pry/pry/wiki/User-Input#wiki-Play
24
- BANNER
25
-
26
- def options(opt)
27
- CodeCollector.inject_options(opt)
28
-
29
- opt.on :open, 'Plays the selected content except the last line. Useful' \
30
- ' for replaying methods and leaving the method definition' \
31
- ' "open". `amend-line` can then be used to' \
32
- ' modify the method.'
33
-
34
- opt.on :e, :expression=, 'Executes until end of valid expression', :as => Integer
35
- opt.on :p, :print, 'Prints executed code'
36
- end
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.'
9
+
10
+ banner <<-'BANNER'
11
+ Usage: play [OPTIONS] [--help]
12
+
13
+ The play command enables you to replay code from files and methods as if they
14
+ were entered directly in the Pry REPL.
15
+
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
25
+
26
+ https://github.com/pry/pry/wiki/User-Input#wiki-Play
27
+ BANNER
28
+
29
+ def options(opt)
30
+ CodeCollector.inject_options(opt)
31
+
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.'
36
+
37
+ opt.on :e, :expression=, 'Executes until end of valid expression', as: Integer
38
+ opt.on :p, :print, 'Prints executed code'
39
+ end
37
40
 
38
- def process
39
- @cc = CodeCollector.new(args, opts, _pry_)
41
+ def process
42
+ @cc = CodeCollector.new(args, opts, pry_instance)
40
43
 
41
- perform_play
42
- show_input
43
- end
44
+ perform_play
45
+ show_input
46
+ end
44
47
 
45
- def perform_play
46
- eval_string << content_after_options
47
- run "fix-indent"
48
- 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)
49
56
 
50
- def show_input
51
- if opts.present?(:print) or !Pry::Code.complete_expression?(eval_string)
52
- run "show-input"
57
+ run 'show-input'
53
58
  end
54
- end
55
59
 
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
56
69
 
57
- def content_after_options
58
- if opts.present?(:open)
59
- restrict_to_lines(content, (0..-2))
60
- elsif opts.present?(:expression)
61
- content_at_expression
62
- else
63
- content
70
+ def content_at_expression
71
+ code_object.expression_at(opts[:expression])
64
72
  end
65
- end
66
73
 
67
- def content_at_expression
68
- code_object.expression_at(opts[:expression])
69
- end
74
+ def code_object
75
+ Pry::Code.new(content)
76
+ end
70
77
 
71
- def code_object
72
- Pry::Code.new(content)
73
- end
78
+ def should_use_default_file?
79
+ !args.first && !opts.present?(:in) && !opts.present?(:out)
80
+ end
74
81
 
75
- def should_use_default_file?
76
- !args.first && !opts.present?(:in) && !opts.present?(:out)
77
- end
82
+ def content
83
+ if should_use_default_file?
84
+ file_content
85
+ else
86
+ @cc.content
87
+ end
88
+ end
78
89
 
79
- def content
80
- if should_use_default_file?
81
- file_content
82
- else
83
- @cc.content
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)
84
100
  end
85
- end
86
101
 
87
- # The file to play from when no code object is specified.
88
- # e.g `play --lines 4..10`
89
- def default_file
90
- target.eval("__FILE__") && File.expand_path(target.eval("__FILE__"))
91
- end
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
92
106
 
93
- def file_content
94
- if default_file && File.exists?(default_file)
95
107
  @cc.restrict_to_lines(File.read(default_file), @cc.line_range)
96
- else
97
- raise CommandError, "File does not exist! File was: #{default_file.inspect}"
98
108
  end
99
109
  end
100
- end
101
110
 
102
- Pry::Commands.add_command(Pry::Command::Play)
111
+ Pry::Commands.add_command(Pry::Command::Play)
112
+ end
103
113
  end
@@ -1,25 +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
- _pry_.pager.page text.bold('Backtrace:') << "\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
21
26
  end
22
- end
23
27
 
24
- Pry::Commands.add_command(Pry::Command::PryBacktrace)
28
+ Pry::Commands.add_command(Pry::Command::PryBacktrace)
29
+ end
25
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 _pry.pager.page 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