Class: Inspec::Plugin::V2::PluginBase
- Inherits:
- 
      Object
      
        - Object
- Inspec::Plugin::V2::PluginBase
 
- Defined in:
- lib/inspec/plugin/v2/plugin_base.rb
Overview
Base class for all plugins. Specific plugin types may inherit from this; but they must register with it.
Direct Known Subclasses
Inspec::Plugin::V2::PluginType::Dsl, Inspec::Plugin::V2::PluginType::Mock
Constant Summary collapse
- @@plugin_type_classes =
          rubocop: disable Style/ClassVars 
- {} 
Class Method Summary collapse
- 
  
    
      .base_class_for_type(plugin_type_name)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Determine the base class for a given plugin type. 
- 
  
    
      .plugin_name(name = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    If no name provided, looks up a known plugin by class and returns the name. 
- 
  
    
      .register_plugin_type(plugin_type_name, new_plugin_type_base_class = self)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Inform the plugin system of a new plgin type. 
- 
  
    
      .registry  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    The global registry. 
Class Method Details
.base_class_for_type(plugin_type_name) ⇒ Object
Determine the base class for a given plugin type
| 56 57 58 | # File 'lib/inspec/plugin/v2/plugin_base.rb', line 56 def self.base_class_for_type(plugin_type_name) @@plugin_type_classes[plugin_type_name] end | 
.plugin_name(name = nil) ⇒ Object
If no name provided, looks up a known plugin by class and returns the name.
DSL method to declare a plugin. Once this has been called, the plugin will certainly be registered (known) with the Registry, and is eligible to be activated. This mainly handles status annotation.
| 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # File 'lib/inspec/plugin/v2/plugin_base.rb', line 72 def self.plugin_name(name = nil) reg = Inspec::Plugin::V2::Registry.instance return reg.find_status_by_class(self).name if name.nil? name = name.to_sym # Typically our status will already exist in the registry, from loading the # plugin.json. If we're being loaded, presumably entry_point, # installation_type, version # are known. unless reg.known_plugin?(name) # Under some testing situations, we may not pre-exist. status = Inspec::Plugin::V2::Status.new reg.register(name, status) status.entry_point = 'inline' status.installation_type = :mock_inline end status = reg[name] status.api_generation = 2 status.plugin_class = self status.name = name name end | 
.register_plugin_type(plugin_type_name, new_plugin_type_base_class = self) ⇒ Object
Inform the plugin system of a new plgin type. This has the following effects:
* enables Inspec.plugin(2, :your_type_here) to return the plugin
  type base class
* defines the DSL method with the same name as the plugin type.
| 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | # File 'lib/inspec/plugin/v2/plugin_base.rb', line 26 def self.register_plugin_type(plugin_type_name, new_plugin_type_base_class = self) new_dsl_method_name = plugin_type_name # This lets the Inspec.plugin(2,:your_plugin_type) work @@plugin_type_classes[plugin_type_name] = new_plugin_type_base_class # This part defines the DSL command to register a concrete plugin's implementation of a plugin type Inspec::Plugin::V2::PluginBase.define_singleton_method(new_dsl_method_name) do |hook_name, &hook_body| plugin_concrete_class = self # Verify class is registered (i.e. plugin_name has been called) status = registry.find_status_by_class(plugin_concrete_class) if status.nil? raise Inspec::Plugin::V2::LoadError, "You must call 'plugin_name' prior to calling #{plugin_type_name} for plugin class #{plugin_concrete_class}" end # Construct the Activator record activator = Inspec::Plugin::V2::Activator.new activator.plugin_name = plugin_concrete_class.plugin_name activator.plugin_type = plugin_type_name activator.activator_name = hook_name.to_sym activator.activation_proc = hook_body status.activators << activator end end |