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, wrap_long_description, usage, options = nil, options_relation = nil) ⇒ Command

Returns a new instance of Command.

[View source]

5
6
7
# File 'lib/bundler/vendor/thor/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/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

#options_relationObject

Returns the value of attribute options_relation

Returns:

  • (Object)

    the current value of options_relation


2
3
4
# File 'lib/bundler/vendor/thor/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/bundler/vendor/thor/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/bundler/vendor/thor/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.

[View source]

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/bundler/vendor/thor/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)
[View source]

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

def hidden?
  false
end

#initialize_copy(other) ⇒ Object

:nodoc:

[View source]

9
10
11
12
13
# 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
  self.options_relation = other.options_relation.dup if other.options_relation
end

#method_at_least_one_option_namesObject

:nodoc:

[View source]

70
71
72
# File 'lib/bundler/vendor/thor/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:

[View source]

66
67
68
# File 'lib/bundler/vendor/thor/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.

[View source]

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/bundler/vendor/thor/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