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")
#> ✔ 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 project$sync()
to update project without having to do
project <- project |> sync_something() |> another_function()
project <- load_project("TEST_CLASSIC")
#> ✔ 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" "datasets"
#> [5] "transformation" "metadata" "redcap" ".internal"
# projects have public methods
names(REDCapSyncProject$public_methods) |> setdiff("initialize")
#> [1] "print" "sync" "add_dataset"
#> [4] "add_field" "add_transformation" "remove_added_fields"
#> [7] "remove_transformation" "load_dataset" "remove_datasets"
#> [10] "generate_dataset" "save_datasets" "save_dataset"
#> [13] "save" "set_keyring_token" "test_token"
#> [16] "url_launch" "url_record_launch" "upload"