Skip to contents

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.

TEST_CLASSIC <- load_project(project_name = "TEST_CLASSIC")
#> ! No cached projects... use `setup_project(...)`
#>  Loaded TEST project TEST_CLASSIC!
#> ! Does not actually communicate with any REDCap API
listviewer::jsonedit(TEST_CLASSIC$.internal)

The R6 object contains those things behind-the-scenes but then uses several to build an environment. This allows TEST$sync() to update TEST without having to do TEST <- TEST |> sync_something() |> another_function()

project <- load_project("TEST_CLASSIC")
#> ! No cached projects... use `setup_project(...)`
#>  Loaded TEST project TEST_CLASSIC!
#> ! Does not actually communicate with any REDCap API

# projects have read-only active bindings
names(REDCapSyncProject$active)
#> [1] "project_name" "dir_path"     "data"         "metadata"     "redcap"      
#> [6] ".internal"

# projects have public methods
names(REDCapSyncProject$public_methods) |> setdiff("initialize")
#>  [1] "print"             "sync"              "add_dataset"      
#>  [4] "load_dataset"      "remove_datasets"   "generate_dataset" 
#>  [7] "save_datasets"     "save_dataset"      "save"             
#> [10] "set_keyring_token" "test_token"        "url_launch"       
#> [13] "url_record_launch" "upload"