class Chef::Knife::SubcommandLoader::HashedCommandLoader
Load a subcommand from a pre-computed path for the given command.
Constants
- KEY
Attributes
manifest[RW]
Public Class Methods
new(chef_config_dir, plugin_manifest)
click to toggle source
Calls superclass method
Chef::Knife::SubcommandLoader::new
# File lib/chef/knife/core/hashed_command_loader.rb, line 31 def initialize(chef_config_dir, plugin_manifest) super(chef_config_dir) @manifest = plugin_manifest end
Public Instance Methods
guess_category(args)
click to toggle source
# File lib/chef/knife/core/hashed_command_loader.rb, line 36 def guess_category(args) category_words = positional_arguments(args) category_words.map! { |w| w.split("-") }.flatten! find_longest_key(manifest[KEY]["plugins_by_category"], category_words, " ") end
list_commands(pref_category = nil)
click to toggle source
# File lib/chef/knife/core/hashed_command_loader.rb, line 42 def list_commands(pref_category = nil) if pref_category || manifest[KEY]["plugins_by_category"].key?(pref_category) commands = { pref_category => manifest[KEY]["plugins_by_category"][pref_category] } else commands = manifest[KEY]["plugins_by_category"] end # If any of the specified plugins in the manifest don't have a valid path we will # eventually get an error and the user will need to rehash - instead, lets just # print out 1 error here telling them to rehash errors = {} commands.collect { |k, v| v }.flatten.each do |command| paths = manifest[KEY]["plugins_paths"][command] if paths && paths.is_a?(Array) # It is only an error if all the paths don't exist if paths.all? { |sc| !File.exist?(sc) } errors[command] = paths end end end if errors.empty? commands else Chef::Log.error "There are plugin files specified in the knife cache that cannot be found. Please run knife rehash to update the subcommands cache. If you see this error after rehashing delete the cache at #{Chef::Knife::SubcommandLoader.plugin_manifest_path}" Chef::Log.error "Missing files:\n\t#{errors.values.flatten.join("\n\t")}" {} end end
load_command(args)
click to toggle source
# File lib/chef/knife/core/hashed_command_loader.rb, line 74 def load_command(args) paths = manifest[KEY]["plugins_paths"][subcommand_for_args(args)] if paths.nil? || paths.empty? || (! paths.is_a? Array) false else paths.each do |sc| if File.exist?(sc) Kernel.load sc else return false end end true end end
subcommand_files()
click to toggle source
# File lib/chef/knife/core/hashed_command_loader.rb, line 70 def subcommand_files manifest[KEY]["plugins_paths"].values.flatten end
subcommand_for_args(args)
click to toggle source
# File lib/chef/knife/core/hashed_command_loader.rb, line 90 def subcommand_for_args(args) if manifest[KEY]["plugins_paths"].key?(args) args else find_longest_key(manifest[KEY]["plugins_paths"], args, "_") end end