forked from swirldev/swirl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.R
109 lines (102 loc) · 3.18 KB
/
options.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#' Set global options for swirl
#'
#' @description
#' Options can be set for swirl that have an effect on swirl's behavior. Options
#' are specified by the \code{name} of an option that corrsponds to the
#' \code{value} of that option.
#'
#' @param ... Any options can be defined using \code{name = value}.
#' @export
#' @examples
#' \dontrun{
#'
#' # Install courses to the current directory
#' set_swirl_options(courses_dir = getwd())
#'
#' # Install courses in the default course directory
#' set_swirl_options(courses_dir = file.path(system.file("Courses", package = "swirl")))
#' }
set_swirl_options <- function(...){
args <- list(...)
if(length(args) == 0){
stop("Please provide arguments so that appropriate options can be set.")
}
# Create new options frame
args_vector <- unlist(args)
new_opts <- data.frame(
name = names(args_vector),
value = as.vector(args_vector))
# If the options file does not exist, create it
# else update the old options file
if(!file.exists(opts_path())){
write.csv(new_opts, file = opts_path(), row.names = FALSE)
} else {
old_opts <- read.csv(opts_path(), stringsAsFactors = FALSE,
header = TRUE)
new_opts_file <- rbind(new_opts, old_opts[!(old_opts$name %in% new_opts$name),])
new_opts_file$name <- as.character(new_opts_file$name)
new_opts_file$value <- as.character(new_opts_file$value)
new_opts_file <- new_opts_file[order(new_opts_file$name),]
write.csv(new_opts_file, file = opts_path(), row.names = FALSE)
}
message("Options set successfully!")
invisible()
}
#' Get a global swirl option
#'
#' @description
#' Returns the \code{value} of a swirl option by providing its \code{name}.
#'
#' @param name The \code{name} of the swirl option.
#' @export
#' @examples
#' \dontrun{
#'
#' get_swirl_option("courses_dir")
#' }
get_swirl_option <- function(name){
opts <- read.csv(opts_path(), stringsAsFactors = FALSE,
header = TRUE)
if(name %in% opts$name){
opts[name == opts$name,]$value
} else {
stop(paste0("Option name '", name, "' not found."))
}
}
#' Delete a global swirl option
#'
#' @description
#' Deletes the \code{name} and \code{value} of a swirl option by providing
#' its \code{name}.
#'
#' @param name The \code{name} of the swirl option to be deleted.
#' @export
#' @examples
#' \dontrun{
#'
#' delete_swirl_option("Brians_phone_number")
#' }
delete_swirl_option <- function(name){
opts <- read.csv(opts_path(), stringsAsFactors = FALSE,
header = TRUE)
if(name %in% opts$name){
opts <- opts[name != opts$name,]
write.csv(opts, file = opts_path(), row.names = FALSE)
} else {
stop(paste0("Option name '", name, "' not found."))
}
message(paste0("Option '", name, "' deleted successfully!"))
invisible()
}
# Get the options file path
#' @importFrom rappdirs user_data_dir
opts_path <- function(){
# Find user data directory
udd <- user_data_dir(appname = "swirl", appauthor = "swirldev", roaming = TRUE)
# If the directory doesn't exist, create it
if(!file.exists(udd)){
dir.create(udd, recursive = TRUE)
}
# Construct path to swirl options
file.path(udd, "swirl_options.csv")
}