forked from swirldev/swirl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse_content.R
57 lines (50 loc) · 1.67 KB
/
parse_content.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
find_lesson <- function(lesson_dir) {
# Find 'lesson' file with or without extension
grep("^lesson[.]?[A-Za-z]*$", list.files(lesson_dir), value=TRUE)
}
#' @importFrom tools file_ext
get_content_class <- function(file_name) {
ext <- file_ext(file_name)
tolower(ext)
}
### FUNCTIONS THAT RETURN LESSON OBJECT WITH ASSOCIATED ATTRIBUTES ###
parse_content <- function(file, e) UseMethod("parse_content")
parse_content.default <- function(file, e) {
# If no extension on lesson file, then assume it's yaml
parse_content.yaml(file, e)
}
parse_content.csv <- function(file, e) {
df <- read.csv(file, as.is=TRUE)
# Return lesson object
lesson(df, lesson_name=e$temp_lesson_name, course_name=e$temp_course_name)
}
parse_content.rmd <- function(file, e) {
rmd2df(file)
}
#' @importFrom yaml yaml.load_file
parse_content.yaml <- function(file, e){
newrow <- function(element){
temp <- data.frame(Class=NA, Output=NA, CorrectAnswer=NA,
AnswerChoices=NA, AnswerTests=NA,
Hint=NA, Figure=NA, FigureType=NA,
VideoLink=NA, Script=NA)
for(nm in names(element)){
# Only replace NA with value if value is not NULL, i.e. instructor
# provided a nonempty value
if(!is.null(element[[nm]])) {
temp[,nm] <- element[[nm]]
}
}
temp
}
raw_yaml <- yaml.load_file(file)
temp <- lapply(raw_yaml[-1], newrow)
df <- NULL
for(row in temp){
df <- rbind(df, row)
}
meta <- raw_yaml[[1]]
lesson(df, lesson_name=meta$Lesson, course_name=meta$Course,
author=meta$Author, type=meta$Type, organization=meta$Organization,
version=meta$Version, partner=meta$Partner)
}