carpentries / carpentries/pegboard
[Future] transition to use the word 'chapter' over 'episode'
- 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
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