class Thor::Argument
:nodoc:
def default_banner
def default_banner case type when :boolean nil when :string, :default human_name.upcase when :numeric 'N' when :hash 'key:value' when :array 'one two three' end end
def initialize(name, options = {})
def initialize(name, options = {}) class_name = self.class.name.split('::').last type = options[:type] fail ArgumentError, "#{class_name} name can't be nil." if name.nil? fail ArgumentError, "Type :#{type} is not valid for #{class_name.downcase}s." if type && !valid_type?(type) @name = name.to_s @description = options[:desc] @required = options.key?(:required) ? options[:required] : true @type = (type || :string).to_sym @default = options[:default] @banner = options[:banner] || default_banner @enum = options[:enum] validate! # Trigger specific validations end
def required?
def required? required end
def show_default?
def show_default? case default when Array, String, Hash !default.empty? else default end end
def usage
def usage required? ? banner : "[#{banner}]" end
def valid_type?(type)
def valid_type?(type) self.class::VALID_TYPES.include?(type.to_sym) end
def validate!
def validate! if required? && !default.nil? fail ArgumentError, 'An argument cannot be required and have default value.' elsif @enum && !@enum.is_a?(Array) fail ArgumentError, 'An argument cannot have an enum other than an array.' end end