# Gren

Class creating release notes and changelog notes

## Constructor

#### new Gren()

Source:
  - Gren.js, line 28

### Methods

#### (private) _checkChangelogFile() → {string}

Check if the changelog file exists

Since:
  - 0.8.0
Source:
  - Gren.js, line 112

##### Returns:

Type:
  `string`

#### (private) _createChangelog(body)

Create the changelog file

Since:
  - 0.8.0
Source:
  - Gren.js, line 130

##### Parameters:

Name | Type | Description
--- | --- | ---
`body` | `string` | The body of the file

#### (async, private) _createRelease(releaseOptions) → {Promise}

Create a release from a given tag (in the options)

Since:
  - 0.1.0
Source:
  - Gren.js, line 187

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseOptions` | `Object` | The options to build the release:

##### Returns:

Type:
  `Promise`

##### Example

    {
      "tag_name": "1.0.0",
      "target_commitish": "master",
      "name": "v1.0.0",
      "body": "Description of the release",
      "draft": false,
      "prerelease": false
    }

#### (private) _createReleaseRanges(releaseDates) → {Array}

Create the ranges of release dates

Since:
  - 0.5.0
Source:
  - Gren.js, line 867

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseDates` | `Array` | The release dates

##### Returns:

Type:
  `Array`

#### (async, private) _editRelease(releaseId, releaseOptions) → {Promise}

Edit a release from a given tag (in the options)

Since:
  - 0.5.0
Source:
  - Gren.js, line 158

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseId` | `number` | The id of the release to edit
`releaseOptions` | `Object` | The options to build the release:

##### Returns:

Type:
  `Promise`

##### Example

    {
      "tag_name": "v1.0.0",
      "target_commitish": "master",
      "name": "v1.0.0",
      "body": "Description of the release",
      "draft": false,
      "prerelease": false
    }

#### (private) _filterBlockIssue(range, issue) → {Boolean}

Filter the issue based on the date range, or if is in the release milestone.

Since:
  - 0.9.0
Source:
  - Gren.js, line 800

##### Parameters:

Name | Type | Description
--- | --- | ---
`range` | `Array` | The release ranges
`issue` | `Object` | GitHub issue

##### Returns:

Type:
  `Boolean`

#### (private) _filterCommit(commit) → {Boolean}

Filter a commit based on the includeMessages option and commit message

Since:
  - 0.10.0
Source:
  - Gren.js, line 534

##### Parameters:

Name | Type | Description
--- | --- | ---
`commit` | `Object` |

##### Returns:

Type:
  `Boolean`

#### (private) _filterIssue(issue) → {Boolean}

Filter the issue based on gren options and labels

Since:
  - 0.9.0
Source:
  - Gren.js, line 781

##### Parameters:

Name | Type | Description
--- | --- | ---
`issue` | `Object` |

##### Returns:

Type:
  `Boolean`

#### (private) _generateCommitsBody(commits) → {string}

Return a commit messages generated body

Since:
  - 0.1.0
Source:
  - Gren.js, line 563

##### Parameters:

Name | Type | Description
--- | --- | ---
`commits` | `Array` |

##### Returns:

Type:
  `string`

#### (async, private) _getClosedIssues(releaseRanges) → {Promise}

Get all the closed issues from the current repo

Since:
  - 0.5.0
Source:
  - Gren.js, line 670

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseRanges` | `Array` | The array of date ranges

##### Returns:

Type:
  `Promise`

The promise which resolves the list of the issues

#### (async, private) _getCommitBlocks(releaseRanges) → {Array.<Promise>}

Get the blocks of commits based on release dates

Since:
  - 0.5.0
Source:
  - Gren.js, line 610

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseRanges` | `Array` | The array of date ranges

##### Returns:

Type:
  `Array.<Promise>`

#### (async, private) _getCommitsBetweenTwo(since, until) → {Promise}

Gets all the commits between two dates

Since:
  - 0.1.0
Source:
  - Gren.js, line 588

##### Parameters:

Name | Type | Description
--- | --- | ---
`since` | `string` | The since date in ISO
`until` | `string` | The until date in ISO

##### Returns:

Type:
  `Promise`

The promise which resolves the [Array] commit messages

#### (async, private) _getIssueBlocks(releaseRanges) → {Array.<Promise>}

Get the blocks of issues based on release dates

Since:
  - 0.5.0
Source:
  - Gren.js, line 822

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseRanges` | `Array` | The array of date ranges

##### Returns:

Type:
  `Array.<Promise>`

#### (private) _getLastPage(link) → {boolean|number}

Get the last page from a Hypermedia link

Since:
  - 0.11.1
Source:
  - Gren.js, line 363

##### Parameters:

Name | Type | Description
--- | --- | ---
`link` | `string` |

##### Returns:

Type:
  `boolean` | `number`

#### (async, private) _getLastTags(releases, page) → {Promise}

Get all the tags of the repo

Since:
  - 0.1.0
Source:
  - Gren.js, line 288

##### Parameters:

Name | Type | Default | Description
--- | --- | --- | ---
`releases` | `Array` |  |
`page` | `number` | 1 |

##### Returns:

Type:
  `Promise`

#### (async, private) _getListReleases() → {Promise}

Get all releases

Since:
  - 0.5.0
Source:
  - Gren.js, line 377

##### Returns:

Type:
  `Promise`

The promise which resolves an array of releases

#### (async) _getReleaseBlocks() → {Promise}

