Class: Pry::CommandSet
- Includes:
- Enumerable, Helpers::BaseHelpers
- Defined in:
- lib/pry/command_set.rb
Overview
This class is used to create sets of commands. Commands can be imported from different sets, aliased, removed, etc.
Instance Attribute Summary collapse
-
#helper_module ⇒ Object
readonly
Returns the value of attribute helper_module.
Instance Method Summary collapse
-
#[](pattern) ⇒ Pry::Command?
(also: #find_command)
Find a command that matches the given line.
-
#[]=(pattern, command) ⇒ Pry::Command
Re-assign the command found at pattern with command.
-
#add_command(command) ⇒ Object
Add a command to set.
-
#alias_command(match, action, options = {}) ⇒ Object
Aliases a command.
-
#block_command(match, description = "No description.", options = {}) { ... } ⇒ Object
(also: #command)
Defines a new Pry command.
-
#complete(search, context = {}) ⇒ Array<String>
Generate completions for the user’s search.
-
#create_command(match, description = "No description.", options = {}) { ... } ⇒ Object
Defines a new Pry command class.
-
#delete(*searches) ⇒ Object
Removes some commands from the set.
-
#desc(search, description = nil) ⇒ Object
Sets or gets the description for a command (replacing the old description).
- #each(&block) ⇒ Object
-
#find_command_by_match_or_listing(match_or_listing) ⇒ Command
The command object matched.
-
#find_command_for_help(search) ⇒ Pry::Command?
Find the command that the user might be trying to refer to.
-
#import(*sets) ⇒ Pry::CommandSet
Imports all the commands from one or more sets.
-
#import_from(set, *matches) ⇒ Pry::CommandSet
Imports some commands from a set.
-
#initialize(*imported_sets) { ... } ⇒ CommandSet
constructor
A new instance of CommandSet.
-
#list_commands ⇒ Array
(also: #keys)
The list of commands provided by the command set.
-
#process_line(val, context = {}) ⇒ CommandSet::Result
Process the given line to see whether it needs executing as a command.
-
#rename_command(new_match, search, options = {}) ⇒ Object
Rename a command.
- #to_hash ⇒ Object (also: #to_h)
-
#valid_command?(val) ⇒ Boolean
Is the given line a command invocation?.
Methods included from Helpers::BaseHelpers
#colorize_code, #heading, #highlight, #not_a_real_file?, #safe_send, #silence_warnings, #stagger_output, #use_ansi_codes?
Constructor Details
#initialize(*imported_sets) { ... } ⇒ CommandSet
Returns a new instance of CommandSet.
20 21 22 23 24 25 |
# File 'lib/pry/command_set.rb', line 20 def initialize(*imported_sets, &block) @commands = {} @helper_module = Module.new import(*imported_sets) instance_eval(&block) if block end |
Instance Attribute Details
#helper_module ⇒ Object (readonly)
Returns the value of attribute helper_module.
15 16 17 |
# File 'lib/pry/command_set.rb', line 15 def helper_module @helper_module end |
Instance Method Details
#[](pattern) ⇒ Pry::Command? Also known as: find_command
Find a command that matches the given line
275 276 277 278 279 280 |
# File 'lib/pry/command_set.rb', line 275 def [](pattern) commands = @commands.values.select do |command| command.matches?(pattern) end commands.max_by { |command| command.match_score(pattern) } end |
#[]=(pattern, command) ⇒ Pry::Command
Re-assign the command found at pattern with command.
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
# File 'lib/pry/command_set.rb', line 298 def []=(pattern, command) if command.equal?(nil) @commands.delete(pattern) return end unless command.is_a?(Class) && command < Pry::Command raise TypeError, "command is not a subclass of Pry::Command" end bind_command_to_pattern = pattern != command.match if bind_command_to_pattern command_copy = command.dup command_copy.match = pattern @commands[pattern] = command_copy else @commands[pattern] = command end end |
#add_command(command) ⇒ Object
Add a command to set.
324 325 326 |
# File 'lib/pry/command_set.rb', line 324 def add_command(command) self[command.match] = command end |
#alias_command(match, action, options = {}) ⇒ Object
Aliases a command
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/pry/command_set.rb', line 190 def alias_command(match, action, = {}) (cmd = find_command(action)) || raise("command: '#{action}' not found") = cmd..dup = .merge!( desc: "Alias for `#{action}`", listing: match.is_a?(String) ? match : match.inspect ).merge!() # ensure default description is used if desc is nil desc = .delete(:desc).to_s c = block_command match, desc, do |*args| run action, *args end # TODO: untested. What's this about? c.class_eval do define_method(:complete) do |input| cmd.new(context).complete(input) end end c.group "Aliases" c end |
#block_command(match, description = "No description.", options = {}) { ... } ⇒ Object Also known as: command
Defines a new Pry command.
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/pry/command_set.rb', line 78 def block_command(match, description = "No description.", = {}, &block) if description.is_a?(Hash) = description description = "No description." end = Pry::Command.(match).merge!() @commands[match] = Pry::BlockCommand.subclass( match, description, , helper_module, &block ) end |
#complete(search, context = {}) ⇒ Array<String>
Generate completions for the user’s search.
365 366 367 368 369 370 371 372 373 374 |
# File 'lib/pry/command_set.rb', line 365 def complete(search, context = {}) if (command = find_command(search)) command.new(context).complete(search) else keys = @commands.keys.select do |key| key.is_a?(String) && key.start_with?(search) end keys.map { |key| key + " " } end end |
#create_command(match, description = "No description.", options = {}) { ... } ⇒ Object
Defines a new Pry command class.
117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/pry/command_set.rb', line 117 def create_command(match, description = "No description.", = {}, &block) if description.is_a?(Hash) = description description = "No description." end = Pry::Command.(match).merge!() @commands[match] = Pry::ClassCommand.subclass( match, description, , helper_module, &block ) @commands[match].class_eval(&block) @commands[match] end |
#delete(*searches) ⇒ Object
Removes some commands from the set
138 139 140 141 142 143 |
# File 'lib/pry/command_set.rb', line 138 def delete(*searches) searches.each do |search| cmd = find_command_by_match_or_listing(search) @commands.delete cmd.match end end |
#desc(search, description = nil) ⇒ Object
Sets or gets the description for a command (replacing the old description). Returns current description if no description parameter provided.
253 254 255 256 257 258 |
# File 'lib/pry/command_set.rb', line 253 def desc(search, description = nil) cmd = find_command_by_match_or_listing(search) return cmd.description unless description cmd.description = description end |
#each(&block) ⇒ Object
131 132 133 |
# File 'lib/pry/command_set.rb', line 131 def each(&block) @commands.each(&block) end |
#find_command_by_match_or_listing(match_or_listing) ⇒ Command
Returns The command object matched.
173 174 175 176 177 |
# File 'lib/pry/command_set.rb', line 173 def find_command_by_match_or_listing(match_or_listing) cmd = (@commands[match_or_listing] || Pry::Helpers::BaseHelpers.find_command(match_or_listing, @commands)) cmd || raise(ArgumentError, "cannot find a command: '#{match_or_listing}'") end |
#find_command_for_help(search) ⇒ Pry::Command?
Find the command that the user might be trying to refer to.
331 332 333 334 335 336 337 338 |
# File 'lib/pry/command_set.rb', line 331 def find_command_for_help(search) find_command(search) || (begin find_command_by_match_or_listing(search) rescue ArgumentError nil end) end |
#import(*sets) ⇒ Pry::CommandSet
Imports all the commands from one or more sets.
149 150 151 152 153 154 155 |
# File 'lib/pry/command_set.rb', line 149 def import(*sets) sets.each do |set| @commands.merge! set.to_hash helper_module.send :include, set.helper_module end self end |
#import_from(set, *matches) ⇒ Pry::CommandSet
Imports some commands from a set
161 162 163 164 165 166 167 168 |
# File 'lib/pry/command_set.rb', line 161 def import_from(set, *matches) helper_module.send :include, set.helper_module matches.each do |match| cmd = set.find_command_by_match_or_listing(match) @commands[cmd.match] = cmd end self end |
#list_commands ⇒ Array Also known as: keys
Returns The list of commands provided by the command set.
262 263 264 |
# File 'lib/pry/command_set.rb', line 262 def list_commands @commands.keys end |
#process_line(val, context = {}) ⇒ CommandSet::Result
Process the given line to see whether it needs executing as a command.
351 352 353 354 355 356 357 358 359 |
# File 'lib/pry/command_set.rb', line 351 def process_line(val, context = {}) if (command = find_command(val)) context = context.merge(command_set: self) retval = command.new(context).process_line(val) Result.new(true, retval) else Result.new(false) end end |
#rename_command(new_match, search, options = {}) ⇒ Object
Rename a command. Accepts either match or listing for the search.
227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/pry/command_set.rb', line 227 def rename_command(new_match, search, = {}) cmd = find_command_by_match_or_listing(search) = { listing: new_match, description: cmd.description }.merge!() @commands[new_match] = cmd.dup @commands[new_match].match = new_match @commands[new_match].description = .delete(:description) @commands[new_match]..merge!() @commands.delete(cmd.match) end |
#to_hash ⇒ Object Also known as: to_h
267 268 269 |
# File 'lib/pry/command_set.rb', line 267 def to_hash @commands.dup end |
#valid_command?(val) ⇒ Boolean
Is the given line a command invocation?
343 344 345 |
# File 'lib/pry/command_set.rb', line 343 def valid_command?(val) !!find_command(val) end |