Class: Bundler::Thor::Command

Inherits:
Struct
  • Object
show all
Defined in:
lib/bundler/vendor/thor/lib/thor/command.rb

Direct Known Subclasses

DynamicCommand, HiddenCommand

Constant Summary collapse

FILE_REGEXP =
/^#{Regexp.escape(File.dirname(__FILE__))}/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, description, long_description, usage, options = nil) ⇒ Command

Returns a new instance of Command.


5
6
7
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 5

def initialize(name, description, long_description, usage, options = nil)
  super(name.to_s, description, long_description, usage, options || {})
end

Instance Attribute Details

#ancestor_nameObject

Returns the value of attribute ancestor_name

Returns:

  • (Object)

    the current value of ancestor_name


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def ancestor_name
  @ancestor_name
end

#descriptionObject

Returns the value of attribute description

Returns:

  • (Object)

    the current value of description


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def description
  @description
end

#long_descriptionObject

Returns the value of attribute long_description

Returns:

  • (Object)

    the current value of long_description


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def long_description
  @long_description
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def name
  @name
end

#optionsObject

Returns the value of attribute options

Returns:

  • (Object)

    the current value of options


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def options
  @options
end

#usageObject

Returns the value of attribute usage

Returns:

  • (Object)

    the current value of usage


2
3
4
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 2

def usage
  @usage
end

Instance Method Details

#formatted_usage(klass, namespace = true, subcommand = false) ⇒ Object

Returns the formatted usage by injecting given required arguments and required options into the given usage.


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 41

def formatted_usage(klass, namespace = true, subcommand = false)
  if ancestor_name
    formatted = "#{ancestor_name} ".dup # add space
  elsif namespace
    namespace = klass.namespace
    formatted = "#{namespace.gsub(/^(default)/, '')}:".dup
  end
  formatted ||= "#{klass.namespace.split(':').last} ".dup if subcommand

  formatted ||= "".dup

  Array(usage).map do |specific_usage|
    formatted_specific_usage = formatted

    formatted_specific_usage += required_arguments_for(klass, specific_usage)

    # Add required options
    formatted_specific_usage += " #{required_options}"

    # Strip and go!
    formatted_specific_usage.strip
  end.join("\n")
end

#hidden?Boolean

Returns:

  • (Boolean)

14
15
16
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 14

def hidden?
  false
end

#initialize_copy(other) ⇒ Object

:nodoc:


9
10
11
12
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 9

def initialize_copy(other) #:nodoc:
  super(other)
  self.options = other.options.dup if other.options
end

#run(instance, args = []) ⇒ Object

By default, a command invokes a method in the thor class. You can change this implementation to create custom commands.


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/bundler/vendor/thor/lib/thor/command.rb', line 20

def run(instance, args = [])
  arity = nil

  if private_method?(instance)
    instance.class.handle_no_command_error(name)
  elsif public_method?(instance)
    arity = instance.method(name).arity
    instance.__send__(name, *args)
  elsif local_method?(instance, :method_missing)
    instance.__send__(:method_missing, name.to_sym, *args)
  else
    instance.class.handle_no_command_error(name)
  end
rescue ArgumentError => e
  handle_argument_error?(instance, e, caller) ? instance.class.handle_argument_error(self, e, args, arity) : (raise e)
rescue NoMethodError => e
  handle_no_method_error?(instance, e, caller) ? instance.class.handle_no_command_error(name) : (raise e)
end