Module: Poise::Helpers::ResourceSubclass::ClassMethods
- Included in:
- Poise::Helpers::ResourceSubclass
- Defined in:
- lib/poise/helpers/resource_subclass.rb
Overview
Instance Method Summary collapse
- #subclass_providers!(superclass_resource_name = nil, resource_name: nil) ⇒ Object
-
#subclass_resource_equivalents ⇒ Array<Symbol>
An array of names for the resources this class is equivalent to for the purposes of provider resolution.
Instance Method Details
#subclass_providers!(superclass_resource_name = nil, resource_name: nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# 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 ⇒ Array<Symbol>
An array of names for the resources this class is equivalent to for the purposes of provider resolution.
78 79 80 |
# File 'lib/poise/helpers/resource_subclass.rb', line 78 def subclass_resource_equivalents @subclass_resource_names ||= [resource_name.to_sym] end |