class Pry::ClassCommand
A super-class of Commands with structure.
This class implements the bare-minimum functionality that a command should have, namely a –help switch, and then delegates actual processing to its subclasses.
Create subclasses using {Pry::CommandSet#create_command}, and override the ‘options(opt)` method to set up an instance of Pry::Slop
, and the `process` method to actually run the command. If necessary, you can also override `setup` which will be called before `options`, for example to require any gems your command needs to run, or to set up state.
Attributes
Public Class Methods
Source
# File lib/pry/class_command.rb, line 19 def inherited(klass) klass.match match klass.description description klass.command_options options end
Ensure that subclasses inherit the options, description and match from a ClassCommand
super class.
Source
# File lib/pry/class_command.rb, line 37 def source_file source_object.source_file end
Source
# File lib/pry/class_command.rb, line 42 def source_line source_object.source_line end
Source
# File lib/pry/class_command.rb, line 33 def source_location source_object.source_location end
Private Class Methods
Source
# File lib/pry/class_command.rb, line 54 def source_object @source_object ||= if name =~ /^[A-Z]/ Pry::WrappedModule(self) else Pry::Method(block) end end
The object used to extract the source for the command.
This should be a ‘Pry::Method(block)` for a command made with `create_command` and a `Pry::WrappedModule(self)` for a command that’s a standard class. @return [Pry::WrappedModule, Pry::Method
]
Public Instance Methods
Source
# File lib/pry/class_command.rb, line 72 def call(*args) setup self.opts = slop self.args = opts.parse!(args) if opts.present?(:help) output.puts slop.help void else process(*normalize_method_args(method(:process), args)) end end
Set up ‘opts` and `args`, and then call `process`.
This method will display help if necessary.
@param [Array<String>] args The arguments passed @return [Object] The return value of ‘process` or VOID_VALUE
Source
# File lib/pry/class_command.rb, line 105 def complete(search) slop.flat_map do |opt| [opt.long && "--#{opt.long} " || opt.short && "-#{opt.short}"] end.compact + super end
Generate shell completions @param [String] search The line typed so far @return [Array<String>] the words to complete
Source
# File lib/pry/class_command.rb, line 87 def help slop.help end
Return the help generated by Pry::Slop
for this command.
Source
# File lib/pry/class_command.rb, line 171 def options(opt); end
A method to setup Pry::Slop
so it can parse the options your command expects.
@note Please don’t do anything side-effecty in the main part of this method, as it may be called by Pry
at any time for introspection reasons. If you need to set up default values, use ‘setup` instead.
@example
def options(opt) opt.banner "Gists methods or classes" opt.on(:c, :class, "gist a class") do @action = :class end end
Source
# File lib/pry/class_command.rb, line 190 def process raise CommandError, "command '#{command_name}' not implemented" end
The actual body of your command should go here.
The ‘opts` method can be called to get the options that Pry::Slop
has passed, and `args` gives the remaining, unparsed arguments.
The return value of this method is discarded unless the command was created with ‘:keep_retval => true`, in which case it is returned to the repl.
@example
def process if opts.present?(:class) gist_class else gist_method end end
Source
# File lib/pry/class_command.rb, line 121 def setup; end
A method called just before ‘options(opt)` as part of `call`.
This method can be used to set up any context your command needs to run, for example requiring gems, or setting default values for options.
@example
def setup require 'gist' @action = :method end
Source
# File lib/pry/class_command.rb, line 93 def slop Pry::Slop.new do |opt| opt.banner(unindent(self.class.banner)) subcommands(opt) options(opt) opt.on :h, :help, 'Show this message.' end end
Return an instance of Pry::Slop
that can parse either subcommands or the options that this command accepts.
Source
# File lib/pry/class_command.rb, line 156 def subcommands(cmd); end
A method to setup Pry::Slop
commands so it can parse the subcommands your command expects. If you need to set up default values, use ‘setup` instead.
@example A minimal example
def subcommands(cmd) cmd.command :download do |opt| description 'Downloads a content from a server' opt.on :verbose, 'Use verbose output' run do |options, arguments| ContentDownloader.download(options, arguments) end end end
@example Define the invocation block anywhere you want
def subcommands(cmd) cmd.command :download do |opt| description 'Downloads a content from a server' opt.on :verbose, 'Use verbose output' end end def process # Perform calculations... opts.fetch_command(:download).run do |options, arguments| ContentDownloader.download(options, arguments) end # More calculations... end