Module: Poise::Helpers::ResourceSubclass::ClassMethods

Included in:
Poise::Helpers::ResourceSubclass
Defined in:
lib/poise/helpers/resource_subclass.rb

Overview

Since:

  • 2.3.0

Instance Method Summary collapse

Instance Method Details

#subclass_providers!(superclass_resource_name = nil, resource_name: nil) ⇒ Object

Since:

  • 2.3.0



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_equivalentsArray<Symbol>

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

Returns:

  • (Array<Symbol>)

Since:

  • 2.3.0



78
79
80
# File 'lib/poise/helpers/resource_subclass.rb', line 78

def subclass_resource_equivalents
  @subclass_resource_names ||= [resource_name.to_sym]
end