mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
9a55514aa2
This reverts commit 1b29adb061
.
58 lines
2.1 KiB
Ruby
58 lines
2.1 KiB
Ruby
class Pry
|
|
module Helpers
|
|
module OptionsHelpers
|
|
module_function
|
|
|
|
# Use Slop to parse the arguments given.
|
|
#
|
|
# @param [Array] args The options are stripped out by Slop.
|
|
# @param [*Symbol] extras Extra features you want returned.
|
|
# @param [&Block] used to add custom arguments to Slop.
|
|
#
|
|
# @option [Extra] :method_object Returns a method object.
|
|
#
|
|
# @return Slop::Options iff you don't pass any extras.
|
|
# @return [Array] If you do pass extras, an array is returned where the first argument is the
|
|
# Slop::Options object, and the remainder are the extras you requested in order.
|
|
#
|
|
def parse_options!(args, *extras, &block)
|
|
opts = Slop.parse!(args) do |opt|
|
|
extras.each{ |extra| send(:"add_#{extra}_options", opt) }
|
|
|
|
yield opt
|
|
|
|
opt.on :h, :help, "This message" do
|
|
output.puts opt
|
|
throw :command_done
|
|
end
|
|
end
|
|
|
|
if extras.empty?
|
|
opts
|
|
else
|
|
[opts] + extras.map{ |extra| send(:"process_#{extra}_options", args, opts) }
|
|
end
|
|
end
|
|
|
|
# Add the method object options to an unused Slop instance.
|
|
def add_method_object_options(opt)
|
|
@method_target = target
|
|
opt.on :M, "instance-methods", "Operate on instance methods."
|
|
opt.on :m, :methods, "Operate on methods."
|
|
opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors."
|
|
opt.on :c, :context, "Select object context to run under.", true do |context|
|
|
@method_target = Pry.binding_for(target.eval(context))
|
|
end
|
|
end
|
|
|
|
# Add the derived :method_object option to a used Slop instance.
|
|
def process_method_object_options(args, opts)
|
|
opts[:instance] = opts['instance-methods'] if opts.present?(:methods)
|
|
# TODO: de-hack when we upgrade Slop: https://github.com/injekt/slop/pull/30
|
|
opts.options[:super].force_argument_value opts.options[:super].count if opts.present?(:super)
|
|
|
|
get_method_or_raise(args.empty? ? nil : args.join(" "), @method_target, opts.to_hash(true))
|
|
end
|
|
end
|
|
end
|
|
end
|