Class: Ufo::Completer
- Inherits:
-
Object
- Object
- Ufo::Completer
- Defined in:
- lib/ecic/completer.rb
Instance Method Summary collapse
-
#all_commands ⇒ Object
all top-level commands.
- #command_params(raw = false) ⇒ Object
- #found?(command) ⇒ Boolean
-
#initialize(command_class, *params) ⇒ Completer
constructor
A new instance of Completer.
-
#log(msg) ⇒ Object
Useful for debugging.
- #options_completion ⇒ Object
- #params_completion ⇒ Object
- #run ⇒ Object
- #subcommand?(command) ⇒ Boolean
-
#thor_group_command? ⇒ Boolean
hacky way to detect that command is a registered Thor::Group command.
Constructor Details
#initialize(command_class, *params) ⇒ Completer
Returns a new instance of Completer.
75 76 77 78 79 |
# File 'lib/ecic/completer.rb', line 75 def initialize(command_class, *params) @params = params @current_command = @params[0] @command_class = command_class # CLI initiall end |
Instance Method Details
#all_commands ⇒ Object
all top-level commands
119 120 121 122 123 124 |
# File 'lib/ecic/completer.rb', line 119 def all_commands commands = @command_class.all_commands.reject do |k,v| v.is_a?(Thor::HiddenCommand) end commands.keys end |
#command_params(raw = false) ⇒ Object
126 127 128 129 130 131 132 133 |
# File 'lib/ecic/completer.rb', line 126 def command_params(raw=false) params = @command_class.instance_method(@current_command).parameters # Example: # >> Sub.instance_method(:goodbye).parameters # => [[:req, :name]] # >> raw ? params : params.map!(&:last) end |
#found?(command) ⇒ Boolean
113 114 115 116 |
# File 'lib/ecic/completer.rb', line 113 def found?(command) public_methods = @command_class.public_instance_methods(false) command && public_methods.include?(command.to_sym) end |
#log(msg) ⇒ Object
Useful for debugging. Using puts messes up completion.
155 156 157 158 159 |
# File 'lib/ecic/completer.rb', line 155 def log(msg) File.open("/tmp/complete.log", "a") do |file| file.puts(msg) end end |
#options_completion ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/ecic/completer.rb', line 141 def used = ARGV.select { |a| a.include?('--') } # so we can remove used options = @command_class.all_commands[@current_command]..keys = @command_class..keys = + + ['help'] .map! { |o| "--#{o.to_s.gsub('_','-')}" } = - used .uniq end |
#params_completion ⇒ Object
135 136 137 138 139 |
# File 'lib/ecic/completer.rb', line 135 def params_completion offset = @params.size - 1 offset_params = command_params[offset..-1] command_params[offset..-1].first end |
#run ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ecic/completer.rb', line 81 def run if subcommand?(@current_command) subcommand_class = @command_class.subcommand_classes[@current_command] @params.shift # destructive Completer.new(subcommand_class, *@params).run # recursively use subcommand return end # full command has been found! unless found?(@current_command) puts all_commands return end # will only get to here if command aws found (above) arity = @command_class.instance_method(@current_command).arity.abs if @params.size > arity or thor_group_command? puts else puts params_completion end end |
#subcommand?(command) ⇒ Boolean
104 105 106 |
# File 'lib/ecic/completer.rb', line 104 def subcommand?(command) @command_class.subcommands.include?(command) end |
#thor_group_command? ⇒ Boolean
hacky way to detect that command is a registered Thor::Group command
109 110 111 |
# File 'lib/ecic/completer.rb', line 109 def thor_group_command? command_params(raw=true) == [[:rest, :args]] end |