class ReleasesDocument < Document

Inherits from
Document: #root, #title, #first_child, #replace_section, #to_markdown, #to_html, #paragraph_node, #html_node, #inline_html_node, #text_node, #link_node, #code_node

Represents project release notes organized by release headings.

Nested Classes and Modules

class Summary

Represents a section within a release.

class Release

Represents a single release and its notes.

Definitions

def release_names

Enumerate release names in document order.

Signature

yields {|name| ...}

If a block is given.

parameter name String

A release name.

returns Enumerator(String)

If no block is given.

Implementation

def release_names
	return to_enum(:release_names) unless block_given?
	
	self.root.each do |node|
		if node.type == :header and node.header_level == 2
			yield node.to_plaintext.chomp
		end
	end
end

def release(name)

Find a release by name.

Signature

parameter name String

The release name.

returns Release | Nil

The matching release.

Implementation

def release(name)
	self.root.each do |node|
		if node.type == :header and node.header_level == 2 and node.to_plaintext.chomp == name
			return Release.new(node)
		end
	end
end

def latest_release

Get the first release in the document.

Signature

returns Release | Nil

The latest release.

Implementation

def latest_release
	if name = release_names.first
		release(name)
	end
end

def releases

Enumerate releases in document order.

Signature

yields {|release| ...}

If a block is given.

parameter release Release

A release.

returns Enumerator(Release)

If no block is given.

Implementation

def releases
	return to_enum(:releases) unless block_given?
	
	release_names.each do |name|
		yield release(name)
	end
end

def navigation

Generate a navigation from the releases.

Signature

returns Sidebar

Implementation

def navigation
	@navigation ||= begin
		entries = release_names.map do |name|
			anchor = name.downcase.gsub(/\s+/, "-")
			Sidebar::Entry.new(name, 2, anchor)
		end
		
		Sidebar.new(entries)
	end
end