
# verifyr2<img src="./man/figures/verifyr2.png" align="right" height="223" />

<!-- badges: start -->
[![CRAN status](https://www.r-pkg.org/badges/version/verifyr2)](https://cran.r-project.org/package=verifyr2)
![Coverage](https://github.com/ejuhjav/verifyr2/actions/workflows/check-package.yml/badge.svg)
[![Coverage Status](https://ejuhjav.github.io/verifyr2/coverage.svg)](https://ejuhjav.github.io/verifyr2/coverage/)
<!-- badges: end -->

`verifyr2` is an R package for extendable file comparison classes and methods including an
example `shiny` app for combining the functions into a convenient application.

## Package installation

The project is available in cran and can be installed with the following command:

``` bash
> install.packages("verifyr2")
```

### Development version

The latest development version can be installed from github using different install packages
that work with github projects. One such option would be to use the `devtools` package:

``` bash
> install.packages("devtools")
> library("devtools")
> install_github("ejuhjav/verifyr2")
```

### Extended functionality

Following additional libraries can be installed to extend the provided comparison functionality:

``` bash
> # image comparison functionality
> install.packages("magick")
>
> # pdf comparison functionality
> install.packages("pdftools")
```

## Shiny app usage

Launching the `shiny` app requires that you have the following additional libraries installed as
documented in the suggestion list; `shinyjs`, `shinyFiles`, and `DT`. After all the necessary
libraries are available, the included `shiny` app can be launched with the following command:

``` bash
> verifyr2::run_example()
```

## Creating and calling the separators manually

``` bash
> config <- Config$new()
> comparator <- verifyr2::create_comparator(file1, file2)
> comparator$vrf_summary(config = config)
> comparator$vrf_details(config = config)
```

instantiating an explicit comparator manually

``` bash
> config <- Config$new()
> comparator <- RtfFileComparator$new(file1, file2)
> comparator$vrf_summary(config = config)
> comparator$vrf_details(config = config)
```

## Optional features

Image comparison features - comparing single images as well as supported embedded images in file
contents - requires additional `magick` library to be installed. This is defined as an optional
requirement for the `verifyr2` package due to the additional OS level requirements of the package.
For more details on the package installation, see [magick package](https://github.com/ropensci/magick).

PDF comparison features - reading PDF file contents as text for details comparison - requires
additional `pdftools` library to be installed. This is defined as an optional requirement for the
`verifyr2` package due to the additional OS level requirements of the package. For more details on
the package installation, see [pdftools package](https://github.com/ropensci/pdftools).

## Adding support to additional file types

The file comparison logic is implemented with a generic structure that supports easy addition of
new comparison logic for different file types. In most cases, this will simply require an implementation
of a new file comparator with the file extension name and implementing the file contents getter. The included
simplified implementation for pdf file comparison - without testing pdftools availability and excluding the
logging parts - is an example of how to do this (see source file to see the full implementation with
documentation).

When using the provided generic `create_comparator` function along with your custom comparator class implementation, 
note that the comparator class name prefix must match with the compared file type. 

``` bash
#' PdfFileComparator.R
#'
#' @include TxtFileComparator.R
#'
#' @export
#'
PdfFileComparator <- R6::R6Class(
  "PdfFileComparator",
  inherit = TxtFileComparator,
  public = list(
    vrf_contents = function(file, config, omit) {
      content <- pdftools::pdf_text(file)
      content <- paste(content, collapse = "")
      content <- strsplit(content, "\n")[[1]]

      self$vrf_contents_inner(content, omit, options)
    }
  )
)

```

## Contributing

Contributions to `verifyr2` are dynamic and welcome! Whether you are fixing a typo, reporting a bug, or building a brand-new file comparator, we appreciate your help.

Please see our [Contributing Guide](https://github.com/ejuhjav/verifyr2/blob/main/.github/CONTRIBUTING.md) for details on our code style, test requirements, and how to set up your local R development environment.

## Credits

`verifyr2` package implementation is based on the concept of the [verifyr package](https://github.com/novartis/verifyr).


