class KnifeCookbookDoc::ReadmeModel

Constants

DEFAULT_CONSTRAINT

Attributes

libraries[R]

Public Class Methods

new(cookbook_dir, config) click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 13
def initialize(cookbook_dir, config)

  @metadata = Chef::Cookbook::Metadata.new
  @metadata.from_file("#{cookbook_dir}/metadata.rb")

  if (!@metadata.attributes.empty? rescue false)
    @attributes = @metadata.attributes.map do |attr, options|
      name = "node['#{attr.gsub("/", "']['")}']"
      [name, options['description'], options['default'], options['choice']]
    end
  else
    @attributes = []
    Dir["#{cookbook_dir}/attributes/*.rb"].sort.each do |attribute_filename|
      model = AttributesModel.new(attribute_filename, config)
      if !model.attributes.empty?
        @attributes += model.attributes
      end
    end
  end

  @libraries = Dir["#{cookbook_dir}/libraries/*.rb"].sort.map do |path|
    LibrariesModel.new(@metadata.name, path)
  end

  @resources = []
  Dir["#{cookbook_dir}/resources/*.rb"].sort.each do |resource_filename|
    @resources << ResourceModel.new(@metadata.name, resource_filename)
  end

  @definitions = []
  Dir["#{cookbook_dir}/definitions/*.rb"].sort.each do |def_filename|
    @definitions << DefinitionsModel.new(File.basename(def_filename, '.*'), def_filename)
  end

  @fragments = {}
  Dir["#{cookbook_dir}/doc/*.md"].sort.each do |resource_filename|
    @fragments[::File.basename(resource_filename,'.md')] = IO.read(resource_filename)
  end

  @recipes = []
  if !@metadata.recipes.empty?
    @metadata.recipes.each do |name, description|
      @recipes << RecipeModel.new(name, description, "#{cookbook_dir}/recipes/#{name.gsub(/^.*\:(.*)$/,'\1')}.rb")
    end
  else
    Dir["#{cookbook_dir}/recipes/*.rb"].sort.each do |recipe_filename|
      base_name = File.basename(recipe_filename, ".rb")
      if !base_name.start_with?("_")
        @recipes << RecipeModel.new("#{@metadata.name}::#{base_name}", recipe_filename)
      end
    end
  end
  @metadata = @metadata
  @constraints = config[:constraints]
end

Public Instance Methods

attributes() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 157
def attributes
  @attributes
end
chef_versions() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 111
def chef_versions
  if @metadata.methods.include?(:chef_version)
    @metadata.chef_versions.map do |chef_version, version|
      format_constraint(chef_version, version)
    end
  else
    []
  end
end
conflicting() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 147
def conflicting
  if @metadata.methods.include?(:conflicting)
    @metadata.conflicting.map do |cookbook, version|
      format_constraint(cookbook, version)
    end
  else
    []
  end
end
cookbook_name() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 81
def cookbook_name
  @metadata.name
end
definitions() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 77
def definitions
  @definitions
end
dependencies() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 121
def dependencies
  @metadata.dependencies.map do |cookbook, version|
    format_constraint(cookbook, version)
  end
end
description() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 85
def description
  @metadata.description
end
fragments() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 69
def fragments
  @fragments
end
get_binding() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 181
def get_binding
  binding
end
issues_url() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 97
def issues_url
  if @metadata.methods.include? :issues_url
    @metadata.issues_url
  else
    ""
  end
end
license() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 173
def license
  @metadata.license
end
maintainer() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 165
def maintainer
  @metadata.maintainer
end
maintainer_email() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 169
def maintainer_email
  @metadata.maintainer_email
end
name() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 177
def name
  @metadata.name
end
platforms() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 105
def platforms
  @metadata.platforms.map do |platform, version|
    format_constraint(platform, version)
  end
end
recipes() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 161
def recipes
  @recipes
end
recommendations() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 127
def recommendations
  if @metadata.methods.include?(:recommendations)
    @metadata.recommendations.map do |cookbook, version|
      format_constraint(cookbook, version)
    end
  else
    []
  end
end
resources() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 73
def resources
  @resources
end
source_url() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 89
def source_url
  if @metadata.methods.include? :source_url
    @metadata.source_url
  else
    ""
  end
end
suggestions() click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 137
def suggestions
  if @metadata.methods.include?(:suggestions)
    @metadata.suggestions.map do |cookbook, version|
      format_constraint(cookbook, version)
    end
  else
    []
  end
end

Private Instance Methods

format_constraint(name, version) click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 202
def format_constraint(name, version)
  url = source_url_from_berkshelf(name)
  if !url.nil? && url.start_with?('http')
    # git:// and ssh:// URLs are not browsable
    name = "[#{name}](#{url})"
  end

  if @constraints && version != DEFAULT_CONSTRAINT
    "#{name} (#{version})"
  else
    name
  end
end
source_url_from_berkshelf(name) click to toggle source
# File lib/knife_cookbook_doc/readme_model.rb, line 187
def source_url_from_berkshelf(name)
  @source_url ||= begin
    if File.exist?('Berksfile') && defined?(::Berkshelf)
      ::Berkshelf::Berksfile
        .from_file('Berksfile')
        .install
        .map { |cb| [cb.cookbook_name, cb.metadata.source_url] }
        .to_h
    else
      {}
    end
  end
  @source_url[name]
end