carpentries / carpentries/pegboard

[Future] transition to use the word 'chapter' over 'episode'

Open
#85 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
R
Stars
6
Forks
5
PR merge metrics
No merged PRs in 30d

Description

Eventually we will want to convert the term "episode" to "chapter." This transition should not be sudden or unexpected, so this is very much a future plan.

These all the places that contain the word 'episode' (which is a lot because the class name needs to change):

```r
R/validate_headings.R:11:#' @note This is an internal function implemented for the [Episode] and [Lesson]
R/validate_headings.R:26:#' e <- l$episodes[[3]]
R/validate_divs.R:1:#' Validate Callout Blocks for sandpaper episodes
R/validate_links.R:57:#' This function is internal. Please use the methods for the [Episode] and
R/validate_links.R:60:#' @param yrn a [tinkr::yarn] or [Episode] object.
R/validate_links.R:67:#' e <- l$episodes[[3]]
R/validate_links.R:252:# TODO: add Episode$sandpaper to be `TRUE` if the _initial_ state was a
R/validate_links.R:255: # Add home path, assuming that we can link out from the episode and it will
R/validate_links.R:260: ".", "episodes", "learners", "instructors", "profiles",
R/validate_links.R:262: "_episodes", "_episodes_rmd", "_extras", "_includes"
tests/testthat/examples/link-liquid.xml:19:
tests/testthat/examples/link-liquid.xml:83:
tests/testthat/examples/link-liquid.xml:85:
tests/testthat/examples/link-liquid.xml:87:
tests/testthat/examples/link-liquid.xml:89:
tests/testthat/examples/link-liquid.xml:90: earlier episode
tests/testthat/examples/link-liquid.xml:91:
tests/testthat/test-Lesson.R:16: expect_named(snd$episodes, "intro.Rmd")
tests/testthat/test-Lesson.R:41: expect_length(frg$episodes, 4)
tests/testthat/test-Lesson.R:42: expect_s3_class(frg$episodes[[1]], "Episode")
tests/testthat/test-Lesson.R:43: expect_s3_class(frg$episodes[[2]], "Episode")
tests/testthat/test-Lesson.R:44: expect_s3_class(frg$episodes[[3]], "Episode")
tests/testthat/test-Lesson.R:45: expect_s3_class(frg$episodes[[4]], "Episode")
tests/testthat/test-Lesson.R:47: expect_equal(names(frg$episodes), unname(purrr::map_chr(frg$episodes, "name")))
tests/testthat/test-Lesson.R:48: expect_equal(frg$path, unique(purrr::map_chr(frg$episodes, "lesson")))
tests/testthat/test-Lesson.R:89: expect_named(chal, c("Episode", "Block", "from", "to", "pos", "level"))
tests/testthat/test-Lesson.R:95: expect_named(chalr, c("Episode", "Block", "from", "to", "pos", "level"))
tests/testthat/test-Lesson.R:114: expect_equal(xml2::xml_length(frg2$episodes[[1]]$body), 2)
tests/testthat/test-Lesson.R:115: expect_equal(xml2::xml_length(frg2$isolate_blocks()$episodes[[1]]$body), 0)
tests/testthat/test-Lesson.R:117: expect_equal(xml2::xml_length(frg$episodes[[1]]$body), 2)
tests/testthat/test-Lesson.R:121:test_that("Lesson class can remove episodes with $thin()", {
tests/testthat/test-Lesson.R:125: expect_length(frg2$episodes, 4)
tests/testthat/test-Lesson.R:126: expect_message(frg2$thin(), "Removing 1 episode: 10-lunch.md", fixed = TRUE)
tests/testthat/test-Lesson.R:127: expect_length(frg2$episodes, 3)
tests/testthat/test-Lesson.R:128: expect_named(frg2$episodes, c("12-for-loops.md", "14-looping-data-sets.md", "17-scope.md"))
tests/testthat/test-Lesson.R:131: expect_message(frg2$reset()$thin(), "Removing 1 episode: 10-lunch.md", fixed = TRUE)
tests/testthat/test-Lesson.R:133: expect_length(frg$episodes, 4)
tests/testthat/test-Lesson.R:135: expect_length(frg$episodes, 3)
tests/testthat/test-Lesson.R:136: expect_named(frg$episodes, c("12-for-loops.md", "14-looping-data-sets.md", "17-scope.md"))
tests/testthat/helper-test-div.R:2:expect_moved_yaml <- function(episode, class, position) {
tests/testthat/helper-test-div.R:4: act <- quasi_label(rlang::enquo(episode), arg = "body")
tests/testthat/_snaps/conversion.md:1:# Episodes with commonmark-violating liquid relative links can be read
tests/testthat/_snaps/conversion.md:16:# Episodes can be converted to use sandpaper
tests/testthat/test-div.R:173: e <- Episode$new(tmp)
tests/testthat/test-get_stylesheet.R:10: # load the test episode and confirm output
tests/testthat/test-get_stylesheet.R:11: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-get_stylesheet.R:12: e <- Episode$new(scope)
tests/testthat/test-images.R:1:imt <- Episode$new(test_path("examples", "image-test.md"))
tests/testthat/test-get_list_block.R:1:scope <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-get_list_block.R:2:e <- Episode$new(scope)
tests/testthat/test-get_challenges.R:10: expect_length(get_challenges(frg$episodes[[expected[1]]]$body), 0)
tests/testthat/test-get_challenges.R:11: expect_length(get_challenges(frg$episodes[[expected[2]]]$body), 3)
tests/testthat/test-get_challenges.R:12: expect_length(get_challenges(frg$episodes[[expected[3]]]$body), 2)
tests/testthat/test-get_challenges.R:17: expect_s3_class(get_challenges(frg$episodes[[expected[1]]]$body), "xml_nodeset")
tests/testthat/test-validation.R:1:vh <- Episode$new(test_path("examples/validation-headings.md"))
tests/testthat/test-validation.R:2:dv <- Episode$new(test_path("examples/validation-divs.md"))
tests/testthat/test-validation.R:3:cats <- Episode$new(test_path("examples/image-test.md"))
tests/testthat/test-validation.R:4:link <- Episode$new(test_path("examples/link-test.md"))
tests/testthat/test-validation.R:5:loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
tests/testthat/test-conversion.R:3: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:4: e <- Episode$new(loop)
tests/testthat/test-conversion.R:6: expect_warning(e$use_sandpaper(), "episode body missing")
tests/testthat/test-conversion.R:7: expect_warning(e$use_dovetail(), "episode body missing")
tests/testthat/test-conversion.R:11:test_that("Episodes with commonmark-violating liquid relative links can be read", {
tests/testthat/test-conversion.R:16: expect_error(Episode$new(lnsp))
tests/testthat/test-conversion.R:18: tmp <- Episode$new(lnsp, fix_liquid = TRUE)
tests/testthat/test-conversion.R:24:test_that("Episodes without include=FALSE in setup chunk are still valid", {
tests/testthat/test-conversion.R:26: rast <- fs::path(lesson_fragment("rmd-lesson"), "_episodes_rmd", "01-test.Rmd")
tests/testthat/test-conversion.R:27: e <- Episode$new(rast, process_tags = TRUE, fix_links = FALSE)
tests/testthat/test-conversion.R:47:test_that("Episodes can be converted to use sandpaper", {
tests/testthat/test-conversion.R:49: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:50: e <- Episode$new(loop)
tests/testthat/test-conversion.R:159:test_that("Episodes can be converted to use dovetail", {
tests/testthat/test-conversion.R:161: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:162: e <- Episode$new(loop)
tests/testthat/test-conversion.R:195: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:196: e <- Episode$new(loop)
tests/testthat/test-conversion.R:252: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:253: e <- Episode$new(loop)
tests/testthat/test-conversion.R:310: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:311: e <- Episode$new(loop)
tests/testthat/test-conversion.R:365: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-conversion.R:366: e <- Episode$new(loop)
tests/testthat/test-fix_sandpaper_links.R:2:loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-fix_sandpaper_links.R:3:e <- Episode$new(loop)
tests/testthat/test-get_lesson.R:19: fs::dir_create(dd, "_episodes")
tests/testthat/test-get_lesson.R:42: names(frg$episodes),
tests/testthat/test-get_lesson.R:57: expect_true(fs::dir_exists(fs::path(d, "carpentries--lesson-example", "_episodes")))
tests/testthat/test-get_lesson.R:58: # The episodes in the object are accounted for
tests/testthat/test-get_lesson.R:59: episodes <- c(
tests/testthat/test-get_lesson.R:70: expect_named(lex$files, episodes)
tests/testthat/test-get_lesson.R:87: expect_true(fs::dir_exists(fs::path(d, "carpentries--lesson-example", "_episodes")))
tests/testthat/test-get_lesson.R:88: # The episodes in the object are accounted for
tests/testthat/test-get_lesson.R:89: episodes <- c(
tests/testthat/test-get_lesson.R:100: expect_named(lex$files, episodes)
tests/testthat/test-get_lesson.R:116: expect_true(fs::dir_exists(fs::path(d, "carpentries--lesson-example", "_episodes")))
tests/testthat/test-get_lesson.R:117: # The episodes in the object are accounted for
tests/testthat/test-get_lesson.R:118: episodes <- c(
tests/testthat/test-get_lesson.R:129: expect_named(lex$files, episodes)
tests/testthat/test-get_lesson.R:148: lex$episodes,
tests/testthat/test-get_lesson.R:155: lex$episodes,
tests/testthat/test-get_lesson.R:177: lex$episodes,
tests/testthat/test-get_lesson.R:184: lex$episodes,
tests/testthat/test-get_lesson.R:190: lex$episodes,
tests/testthat/test-get_lesson.R:197: lex$episodes,
tests/testthat/test-get_lesson.R:203: lex$episodes,
tests/testthat/test-get_lesson.R:210: lex$episodes,
tests/testthat/test-get_lesson.R:222: episodes <- c(
tests/testthat/test-get_lesson.R:233: expect_length(lex$files, length(episodes))
tests/testthat/test-get_lesson.R:234: expect_named(lex$files, episodes)
tests/testthat/test-get_lesson.R:238: names(problems) <- episodes
tests/testthat/test-get_lesson.R:252: names(n_solutions) <- episodes
tests/testthat/test-get_lesson.R:258: # All the blocktypes are in episode 04
tests/testthat/test-get_lesson.R:279: eps <- glue::glue_collapse(episodes[-(4:5)], sep = ', ', last = ', and ')
tests/testthat/test-get_lesson.R:282: glue::glue("Removing 6 episodes: {eps}")
tests/testthat/test-get_lesson.R:285: # $episodes ------------------------------------------------------------------
tests/testthat/test-get_lesson.R:286: expect_named(lex$episodes, episodes[4:5])
tests/testthat/test-get_lesson.R:287: expect_s3_class(lex$episodes[[1]], "Episode")
tests/testthat/test-get_lesson.R:288: expect_s3_class(lex$episodes[[2]], "Episode")
tests/testthat/test-get_lesson.R:298: expect_length(lex$episodes[[4]]$get_blocks(), 12)
tests/testthat/test-get_lesson.R:299: expect_length(lex$episodes[[4]]$unblock()$get_divs(), 15)
tests/testthat/test-get_lesson.R:300: expect_length(lex$episodes[[4]]$challenges, 1)
tests/testthat/test-get_lesson.R:301: expect_length(lex$episodes[[4]]$solutions, 2)
tests/testthat/test-get_lesson.R:314: "could not find _episodes/, using _episodes_rmd/ as the source"
tests/testthat/test-get_lesson.R:318: expect_s3_class(rni$episodes[[1]], "Episode")
tests/testthat/test-get_lesson.R:330: "could not find either _episodes/ or _episodes_rmd/",
R/use_sandpaper.R:3:#' @param body the xml body of an episode
R/use_sandpaper.R:11: warning("episode body missing", call. = FALSE)
R/utils.R:37: the_episodes <- fs::dir_ls(src, glob = "*md")
R/utils.R:38: the_names <- fs::path_file(the_episodes)
R/utils.R:44: the_episodes <- the_episodes[the_order]
R/utils.R:49: if (!any(grepl("\\.R?md$", the_episodes))) {
R/utils.R:55: episodes <- purrr::map(the_episodes, Episode$new, ...)
R/utils.R:57: purrr::walk(episodes, ~.x$confirm_sandpaper())
R/utils.R:60: # Names of the episodes will be the filename, not the basename
R/utils.R:61: names(episodes) <- the_names
R/utils.R:62: return(episodes)
R/read_jekyll_episodes.R:1:read_jekyll_episodes <- function(path = NULL, rmd = FALSE, ...) {
R/read_jekyll_episodes.R:3: md_src <- fs::path(path, "_episodes")
R/read_jekyll_episodes.R:4: rmd_src <- fs::path(path, "_episodes_rmd")
R/read_jekyll_episodes.R:10: stop(glue::glue("could not find either _episodes/ or _episodes_rmd/ in {path}"))
R/read_jekyll_episodes.R:35: message("could not find _episodes/, using _episodes_rmd/ as the source")
R/read_jekyll_episodes.R:37: stop(glue::glue("The _episodes/ directory must have (R)markdown files"),
R/read_jekyll_episodes.R:56: return(list(episodes = eps, rmd = rmd))
R/use_dovetail.R:14:#' @param body the episode body to convert
R/use_dovetail.R:15:#' @return the episode, invisibly
R/use_dovetail.R:20: warning("episode body missing", call. = FALSE)
R/to_dovetail.R:19:#' blo <- frg$episodes$`14-looping-data-sets.md`$get_blocks()[[2]]
tests/testthat/_snaps/Lesson.md:86: # Episode: "For Loops"
tests/testthat/_snaps/Lesson.md:115: # Episode: "Looping Over Data Sets"
tests/testthat/_snaps/Lesson.md:133: ::warning file=_episodes/12-for-loops.md,line=183:: (duplicated)
tests/testthat/_snaps/Lesson.md:134: ::warning file=_episodes/12-for-loops.md,line=200:: (duplicated)
tests/testthat/_snaps/Lesson.md:135: ::warning file=_episodes/12-for-loops.md,line=227:: (duplicated)
tests/testthat/_snaps/Lesson.md:136: ::warning file=_episodes/12-for-loops.md,line=252:: (duplicated)
tests/testthat/_snaps/Lesson.md:137: ::warning file=_episodes/12-for-loops.md,line=270:: (duplicated)
tests/testthat/_snaps/Lesson.md:138: ::warning file=_episodes/12-for-loops.md,line=289:: (duplicated)
tests/testthat/_snaps/Lesson.md:139: ::warning file=_episodes/12-for-loops.md,line=305:: (duplicated)
tests/testthat/_snaps/Lesson.md:140: ::warning file=_episodes/12-for-loops.md,line=336:: (duplicated)
tests/testthat/_snaps/Lesson.md:141: ::warning file=_episodes/12-for-loops.md,line=371:: (duplicated)
tests/testthat/_snaps/Lesson.md:142: ::warning file=_episodes/12-for-loops.md,line=400:: (duplicated)
tests/testthat/_snaps/Lesson.md:143: ::warning file=_episodes/14-looping-data-sets.md,line=119:: (duplicated)
tests/testthat/_snaps/Lesson.md:144: ::warning file=_episodes/14-looping-data-sets.md,line=143:: (duplicated)
tests/testthat/_snaps/Lesson.md:145: ::warning file=_episodes/14-looping-data-sets.md,line=162:: (duplicated)
tests/testthat/_snaps/Lesson.md:157: ::warning file=_episodes/14-looping-data-sets.md,line=191:: [missing file] ../no-workie.svg
tests/testthat/_snaps/Lesson.md:158: ::warning file=_episodes/14-looping-data-sets.md,line=195:: [image missing alt-text]
tests/testthat/_snaps/Lesson.md:159: ::warning file=_episodes/14-looping-data-sets.md,line=197:: [missing file] ../no-workie.svg [image missing alt-text]
tests/testthat/_snaps/Lesson.md:168: # Episode: "For Loops"
tests/testthat/_snaps/Lesson.md:197: # Episode: "Looping Over Data Sets"
tests/testthat/_snaps/Lesson.md:215: ::warning file=_episodes/12-for-loops.md,line=183:: (duplicated)
tests/testthat/_snaps/Lesson.md:216: ::warning file=_episodes/12-for-loops.md,line=200:: (duplicated)
tests/testthat/_snaps/Lesson.md:217: ::warning file=_episodes/12-for-loops.md,line=227:: (duplicated)
tests/testthat/_snaps/Lesson.md:218: ::warning file=_episodes/12-for-loops.md,line=252:: (duplicated)
tests/testthat/_snaps/Lesson.md:219: ::warning file=_episodes/12-for-loops.md,line=270:: (duplicated)
tests/testthat/_snaps/Lesson.md:220: ::warning file=_episodes/12-for-loops.md,line=289:: (duplicated)
tests/testthat/_snaps/Lesson.md:221: ::warning file=_episodes/12-for-loops.md,line=305:: (duplicated)
tests/testthat/_snaps/Lesson.md:222: ::warning file=_episodes/12-for-loops.md,line=336:: (duplicated)
tests/testthat/_snaps/Lesson.md:223: ::warning file=_episodes/12-for-loops.md,line=371:: (duplicated)
tests/testthat/_snaps/Lesson.md:224: ::warning file=_episodes/12-for-loops.md,line=400:: (duplicated)
tests/testthat/_snaps/Lesson.md:225: ::warning file=_episodes/14-looping-data-sets.md,line=119:: (duplicated)
tests/testthat/_snaps/Lesson.md:226: ::warning file=_episodes/14-looping-data-sets.md,line=143:: (duplicated)
tests/testthat/_snaps/Lesson.md:227: ::warning file=_episodes/14-looping-data-sets.md,line=162:: (duplicated)
tests/testthat/_snaps/Lesson.md:239: ::warning file=_episodes/14-looping-data-sets.md,line=191:: [missing file] ../no-workie.svg
tests/testthat/_snaps/Lesson.md:240: ::warning file=_episodes/14-looping-data-sets.md,line=195:: [image missing alt-text]
tests/testthat/_snaps/Lesson.md:241: ::warning file=_episodes/14-looping-data-sets.md,line=197:: [missing file] ../no-workie.svg [image missing alt-text]
tests/testthat/_snaps/Lesson.md:250: # Episode: "For Loops"
tests/testthat/_snaps/Lesson.md:279: # Episode: "Looping Over Data Sets"
tests/testthat/_snaps/Lesson.md:297: ::warning file=_episodes/12-for-loops.md,line=183:: (duplicated)
tests/testthat/_snaps/Lesson.md:298: ::warning file=_episodes/12-for-loops.md,line=200:: (duplicated)
tests/testthat/_snaps/Lesson.md:299: ::warning file=_episodes/12-for-loops.md,line=227:: (duplicated)
tests/testthat/_snaps/Lesson.md:300: ::warning file=_episodes/12-for-loops.md,line=252:: (duplicated)
tests/testthat/_snaps/Lesson.md:301: ::warning file=_episodes/12-for-loops.md,line=270:: (duplicated)
tests/testthat/_snaps/Lesson.md:302: ::warning file=_episodes/12-for-loops.md,line=289:: (duplicated)
tests/testthat/_snaps/Lesson.md:303: ::warning file=_episodes/12-for-loops.md,line=305:: (duplicated)
tests/testthat/_snaps/Lesson.md:304: ::warning file=_episodes/12-for-loops.md,line=336:: (duplicated)
tests/testthat/_snaps/Lesson.md:305: ::warning file=_episodes/12-for-loops.md,line=371:: (duplicated)
tests/testthat/_snaps/Lesson.md:306: ::warning file=_episodes/12-for-loops.md,line=400:: (duplicated)
tests/testthat/_snaps/Lesson.md:307: ::warning file=_episodes/14-looping-data-sets.md,line=119:: (duplicated)
tests/testthat/_snaps/Lesson.md:308: ::warning file=_episodes/14-looping-data-sets.md,line=143:: (duplicated)
tests/testthat/_snaps/Lesson.md:309: ::warning file=_episodes/14-looping-data-sets.md,line=162:: (duplicated)
tests/testthat/_snaps/Lesson.md:321: ::warning file=_episodes/14-looping-data-sets.md,line=191:: [missing file] ../no-workie.svg
tests/testthat/_snaps/Lesson.md:322: ::warning file=_episodes/14-looping-data-sets.md,line=195:: [image missing alt-text]
tests/testthat/_snaps/Lesson.md:323: ::warning file=_episodes/14-looping-data-sets.md,line=197:: [missing file] ../no-workie.svg [image missing alt-text]
tests/testthat/_snaps/Lesson.md:332: # Episode: "For Loops"
tests/testthat/_snaps/Lesson.md:361: # Episode: "Looping Over Data Sets"
tests/testthat/_snaps/Lesson.md:379: ::warning file=_episodes/12-for-loops.md,line=183:: (duplicated)
tests/testthat/_snaps/Lesson.md:380: ::warning file=_episodes/12-for-loops.md,line=200:: (duplicated)
tests/testthat/_snaps/Lesson.md:381: ::warning file=_episodes/12-for-loops.md,line=227:: (duplicated)
tests/testthat/_snaps/Lesson.md:382: ::warning file=_episodes/12-for-loops.md,line=252:: (duplicated)
tests/testthat/_snaps/Lesson.md:383: ::warning file=_episodes/12-for-loops.md,line=270:: (duplicated)
tests/testthat/_snaps/Lesson.md:384: ::warning file=_episodes/12-for-loops.md,line=289:: (duplicated)
tests/testthat/_snaps/Lesson.md:385: ::warning file=_episodes/12-for-loops.md,line=305:: (duplicated)
tests/testthat/_snaps/Lesson.md:386: ::warning file=_episodes/12-for-loops.md,line=336:: (duplicated)
tests/testthat/_snaps/Lesson.md:387: ::warning file=_episodes/12-for-loops.md,line=371:: (duplicated)
tests/testthat/_snaps/Lesson.md:388: ::warning file=_episodes/12-for-loops.md,line=400:: (duplicated)
tests/testthat/_snaps/Lesson.md:389: ::warning file=_episodes/14-looping-data-sets.md,line=119:: (duplicated)
tests/testthat/_snaps/Lesson.md:390: ::warning file=_episodes/14-looping-data-sets.md,line=143:: (duplicated)
tests/testthat/_snaps/Lesson.md:391: ::warning file=_episodes/14-looping-data-sets.md,line=162:: (duplicated)
tests/testthat/_snaps/Lesson.md:403: ::warning file=_episodes/14-looping-data-sets.md,line=191:: [missing file] ../no-workie.svg
tests/testthat/_snaps/Lesson.md:404: ::warning file=_episodes/14-looping-data-sets.md,line=195:: [image missing alt-text]
tests/testthat/_snaps/Lesson.md:405: ::warning file=_episodes/14-looping-data-sets.md,line=197:: [missing file] ../no-workie.svg [image missing alt-text]
tests/testthat/_snaps/validation.md:20: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:39: _episodes/14-looping-data-sets.md:119 (duplicated)
tests/testthat/_snaps/validation.md:40: _episodes/14-looping-data-sets.md:143 (duplicated)
tests/testthat/_snaps/validation.md:41: _episodes/14-looping-data-sets.md:162 (duplicated)
tests/testthat/_snaps/validation.md:42: # Episode: "Looping Over Data Sets"
tests/testthat/_snaps/validation.md:87: _episodes/14-looping-data-sets.md:191 [missing file] ../no-workie.svg
tests/testthat/_snaps/validation.md:88: _episodes/14-looping-data-sets.md:195 [image missing alt-text]
tests/testthat/_snaps/validation.md:89: _episodes/14-looping-data-sets.md:197 [missing file] ../no-workie.svg [image missing alt-text]
tests/testthat/_snaps/validation.md:154: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:186: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:218: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:250: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:542: # Episode: "Errors in Headings"
tests/testthat/_snaps/validation.md:563: ::warning file=_episodes/14-looping-data-sets.md,line=119:: (duplicated)
tests/testthat/_snaps/validation.md:564: ::warning file=_episodes/14-looping-data-sets.md,line=143:: (duplicated)
tests/testthat/_snaps/validation.md:565: ::warning file=_episodes/14-looping-data-sets.md,line=162:: (duplicated)
tests/testthat/_snaps/validation.md:568: # Episode: "Looping Over Data Sets"
tests/testthat/test-Episode.R:1:test_that("Episodes can be created and are valid", {
tests/testthat/test-Episode.R:3: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:4: e <- Episode$new(scope)
tests/testthat/test-Episode.R:6: expect_s3_class(e, "Episode")
tests/testthat/test-Episode.R:35:test_that("Episodes from sandpaper will have links included", {
tests/testthat/test-Episode.R:41: e <- Episode$new(tep, fix_links = FALSE)
tests/testthat/test-Episode.R:44: e <- Episode$new(tep, fix_links = FALSE)
tests/testthat/test-Episode.R:50:test_that("Episodes with image tags do not error", {
tests/testthat/test-Episode.R:52: ep <- Episode$new(test_path("examples", "post-image-tag.md"))
tests/testthat/test-Episode.R:70: e <- Episode$new(test_path("examples", "mismatched-div.txt"),
tests/testthat/test-Episode.R:78: expect_s3_class(e, "Episode")
tests/testthat/test-Episode.R:83: e <- Episode$new(test_path("examples", "handout.Rmd"),
tests/testthat/test-Episode.R:96: # handout with a file returns the original Episode object
tests/testthat/test-Episode.R:119:test_that("Episodes can be reset if needed", {
tests/testthat/test-Episode.R:121: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:122: e <- Episode$new(scope)
tests/testthat/test-Episode.R:136: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:137: e <- Episode$new(scope)
tests/testthat/test-Episode.R:185: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:186: e <- Episode$new(scope)
tests/testthat/test-Episode.R:209: # The first thing in the episode is a block quote
tests/testthat/test-Episode.R:218: scope <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-Episode.R:219: e <- Episode$new(scope)
tests/testthat/test-Episode.R:259: scope <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-Episode.R:260: e <- Episode$new(scope)
tests/testthat/test-Episode.R:307: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-Episode.R:308: e <- Episode$new(loop)
tests/testthat/test-Episode.R:372: loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
tests/testthat/test-Episode.R:373: e <- Episode$new(loop)
tests/testthat/test-Episode.R:434: floop <- fs::path(lesson_fragment(), "_episodes", "12-for-loops.md")
tests/testthat/test-Episode.R:435: e <- Episode$new(floop)
tests/testthat/test-Episode.R:467: floop <- fs::path(lesson_fragment(), "_episodes", "12-for-loops.md")
tests/testthat/test-Episode.R:468: e <- Episode$new(floop)
tests/testthat/test-Episode.R:532: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:533: e <- Episode$new(scope)
tests/testthat/test-Episode.R:538: e <- Episode$new(scope)
tests/testthat/test-Episode.R:543:test_that("An episode can be cloned deeply", {
tests/testthat/test-Episode.R:545: scope <- fs::path(lesson_fragment(), "_episodes", "17-scope.md")
tests/testthat/test-Episode.R:546: e <- Episode$new(scope)
tests/testthat/test-Episode.R:572: sunshine <- fs::path(lesson_fragment(), "_episodes", "sunshine.md")
tests/testthat/test-Episode.R:574: expect_error(Episode$new(sunshine), msg)
tests/testthat/test-Episode.R:581: sunshine <- fs::path(lesson_fragment(), "_episodes", "sunshine.md")
tests/testthat/test-Episode.R:583: expect_error(Episode$new(sunshine), msg)
R/make_heading_table.R:14:#' path <- file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
R/make_heading_table.R:15:#' loop <- Episode$new(path)
R/make_link_table.R:1:#' Create a table of parsed URLs from a single Episode object.
R/make_link_table.R:3:#' @param yrn an Episode class object
R/make_link_table.R:22:#' loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
R/make_link_table.R:23:#' make_link_table(Episode$new(loop))
R/make_div_table.R:1:#' Create a table of divs in an episode
R/lesson_fragment.R:6:#' @return a path to a lesson fragment that contains one `_episodes` directory
R/liquid_to_commonmark.R:28:#' py1 <- get_code(frg1$episodes[["17-scope.md"]]$body, ".language")
R/liquid_to_commonmark.R:29:#' py2 <- get_code(frg2$episodes[["17-scope.md"]]$body, ".language")
R/Lesson.R:4:#' This is a wrapper for several [Episode] class objects.
R/Lesson.R:6:#' Lessons are made of up several episodes within the `_episodes/` directory of
R/Lesson.R:7:#' a lesson. This class keeps track of several episodes and allows us to switch
R/Lesson.R:8:#' between RMarkdown and markdown episodes
R/Lesson.R:16: #' @field episodes \[`list`\] list of [Episode] class objects representing
R/Lesson.R:17: #' the episodes of the lesson.
R/Lesson.R:18: episodes = NULL,
R/Lesson.R:20: #' @field extra \[`list`\] list of [Episode] class objects representing
R/Lesson.R:26: #' @field rmd \[`logical`\] when `TRUE`, the episodes represent RMarkdown
R/Lesson.R:32: #' folder called `_episodes` within that contains markdown episodes.
R/Lesson.R:41: #' @param ... arguments passed on to [Episode$new][Episode]
R/Lesson.R:42: #' @return a new Lesson object that contains a list of [Episode] objects in
R/Lesson.R:43: #' `$episodes`
R/Lesson.R:47: #' frg$episodes
R/Lesson.R:51: jeky <- read_jekyll_episodes(path, rmd, ...)
R/Lesson.R:52: self$episodes <- jeky$episodes
R/Lesson.R:55: episode_path <- fs::path(path, "episodes")
R/Lesson.R:59: self$episodes <- read_markdown_files(
R/Lesson.R:60: episode_path, cfg, process_tags = FALSE, ...)
R/Lesson.R:83: #' name of each episode.
R/Lesson.R:85: nms <- if (path) purrr::map(self$episodes, "path") else names(self$episodes)
R/Lesson.R:86: res <- purrr::map(self$episodes, ~.x$get_blocks(type = type, level = level))
R/Lesson.R:95: #' name of each episode.
R/Lesson.R:98: #' the `get_challenge_graph()` method in [Episode].
R/Lesson.R:100: #' solutions in the output. See [Episode] for more details.
R/Lesson.R:102: nms <- if (path) purrr::map(self$episodes, "path") else names(self$episodes)
R/Lesson.R:103: eps <- self$episodes
R/Lesson.R:106: res <- purrr::map_dfr(eps, ~.x$get_challenge_graph(recurse), .id = "Episode")
R/Lesson.R:117: #' name of each episode.
R/Lesson.R:119: nms <- if (path) purrr::map(self$episodes, "path") else names(self$episodes)
R/Lesson.R:120: res <- purrr::map(self$episodes, "solutions")
R/Lesson.R:126: #' Remove episodes that have no challenges
R/Lesson.R:128: #' episode removed is reported. Set to `FALSE` to remove this behavior.
R/Lesson.R:138: epis <- if (sum(to_remove) > 1) "episodes" else "episode"
R/Lesson.R:140: self$episodes[to_remove] <- NULL
R/Lesson.R:145: self$episodes[lengths(self$challenges()) == 0] <- NULL
R/Lesson.R:151: #' Re-read all Episodes from disk
R/Lesson.R:155: #' frg$episodes[[1]]$body
R/Lesson.R:156: #' frg$isolate_blocks()$episodes[[1]]$body # empty
R/Lesson.R:157: #' frg$reset()$episodes[[1]]$body # reset
R/Lesson.R:166: #' @return the Episode object, invisibly
R/Lesson.R:171: purrr::walk(self$episodes, ~.x$isolate_blocks())
R/Lesson.R:175: #' @description create a handout for all episodes in the lesson
R/Lesson.R:187: hands <- purrr::map(self$episodes,
R/Lesson.R:217: #' - **episode** the filename of the episode
R/Lesson.R:231: res <- purrr::map(self$episodes,
R/Lesson.R:235: res <- dplyr::bind_rows(res, .id = "episodes")
R/Lesson.R:254: #' to the number of episodes in the lesson with an extra column indicating
R/Lesson.R:255: #' the type of validation. See the same method in the [Episode] class for
R/Lesson.R:261: res <- purrr::map(self$episodes, ~.x$validate_divs(warn = FALSE))
R/Lesson.R:287: #' to the number of episodes in the lesson with an extra column indicating
R/Lesson.R:288: #' the type of validation. See the same method in the [Episode] class for
R/Lesson.R:294: res <- purrr::map(self$episodes, ~.x$validate_links(warn = FALSE))
R/Lesson.R:306: #' @field n_problems number of problems per episode
R/Lesson.R:308: purrr::map_int(self$episodes, ~length(.x$show_problems))
R/Lesson.R:311: #' @field show_problems contents of the problems per episode
R/Lesson.R:313: res <- purrr::map(self$episodes, "show_problems")
R/Lesson.R:317: #' @field files the source files for each episode
R/Lesson.R:319: purrr::map_chr(self$episodes, "path")
R/Lesson.R:324: if (name == "episodes") {
R/get_solutions.R:27:#' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/heading_tree.R:13: lname <- if (is.null(lname)) "" else dQuote(lname)
R/heading_tree.R:25: hlabels[1] <- "# Episode:"
R/get_challenges.R:17:#' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/get_list_block.R:3:#' @param self an Episode object
R/get_images.R:1:#' Get images from an Episode/yarn object
R/get_images.R:3:#' @param yrn an Episode/yarn object
R/get_lesson.R:5:#' directory and extracts the lesson in `_episodes/` using [tinkr::to_xml()]
R/get_lesson.R:12:#' @param ... arguments passed on to [Episode$new()][Episode].
R/get_lesson.R:14:#' @return a list of xml objects, one element per episode.
R/get_lesson.R:26: if (is.null(lesson) && fs::dir_exists(fs::path(path, "_episodes"))) {
R/get_lesson.R:45: # If the directory contains episodes, then use that, otherwise, download the
R/get_lesson.R:46: episodes <- fs::path(the_path, "_episodes")
R/get_lesson.R:47: episodes_rmd <- fs::path(the_path, "_episodes_rmd")
R/get_lesson.R:49: if (!fs::dir_exists(episodes) && !fs::dir_exists(episodes_rmd)) {
R/fix_sandpaper_links.R:23:#' loop <- fs::path(lesson_fragment(), "_episodes", "14-looping-data-sets.md")
R/fix_sandpaper_links.R:24:#' e <- Episode$new(loop)
R/fix_sandpaper_links.R:84:# wrapper for link tags like {% link _episodes/page.md %}
R/fix_sandpaper_links.R:122: episode <- function() glasses("_episodes/([^ %]+?)")
R/fix_sandpaper_links.R:123: links <- gsub(episode(), "\\2", links, perl = TRUE)
R/get_blocks.R:26:#' get_blocks(frg$episodes[["17-scope.md"]]$body)
R/get_code.R:12:#' `$error` elements of the [Episode] class.
R/get_code.R:19:#' e <- Episode$new(fs::path(lesson_fragment(), "_episodes", "17-scope.md"))
R/elevate_children.R:12:#' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/fix_links.R:1:#' Finds and fixes unresolved links within an Episode
R/div.R:35:#' lop <- frg$episodes$`14-looping-data-sets.md`
R/div.R:79:#' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/div.R:118:#' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:1:#' Class representing XML source of a Carpentries episode
R/Episode.R:4:#' Wrapper around an xml document to manipulate and inspect Carpentries episodes
R/Episode.R:7:#' has method specific to the Carpentries episodes.
R/Episode.R:9:Episode <- R6::R6Class("Episode",
R/Episode.R:12: #' @description Create a new Episode
R/Episode.R:13: #' @param path \[`character`\] path to a markdown episode file on disk
R/Episode.R:26: #' @return A new Episode object with extracted XML data
R/Episode.R:28: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:91: #' @description enforce that the episode is a {sandpaper} episode withtout
R/Episode.R:92: #' going through the conversion steps. The default Episodes from pegboard
R/Episode.R:114: #' @description return all `block_quote` elements within the Episode
R/Episode.R:120: #' @return \[`xml_nodeset`\] all the blocks from the episode with the given
R/Episode.R:123: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:132: #' dsp1 <- rng$episodes[["04-data-structures-part1.md"]]
R/Episode.R:158: #' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:165: #' label all the div elements within the Episode to extract them with
R/Episode.R:172: #' return all div elements within the Episode
R/Episode.R:181: #' Extract the yaml metadata from the episode
R/Episode.R:222: #' @param yml the list derived from the yml file for the episode
R/Episode.R:314: #' within the challenges in the Episode:
R/Episode.R:325: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:333: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:352: #' @description write the episode to disk as markdown
R/Episode.R:360: #' @return the episode object
R/Episode.R:362: #' the Carpentries Episodes are styled with, thus some block tags will be
R/Episode.R:365: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:406: #' e <- lsn$episodes[[1]]
R/Episode.R:428: #' Re-read episode from disk
R/Episode.R:429: #' @return the episode object
R/Episode.R:431: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:445: #' @return the Episode object, invisibly
R/Episode.R:447: #' scope <- Episode$new(file.path(lesson_fragment(), "_episodes", "17-scope.md"))
R/Episode.R:460: #' @return the Episode object, invisibly
R/Episode.R:462: #' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:464: #' loop$get_blocks() # all the blocks in the episode
R/Episode.R:497: #' - **episode** the filename of the episode
R/Episode.R:510: #' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:544: #' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:572: #' loop <- Episode$new(file.path(lesson_fragment(), "_episodes", "14-looping-data-sets.md"))
R/Episode.R:583: #' @field show_problems \[`list`\] a list of all the problems that occurred in parsing the episode
R/Episode.R:600: #' @field tags \[`xml_nodeset`\] all the kramdown tags from the episode
R/Episode.R:604: #' @field questions \[`character`\] the questions from the episode
R/Episode.R:608: #' @field keypoints \[`character`\] the keypoints from the episode
R/Episode.R:612: #' @field objectives \[`character`\] the objectives from the episode
R/Episode.R:616: #' @field challenges \[`xml_nodeset`\] all the challenges blocks from the episode
R/Episode.R:627: #' @field solutions \[`xml_nodeset`\] all the solutions blocks from the episode
R/Episode.R:638: #' @field output \[`xml_nodeset`\] all the output blocks from the episode
R/Episode.R:646: #' @field error \[`xml_nodeset`\] all the error blocks from the episode
R/Episode.R:654: #' @field code \[`xml_nodeset`\] all the code blocks from the episode
R/Episode.R:662: #' @field lesson \[`character`\] the path to the lesson where the episode is from
R/Episode.R:665: sub_folders <- c("episodes", "learners", "instructors", "profiles",
R/Episode.R:666: "_episodes", "_episodes_rmd", "_extras")
```

Contributor guide

Open the contributing guide

Research direction

Start by reviewing the listed R files and the references throughout tests/testthat, especially test-Lesson.R, test-conversion.R, and test-get_lesson.R. Inventory the Episode class and episode-related paths before defining the migration scope; done would require the terminology transition across the package and corresponding tests, but this issue does not specify a concrete acceptance boundary.

Written by the indexing model from the issue text.

Assessment

Tech stack
r
Domain
tooling
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.