Skip to content

Commit bff47f1

Browse files
Replace registry repository column (#66)
* Add preprocessing fn add-paper-links * Remove add repository link function * Update register columns and filter column function * Add check for url in paper reference * Change stop to warning in codecheck validation * Remove extra lines in paper titles and links * Fix render_register_md * Removed add_repository_links_md * Updating documentation with Roxygen * align list entries for readability * Remove loading config in register_check * Replace preprocess next with if else * Add render_register output_type default * Add config$register_columns for html and md * increase "check date" column width * Adjust register paper title column width * Update function documentation * test github job run without cache * Revert changes to workflow file * Fix failing tests * Bump version --------- Co-authored-by: Daniel Nüst <[email protected]>
1 parent 5368a52 commit bff47f1

29 files changed

+122
-205
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: codecheck
22
Title: Helper Functions for CODECHECK Project
3-
Version: 0.8.0
3+
Version: 0.9.0
44
Authors@R:
55
c(person(given = "Stephen",
66
family = "Eglen",

R/configuration.R

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,7 @@ get_codecheck_yml_osf <- function(x) {
7878
#' @importFrom httr GET content
7979
#' @importFrom yaml yaml.load
8080
get_codecheck_yml_gitlab <- function(x) {
81-
# Loading config.R file which is needed for the hyperlink
82-
source(system.file("extdata", "config.R", package = "codecheck"))
83-
84-
link <- paste0(CONFIG$HYPERLINKS[["gitlab"]], x, "/-/raw/main/codecheck.yml?inline=false")
81+
link <- paste0("https://gitlab.com/", x, "/-/raw/main/codecheck.yml?inline=false")
8582
response <- httr::GET(link)
8683

8784
if (response$status == 200) {
@@ -189,6 +186,12 @@ validate_codecheck_yml <- function(configuration) {
189186
# the report MUST be a valid DOI
190187
assertthat::assert_that(codecheck_yml$report %in% rorcid::check_dois(codecheck_yml$report)$good,
191188
msg = paste0(codecheck_yml$report, " is not a valid DOI"))
189+
190+
# Check if the paper_link contains a valid URL. We only check that it starts with https?://
191+
url_regex <- "^https?://"
192+
if (!grepl(url_regex, codecheck_yml$paper$reference)) {
193+
warning("The paper reference in the codecheck.yml is not a valid URL")
194+
}
192195

193196
# if ORCID are used, they must be without URL prefix and valid form, actual checking requires login, see #11
194197
orcid_regex <- "^(\\d{4}\\-\\d{4}\\-\\d{4}\\-\\d{3}(\\d|X))$"

R/register.R

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ register_render <- function(register = read.csv("register.csv", as.is = TRUE),
5959
register_check <- function(register = read.csv("register.csv", as.is = TRUE),
6060
from = 1,
6161
to = nrow(register)) {
62+
# Loading config.R file
63+
source(system.file("extdata", "config.R", package = "codecheck"))
64+
6265
for (i in seq(from = from, to = to)) {
6366
cat("Checking", toString(register[i, ]), "\n")
6467
entry <- register[i, ]

R/utils_create_filtered_register_csvs.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ create_filtered_reg_csvs <- function(register, filter_by){
4343
register_key <- register_keys[[filter_col_name]][i]
4444
filtered_register <- filtered_register_list[[i]]
4545
table_details <- generate_table_details(register_key, filtered_register, filter)
46-
filtered_register <- filter_and_drop_register_columns(filtered_register, filter)
46+
filtered_register <- filter_and_drop_register_columns(filtered_register, filter, file_type = "csv")
4747
output_dir <- paste0(table_details[["output_dir"]], "register.csv")
4848
write.csv(filtered_register, output_dir, row.names=FALSE)
4949
}

R/utils_preprocess_register.R

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,51 @@ register_clear_cache <- function() {
1111
unlink(path, recursive = TRUE)
1212
}
1313

14+
#' Function for adding clickable links to the paper for each entry in the register table.
15+
#'
16+
#' @param register_table The register table
17+
#' @param register The register from the register.csv file
18+
#' @return The adjusted register table
19+
add_paper_links <- function(register_table, register){
20+
list_hyperlinks <- c()
21+
22+
# Looping over the entries in the register
23+
for (i in seq_len(nrow(register))) {
24+
# Retrieving the link to the paper
25+
config_yml <- get_codecheck_yml(register[i, ]$Repo)
26+
paper_link <- config_yml[["paper"]][["reference"]]
27+
paper_title <- config_yml[["paper"]][["title"]]
28+
29+
# Removing new lines from paper title and link
30+
paper_title <- gsub("\n", " ", paper_title)
31+
paper_link <- gsub("\n$", "", paper_link)
32+
33+
# Checking if there is a valid url for the paper. If not we just add the title as it is
34+
url_regex <- "^https?://"
35+
if (!grepl(url_regex, paper_link)){
36+
warning("The codecheck_yml's paper reference is not a valid url.")
37+
list_hyperlinks <- c(list_hyperlinks, paper_title)
38+
}
39+
40+
# If we have a valid url we add hyperlink
41+
else{
42+
paper_hyperlink <- paste0(
43+
"[",
44+
paper_title,
45+
"](",
46+
paper_link,
47+
")"
48+
)
49+
list_hyperlinks <- c(list_hyperlinks, paper_hyperlink)
50+
}
51+
}
52+
# Creating a new "Paper Title" column and moving it next to the "Repository" column
53+
register_table <- register_table %>%
54+
mutate(`Paper Title` = list_hyperlinks) %>%
55+
relocate(`Paper Title`, .after = Repository)
56+
return(register_table)
57+
}
58+
1459
#' Function for adding clickable links to the report for each entry in the register table.
1560
#'
1661
#' @param register_table The register table
@@ -144,5 +189,6 @@ preprocess_register <- function(register, filter_by) {
144189
register_table <- add_report_links(register_table, register)
145190
register_table <- add_issue_number_links(register_table, register)
146191
register_table <- add_check_time(register_table, register)
192+
register_table <- add_paper_links(register_table, register)
147193
return(register_table)
148194
}

R/utils_render_register_general.r

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ create_original_register_files <- function(register_table, outputs){
1010
for (output_type in outputs){
1111
table_details <- list(is_reg_table = TRUE)
1212
table_details[["output_dir"]] <- generate_output_dir(filter, table_details)
13-
register_table <- filter_and_drop_register_columns(register_table, filter)
1413
render_register(register_table, table_details, filter, output_type)
1514
}
1615
}
@@ -30,7 +29,6 @@ create_register_files <- function(register_table, filter_by, outputs){
3029

3130
# Creating the original register file
3231
create_original_register_files(register_table, outputs)
33-
3432
# Generating filtered register table files
3533
# For each filter type we created the nested register tables first
3634
for (filter in filter_by){
@@ -58,7 +56,6 @@ create_register_files <- function(register_table, filter_by, outputs){
5856

5957
# Get the group names (keys) based on the filter names
6058
register_keys <- grouped_registers %>% group_keys()
61-
6259
# Looping over each of the output types
6360
for (output_type in outputs){
6461
for (i in seq_along(filtered_register_list)) {
@@ -68,8 +65,6 @@ create_register_files <- function(register_table, filter_by, outputs){
6865

6966
table_details <- generate_table_details(register_key, filtered_table, filter)
7067

71-
# Dropping columns that are redundant
72-
filtered_table <- filter_and_drop_register_columns(filtered_table, filter)
7368
render_register(filtered_table, table_details, filter, output_type)
7469
}
7570
}
@@ -84,12 +79,14 @@ create_register_files <- function(register_table, filter_by, outputs){
8479
#'
8580
#' @param register_table The register table
8681
#' @param filter A string specifying the filter to apply (e.g., "venues", "codecheckers").
82+
#' @param file_type The type of file we need to render the register for.
83+
#' The columns to keep depend on the file type
8784
#'
8885
#' @return The filtered register table with only the necessary columns retained.
89-
filter_and_drop_register_columns <- function(register_table, filter) {
86+
filter_and_drop_register_columns <- function(register_table, filter, file_type) {
9087

9188
# Step 1: Columns that we want to keep
92-
columns_to_keep <- CONFIG$REGISTER_COLUMNS
89+
columns_to_keep <- CONFIG$REGISTER_COLUMNS[[file_type]]
9390

9491
# Initialize final columns to columns_to_keep in case no filter is applied
9592
final_columns <- intersect(columns_to_keep, names(register_table))
@@ -149,10 +146,13 @@ generate_table_details <- function(table_key, table, filter, is_reg_table = TRUE
149146
#' @param register_table The register table that needs to be rendered into different files.
150147
#' @param table_details A list of details related to the table (e.g., output directory, metadata).
151148
#' @param filter A string specifying the filter applied to the register data.
152-
#' @param output_type A string specifying the desired output format ("md" for Markdown, "html" for HTML, "json" for JSON).
149+
#' @param output_type A string specifying the desired output format "json" for JSON,
150+
#' "csv" for CSVs, "md" for MD and "html" for HTMLs.
153151
#'
154152
#' @return None. The function generates a file in the specified format.
155153
render_register <- function(register_table, table_details, filter, output_type){
154+
register_table <- filter_and_drop_register_columns(register_table, filter, output_type)
155+
156156
switch(output_type,
157157
"md" = render_register_md(register_table, table_details, filter),
158158
"html" = render_html(register_table, table_details, filter),

R/utils_render_register_htmls.R

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,3 @@
1-
#' Function for adding repository links in the register table for the creation of the html file.
2-
#'
3-
#' @param register_table The register table
4-
#' @return Register table with adjusted repository links
5-
add_repository_links_html <- function(register_table) {
6-
register_table$Repository <- sapply(
7-
X = register_table$Repository,
8-
FUN = function(repository) {
9-
spec <- parse_repository_spec(repository)
10-
# ! Needs refactoring
11-
if (!any(is.na(spec))) {
12-
urrl <- "#"
13-
if (spec[["type"]] == "github") {
14-
urrl <- paste0(CONFIG$HYPERLINKS[["github"]], spec[["repo"]])
15-
paste0("<i class='fa fa-github'></i>&nbsp;[", spec[["repo"]], "](", urrl, ")")
16-
} else if (spec[["type"]] == "osf") {
17-
urrl <- paste0(CONFIG$HYPERLINKS[["osf"]], spec[["repo"]])
18-
paste0("<i class='ai ai-osf'></i>&nbsp;[", spec[["repo"]], "](", urrl, ")")
19-
} else if (spec[["type"]] == "gitlab") {
20-
urrl <- paste0(CONFIG$HYPERLINKS[["gitlab"]], spec[["repo"]])
21-
paste0("<i class='fa fa-gitlab'></i>&nbsp;[", spec[["repo"]], "](", urrl, ")")
22-
} else {
23-
repository
24-
}
25-
} else {
26-
repository
27-
}
28-
}
29-
)
30-
return(register_table)
31-
}
32-
331
#' Dynamically generates a html_document.yml with the full paths to the index header, prefix
342
#' and postfix.html files.
353
#'
@@ -164,7 +132,8 @@ render_html <- function(table, table_details, filter){
164132

165133
# Creating md file from which HTML file is made
166134
if (table_details[["is_reg_table"]]){
167-
render_register_md(table, table_details, filter, for_html_file = TRUE)
135+
table_details[["for_html_file"]] <- TRUE
136+
render_register_md(table, table_details, filter)
168137
}
169138

170139
else{

R/utils_render_register_mds.R

Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -23,79 +23,19 @@ add_markdown_title <- function(table_details, md_table, filter){
2323
return(md_table)
2424
}
2525

26-
#' Function for adding repository links in the register table for the creation of the markdown file.
27-
#'
28-
#' @param register_table The register table
29-
#' @return Register table with adjusted repository links
30-
add_repository_links_md <- function(register_table) {
31-
register_table$Repository <- sapply(
32-
X = register_table$Repository,
33-
FUN = function(repository) {
34-
spec <- parse_repository_spec(repository)
35-
if (!any(is.na(spec))) {
36-
urrl <- "#"
37-
# ! Needs refactoring
38-
switch(spec["type"],
39-
"github" = {
40-
urrl <- paste0(CONFIG$HYPERLINKS[["github"]], spec[["repo"]])
41-
paste0("[", spec[["repo"]], "](", urrl, ")")
42-
},
43-
"osf" = {
44-
urrl <- paste0(CONFIG$HYPERLINKS[["osf"]], spec[["repo"]])
45-
paste0("[", spec[["repo"]], "](", urrl, ")")
46-
},
47-
"gitlab" = {
48-
urrl <- paste0(CONFIG$HYPERLINKS[["gitlab"]], spec[["repo"]])
49-
paste0("[", spec[["repo"]], "](", urrl, ")")
50-
},
51-
52-
# Type is none of the above
53-
{
54-
repository
55-
}
56-
)
57-
} else {
58-
repository
59-
}
60-
}
61-
)
62-
return(register_table)
63-
}
64-
6526
#' Renders register md for a single register_table
6627
#'
6728
#' @param register_table The register table
6829
#' @param table_details List containing details such as the table name, subcat name.
6930
#' @param filter The filter
70-
#' @param for_html_file Flag for whether we are rendering register md for html file.
71-
#' Set to FALSE by default. If TRUE, no repo links are added to the repository table.
72-
render_register_md <- function(register_table, table_details, filter, for_html_file=FALSE) {
73-
74-
# If rendering md for html file, we add repo links of the appropriate format
75-
register_table <- if (for_html_file) {
76-
add_repository_links_html(register_table)
77-
} else {
78-
add_repository_links_md(register_table)
79-
}
31+
render_register_md <- function(register_table, table_details, filter) {
8032

8133
# Fill in the content
8234
md_table <- create_md_table(register_table, table_details, filter)
8335
output_dir <- table_details[["output_dir"]]
84-
save_md_table(output_dir, md_table, for_html_file)
85-
}
8636

87-
#' Save markdown table to a file
88-
#'
89-
#' The file is saved as either a temporary file (`temp.md`) or as `register.md` depending on
90-
#' whether it is being rendered for an HTML file.
91-
#'
92-
#' @param output_dir The output_dir
93-
#' @param md_table The markdown table to be saved.
94-
#' @param for_html_file A logical flag indicating whether the markdown is being rendered for an HTML file.
95-
#' If TRUE, the file is saved as `temp.md`. Default is FALSE.
96-
save_md_table <- function(output_dir, md_table, for_html_file){
97-
# If rendering md for html file we create a temp file
98-
if (for_html_file){
37+
# Saving the md file
38+
if ("for_html_file" %in% names(table_details)){
9939
output_dir <- paste0(output_dir, "temp.md")
10040
}
10141

R/utils_render_table_non_registers.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ generate_table_details_non_reg <- function(table, filter, subcat = NULL){
8080
#' Generates postfix hrefs for the venues/ codecheckers list pages
8181
#'
8282
#' @param filter The filter being used such as "venues" or "codecheckers"
83-
#' @param table_details
83+
#' @param table_details A list of metadata about the table (e.g., title, subtext, extra text).
8484
#' @return A list of the hrefs.
8585
generate_html_postfix_hrefs_non_reg <- function(filter, table_details){
8686
# Case we do not have subcat

inst/extdata/config.R

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ CONFIG <- new.env()
77
# For filters other than venues we use the general column widths
88
CONFIG$MD_TABLE_COLUMN_WIDTHS <- list(
99
reg = list(
10-
general = "|:-------|:--------------------------------|:------------------|:------------------|:---|:--------------------------|:----------|",
10+
general = "|:-------|:---------------------------------------------|:------------------|:------------------|:---|:--------------------------|:------------------|",
1111
venues = "|:-------|:--------------------------------|:---|:--------------------------|:----------|"
1212
),
1313

@@ -18,7 +18,14 @@ CONFIG$MD_TABLE_COLUMN_WIDTHS <- list(
1818
)
1919
)
2020

21-
CONFIG$REGISTER_COLUMNS <- list("Certificate", "Repository", "Type", "Venue", "Issue", "Report", "Check date")
21+
# These are the columns to keep in the register table
22+
CONFIG$REGISTER_COLUMNS <- list(
23+
html = c("Certificate", "Paper Title", "Type", "Venue", "Issue", "Report", "Check date"),
24+
md = c("Certificate", "Paper Title", "Type", "Venue", "Issue", "Report", "Check date"),
25+
csv = c("Certificate", "Repository", "Type", "Venue", "Issue", "Report", "Check date"),
26+
json = c("Certificate", "Repository", "Type", "Venue", "Issue", "Report", "Check date")
27+
)
28+
2229
CONFIG$DIR_TEMP_REGISTER_CODECHECKER <- "docs/temp_register_codechecker.csv"
2330
CONFIG$FILTER_COLUMN_NAMES <- list(
2431
"venues" = "Venue",

0 commit comments

Comments
 (0)