---
title: "An R package to create NEWS.md files"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{An R package to create NEWS.md files}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

A while back, I started to create an R package that would help me and my colleagues at [statworx](https://www.statworx.com/) with our daily work. After writing the `DESCRIPTION` file, I did not want to do this ever again. I found the `desc` package which let's you parse, manipulate and reformat the `DESCRIPTION` file via some functions and ergo a script. If you want more info on that, check out their [GitHub repository](https://github.com/r-lib/desc). However, I was too lazy still, because I had to manually write the `NEWS` file.

I longed for the functionality of editing the `NEWS` file in the same script I built for the `DESCRIPTION` file. Since I could not find anything - and already was in a mood for programming - I wrote one my self. In this vignette, I will briefly explain what the package does.
If you want to create your `NEWS` file from your git commits, than have a look at the [fledge](https://github.com/cynkra/fledge) package.


## Usage of `newsmd`

The main part of the package is the `news` object, which is an R6 class object and contains the text for the `NEWS.md` file. You can add versions, subtitles and bullet points to it via the object's methods.

### Initialise a new object

To initialise a new object you can use two different ways:

```
# install.packages("devtools")
devtools::install_github("Dschaykib/newsmd")
library(newsmd)

my_news <- news$new()
my_news <- newsmd()
```

The default text contains markdown code and looks like this:

```R
## version 0.0.0.9000

---

### NEWS.md setup

- added NEWS.md creation with newsmd
```

### Adding a the next version

With `add_version` you can update the version number.

```
my_news$add_version("0.0.1")
```

### Adding a new subtitle

With `add_subtitle` you can add a new subtitle, where the following bullet points will be under.

```
my_news$add_subtitle("Bugfixes")
```

### Adding more bullets

With `add_bullet` you can add more bullet points to the latest version and latest subtitle. 

```
my_news$add_bullet(c("this is point 1", "this is point 2"))
```

### Getting the whole text

After these few changes, let's see how the file looks. The `get_text`  method will return each single line of the file. Alternatively you can just use `print(my_news)`.

```
my_news$get_text()
```

```R
 [1] "## version 0.0.1"                    
 [2] ""                                    
 [3] "---"                                 
 [4] ""                                    
 [5] ""                                    
 [6] "### Bugfixes"                        
 [7] ""                                    
 [8] "- this is point 1"                   
 [9] "- this is point 2"                   
[10] ""                                    
[11] ""                                    
[12] "## version 0.0.0.9000"               
[13] ""                                    
[14] "---"                                 
[15] ""                                    
[16] "### NEWS.md setup"                   
[17] ""                                    
[18] "- added NEWS.md creation with newsmd"
[19] "" 
```

### Writing the NEWS.md file

At last, with `write` you can save all your changes into the `NEWS.md` file.

```
my_news$write()
```



## Combination with the `desc` package

The goal of this package is to update the `NEWS.md` file in addition to the `DESCRIPTION` file. To optimize the workflow I suggest using the `desc` package, too. For example instead of manually defining the version number, you can use `desc_bump_version()` and `get_version()` of the `desc` package:

```
my_desc$bump_version("patch")
my_news$add_version(my_desc$get_version())

my_news$add_bullet("added automated creation for DESCRIPTION and NEWS.md")
```

The full example script I used for my other package, can be found [here](https://github.com/STATWORX/helfRlein/blob/master/misc/update_DESCRIPTION_NEWS.R).

## Conclusion

I hope this little package will be of help to some of you. If you find some bugs or have ideas that would improve the usage and functionality, I would be pleased if you let me know [on my GitHub](https://github.com/Dschaykib/newsmd/issues).
