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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1141 -0
- data/LICENSE +2 -2
- data/README.md +466 -0
- data/bin/pry +4 -7
- data/lib/pry/basic_object.rb +10 -0
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +97 -92
- data/lib/pry/code/code_file.rb +114 -0
- data/lib/pry/code/code_range.rb +7 -4
- data/lib/pry/code/loc.rb +27 -14
- data/lib/pry/code.rb +62 -90
- data/lib/pry/code_object.rb +83 -39
- data/lib/pry/color_printer.rb +66 -0
- data/lib/pry/command.rb +202 -371
- data/lib/pry/command_set.rb +151 -133
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -82
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +85 -73
- data/lib/pry/commands/cat/file_formatter.rb +56 -63
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +64 -47
- data/lib/pry/commands/cd.rb +42 -26
- data/lib/pry/commands/change_inspector.rb +34 -0
- data/lib/pry/commands/change_prompt.rb +51 -0
- data/lib/pry/commands/clear_screen.rb +20 -0
- data/lib/pry/commands/code_collector.rb +148 -131
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +23 -34
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
- data/lib/pry/commands/edit.rb +183 -167
- data/lib/pry/commands/exit.rb +40 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -17
- data/lib/pry/commands/find_method.rb +167 -167
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +153 -132
- data/lib/pry/commands/import_set.rb +20 -15
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +42 -0
- data/lib/pry/commands/ls/constants.rb +75 -0
- data/lib/pry/commands/ls/formatter.rb +55 -0
- data/lib/pry/commands/ls/globals.rb +50 -0
- data/lib/pry/commands/ls/grep.rb +23 -0
- data/lib/pry/commands/ls/instance_vars.rb +40 -0
- data/lib/pry/commands/ls/interrogatable.rb +24 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
- data/lib/pry/commands/ls/local_names.rb +37 -0
- data/lib/pry/commands/ls/local_vars.rb +47 -0
- data/lib/pry/commands/ls/ls_entity.rb +65 -0
- data/lib/pry/commands/ls/methods.rb +55 -0
- data/lib/pry/commands/ls/methods_helper.rb +50 -0
- data/lib/pry/commands/ls/self_methods.rb +34 -0
- data/lib/pry/commands/ls.rb +100 -303
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -49
- data/lib/pry/commands/pry_backtrace.rb +22 -18
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +33 -27
- data/lib/pry/commands/reload_code.rb +57 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -38
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +66 -34
- data/lib/pry/commands/shell_mode.rb +22 -20
- data/lib/pry/commands/show_doc.rb +80 -65
- data/lib/pry/commands/show_info.rb +193 -159
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +113 -33
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +21 -13
- data/lib/pry/commands/watch_expression/expression.rb +43 -0
- data/lib/pry/commands/watch_expression.rb +110 -0
- data/lib/pry/commands/whereami.rb +157 -134
- data/lib/pry/commands/wtf.rb +78 -40
- data/lib/pry/config/attributable.rb +22 -0
- data/lib/pry/config/lazy_value.rb +29 -0
- data/lib/pry/config/memoized_value.rb +34 -0
- data/lib/pry/config/value.rb +24 -0
- data/lib/pry/config.rb +290 -220
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +50 -27
- data/lib/pry/editor.rb +130 -102
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +73 -0
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +22 -151
- data/lib/pry/helpers/command_helpers.rb +55 -63
- data/lib/pry/helpers/documentation_helpers.rb +21 -13
- data/lib/pry/helpers/options_helpers.rb +15 -8
- data/lib/pry/helpers/platform.rb +55 -0
- data/lib/pry/helpers/table.rb +44 -32
- data/lib/pry/helpers/text.rb +96 -86
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +101 -70
- data/lib/pry/hooks.rb +67 -137
- data/lib/pry/indent.rb +79 -73
- data/lib/pry/input_completer.rb +283 -0
- data/lib/pry/input_lock.rb +129 -0
- data/lib/pry/inspector.rb +39 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
- data/lib/pry/method/weird_method_locator.rb +80 -44
- data/lib/pry/method.rb +225 -176
- data/lib/pry/object_path.rb +91 -0
- data/lib/pry/output.rb +136 -0
- data/lib/pry/pager.rb +227 -68
- data/lib/pry/prompt.rb +214 -0
- data/lib/pry/pry_class.rb +216 -289
- data/lib/pry/pry_instance.rb +438 -500
- data/lib/pry/repl.rb +256 -0
- data/lib/pry/repl_file_loader.rb +34 -35
- data/lib/pry/ring.rb +89 -0
- data/lib/pry/slop/LICENSE +20 -0
- data/lib/pry/slop/commands.rb +190 -0
- data/lib/pry/slop/option.rb +210 -0
- data/lib/pry/slop.rb +672 -0
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable/evalable.rb +24 -0
- data/lib/pry/testable/mockable.rb +22 -0
- data/lib/pry/testable/pry_tester.rb +88 -0
- data/lib/pry/testable/utility.rb +34 -0
- data/lib/pry/testable/variables.rb +52 -0
- data/lib/pry/testable.rb +68 -0
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +20 -0
- data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
- data/lib/pry/wrapped_module.rb +102 -103
- data/lib/pry.rb +135 -261
- metadata +94 -283
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -21
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -9
- data/Guardfile +0 -62
- data/README.markdown +0 -400
- data/Rakefile +0 -140
- data/TODO +0 -117
- data/lib/pry/commands/disabled_commands.rb +0 -2
- data/lib/pry/commands/gem_cd.rb +0 -26
- data/lib/pry/commands/gem_install.rb +0 -29
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -51
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/completion.rb +0 -304
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/history_array.rb +0 -116
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_method.rb +0 -13
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -74
- data/lib/pry/terminal.rb +0 -78
- data/lib/pry/test/helper.rb +0 -185
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -30
- data/spec/Procfile +0 -3
- data/spec/cli_spec.rb +0 -78
- data/spec/code_object_spec.rb +0 -277
- data/spec/code_spec.rb +0 -219
- data/spec/command_helpers_spec.rb +0 -29
- data/spec/command_integration_spec.rb +0 -644
- data/spec/command_set_spec.rb +0 -627
- data/spec/command_spec.rb +0 -821
- data/spec/commands/amend_line_spec.rb +0 -247
- data/spec/commands/bang_spec.rb +0 -19
- data/spec/commands/cat_spec.rb +0 -164
- data/spec/commands/cd_spec.rb +0 -250
- data/spec/commands/disable_pry_spec.rb +0 -25
- data/spec/commands/edit_spec.rb +0 -727
- data/spec/commands/exit_all_spec.rb +0 -34
- data/spec/commands/exit_program_spec.rb +0 -19
- data/spec/commands/exit_spec.rb +0 -34
- data/spec/commands/find_method_spec.rb +0 -70
- data/spec/commands/gem_list_spec.rb +0 -26
- data/spec/commands/gist_spec.rb +0 -79
- data/spec/commands/help_spec.rb +0 -56
- data/spec/commands/hist_spec.rb +0 -181
- data/spec/commands/jump_to_spec.rb +0 -15
- data/spec/commands/ls_spec.rb +0 -181
- data/spec/commands/play_spec.rb +0 -140
- data/spec/commands/raise_up_spec.rb +0 -56
- data/spec/commands/save_file_spec.rb +0 -177
- data/spec/commands/show_doc_spec.rb +0 -510
- data/spec/commands/show_input_spec.rb +0 -17
- data/spec/commands/show_source_spec.rb +0 -782
- data/spec/commands/whereami_spec.rb +0 -203
- data/spec/completion_spec.rb +0 -239
- data/spec/control_d_handler_spec.rb +0 -58
- data/spec/documentation_helper_spec.rb +0 -73
- data/spec/editor_spec.rb +0 -79
- data/spec/exception_whitelist_spec.rb +0 -21
- data/spec/fixtures/candidate_helper1.rb +0 -11
- data/spec/fixtures/candidate_helper2.rb +0 -8
- data/spec/fixtures/example.erb +0 -5
- data/spec/fixtures/example_nesting.rb +0 -33
- data/spec/fixtures/show_source_doc_examples.rb +0 -15
- data/spec/fixtures/testrc +0 -2
- data/spec/fixtures/testrcbad +0 -2
- data/spec/fixtures/whereami_helper.rb +0 -6
- data/spec/helper.rb +0 -34
- data/spec/helpers/bacon.rb +0 -86
- data/spec/helpers/mock_pry.rb +0 -43
- data/spec/helpers/table_spec.rb +0 -105
- data/spec/history_array_spec.rb +0 -67
- data/spec/hooks_spec.rb +0 -522
- data/spec/indent_spec.rb +0 -301
- data/spec/input_stack_spec.rb +0 -90
- data/spec/method_spec.rb +0 -482
- data/spec/prompt_spec.rb +0 -60
- data/spec/pry_defaults_spec.rb +0 -419
- data/spec/pry_history_spec.rb +0 -99
- data/spec/pry_output_spec.rb +0 -95
- data/spec/pry_spec.rb +0 -504
- data/spec/run_command_spec.rb +0 -25
- data/spec/sticky_locals_spec.rb +0 -157
- data/spec/syntax_checking_spec.rb +0 -81
- data/spec/wrapped_module_spec.rb +0 -261
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/lib/pry/command_set.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
4
|
class NoCommandError < StandardError
|
3
5
|
def initialize(match, owner)
|
@@ -10,19 +12,15 @@ class Pry
|
|
10
12
|
class CommandSet
|
11
13
|
include Enumerable
|
12
14
|
include Pry::Helpers::BaseHelpers
|
13
|
-
|
14
|
-
attr_reader :commands
|
15
15
|
attr_reader :helper_module
|
16
16
|
|
17
|
-
# @param [Array<
|
18
|
-
# automatically
|
17
|
+
# @param [Array<Commandset>] imported_sets
|
18
|
+
# Sets which will be imported automatically
|
19
19
|
# @yield Optional block run to define commands
|
20
20
|
def initialize(*imported_sets, &block)
|
21
21
|
@commands = {}
|
22
22
|
@helper_module = Module.new
|
23
|
-
|
24
23
|
import(*imported_sets)
|
25
|
-
|
26
24
|
instance_eval(&block) if block
|
27
25
|
end
|
28
26
|
|
@@ -33,16 +31,12 @@ class Pry
|
|
33
31
|
# @option options [Boolean] :keep_retval Whether or not to use return value
|
34
32
|
# of the block for return of `command` or just to return `nil`
|
35
33
|
# (the default).
|
36
|
-
# @option options [Array<String>] :requires_gem Whether the command has
|
37
|
-
# any gem dependencies, if it does and dependencies not met then
|
38
|
-
# command is disabled and a stub proc giving instructions to
|
39
|
-
# install command is provided.
|
40
34
|
# @option options [Boolean] :interpolate Whether string #{} based
|
41
35
|
# interpolation is applied to the command arguments before
|
42
36
|
# executing the command. Defaults to true.
|
43
37
|
# @option options [String] :listing The listing name of the
|
44
38
|
# command. That is the name by which the command is looked up by
|
45
|
-
# help and by show-
|
39
|
+
# help and by show-source. Necessary for commands with regex matches.
|
46
40
|
# @option options [Boolean] :use_prefix Whether the command uses
|
47
41
|
# `Pry.config.command_prefix` prefix (if one is defined). Defaults
|
48
42
|
# to true.
|
@@ -61,31 +55,38 @@ class Pry
|
|
61
55
|
# end
|
62
56
|
#
|
63
57
|
# # From pry:
|
64
|
-
# # pry(main)>
|
58
|
+
# # pry(main)> pry_instance.commands = MyCommands
|
65
59
|
# # pry(main)> greet john
|
66
60
|
# # Good afternoon John!
|
67
61
|
# # pry(main)> help greet
|
68
62
|
# # Greet somebody
|
69
63
|
# @example Regexp command
|
70
64
|
# MyCommands = Pry::CommandSet.new do
|
71
|
-
# command
|
65
|
+
# command(
|
66
|
+
# /number-(\d+)/, "number-N regex command", :listing => "number"
|
67
|
+
# ) do |num, name|
|
72
68
|
# puts "hello #{name}, nice number: #{num}"
|
73
69
|
# end
|
74
70
|
# end
|
75
71
|
#
|
76
72
|
# # From pry:
|
77
|
-
# # pry(main)>
|
73
|
+
# # pry(main)> pry_instance.commands = MyCommands
|
78
74
|
# # pry(main)> number-10 john
|
79
75
|
# # hello john, nice number: 10
|
80
76
|
# # pry(main)> help number
|
81
77
|
# # number-N regex command
|
82
|
-
def block_command(match, description="No description.", options={}, &block)
|
83
|
-
|
78
|
+
def block_command(match, description = "No description.", options = {}, &block)
|
79
|
+
if description.is_a?(Hash)
|
80
|
+
options = description
|
81
|
+
description = "No description."
|
82
|
+
end
|
84
83
|
options = Pry::Command.default_options(match).merge!(options)
|
85
84
|
|
86
|
-
commands[match] = Pry::BlockCommand.subclass(
|
85
|
+
@commands[match] = Pry::BlockCommand.subclass(
|
86
|
+
match, description, options, helper_module, &block
|
87
|
+
)
|
87
88
|
end
|
88
|
-
|
89
|
+
alias command block_command
|
89
90
|
|
90
91
|
# Defines a new Pry command class.
|
91
92
|
#
|
@@ -103,7 +104,9 @@ class Pry
|
|
103
104
|
# end
|
104
105
|
#
|
105
106
|
# def process
|
106
|
-
#
|
107
|
+
# if opts.present?(:u) && opts.present?(:d)
|
108
|
+
# raise Pry::CommandError, "-u and -d makes no sense"
|
109
|
+
# end
|
107
110
|
# result = args.join(" ")
|
108
111
|
# result.downcase! if opts.present?(:downcase)
|
109
112
|
# result.upcase! if opts.present?(:upcase)
|
@@ -111,59 +114,31 @@ class Pry
|
|
111
114
|
# end
|
112
115
|
# end
|
113
116
|
#
|
114
|
-
def create_command(match, description="No description.", options={}, &block)
|
115
|
-
|
117
|
+
def create_command(match, description = "No description.", options = {}, &block)
|
118
|
+
if description.is_a?(Hash)
|
119
|
+
options = description
|
120
|
+
description = "No description."
|
121
|
+
end
|
116
122
|
options = Pry::Command.default_options(match).merge!(options)
|
117
123
|
|
118
|
-
commands[match] = Pry::ClassCommand.subclass(
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
# Execute a block of code before a command is invoked. The block also
|
124
|
-
# gets access to parameters that will be passed to the command and
|
125
|
-
# is evaluated in the same context.
|
126
|
-
# @param [String, Regexp] search The match or listing of the command.
|
127
|
-
# @yield The block to be run before the command.
|
128
|
-
# @example Display parameter before invoking command
|
129
|
-
# Pry.commands.before_command("whereami") do |n|
|
130
|
-
# output.puts "parameter passed was #{n}"
|
131
|
-
# end
|
132
|
-
def before_command(search, &block)
|
133
|
-
cmd = find_command_by_match_or_listing(search)
|
134
|
-
cmd.hooks[:before].unshift block
|
135
|
-
end
|
136
|
-
|
137
|
-
# Execute a block of code after a command is invoked. The block also
|
138
|
-
# gets access to parameters that will be passed to the command and
|
139
|
-
# is evaluated in the same context.
|
140
|
-
# @param [String, Regexp] search The match or listing of the command.
|
141
|
-
# @yield The block to be run after the command.
|
142
|
-
# @example Display text 'command complete' after invoking command
|
143
|
-
# Pry.commands.after_command("whereami") do |n|
|
144
|
-
# output.puts "command complete!"
|
145
|
-
# end
|
146
|
-
def after_command(search, &block)
|
147
|
-
cmd = find_command_by_match_or_listing(search)
|
148
|
-
cmd.hooks[:after] << block
|
124
|
+
@commands[match] = Pry::ClassCommand.subclass(
|
125
|
+
match, description, options, helper_module, &block
|
126
|
+
)
|
127
|
+
@commands[match].class_eval(&block)
|
128
|
+
@commands[match]
|
149
129
|
end
|
150
130
|
|
151
131
|
def each(&block)
|
152
132
|
@commands.each(&block)
|
153
133
|
end
|
154
134
|
|
155
|
-
# Add a given command object to this set.
|
156
|
-
# @param [Command] command The subclass of Pry::Command you wish to add.
|
157
|
-
def add_command(command)
|
158
|
-
commands[command.match] = command
|
159
|
-
end
|
160
|
-
|
161
135
|
# Removes some commands from the set
|
162
|
-
# @param [Array<String>] searches the matches or listings of the commands
|
136
|
+
# @param [Array<String>] searches the matches or listings of the commands
|
137
|
+
# to remove
|
163
138
|
def delete(*searches)
|
164
139
|
searches.each do |search|
|
165
140
|
cmd = find_command_by_match_or_listing(search)
|
166
|
-
commands.delete cmd.match
|
141
|
+
@commands.delete cmd.match
|
167
142
|
end
|
168
143
|
end
|
169
144
|
|
@@ -173,7 +148,7 @@ class Pry
|
|
173
148
|
# @return [Pry::CommandSet] Returns the reciever (a command set).
|
174
149
|
def import(*sets)
|
175
150
|
sets.each do |set|
|
176
|
-
commands.merge! set.
|
151
|
+
@commands.merge! set.to_hash
|
177
152
|
helper_module.send :include, set.helper_module
|
178
153
|
end
|
179
154
|
self
|
@@ -187,7 +162,7 @@ class Pry
|
|
187
162
|
helper_module.send :include, set.helper_module
|
188
163
|
matches.each do |match|
|
189
164
|
cmd = set.find_command_by_match_or_listing(match)
|
190
|
-
commands[cmd.match] = cmd
|
165
|
+
@commands[cmd.match] = cmd
|
191
166
|
end
|
192
167
|
self
|
193
168
|
end
|
@@ -196,9 +171,9 @@ class Pry
|
|
196
171
|
# of the command to retrieve.
|
197
172
|
# @return [Command] The command object matched.
|
198
173
|
def find_command_by_match_or_listing(match_or_listing)
|
199
|
-
cmd = (commands[match_or_listing] ||
|
200
|
-
Pry::Helpers::BaseHelpers.find_command(match_or_listing, commands))
|
201
|
-
cmd
|
174
|
+
cmd = (@commands[match_or_listing] ||
|
175
|
+
Pry::Helpers::BaseHelpers.find_command(match_or_listing, @commands))
|
176
|
+
cmd || raise(ArgumentError, "cannot find a command: '#{match_or_listing}'")
|
202
177
|
end
|
203
178
|
|
204
179
|
# Aliases a command
|
@@ -212,14 +187,14 @@ class Pry
|
|
212
187
|
# Pry.config.commands.alias_command "lM", "ls -M"
|
213
188
|
# @example Pass explicit description (overriding default).
|
214
189
|
# Pry.config.commands.alias_command "lM", "ls -M", :desc => "cutiepie"
|
215
|
-
def alias_command(match, action,
|
216
|
-
cmd = find_command(action)
|
190
|
+
def alias_command(match, action, options = {})
|
191
|
+
(cmd = find_command(action)) || raise("command: '#{action}' not found")
|
217
192
|
original_options = cmd.options.dup
|
218
193
|
|
219
|
-
options = original_options.merge!(
|
220
|
-
|
221
|
-
|
222
|
-
|
194
|
+
options = original_options.merge!(
|
195
|
+
desc: "Alias for `#{action}`",
|
196
|
+
listing: match.is_a?(String) ? match : match.inspect
|
197
|
+
).merge!(options)
|
223
198
|
|
224
199
|
# ensure default description is used if desc is nil
|
225
200
|
desc = options.delete(:desc).to_s
|
@@ -228,6 +203,7 @@ class Pry
|
|
228
203
|
run action, *args
|
229
204
|
end
|
230
205
|
|
206
|
+
# TODO: untested. What's this about?
|
231
207
|
c.class_eval do
|
232
208
|
define_method(:complete) do |input|
|
233
209
|
cmd.new(context).complete(input)
|
@@ -248,30 +224,19 @@ class Pry
|
|
248
224
|
# command description to be passed this way too.
|
249
225
|
# @example Renaming the `ls` command and changing its description.
|
250
226
|
# Pry.config.commands.rename "dir", "ls", :description => "DOS friendly ls"
|
251
|
-
def rename_command(new_match, search, options={})
|
227
|
+
def rename_command(new_match, search, options = {})
|
252
228
|
cmd = find_command_by_match_or_listing(search)
|
253
229
|
|
254
230
|
options = {
|
255
|
-
:
|
256
|
-
:
|
231
|
+
listing: new_match,
|
232
|
+
description: cmd.description
|
257
233
|
}.merge!(options)
|
258
234
|
|
259
|
-
commands[new_match] = cmd.dup
|
260
|
-
commands[new_match].match = new_match
|
261
|
-
commands[new_match].description = options.delete(:description)
|
262
|
-
commands[new_match].options.merge!(options)
|
263
|
-
commands.delete(cmd.match)
|
264
|
-
end
|
265
|
-
|
266
|
-
def disabled_command(name_of_disabled_command, message, matcher=name_of_disabled_command)
|
267
|
-
create_command name_of_disabled_command do
|
268
|
-
match matcher
|
269
|
-
description ""
|
270
|
-
|
271
|
-
define_method(:process) do
|
272
|
-
output.puts "DISABLED: #{message}"
|
273
|
-
end
|
274
|
-
end
|
235
|
+
@commands[new_match] = cmd.dup
|
236
|
+
@commands[new_match].match = new_match
|
237
|
+
@commands[new_match].description = options.delete(:description)
|
238
|
+
@commands[new_match].options.merge!(options)
|
239
|
+
@commands.delete(cmd.match)
|
275
240
|
end
|
276
241
|
|
277
242
|
# Sets or gets the description for a command (replacing the old
|
@@ -285,52 +250,91 @@ class Pry
|
|
285
250
|
# end
|
286
251
|
# @example Getting
|
287
252
|
# Pry.config.commands.desc "amend-line"
|
288
|
-
def desc(search, description=nil)
|
253
|
+
def desc(search, description = nil)
|
289
254
|
cmd = find_command_by_match_or_listing(search)
|
290
|
-
return cmd.description
|
255
|
+
return cmd.description unless description
|
291
256
|
|
292
257
|
cmd.description = description
|
293
258
|
end
|
294
259
|
|
295
|
-
#
|
296
|
-
#
|
260
|
+
# @return [Array]
|
261
|
+
# The list of commands provided by the command set.
|
262
|
+
def list_commands
|
263
|
+
@commands.keys
|
264
|
+
end
|
265
|
+
alias keys list_commands
|
266
|
+
|
267
|
+
def to_hash
|
268
|
+
@commands.dup
|
269
|
+
end
|
270
|
+
alias to_h to_hash
|
271
|
+
|
272
|
+
# Find a command that matches the given line
|
273
|
+
# @param [String] pattern The line that might be a command invocation
|
274
|
+
# @return [Pry::Command, nil]
|
275
|
+
def [](pattern)
|
276
|
+
commands = @commands.values.select do |command|
|
277
|
+
command.matches?(pattern)
|
278
|
+
end
|
279
|
+
commands.max_by { |command| command.match_score(pattern) }
|
280
|
+
end
|
281
|
+
alias find_command []
|
282
|
+
|
283
|
+
#
|
284
|
+
# Re-assign the command found at _pattern_ with _command_.
|
285
|
+
#
|
286
|
+
# @param [Regexp, String] pattern
|
287
|
+
# The command to add or replace(found at _pattern_).
|
288
|
+
#
|
289
|
+
# @param [Pry::Command] command
|
290
|
+
# The command to add.
|
291
|
+
#
|
292
|
+
# @return [Pry::Command]
|
293
|
+
# Returns the new command (matched with "pattern".)
|
297
294
|
#
|
298
|
-
# @yield A block defining helper methods
|
299
295
|
# @example
|
300
|
-
#
|
301
|
-
# def hello
|
302
|
-
# puts "Hello!"
|
303
|
-
# end
|
296
|
+
# Pry.config.commands["help"] = MyHelpCommand
|
304
297
|
#
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
298
|
+
def []=(pattern, command)
|
299
|
+
if command.equal?(nil)
|
300
|
+
@commands.delete(pattern)
|
301
|
+
return
|
302
|
+
end
|
310
303
|
|
304
|
+
unless command.is_a?(Class) && command < Pry::Command
|
305
|
+
raise TypeError, "command is not a subclass of Pry::Command"
|
306
|
+
end
|
311
307
|
|
312
|
-
|
313
|
-
|
314
|
-
|
308
|
+
bind_command_to_pattern = pattern != command.match
|
309
|
+
if bind_command_to_pattern
|
310
|
+
command_copy = command.dup
|
311
|
+
command_copy.match = pattern
|
312
|
+
@commands[pattern] = command_copy
|
313
|
+
else
|
314
|
+
@commands[pattern] = command
|
315
|
+
end
|
315
316
|
end
|
316
317
|
|
317
|
-
#
|
318
|
-
#
|
319
|
-
#
|
320
|
-
|
321
|
-
|
318
|
+
#
|
319
|
+
# Add a command to set.
|
320
|
+
#
|
321
|
+
# @param [Command] command
|
322
|
+
# a subclass of Pry::Command.
|
323
|
+
#
|
324
|
+
def add_command(command)
|
325
|
+
self[command.match] = command
|
322
326
|
end
|
323
|
-
alias_method :[], :find_command
|
324
327
|
|
325
328
|
# Find the command that the user might be trying to refer to.
|
326
329
|
# @param [String] search The user's search.
|
327
330
|
# @return [Pry::Command?]
|
328
331
|
def find_command_for_help(search)
|
329
|
-
find_command(search) ||
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
332
|
+
find_command(search) ||
|
333
|
+
(begin
|
334
|
+
find_command_by_match_or_listing(search)
|
335
|
+
rescue ArgumentError
|
336
|
+
nil
|
337
|
+
end)
|
334
338
|
end
|
335
339
|
|
336
340
|
# Is the given line a command invocation?
|
@@ -344,9 +348,9 @@ class Pry
|
|
344
348
|
# @param [String] val The line to execute
|
345
349
|
# @param [Hash] context The context to execute the commands with
|
346
350
|
# @return [CommandSet::Result]
|
347
|
-
def process_line(val, context={})
|
348
|
-
if command = find_command(val)
|
349
|
-
context = context.merge(:
|
351
|
+
def process_line(val, context = {})
|
352
|
+
if (command = find_command(val))
|
353
|
+
context = context.merge(command_set: self)
|
350
354
|
retval = command.new(context).process_line(val)
|
351
355
|
Result.new(true, retval)
|
352
356
|
else
|
@@ -354,25 +358,38 @@ class Pry
|
|
354
358
|
end
|
355
359
|
end
|
356
360
|
|
357
|
-
# @private (used for testing)
|
358
|
-
def run_command(context, match, *args)
|
359
|
-
command = commands[match] or raise NoCommandError.new(match, self)
|
360
|
-
command.new(context).call_safely(*args)
|
361
|
-
end
|
362
|
-
|
363
361
|
# Generate completions for the user's search.
|
364
362
|
# @param [String] search The line to search for
|
365
363
|
# @param [Hash] context The context to create the command with
|
366
364
|
# @return [Array<String>]
|
367
|
-
def complete(search, context={})
|
368
|
-
if command = find_command(search)
|
365
|
+
def complete(search, context = {})
|
366
|
+
if (command = find_command(search))
|
369
367
|
command.new(context).complete(search)
|
370
368
|
else
|
371
|
-
commands.keys.select do |
|
372
|
-
String
|
373
|
-
end
|
369
|
+
keys = @commands.keys.select do |key|
|
370
|
+
key.is_a?(String) && key.start_with?(search)
|
371
|
+
end
|
372
|
+
keys.map { |key| key + " " }
|
374
373
|
end
|
375
374
|
end
|
375
|
+
|
376
|
+
private
|
377
|
+
|
378
|
+
# Defines helpers methods for this command sets.
|
379
|
+
# Those helpers are only defined in this command set.
|
380
|
+
#
|
381
|
+
# @yield A block defining helper methods
|
382
|
+
# @example
|
383
|
+
# helpers do
|
384
|
+
# def hello
|
385
|
+
# puts "Hello!"
|
386
|
+
# end
|
387
|
+
#
|
388
|
+
# include OtherModule
|
389
|
+
# end
|
390
|
+
def helpers(&block)
|
391
|
+
helper_module.class_eval(&block)
|
392
|
+
end
|
376
393
|
end
|
377
394
|
|
378
395
|
# Wraps the return result of process_commands, indicates if the
|
@@ -381,7 +398,8 @@ class Pry
|
|
381
398
|
attr_reader :retval
|
382
399
|
|
383
400
|
def initialize(is_command, retval = nil)
|
384
|
-
@is_command
|
401
|
+
@is_command = is_command
|
402
|
+
@retval = retval
|
385
403
|
end
|
386
404
|
|
387
405
|
# Is the result a command?
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
class Pry
|
6
|
+
# CommandState is a data structure to hold per-command state.
|
7
|
+
#
|
8
|
+
# Pry commands can store arbitrary state here. This state persists between
|
9
|
+
# subsequent command invocations. All state saved here is unique to the
|
10
|
+
# command.
|
11
|
+
#
|
12
|
+
# @since v0.13.0
|
13
|
+
# @api private
|
14
|
+
class CommandState
|
15
|
+
def self.default
|
16
|
+
@default ||= new
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@command_state = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def state_for(command_name)
|
24
|
+
@command_state[command_name] ||= OpenStruct.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def reset(command_name)
|
28
|
+
@command_state[command_name] = OpenStruct.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|