Refactor generation code and allow custom sections

There's a lot in this PR.
- Added a Section class to more easily make the other changes and
  hopefully add flexibility for the future
- Added an option called `configure_sections` that allows you create
  your own custom sections. It blows away all other sections and uses
only the ones you give it.
- Added an option called `add_sections` that allows you to add_sections
  to the default section set
- Added an option called `include_merged` that can be used when
  configure_sections is defined. Configure sections blows away any and
all default sections so to get this one back, you have to set this
option.
- Added tests for this stuff

@HAIL9000 was a co-author. Because of a little git snafu, I accidentally
squashed all of our work into one so it looks like it was just me.

---

Refactor details:

Before this change, the code in generator.rb and generator_generation.rb was conflated and
method call flow went back and forth between the two files seemingly
randomly. They also both defined the exact same class, which is
un-ruby-ish. I tried to separate methods used for the whole changelog
generation from methods used for specific parts of the changelog and
move them into specific classes.

I reasoned that a changelog is a series of "entries" of all tagged
releases plus an extra entry for the unreleased entry. Each entry is
comprised of a header and a series of "sections" for that entry. Each
section is comprized of a list of issues and/or pull requests for that
entry. So the log contains entries, entries contain sections, and
sections contain issues & prs. I have structured the classes around this idea.

- lib/github_changelog_generator/generator/generator.rb is for code
related to generating the entire changelog.
- lib/github_changelog_generator/generator/entry.rb is for code related
to generating entries.
- lib/github_changelog_generator/generator/section.rb is for code
relating to geneating entry sections.

Issues and PRs are already special objects, so it doesn't make sense to
break those out into their own class.
This commit is contained in:
Eric Putnam
2017-11-06 21:19:49 -08:00
committed by Hunter Haugen
parent d9cf6ffd94
commit 587557e1ac
13 changed files with 866 additions and 407 deletions
+13 -5
View File
@@ -261,13 +261,21 @@
<p> Run verbosely. Default is true</p>
<p> -v, --version</p>
<p> --configure-sections [HASH, STRING]</p>
<p> Print version number</p>
<p> Define your own set of sections which overrides all default sections") do |v|</p>
<p> -h, --help</p>
<p> --add-sections [HASH, STRING]</p>
<p> Displays Help</p>
<p> Add new sections but keep the default sections"</p>
<p> -v, --version</p>
<p> Print version number</p>
<p> -h, --help</p>
<p> Displays Help</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
@@ -286,7 +294,7 @@
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>October 2017</li>
<li class='tc'>December 2017</li>
<li class='tr'>git-generate-changelog(1)</li>
</ol>