---
title: "Projects"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Projects}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
library(REDCapSync)
```
The goal of REDCapSync is to encapsulate a REDCap project into a standardized object. R6 gives a way of keeping some elements internal to the object. Behind-the-scenes is an R list where all of the metadata and data is stored.
```{r, eval=TRUE}
TEST_CLASSIC <- load_project(project_name = "TEST_CLASSIC")
listviewer::jsonedit(TEST_CLASSIC$.internal)
```
The R6 object contains those things behind-the-scenes but then uses several to build an environment. This allows `project$sync()` to update `project` without having to do `project <- project |> sync_something() |> another_function()`
```{r setup, eval=TRUE}
project <- load_project("TEST_CLASSIC")
# projects have read-only active bindings
names(REDCapSyncProject$active)
# projects have public methods
names(REDCapSyncProject$public_methods) |> setdiff("initialize")
```