Generate release blocks based on issues or commit messages depending on the option.

Source:
  - Gren.js, line 892

##### Returns:

Type:
  `Promise`

Resolving the release blocks

#### (private) _getSelectedTags(allTags, tags) → {Boolean|Array}

Get the tags information from the given ones, and adds the next one in case only one is given

Since:
  - 0.5.0
Source:
  - Gren.js, line 242

##### Parameters:

Name | Type | Description
--- | --- | ---
`allTags` | `Array` | `string` |
`tags` | `Array.<Object>` |

##### Returns:

Type:
  `Boolean` | `Array`

#### (private) _getTagDates(tags) → {Array.<Promise>}

Get the dates of the last two tags

Since:
  - 0.1.0
Source:
  - Gren.js, line 329

##### Parameters:

Name | Type | Description
--- | --- | ---
`tags` | `Array.<Object>` | List of all the tags in the repo

##### Returns:

Type:
  `Array.<Promise>`

The promises which returns the dates

#### (private) _groupBy(issues) → {Array}

Create groups of issues based on labels

Since:
  - 0.8.0
Source:
  - Gren.js, line 731

##### Parameters:

Name | Type | Description
--- | --- | ---
`issues` | `Array` | The array of all the issues.

##### Returns:

Type:
  `Array`

#### (private) _groupByLabel(issues) → {string}

Group the issues based on their first label

Since:
  - 0.8.0
Source:
  - Gren.js, line 697

##### Parameters:

Name | Type | Description
--- | --- | ---
`issues` | `Array` |

##### Returns:

Type:
  `string`

#### (private) _hasNetwork() → {Promise}

Check if there is connectivity

Since:
  - 0.5.0
Source:
  - Gren.js, line 921

##### Returns:

Type:
  `Promise`

#### (private) _lablesAreIgnored(labels) → {boolean}

Compare the ignored labels with the passed ones

Since:
  - 0.10.0
Source:
  - Gren.js, line 650

##### Parameters:

Name | Type | Description
--- | --- | ---
`labels` | `Array` | The labels to check

##### Returns:

Type:
  `boolean`

If the labels array contains any of the ignore ones

##### Example

    [{
        name: 'bug'
    }]

#### _listReleases(options) → {Promise}

Temporary function for this.repo.listReleases to accept options

Source:
  - Gren.js, line 349
See:
  - https://github.com/github-tools/github/pull/485

##### Parameters:

Name | Type | Description
--- | --- | ---
`options` | `Object` |

##### Returns:

Type:
  `Promise`

#### _listTags(options) → {Promise}

Temporary function for this.repo.listReleases to accept options

Source:
  - Gren.js, line 273
See:
  - https://github.com/github-tools/github/pull/485

##### Parameters:

Name | Type | Description
--- | --- | ---
`options` | `Object` |

##### Returns:

Type:
  `Promise`

#### (private) _prepareRelease(tags) → {Promise}

Creates the options to make the release

Since:
  - 0.2.0
Source:
  - Gren.js, line 208

##### Parameters:

Name | Type | Description
--- | --- | ---
`tags` | `Array.<Object>` | The collection of tags

##### Returns:

Type:
  `Promise`

#### (private) _sortReleasesByDate(releaseDates) → {Array}

Sort releases by dates

Since:
  - 0.5.0
Source:
  - Gren.js, line 853

##### Parameters:

Name | Type | Description
--- | --- | ---
`releaseDates` | `Array` |

##### Returns:

Type:
  `Array`

#### (private) _templateCommits(commit) → {string}

Return the templated commit message

Since:
  - 0.1.0
Source:
  - Gren.js, line 426

##### Parameters:

Name | Type | Description
--- | --- | ---
`commit` | `Object` |

##### Returns:

Type:
  `string`

#### (private) _templateGroups(groups) → {string}

Generates the template for the groups

Since:
  - 0.8.0
Source:
  - Gren.js, line 513

##### Parameters:

Name | Type | Description
--- | --- | ---
`groups` | `Object` | The groups to template e.g. { 'bugs': [{...}, {...}, {...}] }

##### Returns:

Type:
  `string`

#### (private) _templateIssue(issue) → {string}

Generate the MD template for each issue

Since:
  - 0.5.0
Source:
  - Gren.js, line 469

##### Parameters:

Name | Type | Description
--- | --- | ---
`issue` | `Object` |

##### Returns:

Type:
  `string`

#### (private) _templateIssueBody(blocks) → {string}

Generate the Changelog issues body template

Since:
  - 0.5.0
Source:
  - Gren.js, line 488

##### Parameters:

Name | Type | Description
--- | --- | ---
`blocks` | `Array.<Object>` |

##### Returns:

Type:
  `string`

#### (private) _templateLabels(issue) → {string}

Generate the MD template from all the labels of a specific issue

Since:
  - 0.5.0
Source:
  - Gren.js, line 445

##### Parameters:

Name | Type | Description
--- | --- | ---
`issue` | `Object` |

##### Returns:

Type:
  `string`

#### (async) changelog() → {Promise}

Generate changelog file based on the release notes or generate new one

Since:
  - 0.10.0
Source:
  - Gren.js, line 89

##### Returns:

Type:
  `Promise`

#### (async) release() → {Promise}

Generate release notes and draft a new release

Since:
  - 0.10.0
Source:
  - Gren.js, line 72

##### Returns:

Type:
  `Promise`