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