R/helpers.R

Defines functions get_name_list

Documented in get_name_list

# Copyright (c) 2018, Brandseye PTY (LTD)
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#' Turn a string creating a vector in to a string of names
#'
#' Takes a string generated by deparse and returns a list of names
#' contained within.
#'
#' @param names A string generated using `deparse` and `substitute`.
#' @param env The environment in which to perform substitutions.
#'
#' @return A vector of characters.
#'
#' @examples
#'
#' \dontrun{
#' get_name_list(deparse(substitute(one)))
#' get_name_list(deparse(substitute(c(one, two))))
#' get_name_list(deparse(substitute(NULL)))
#' }
#'
get_name_list <- function(names, env = parent.frame()) {
  if (length(names) > 1) names <- paste(names, collapse = "")
  strip_quotes <- function(s) {
    val <- s
    if (stringr::str_sub(s, 1, 1) == '"') val <- stringr::str_sub(s, 2, -2)
    if (stringr::str_count(val, '\\{')) val <- glue::glue(val, .envir = env)
    val
  }

  if (names == "NULL") return(NULL)
  if (!startsWith(names, "c(")) return(strip_quotes(names))

  names %>%
    stringr::str_sub(3, -2) %>%
    stringr::str_split(",") %>%
    purrr::pluck(1) %>%
    stringr::str_trim() %>%
    map_chr(strip_quotes)
}
brandseye/brandseyer2 documentation built on Sept. 5, 2021, 2:15 p.m.