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
# File lib/pry/class_command.rb, line 29 def doc new.help end
Ensure that subclasses inherit the options, description and match from a ClassCommand
super class.
# File lib/pry/class_command.rb, line 19 def inherited(klass) klass.match match klass.description description klass.command_options options end
# File lib/pry/class_command.rb, line 25 def source source_object.source end
# File lib/pry/class_command.rb, line 37 def source_file source_object.source_file end
# File lib/pry/class_command.rb, line 42 def source_line source_object.source_line end
# File lib/pry/class_command.rb, line 33 def source_location source_object.source_location end
Private Class Methods
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]
# 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
Public Instance Methods
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
# 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
Generate shell completions @param [String] search The line typed so far @return [Array<String>] the words to complete
# 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
Return the help generated by Pry::Slop
for this command.
# File lib/pry/class_command.rb, line 87 def help slop.help 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
# File lib/pry/class_command.rb, line 171 def options(opt); end
The actual body of your command should go here.
The `opts` mehod 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
# File lib/pry/class_command.rb, line 190 def process raise CommandError, "command '#{command_name}' not implemented" 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
# File lib/pry/class_command.rb, line 121 def setup; end
Return an instance of Pry::Slop
that can parse either subcommands or the options that this command accepts.
# 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
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 invokation 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
# File lib/pry/class_command.rb, line 156 def subcommands(cmd); end