R/journal_tactics.R

Defines functions journal_tactics

Documented in journal_tactics

#' Write journal for tactics
#'
#' Produce file content and filenames for a daily, weekly and final tactics journal
#'
#' @param template_in template to use in the journal
#' @param date_start date to start journal on - must be a Sunday or Monday
#' @param date_end date to end journal on - must be a Saturday (if start is Sunday) or Sunday (if start is Monday)
#' @return A tibble with two variables: a vector of markdown file contents and a vector of filenames
#' @importFrom rlang .data
#' @importFrom magrittr %>%
#' @export

journal_tactics <- function(template_in, date_start, date_end){
  # Tactics defaults
  filename_body <- 'tactics.md'
  template_tibble <- new_journalr_tbl_df(date_start, "week", date_end)

  # Tactics-specific ----
  tactic_headers <- template_in %>%
    # Get only the lines with one or more list element ("*", "-", "+") followed by a space
    stringr::str_split("\n") %>%
    unlist(use.names = FALSE) %>%
    stringr::str_subset("^[\\*\\+\\-] ") %>%
    # Ensure that tactic indicators have a H2 heading
    stringr::str_replace_all("^[\\*\\+\\-]", "##")

  daily_content <- template_tibble %>%
    dplyr::mutate(
      tactic_body = purrr::map_chr(
        .data$date_vec, ~paste(glue::glue("### {.x} (<YES/NO/SKIP>)\n\n* \n\n"), collapse = "\n")
      ),
      file_contents = paste0(
        "# ", .data$titlename, "\n\n",
        purrr::map_chr(
          .data$tactic_body, ~paste(glue::glue("{tactic_headers}\n\n{.x}\n\n"), collapse = "\n")
        )
      ),
    )

  # Weekly journals
  weekly_body_tactics_tmp <- paste0("### ", daily_content$titlename, " - <YES/NO/SKIP> (<SCORE>)\n\n* \n") %>%
    stringr::str_c(collapse = "\n")

  weekly_body_tactics <- paste0(tactic_headers, "\n\n", weekly_body_tactics_tmp) %>%
    stringr::str_c(collapse = "\n")

  n_tactics <- length(tactic_headers)

  weekly_body_overall <- paste0("### ", daily_content$titlename,
                                glue::glue(" - <n_YES>/{n_tactics} (<PCT>%)"), "\n\n* \n\n") %>%
    stringr::str_c(collapse = "\n")

  weekly_body <- paste0(weekly_body_tactics, "\n\n", "## Overall\n\n", weekly_body_overall)

  weekly_title <- paste0(
    "Weekly reflections: ",
    format_date_to_date(date_start, date_end, format_date)
  )

  weekly_contents <- weekly_body %>%
    add_h1_title(weekly_title)

  # Get new tibble of content and filenames
  daily_out <- daily_content %>%
    add_files_template_tibble("week", filename_body) %>%
    dplyr::select(.data$file_contents, .data$filename)

  weekly_out <- tibble::tibble(
    file_contents = weekly_contents,
    filename = paste0("!weekly_", filename_body),
  )

  dplyr::bind_rows(daily_out, weekly_out)
}
andrewjpfeiffer/journalr documentation built on Oct. 13, 2019, 9:19 p.m.