module Vagrant module Plugin module V2 # This is the container class for the components of a single plugin. # This allows us to separate the plugin class which defines the # components, and the actual container of those components. This # removes a bit of state overhead from the plugin class itself. class Components # This contains all the action hooks. # # @return [Hash] attr_reader :action_hooks # This contains all the command plugins by name, and returns # the command class and options. The command class is wrapped # in a Proc so that it can be lazy loaded. # # @return [Registry>] attr_reader :commands # This contains all the configuration plugins by scope. # # @return [Hash] attr_reader :configs # This contains all the guests and their parents. # # @return [Registry>] attr_reader :guests # This contains all the registered guest capabilities. # # @return [Hash] attr_reader :guest_capabilities # This contains all the hosts and their parents. # # @return [Registry>] attr_reader :hosts # This contains all the registered host capabilities. # # @return [Hash] attr_reader :host_capabilities # This contains all the provider plugins by name, and returns # the provider class and options. # # @return [Hash] attr_reader :providers # This contains all the registered provider capabilities. # # @return [Hash] attr_reader :provider_capabilities # This contains all the push implementations by name. # # @return [Registry>] attr_reader :pushes # This contains all the synced folder implementations by name. # # @return [Registry>] attr_reader :synced_folders # This contains all the registered synced folder capabilities. # # @return [Hash] attr_reader :synced_folder_capabilities def initialize # The action hooks hash defaults to [] @action_hooks = Hash.new { |h, k| h[k] = [] } @commands = Registry.new @configs = Hash.new { |h, k| h[k] = Registry.new } @guests = Registry.new @guest_capabilities = Hash.new { |h, k| h[k] = Registry.new } @hosts = Registry.new @host_capabilities = Hash.new { |h, k| h[k] = Registry.new } @providers = Registry.new @provider_capabilities = Hash.new { |h, k| h[k] = Registry.new } @pushes = Registry.new @synced_folders = Registry.new @synced_folder_capabilities = Hash.new { |h, k| h[k] = Registry.new } end end end end end