class Dracula::Command
Constants
- Desc
Attributes
desc[R]
flags[R]
long_desc[R]
method_name[R]
options[R]
Public Class Methods
new(klass, method_name, desc, long_desc, options)
click to toggle source
# File lib/dracula/command.rb, line 13 def initialize(klass, method_name, desc, long_desc, options) @klass = klass @method_name = method_name @desc = desc @long_desc = long_desc @options = options || [] end
Public Instance Methods
arguments()
click to toggle source
# File lib/dracula/command.rb, line 37 def arguments @klass.instance_method(@method_name).parameters.select { |p| p[0] == :req }.map { |p| p[1].to_s.upcase } end
description()
click to toggle source
# File lib/dracula/command.rb, line 33 def description desc.description end
full_name()
click to toggle source
# File lib/dracula/command.rb, line 25 def full_name "#{prefix}#{name}" end
help()
click to toggle source
# File lib/dracula/command.rb, line 41 def help CommandHelp.new(self).show end
name()
click to toggle source
# File lib/dracula/command.rb, line 29 def name desc.name end
prefix()
click to toggle source
# File lib/dracula/command.rb, line 21 def prefix @klass.namespace.prefix end
run(params)
click to toggle source
# File lib/dracula/command.rb, line 45 def run(params) args = params.take_while { |p| p[0] != "-" } if args.count < arguments.count puts Dracula::UI.error("Missing arguments") puts "" help exit(1) end if args.count > arguments.count puts Dracula::UI.error("Too many arguments") puts "" help exit(1) end parsed_flags = parse_flags(params.drop_while { |p| p[0] != "-" }) missing_flags = missing_required_flags(parsed_flags) unless missing_flags.empty? puts Dracula::UI.error("Missing required Parameter: #{missing_flags.first.banner}") puts "" help exit(1) end @klass.new(parsed_flags).public_send(method_name, *args) rescue OptionParser::MissingArgument => ex flag = flags.find { |f| "--#{f.name}" == ex.args.first } puts Dracula::UI.error("Missing flag parameter: #{flag.banner}") puts "" help exit(1) rescue OptionParser::InvalidOption => ex puts Dracula::UI.error("Unrecognized Parameter: #{ex.args.first}") puts "" help exit(1) end
Private Instance Methods
missing_required_flags(parsed_flags)
click to toggle source
# File lib/dracula/command.rb, line 90 def missing_required_flags(parsed_flags) flags.select(&:required?).reject do |flag| parsed_flags.keys.include?(flag.name) end end
parse_flags(args)
click to toggle source
# File lib/dracula/command.rb, line 96 def parse_flags(args) parsed_flags = {} # set default values flags.each do |flag| if flag.has_default_value? parsed_flags[flag.name] = flag.default_value end end opt_parser = OptionParser.new do |opts| flags.each do |flag| if flag.boolean? short = "-#{flag.short_name}" long = "--#{flag.name}" opts.on(short, long, flag.type) do parsed_flags[flag.name] = true end else short = "-#{flag.short_name}" long = "--#{flag.name} VALUE" opts.on(short, long, flag.type) do |value| parsed_flags[flag.name] = value end end end end opt_parser.parse!(args) parsed_flags end