class Puppet::ModuleTool::ContentsDescription

ContentsDescription

This class populates Metadata‘s Puppet type information.

Public Class Methods

new(module_path) click to toggle source

Instantiate object for string module_path.

# File lib/puppet/module_tool/contents_description.rb, line 9
def initialize(module_path)
  @module_path = module_path
end

Public Instance Methods

annotate(metadata) click to toggle source

Update Metadata‘s Puppet type information.

# File lib/puppet/module_tool/contents_description.rb, line 14
def annotate(metadata)
  metadata.types.replace data.clone
end
attr_doc(type, kind) click to toggle source

Return an array of hashes representing this type‘s attrs of kind (e.g. :param or :property), each containing :name and :doc.

# File lib/puppet/module_tool/contents_description.rb, line 62
def attr_doc(type, kind)
  [].tap do |attrs|
    type.allattrs.each do |name|
      if type.attrtype(name) == kind && name != :provider
        attrs.push(:name => name, :doc => type.attrclass(name).doc)
      end
    end
  end
end
data() click to toggle source

Return types for this module. Result is an array of hashes, each of which describes a Puppet type. The type description hash structure is:

  • :name => Name of this Puppet type.

  • :doc => Documentation for this type.

  • :properties => Array of hashes representing the type’s properties, each containing :name and :doc.

  • :parameters => Array of hashes representing the type’s parameters, each containing :name and :doc.

  • :providers => Array of hashes representing the types providers, each containing :name and :doc.

TODO Write a TypeDescription to encapsulate these structures and logic?

# File lib/puppet/module_tool/contents_description.rb, line 29
def data
  unless @data
    @data = []
    type_names = []
    for module_filename in Dir[File.join(@module_path, "lib/puppet/type/*.rb")]
      require module_filename
      type_name = File.basename(module_filename, ".rb")
      type_names << type_name

      for provider_filename in Dir[File.join(@module_path, "lib/puppet/provider/#{type_name}/*.rb")]
        require provider_filename
      end
    end

    type_names.each do |type_name|
      if type = Puppet::Type.type(type_name.to_sym)
        type_hash = {:name => type_name, :doc => type.doc}
        type_hash[:properties] = attr_doc(type, :property)
        type_hash[:parameters] = attr_doc(type, :param)
        if type.providers.size > 0
          type_hash[:providers] = provider_doc(type)
        end
        @data << type_hash
      else
        Puppet.warning "Could not find/load type: #{type_name}"
      end
    end
  end
  @data
end
provider_doc(type) click to toggle source

Return an array of hashes representing this type‘s providers, each containing :name and :doc.

# File lib/puppet/module_tool/contents_description.rb, line 74
def provider_doc(type)
  [].tap do |providers|
    type.providers.sort.each do |prov|
      providers.push(:name => prov, :doc => type.provider(prov).doc)
    end
  end
end