class RDoc::Generator::Mdoc

An mdoc(7) generator for RDoc.

This generator will create man pages in mdoc(7) format for classes, modules and methods parsed by RDoc.

Attributes

mandb_section[R]
output_directory[R]
store[R]

Public Class Methods

new(store, options) click to toggle source

Create an instance usign the provided RDoc::Store and RDoc::Options.

# File lib/rdoc/generator/mdoc.rb, line 27
def initialize(store, options)
  @store = store
  @mandb_section = sanitize_mandb_section(
    options.mandb_section || "3-rdoc",
  )
  @output_directory = File.expand_path(File.join(options.op_dir, "man#{mandb_section.split('-').first}"))
  FileUtils.mkdir_p output_directory
end
setup_options(options) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 19
def self.setup_options(options)
  options.option_parser.on("--section SECTION", String) do |mandb_section|
    options.mandb_section = mandb_section
  end
end

Public Instance Methods

generate() click to toggle source

Generate man pages.

Every class, module and method gets their own man page in the “manSECTION_PREFIX” subdirectory of the output directory.

# File lib/rdoc/generator/mdoc.rb, line 41
def generate
  generate_class_and_module_pages
  generate_method_pages
end

Private Instance Methods

binding_with_assigns(assigns) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 115
def binding_with_assigns(assigns)
  RenderContext.new(assigns).binding
end
classes() click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 62
def classes
  @classes ||= decorate_displayed(store.all_classes, Class)
end
decorate_displayed(objects, decoration_class) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 74
def decorate_displayed(objects, decoration_class)
  objects.select(&:display?).map do |object|
    decoration_class.new(object, mandb_section)
  end
end
file_name(object) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 84
def file_name(object)
  File.join(
    output_directory,
    "#{sanitize_file_name(object.full_name)}.#{mandb_section}",
  )
end
generate_class_and_module_pages() click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 50
def generate_class_and_module_pages
  (classes + modules).each do |object|
    generate_page(file_name(object), "module", module: object)
  end
end
generate_method_pages() click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 56
def generate_method_pages
  methods.each do |method|
    generate_page(file_name(method), "method", method: method)
  end
end
generate_page(file_name, template_name, assigns) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 80
def generate_page(file_name, template_name, assigns)
  File.write(file_name, render_template(template(template_name), assigns))
end
methods() click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 70
def methods
  @methods ||= (classes + modules).flat_map(&:methods)
end
modules() click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 66
def modules
  @modules ||= decorate_displayed(store.all_modules, Module)
end
render_template(template, assigns) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 99
def render_template(template, assigns)
  ERB.new(template).result(binding_with_assigns(assigns)).squeeze("\n")
end
sanitize_file_name(string) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 91
def sanitize_file_name(string)
  string.gsub("/", "\\")
end
sanitize_mandb_section(string) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 95
def sanitize_mandb_section(string)
  string.gsub(".", "-")
end
template(name) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 103
def template(name)
  @templates ||= {}
  @templates[name] ||= File.read(template_path(name))
end
template_path(name) click to toggle source
# File lib/rdoc/generator/mdoc.rb, line 108
def template_path(name)
  File.expand_path(
    File.join("..", "..", "..", "..", "templates", "#{name}.mdoc.erb"),
    __FILE__,
  )
end