module Poise::Helpers::ResourceSubclass::ClassMethods

Public Instance Methods

included(klass) click to toggle source

@api private

Calls superclass method
# File lib/poise/helpers/resource_subclass.rb, line 83
def included(klass)
  super
  klass.extend(ClassMethods)
end
subclass_providers!(superclass_resource_name=nil, resource_name: nil) click to toggle source
# File lib/poise/helpers/resource_subclass.rb, line 36
def subclass_providers!(superclass_resource_name=nil, resource_name: nil)
  resource_name ||= self.resource_name
  superclass_resource_name ||= if superclass.respond_to?(:resource_name)
    superclass.resource_name
  elsif superclass.respond_to?(:dsl_name)
    superclass.dsl_name
  else
    raise Poise::Error.new("Unable to determine superclass resource name for #{superclass}. Please specify name manually via subclass_providers!('name').")
  end.to_sym
  # Deal with the node maps.
  node_maps = {}
  node_maps['handler map'] = Chef.provider_handler_map if defined?(Chef.provider_handler_map)
  node_maps['priority map'] = if defined?(Chef.provider_priority_map)
    Chef.provider_priority_map
  else
    require 'chef/platform/provider_priority_map'
    Chef::Platform::ProviderPriorityMap.instance.send(:priority_map)
  end
  # Patch anything in the descendants tracker.
  Chef::Provider.descendants.each do |provider|
    node_maps["#{provider} node map"] = provider.node_map if defined?(provider.node_map)
  end if defined?(Chef::Provider.descendants)
  node_maps.each do |map_name, node_map|
    map = node_map.respond_to?(:map, true) ? node_map.send(:map) : node_map.instance_variable_get(:@map)
    if map.include?(superclass_resource_name)
      Chef::Log.debug("[#{self}] Copying provider mapping in #{map_name} from #{superclass_resource_name} to #{resource_name}")
      map[resource_name] = map[superclass_resource_name].dup
    end
  end
  # Add any needed equivalent names.
  if superclass.respond_to?(:subclass_resource_equivalents)
    subclass_resource_equivalents.concat(superclass.subclass_resource_equivalents)
  else
    subclass_resource_equivalents << superclass_resource_name
  end
  subclass_resource_equivalents.uniq!
end
subclass_resource_equivalents() click to toggle source

An array of names for the resources this class is equivalent to for the purposes of provider resolution.

@return [Array<Symbol>]

# File lib/poise/helpers/resource_subclass.rb, line 78
def subclass_resource_equivalents
  @subclass_resource_names ||= [resource_name.to_sym]
end