Class: Thor::Command

Inherits:
Struct
  • Object
show all
Defined in:
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, wrap_long_description, usage, options = nil, options_relation = nil) ⇒ Command

Returns a new instance of Command.



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

def initialize(name, description, long_description, wrap_long_description, usage, options = nil, options_relation = nil)
  super(name.to_s, description, long_description, wrap_long_description, usage, options || {}, options_relation || {})
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/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/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/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/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/thor/command.rb', line 2

def options
  @options
end

#options_relationObject

Returns the value of attribute options_relation

Returns:

  • (Object)

    the current value of options_relation



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

def options_relation
  @options_relation
end

#usageObject

Returns the value of attribute usage

Returns:

  • (Object)

    the current value of usage



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

def usage
  @usage
end

#wrap_long_descriptionObject

Returns the value of attribute wrap_long_description

Returns:

  • (Object)

    the current value of wrap_long_description



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

def wrap_long_description
  @wrap_long_description
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.



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

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)


15
16
17
# File 'lib/thor/command.rb', line 15

def hidden?
  false
end

#initialize_copy(other) ⇒ Object

:nodoc:



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

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

#method_at_least_one_option_namesObject

:nodoc:



70
71
72
# File 'lib/thor/command.rb', line 70

def method_at_least_one_option_names #:nodoc:
  self.options_relation[:at_least_one_option_names] || []
end

#method_exclusive_option_namesObject

:nodoc:



66
67
68
# File 'lib/thor/command.rb', line 66

def method_exclusive_option_names #:nodoc:
  self.options_relation[:exclusive_option_names] || []
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.



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

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