|
1 |
| -concat_op <- "" |
2 |
| -format_op <- "" |
3 |
| - |
4 | 1 | allowed_ops <- c("$", "@", "^", "*", "/", "-", "+", "&", "|", "&&", "||")
|
5 | 2 |
|
6 | 3 | set_string_ops_session <- function(concat = "&", format = "|") {
|
7 |
| - # ns <- getNamespace("base") |
| 4 | + |
| 5 | + # trying to assign in namespace doesn't work |
| 6 | + # ns <- getNamespace("stringplus") |
8 | 7 | # rlang::env_unlock(ns)
|
9 |
| - # unlockBinding(concat, ns) |
10 |
| - # unlockBinding(format, ns) |
11 |
| - assign(concat, string_concat_op, envir = globalenv(), inherits=FALSE) |
12 |
| - assign(format, string_format_op, envir = globalenv(), inherits=FALSE) |
| 8 | + # clear_string_ops(ns) |
| 9 | + # assign(concat, string_concat_op, envir = ns, inherits=FALSE) |
| 10 | + # assign(format, string_format_op, envir = ns, inherits=FALSE) |
| 11 | + # namespaceExport(ns, concat) |
| 12 | + # namespaceExport(ns, format) |
13 | 13 | # rlang::env_lock(ns)
|
14 | 14 |
|
15 |
| - ns <- getNamespace("stringplus") |
16 |
| - rlang::env_unlock(ns) |
17 |
| - unlockBinding("concat_op", ns) |
18 |
| - unlockBinding("format_op", ns) |
19 |
| - assign("concat_op", concat, envir = ns, inherits=FALSE) |
20 |
| - assign("format_op", format, envir = ns, inherits=FALSE) |
21 |
| - rlang::env_lock(ns) |
| 15 | + # assigning ops to globalenv directly makes it risky as its easy to accidentally remove them |
| 16 | + # e.g. via rm(list=ls()) |
| 17 | + # Instead assign to custom env and attach it to globalenv as a hidden environment |
| 18 | + |
| 19 | + # first check if already assigned and remove it |
| 20 | + if(".stringplus" %in% search()) { |
| 21 | + detach(".stringplus", character.only=TRUE) |
| 22 | + } |
| 23 | + env <- new.env(parent = globalenv()) |
| 24 | + environment(string_concat_op) <- env |
| 25 | + assign(concat, string_concat_op, envir = env, inherits=FALSE) |
| 26 | + environment(string_format_op) <- env |
| 27 | + assign(format, string_format_op, envir = env, inherits=FALSE) |
| 28 | + assign("concat_op", concat, envir = env, inherits=FALSE) |
| 29 | + assign("format_op", format, envir = env, inherits=FALSE) |
| 30 | + |
| 31 | + assign(".stringplus", env, envir = globalenv()) |
| 32 | + attach(get(".stringplus", envir = globalenv()), pos = 2, name = ".stringplus", warn.conflicts=FALSE) |
22 | 33 | }
|
23 | 34 |
|
24 | 35 | store_string_ops <- function(concat = "&", format = "|") {
|
|
0 commit comments