Skip to content

Commit 58c2933

Browse files
authored
Validate search websites (#24)
* - Add shortname mapping - Add a check validation function * Begin refactoring the `searcher` handler. * Redo mapping
1 parent 5432b7e commit 58c2933

File tree

3 files changed

+39
-20
lines changed

3 files changed

+39
-20
lines changed

R/search-functions.R

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ search_site = function(query,
102102
#' R error message on search portals by opening a
103103
#' browser.
104104
#'
105+
#' @param keyword Opt to search under different default terms.
105106
#' @inheritParams search_site
106107
#' @export
107108
#' @section Generic Error Search:
@@ -123,23 +124,10 @@ search_site = function(query,
123124
#' # On error, automatically search the message on google
124125
#' options(error = searcher("google"))
125126
#' }
126-
searcher = function(site = c(
127-
"google",
128-
"bing",
129-
"duckduckgo",
130-
"ddg",
131-
"startpage",
132-
"sp",
133-
"stackoverflow",
134-
"so",
135-
"rstudio community",
136-
"rscom",
137-
"github",
138-
"gh",
139-
"bitbucket",
140-
"bb"
141-
),
142-
rlang = TRUE) {
127+
searcher = function(site, rlang = TRUE, keyword = getOption("searcher.default_keyword", "base")) {
128+
129+
check_valid_site(site)
130+
143131
function(query = geterrmessage(), rlang = rlang) {
144132
search_site(query, site, rlang = rlang)
145133
}

R/searcher-environment.R

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,33 @@ searcher_properties =
3131
keyword_entry("lang:r"))
3232
)
3333

34+
short_site_name_map = c(
35+
"ddg" = "duckduckgo",
36+
"sp" = "startpage",
37+
"so" = "stackoverflow",
38+
"rscom" = "rstudio community",
39+
"gh" = "github",
40+
"bb" = "bitbucket"
41+
)
42+
43+
check_site_name = function(x, data) {
44+
!x %in% names(data)
45+
}
46+
47+
check_short_site_name = function(x) {
48+
check_site_name(x, short_site_name_map)
49+
}
50+
51+
check_long_site_name = function(x) {
52+
check_site_name(x, searcher_properties)
53+
}
54+
55+
check_valid_site = function(site) {
56+
recorded_site = any(check_long_site_name(site) | check_short_site_name(site))
57+
58+
if(!recorded_site) {
59+
stop("`site` must be a valid site name.", call. = FALSE)
60+
}
61+
62+
invisible(TRUE)
63+
}

man/searcher.Rd

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)