From 382074580c2af7beb4b7c46cdb677fac07e4f802 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 17 Dec 2020 11:56:52 +0100 Subject: [PATCH 01/16] go to dev --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index f34db353..91dd8fd0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: metacheck Title: Crossref Metadata Compliance -Version: 0.1.0 +Version: 0.1.0.9000 Authors@R: c( person( From a72f1ee8115551e09b66145dbec66d6786b7c27b Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 17 Dec 2020 21:23:48 +0100 Subject: [PATCH 02/16] send fewer test emails closes #68 --- tests/testthat/test-email.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-email.R b/tests/testthat/test-email.R index 7f3e1faa..b8d9e5a6 100644 --- a/tests/testthat/test-email.R +++ b/tests/testthat/test-email.R @@ -4,7 +4,14 @@ test_that("email can be rendered", { }) test_that("email can be send", { - skip_if(Sys.getenv("MAILJET_SMTP_PASSWORD") == "") + skip_if( + Sys.getenv("MAILJET_SMTP_PASSWORD") == "", + message = "Mailjet credentials not available." + ) + testthat::skip_if_not( + Sys.getenv("GITHUB_REF" == "refs/heads/main"), + message = "Testing email only on main." + ) send_email( to = "held@sub.uni-goettingen.de", email = blastula::prepare_test_message(), From c3a39b97f4970f0da3c5359f5832b49787a43b88 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Fri, 18 Dec 2020 09:41:46 +0100 Subject: [PATCH 03/16] start refactor --- R/cr_md_fetch.R | 21 --------------------- R/import.R | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 R/import.R diff --git a/R/cr_md_fetch.R b/R/cr_md_fetch.R index ddad1682..6167ca5e 100644 --- a/R/cr_md_fetch.R +++ b/R/cr_md_fetch.R @@ -1,24 +1,3 @@ -#' Get Crossref metadata from API -#' -#' @param dois character vector with DOIs -#' @param .progress show progress bar, use "none" if no progress should be -#' displayed -#' -#' @importFrom rcrossref cr_works -#' -#' @export -get_cr_md <- function(dois, .progress = "text") { - checkmate::assert_character(dois, any.missing = FALSE, unique = TRUE) - tt <- rcrossref::cr_works(dois = dois, .progress = .progress)[["data"]] - if (!is.null(tt)) { - out <- tt %>% - mutate(issued = lubridate::parse_date_time(issued, c("y", "ymd", "ym"))) %>% - mutate(issued_year = lubridate::year(issued)) - } else { - out <- NULL - } - out -} #' License checker #' #' Retrieves records from Crossref metadata where diff --git a/R/import.R b/R/import.R new file mode 100644 index 00000000..8a99b129 --- /dev/null +++ b/R/import.R @@ -0,0 +1,23 @@ +#' Get Crossref metadata from API +#' +#' @param dois character vector with DOIs +#' @param .progress show progress bar, use "none" if no progress should be +#' displayed +#' +#' @family ETL import +#' @export +get_cr_md <- function(dois, .progress = "text") { + # TODO this can be replaced by class validation + # TODO not sure where the best place for the unique assertion is + checkmate::assert_character(dois, any.missing = FALSE, unique = TRUE) + + tt <- rcrossref::cr_works(dois = dois, .progress = .progress)[["data"]] + if (!is.null(tt)) { + out <- tt %>% + mutate(issued = lubridate::parse_date_time(issued, c("y", "ymd", "ym"))) %>% + mutate(issued_year = lubridate::year(issued)) + } else { + out <- NULL + } + out +} From 7e4152b835201010114fc0102c6705153da9bb35 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 19:13:49 +0100 Subject: [PATCH 04/16] update test with cr data opens #77 --- tests/testthat/_snaps/cr_md_fetch.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/testthat/_snaps/cr_md_fetch.md b/tests/testthat/_snaps/cr_md_fetch.md index e99ccb3e..f760d65e 100644 --- a/tests/testthat/_snaps/cr_md_fetch.md +++ b/tests/testthat/_snaps/cr_md_fetch.md @@ -28,7 +28,7 @@ { "type": "character", "attributes": {}, - "value": ["2020-12-10", "2020-11-17", "2020-01-22", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-04-30"] + "value": ["2020-12-10", "2021-01-30", "2020-01-22", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-04-30"] }, { "type": "character", @@ -38,7 +38,7 @@ { "type": "character", "attributes": {}, - "value": ["2020-12-10", "2020-11-17", "2020-09-25", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-06-04"] + "value": ["2020-12-10", "2021-01-30", "2020-09-25", "2020-11-17", "2021-01-19", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-06-04"] }, { "type": "double", @@ -94,7 +94,7 @@ { "type": "character", "attributes": {}, - "value": ["1", "1", "1", "0", "3", "0", "0", "5", "2", "0"] + "value": ["1", "4", "1", "0", "4", "0", "0", "5", "2", "0"] }, { "type": "character", From a5daf889022a71575f25b5fd50ec1b236b9b41a5 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 20:16:08 +0100 Subject: [PATCH 05/16] upgrade muggle to fix build --- .github/workflows/main.yaml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 3ecfd368..9effb719 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -8,7 +8,7 @@ jobs: shell: Rscript {0} container: # update muggle here and in Dockerfile - image: subugoe/muggle-buildtime-onbuild:f7fb6146d8712c4bffb024f4d4f40c40ffab5598 + image: subugoe/muggle-buildtime-onbuild:0.1.1-20210126 env: MUGGLE_PKG_NAME: ${{ github.event.repository.name }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Dockerfile b/Dockerfile index 6882fb35..034301e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG MUGGLE_TAG=f7fb6146d8712c4bffb024f4d4f40c40ffab5598 +ARG MUGGLE_TAG=0.1.1-20210126 FROM subugoe/muggle-buildtime-onbuild:${MUGGLE_TAG} as buildtime FROM subugoe/muggle-runtime-onbuild:${MUGGLE_TAG} as runtime CMD shinycaas::shiny_opts_az(); metacheck::runMetacheck() From 04ea08a16f4a506dda5ee5b2d70a9f71991d9548 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 20:30:27 +0100 Subject: [PATCH 06/16] roxygen upgrade --- DESCRIPTION | 2 +- NAMESPACE | 1 - man/get_cr_md.Rd | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 91dd8fd0..9ee288c6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -41,7 +41,7 @@ License: MIT + file LICENSE Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.1.1 +RoxygenNote: 7.1.1.9999 Imports: rcrossref, dplyr, diff --git a/NAMESPACE b/NAMESPACE index 5a703fee..347542f9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -53,7 +53,6 @@ importFrom(purrr,"%||%") importFrom(purrr,keep) importFrom(purrr,map) importFrom(purrr,map_df) -importFrom(rcrossref,cr_works) importFrom(readr,read_csv) importFrom(stringi,stri_extract) importFrom(stringi,stri_match_all_regex) diff --git a/man/get_cr_md.Rd b/man/get_cr_md.Rd index 7b360753..39903211 100644 --- a/man/get_cr_md.Rd +++ b/man/get_cr_md.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/cr_md_fetch.R +% Please edit documentation in R/import.R \name{get_cr_md} \alias{get_cr_md} \title{Get Crossref metadata from API} @@ -15,3 +15,4 @@ displayed} \description{ Get Crossref metadata from API } +\concept{ETL import} From 79360fe4a47f0daceb5f8f6358ce82ca99a59a93 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 20:31:37 +0100 Subject: [PATCH 07/16] upgrade biblids --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9ee288c6..e59c0aff 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -79,5 +79,5 @@ Remotes: subugoe/shinycaas@1.0.0, subugoe/rcrossref@51d036808c1dc1f46cf1bad1b136e97ad213e162, rstudio/shinyvalidate@420aec079dbd2c0e12bf8350f4452d105a9cc45c, - subugoe/biblids@d44010e7d0b7d2eef016ef33a05d29e67417dfe6 + subugoe/biblids@88735e4146dfefb576ef9558211822f4bb099bec Config/testthat/edition: 3 From 15f3e21c6d466c81f61d4a97da17b3f264a07180 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 20:54:07 +0100 Subject: [PATCH 08/16] remove redundant apc data closes #78 --- data-raw/sample_dois.R | 7 ------- data/sample_dois.rda | Bin 2056 -> 0 bytes tests/testthat/test-cr_auth.R | 4 ++-- 3 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 data-raw/sample_dois.R delete mode 100644 data/sample_dois.rda diff --git a/data-raw/sample_dois.R b/data-raw/sample_dois.R deleted file mode 100644 index 9d6da0e3..00000000 --- a/data-raw/sample_dois.R +++ /dev/null @@ -1,7 +0,0 @@ -## code to prepare `sample_dois` dataset goes here -library(readr) -library(usethis) -o_apc <- readr::read_csv("https://raw.githubusercontent.com/OpenAPC/openapc-de/master/data/apc_de.csv") -sample_dois <- sample(o_apc$doi, 200) - -usethis::use_data(sample_dois, overwrite = TRUE) diff --git a/data/sample_dois.rda b/data/sample_dois.rda deleted file mode 100644 index 03c31b9ac13bf724de67dc61e4e304c0c203298a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2056 zcmV+j2>16wT4*^jL0KkKSsG)k8~_Tle}w!x|NqMa|KJ1w5J12G-|zrH00H0$A7Vnv z+33Op_5Gkpvcjtfr1GU z0W?)Sr|No5K+pq5Km$Rc?GynPr}_kDAjiXZS4_ ziG4^~@^AW~hJ1HhaVP#Pb0bl3*%%e9r8~l}3rjpNx)Hprd@ANlfUPp{AW|kumlN+K%iM6 zOI?gWflKsp2oNp9I)_Kp<@FOvV$lbXoiaQHK*&KQSWp*Cs?fAq*_?{^ZC@krgZGi- zl5!Hp@U-qE#+I9nIdLx+UXS;^iS%yY0o!rk(=me=s?Me!AIc)-u7AcfH{AMK|0|4F z?zQz0H~rN(Y>Qtv6$!3rz4kiu-j#Zl%vBXkwvyETX7{Y;33JPULH#fbx-dvJjZN9h zmm#ZY!3+WynY;NIzX$W}y6iWGx8j@@PG!TA*~fgpPGN@kU~Od);&G&Pvp)(7F9V{r zxNf%sf-T{%Bp{1Ld?tUo+ zE@hm;OB1+Q)yr`ua}83rWI)h?g{ z0C<9dHmQE=X>o0`?MYXzZ+3)%V1~v;#o}ndU99w7tcIw{GffcmlPH(67G}m$Z7KyC z$*N%$nU$t6kw8=squLvAe~uZ+z{)^oO{BVDN^to^CC3qqMN()qB&8G7!hjTNX-OJQ z3N0#8YFAQ~3J@A<8)Ly}+K`)g%Q zdhjdc?Mv%mBir&o2hSe-`<3&_@U&f}L4v#sDt+g*1q1;0otzj7ln5?iFiM8yacvB$ zr8Xd2PpAS#UaCrvfM_Beo$k$|K)X8>K@jwW1k)*iEp4ToNLrgjBZpQho~|U&$cvMd zJWR+Cz;=X^sr|-t(otKHsDvX-EEIA_ay2vxAt;H5XP5v;ECi6AWKqCk6f>0)rWLeR zOo;LI-d3Y}8`aX5a!&~8GEpQGEHjAfxVRV%FbpvTWPo0ViM31+uR*7;5)_9pP#fe- zEY93<(p82On#QB_4K$~Vm^I@}rHza9KTd#7E1XpVh?YQ^yo88>_S#6)=$aqlRND&ve?*g%M>yt5Di9qHLRfD)zDO1oOl=UJAEcGzry#4!Mt3?rOv%9>H`en7y} zwp0KbAzW6N9@NKCRoz^7yqQ{4-!lP~!jfnVXBI~(=C_L2R}95B6svBdAZ&o=irOlU zM${${Ha{DT5#UZ>9Y-S}myOH|^<4&qw|dq+7)Mu;xp$Qygq`McwPM6GJS<9#X@`dh zz_ch*goKSEETWYNh*SU>Va1a-7SVXqC1&pt`I6gVjjGussly~J8rZahk(X@n^Nmop z@WyB;a`g7$K@^~EgOnhI8uY4)tv=}#oKY6|Su_Fz9KJH_n3omEZY}aamxE6Q>H`8S zGb@!v{!0cchgR}pL*|aclypslgcBf(Ad~^oF#yn@LI?=~yI9E!ApMKBj&{j+=G4cNbW0z0Sq&$Ys z;BpWS79rG2ZF>&b{XJ4KiPn%fdO{=_CyrbmE!&{5}y zO{HzZ?5EmluUXlXn_-- z9wPmF0#eC*+stXpvxMyHx`dIy_}I!2gmGmz%qkA6bJ@1vezg_G@>Z;}ha+on+))i$ z3E>m4rK%geO}dH|r>F?u2Z@;wUk<%%Y|CU-J(UrG3Bx%8n8l!U5a1hA>(^ z4mivJE6;Fo5HvV{U!x|^imKVc_8O~~5)=v=^Xyqcia^f1m2|In`YP0j1Pluai^;(o mmCET<&mtY3);;JyXAB5zCs-HI7l-M;{x0N-aG@YH$5=RA_POZ* diff --git a/tests/testthat/test-cr_auth.R b/tests/testthat/test-cr_auth.R index 3c78c7d7..9ea2c8d6 100644 --- a/tests/testthat/test-cr_auth.R +++ b/tests/testthat/test-cr_auth.R @@ -8,11 +8,11 @@ test_that("crossref metadata is enabled", { test_that("crossref metadata plus is faster", { skip("Test does not work; times are often the same.") with_mdplus <- bench::bench_time( - rcrossref::cr_agency(sample_dois[1:10], .progress = "text") + rcrossref::cr_agency(tu_dois[1:10], .progress = "text") )["real"] withr::local_envvar(.new = c("crossref_plus" = "")) without_mdplus <- bench::bench_time( - rcrossref::cr_agency(sample_dois[1:10], .progress = "text") + rcrossref::cr_agency(tu_dois[1:10], .progress = "text") )["real"] expect_lte(with_mdplus, without_mdplus) }) From 7e98934a04b06641d44c6789b63f815c6fc959e1 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 20:58:19 +0100 Subject: [PATCH 09/16] add henrieke --- DESCRIPTION | 7 +++++++ man/metacheck-package.Rd | 1 + 2 files changed, 8 insertions(+) diff --git a/DESCRIPTION b/DESCRIPTION index e59c0aff..7ab870a0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,6 +17,13 @@ Authors@R: email = "info@maxheld.de", comment = c(ORCID = "0000-0002-4703-5388") ), + person( + given = "Henrieke", + family = "Walter", + role = c("aut"), + email = "henrieke.walter@sub.uni-goettingen.de", + comment = c(ORCID = "0000-0003-3313-7364") + ), person( given = "Göttingen State and University Library", role = c("cph", "fnd") diff --git a/man/metacheck-package.Rd b/man/metacheck-package.Rd index 0cf9c336..a3e566f4 100644 --- a/man/metacheck-package.Rd +++ b/man/metacheck-package.Rd @@ -24,6 +24,7 @@ Useful links: Authors: \itemize{ \item Maximilian Held \email{info@maxheld.de} (\href{https://orcid.org/0000-0002-4703-5388}{ORCID}) + \item Henrieke Walter \email{henrieke.walter@sub.uni-goettingen.de} (\href{https://orcid.org/0000-0003-3313-7364}{ORCID}) } Other contributors: From 091219995243b85902137b938ab3c47223b64985 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 21:09:11 +0100 Subject: [PATCH 10/16] change license to agpl3 closes #80 --- .Rbuildignore | 1 + DESCRIPTION | 2 +- LICENSE | 2 - LICENSE.md | 680 ++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 661 insertions(+), 24 deletions(-) delete mode 100644 LICENSE diff --git a/.Rbuildignore b/.Rbuildignore index 05b44ca7..df4dbbf0 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -13,3 +13,4 @@ Dockerfile ^data-raw$ .azure/ LICENSE.md +^LICENSE\.md$ diff --git a/DESCRIPTION b/DESCRIPTION index 7ab870a0..f1670879 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -44,7 +44,7 @@ Authors@R: Description: Automatically check metadata compliance for hybrid open access (OA). Includes a webapp to send compliance reports by email. -License: MIT + file LICENSE +License: AGPL (>= 3) Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index dfe45578..00000000 --- a/LICENSE +++ /dev/null @@ -1,2 +0,0 @@ -YEAR: 2020 -COPYRIGHT HOLDER: Najko Jahn diff --git a/LICENSE.md b/LICENSE.md index 6904a457..fab6548e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,21 +1,659 @@ -# MIT License - -Copyright (c) 2020 Najko Jahn - -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. +GNU Affero General Public License +================================= + +_Version 3, 19 November 2007_ +_Copyright (C) 2007 Free Software Foundation, Inc. <>_ + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +## Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +## TERMS AND CONDITIONS + +### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +## How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . From df92c95a724c6dd66d94587ff1af80ed788b0380 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 21:14:41 +0100 Subject: [PATCH 11/16] remove bad test for cr md plus opens #82 --- DESCRIPTION | 3 +-- tests/testthat/test-cr_auth.R | 12 ------------ 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f1670879..68eab285 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -77,8 +77,7 @@ Suggests: testthat, subugoetheme, shinycaas, - rmarkdown, - bench + rmarkdown URL: https://subugoe.github.io/metacheck, https://github.com/subugoe/metacheck BugReports: https://github.com/subugoe/metacheck/issues Remotes: diff --git a/tests/testthat/test-cr_auth.R b/tests/testthat/test-cr_auth.R index 9ea2c8d6..59777483 100644 --- a/tests/testthat/test-cr_auth.R +++ b/tests/testthat/test-cr_auth.R @@ -5,18 +5,6 @@ test_that("crossref metadata is enabled", { expect_equal(1, 1) }) -test_that("crossref metadata plus is faster", { - skip("Test does not work; times are often the same.") - with_mdplus <- bench::bench_time( - rcrossref::cr_agency(tu_dois[1:10], .progress = "text") - )["real"] - withr::local_envvar(.new = c("crossref_plus" = "")) - without_mdplus <- bench::bench_time( - rcrossref::cr_agency(tu_dois[1:10], .progress = "text") - )["real"] - expect_lte(with_mdplus, without_mdplus) -}) - test_that("metacheck declares polite user agent", { expect_true(is_valid_email(Sys.getenv("crossref_email"))) }) From e234b0bb907eabd622b5dde55ddec7792de96654 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 21:20:17 +0100 Subject: [PATCH 12/16] import rmarkdown --- DESCRIPTION | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68eab285..1d31dddd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,12 +72,12 @@ Imports: checkmate, readr, gluedown, - tibble + tibble, + rmarkdown Suggests: testthat, subugoetheme, - shinycaas, - rmarkdown + shinycaas URL: https://subugoe.github.io/metacheck, https://github.com/subugoe/metacheck BugReports: https://github.com/subugoe/metacheck/issues Remotes: From 1956fbd6643328c3fb69aa27509df09f6225b6f4 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Thu, 4 Feb 2021 22:00:46 +0100 Subject: [PATCH 13/16] fix warnings #13 --- .Rbuildignore | 1 - .github/workflows/main.yaml | 3 +-- DESCRIPTION | 4 +++- R/cr_md_cc.R | 12 ++++++------ R/cr_md_overview.R | 3 +++ R/email.R | 1 + R/open_apc_fetch.R | 4 +--- inst/app/index.Rmd | 1 + man/add_attachment_xlsx.Rd | 2 ++ man/cr_has_orcid.Rd | 3 +++ man/get_compliant_cc.Rd | 2 +- man/gh_file.Rd | 29 +++++++++++++++++++++++++---- man/vor_issue.Rd | 2 +- 13 files changed, 48 insertions(+), 19 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index df4dbbf0..5c5ff985 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -12,5 +12,4 @@ Dockerfile ^archive$ ^data-raw$ .azure/ -LICENSE.md ^LICENSE\.md$ diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 9effb719..e6bd94fb 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -32,8 +32,7 @@ jobs: R_LIBS_SITE: $R_LIBS_RUNTIME_GH run: remotes::install_deps(dependencies = TRUE) - name: Check - # TODO error out on all but note again https://github.com/subugoe/hoad/issues/194 - run: devtools::check(error_on = "error") + run: devtools::check(error_on = "warning") - name: Build Package Website run: | pkgdown::build_site(override = list(new_process = FALSE)) diff --git a/DESCRIPTION b/DESCRIPTION index 1d31dddd..0f5b7889 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -73,7 +73,9 @@ Imports: readr, gluedown, tibble, - rmarkdown + rmarkdown, + glue, + fs Suggests: testthat, subugoetheme, diff --git a/R/cr_md_cc.R b/R/cr_md_cc.R index 12c0d7e5..cbb1a779 100644 --- a/R/cr_md_cc.R +++ b/R/cr_md_cc.R @@ -60,15 +60,13 @@ license_check <- function(cr) { } return(out) } + #' Extract license info from Crossref metadata -#' -#' @param cr crossref metadata using [get_cr_md()] -#' +#' @inheritParams license_check #' @importFrom dplyr `%>%` mutate filter #' @importFrom tidyr unnest #' @importFrom stringi stri_extract #' @export -#' get_license_md <- function(cr) { cr %>% select(doi, license) %>% @@ -77,13 +75,14 @@ get_license_md <- function(cr) { gsub("/", "", .) ) } + #' Extract records with compliant CC license metadata #' #' @details In order to be compliant, #' CC license has to apply to version of record and must be valid #' without delay. #' -#' @param license_df normalized license metadata from [license_df()] +#' @param license_df normalized license metadata from [license_check()] #' #' @importFrom dplyr `%>%` mutate filter #' @export @@ -97,13 +96,14 @@ get_compliant_cc <- function(license_df) { delay.in.days == 0) %>% mutate(check_result = "All fine!") } + #' Extract records with CC license not applied to version of records #' #' @details In order to be compliant, #' CC license has to apply to version of record and must be valid #' without delay. #' -#' @param license_df normalized license metadata from [license_df()] +#' @inheritParams get_compliant_cc #' @param compliant_dois DOIs representing records with valid CC info #' #' @importFrom dplyr `%>%` mutate filter diff --git a/R/cr_md_overview.R b/R/cr_md_overview.R index c599aabf..a15cd9e7 100644 --- a/R/cr_md_overview.R +++ b/R/cr_md_overview.R @@ -35,8 +35,11 @@ cr_compliance_overview <- function(cr) { } list(cr_overview = cr_overview, cc_license_check = cc_df, tdm = tdm_df, funder_info = funder_df, open_apc_info = open_apc_df ) } + + #' Check for ORCIDs #' +#' @inheritParams cr_compliance_overview #' @importFrom purrr map cr_has_orcid <- function(cr) { cr %>% diff --git a/R/email.R b/R/email.R index 37365632..a420c874 100644 --- a/R/email.R +++ b/R/email.R @@ -34,6 +34,7 @@ render_email <- function(dois, session_id = NULL) { #' Add attachment to email #' @inheritParams blastula::add_attachment +#' @inheritParams render_email #' @export add_attachment_xlsx <- function(email, session_id = NULL) { blastula::add_attachment( diff --git a/R/open_apc_fetch.R b/R/open_apc_fetch.R index 3f6c8751..90a4758d 100644 --- a/R/open_apc_fetch.R +++ b/R/open_apc_fetch.R @@ -59,13 +59,11 @@ open_apc_collections <- function() { #' #' @param url the URL of the file to download via API, of the form #' `github.com/:owner/:repo/blob/:path -#' @param ref the reference of a commit: a branch name, tag, or commit SHA #' @param owner,repo,path,ref alternate way to specify the file. These will #' override values in `url` #' @param to_disk,destfile write file to disk (default=TRUE)? If so, use the #' name in `destfile`, or the original filename by default -#' @param .token,.api_url,.method,.limit,.send_headers arguments passed on to -#' [gh::gh] +#' @inheritParams gh::gh #' @importFrom gh gh #' @importFrom stringi stri_match_all_regex #' @importFrom purrr %||% keep diff --git a/inst/app/index.Rmd b/inst/app/index.Rmd index 2dbc43f7..5bf766f5 100644 --- a/inst/app/index.Rmd +++ b/inst/app/index.Rmd @@ -36,6 +36,7 @@ actionButton( ```{r} # used to disambiguate excel file names +# TODO replace with shiny session id #83 session_id <- as.character(floor(runif(1) * 1e20)) # get dois diff --git a/man/add_attachment_xlsx.Rd b/man/add_attachment_xlsx.Rd index 8a7b8747..bb86a875 100644 --- a/man/add_attachment_xlsx.Rd +++ b/man/add_attachment_xlsx.Rd @@ -9,6 +9,8 @@ add_attachment_xlsx(email, session_id = NULL) \arguments{ \item{email}{The email message object, as created by the \code{\link[blastula:compose_email]{compose_email()}} function. The object's class is \code{email_message}.} + +\item{session_id}{Character vector to identify current shiny session} } \description{ Add attachment to email diff --git a/man/cr_has_orcid.Rd b/man/cr_has_orcid.Rd index d5cfddbc..773a1e6b 100644 --- a/man/cr_has_orcid.Rd +++ b/man/cr_has_orcid.Rd @@ -6,6 +6,9 @@ \usage{ cr_has_orcid(cr) } +\arguments{ +\item{cr}{crossref metadata using \code{\link[=get_cr_md]{get_cr_md()}}} +} \description{ Check for ORCIDs } diff --git a/man/get_compliant_cc.Rd b/man/get_compliant_cc.Rd index c1531031..9b1f4676 100644 --- a/man/get_compliant_cc.Rd +++ b/man/get_compliant_cc.Rd @@ -7,7 +7,7 @@ get_compliant_cc(license_df) } \arguments{ -\item{license_df}{normalized license metadata from \code{\link[=license_df]{license_df()}}} +\item{license_df}{normalized license metadata from \code{\link[=license_check]{license_check()}}} } \description{ Extract records with compliant CC license metadata diff --git a/man/gh_file.Rd b/man/gh_file.Rd index a7fdeef4..8858bcc0 100644 --- a/man/gh_file.Rd +++ b/man/gh_file.Rd @@ -23,16 +23,37 @@ gh_file( \item{url}{the URL of the file to download via API, of the form `github.com/:owner/:repo/blob/:path} -\item{ref}{the reference of a commit: a branch name, tag, or commit SHA} - \item{owner, repo, path, ref}{alternate way to specify the file. These will override values in \code{url}} \item{to_disk, destfile}{write file to disk (default=TRUE)? If so, use the name in \code{destfile}, or the original filename by default} -\item{.token, .api_url, .method, .limit, .send_headers}{arguments passed on to -\link[gh:gh]{gh::gh}} +\item{.token}{Authentication token. Defaults to \code{GITHUB_PAT} or +\code{GITHUB_TOKEN} environment variables, in this order if any is set. +See \code{\link[gh:gh_token]{gh_token()}} if you need more flexibility, e.g. different tokens +for different GitHub Enterprise deployments.} + +\item{.api_url}{Github API url (default: \url{https://api.github.com}). Used +if \code{endpoint} just contains a path. Defaults to \code{GITHUB_API_URL} +environment variable if set.} + +\item{.method}{HTTP method to use if not explicitly supplied in the +\code{endpoint}.} + +\item{.limit}{Number of records to return. This can be used +instead of manual pagination. By default it is \code{NULL}, +which means that the defaults of the GitHub API are used. +You can set it to a number to request more (or less) +records, and also to \code{Inf} to request all records. +Note, that if you request many records, then multiple GitHub +API calls are used to get them, and this can take a potentially +long time.} + +\item{.send_headers}{Named character vector of header field values +(except \code{Authorization}, which is handled via \code{.token}). This can be +used to override or augment the default \code{User-Agent} header: +\code{"https://github.com/r-lib/gh"}.} } \value{ Either the local path of the downloaded file (default), or a raw diff --git a/man/vor_issue.Rd b/man/vor_issue.Rd index e8ef5ea1..19d305cc 100644 --- a/man/vor_issue.Rd +++ b/man/vor_issue.Rd @@ -7,7 +7,7 @@ vor_issue(license_df, compliant_dois) } \arguments{ -\item{license_df}{normalized license metadata from \code{\link[=license_df]{license_df()}}} +\item{license_df}{normalized license metadata from \code{\link[=license_check]{license_check()}}} \item{compliant_dois}{DOIs representing records with valid CC info} } From dcd32455889ac10900058145e927aa0f2545680b Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Fri, 5 Feb 2021 08:48:34 +0100 Subject: [PATCH 14/16] remove duplicate template --- .../templates/email/skeleton/skeleton.Rmd | 132 ------ .../templates/email/skeleton/skeleton.html | 442 ------------------ 2 files changed, 574 deletions(-) delete mode 100644 inst/rmarkdown/templates/email/skeleton/skeleton.Rmd delete mode 100644 inst/rmarkdown/templates/email/skeleton/skeleton.html diff --git a/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd deleted file mode 100644 index 84d6715b..00000000 --- a/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd +++ /dev/null @@ -1,132 +0,0 @@ ---- -output: blastula::blastula_email -params: - dois: !r c("10.1007/s10111-020-00626-z", "10.1007/s10444-020-09763-5", "mm") ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -library(dplyr) -library(purrr) -library(tidyr) -library(hybridmdchecker) -``` - -Hi Michaela, - -Thank you for using the HOAD compliance checker. Here's our report. - -```{r, echo=FALSE, message=FALSE, warning=FALSE} -cr <- metacheck::get_cr_md(dois = params$dois) -``` - -### Indexing status in Crossref - -```{r, echo=FALSE} -cr_missing <- !setequal(tolower(params$dois), tolower(cr$doi)) -``` - -```{r not_indexed_in_crossref, eval=cr_missing, echo=FALSE, results = 'asis'} - glue::glue(" - We found that Crossref indexes **{length(unique(cr$doi))}** out of **{ length(unique(params$dois))}** articles. **The following DOIS were not registered with Crossref:** - - ") - gluedown::md_bullet(params$dois[!tolower(params$dois) %in% tolower(cr$doi)]) -``` - - -```{r, echo=FALSE} -cr_missing <- setequal(tolower(params$dois), tolower(cr$doi)) -``` - -```{r indexed_in_crossref, eval=cr_missing, echo=FALSE, results = 'asis'} -glue::glue("All {length(unique(params$dois))} DOIs have metadata in Crossref") -``` - -### Compliance overview - -```{r, echo=FALSE} -tt <- gather_ind_table(cr) -``` - - -```{r, echo=FALSE} -has_license <- nrow(tt[tt$ind_group == "CC licenses",]) > 0 -``` - -```{r, echo=FALSE, results='asis', eval = 'has_license'} -ind_table_to_gt(tt) -``` - - -```{r, eval=has_license, echo=FALSE} -# check compliance -compliant_with_license <- cr %>% - metacheck::license_normalise() %>% - inner_join(cr, by = "doi") %>% - select(doi, container.title, publisher, issn, issued_year, cc_normalised = license.x) -``` - -```{r, echo=FALSE} -has_non_compliant_dois <- nrow(cr$doi[!tolower(cr$doi) %in% tolower(compliant_with_license$doi)]) > 0 -``` - -```{r, echo=FALSE, eval=has_non_compliant_dois} -# get non-compliant records -non_compliant_dois <- - cr$doi[!tolower(cr$doi) %in% tolower(compliant_with_license$doi)] - # determine why -out <- if(!is.null(non_compliant_dois)) - purrr::map_df(non_compliant_dois, function(x) { - cr[cr$doi == x,] %>% - metacheck::license_report() - }) -# export -non_compliant <- cr %>% - select(doi, container.title, publisher, issn) %>% - filter(doi %in% non_compliant_dois) %>% - left_join(out, by = "doi") %>% - mutate(reason = ifelse(is.na(reason), "No license metadata available", reason)) -``` - -```{r, echo=FALSE} -has_funder <- "funder" %in% names(cr) -``` - -```{r, eval=has_funder, echo=FALSE} -# tdm data -funder_df <- cr %>% - select(doi, container.title, publisher, issn, issued_year, funder) %>% - unnest(funder) %>% - rename(fundref_doi = DOI) %>% - mutate(api_link = paste0("https://api.crossref.org/works/", doi)) -``` - -```{r export, eval=has_license, echo=FALSE} -if(!is.null(non_compliant)) { - license_df <- bind_rows(compliant_with_license, non_compliant) -} else { - license_df <- compliant_with_license -} -license_df <- license_df %>% - mutate(api_link = paste0("https://api.crossref.org/works/", doi)) %>% - arrange(publisher) - -if(!is.null(funder_df)) { - export_report <- list(cc_license =license_df, funder_overview = funder_df) - } else { - export_report <- list(cc_license =license_df) - } -writexl::write_xlsx(export_report, "license_df.xlsx") -``` - - -Please find attached an article-level compliance report. This Excel spreadsheet contains some Crossref metadata including Creative Commons license and detailed funder information, if applicable. - -```{r echo=FALSE, results = 'asis'} -glue::glue("**We found {nrow(non_compliant)} publications with non-compliant license metadata. We strongly recommend to report licensing issues to the publisher to ensure that open access articles are discoverable.**") -``` - -Cheers! - -Najko diff --git a/inst/rmarkdown/templates/email/skeleton/skeleton.html b/inst/rmarkdown/templates/email/skeleton/skeleton.html deleted file mode 100644 index 1ebe373f..00000000 --- a/inst/rmarkdown/templates/email/skeleton/skeleton.html +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - - - - - -skeleton.utf8 - - - - - - - -
-
-
- - - - -

Hi,

-

Thank you for using the HOAD compliance checker. Here’s the compliance report.

-
-

Indexing status in Crossref

-

Crossref indexes metadata for 2 out of 3 DOIs. We could not retrieve metadata from Crossref for the following DOIs:

-
    -
  • mm
  • -
-
-
-

Non-compliant CC licenses in Crossref metadata

-

We have found some issues while checking the compliance of Crossref metadata relative to open content licensing.

-

Please find details in the following table: -

- - - - - - - - - - - - - - - - - - - - - - -
Non-compliant CC licenses
DOIs are linked to Crossref API metadata
ArticleMetadata issue
10.1007/s10444-020-09763-5Date of publication and Creative Commons license does not match

-

Cheers!

-
- -
- - From 7220996a93524b7d906d0a643ec11bd684a87a30 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Fri, 5 Feb 2021 09:49:11 +0100 Subject: [PATCH 15/16] streamline roxygen and namespace --- DESCRIPTION | 1 - NAMESPACE | 42 +++-------------- R/{metacheck.R => communicate.R} | 3 -- R/cr_md_cc.R | 29 ++++-------- R/cr_md_fetch.R | 33 +++++--------- R/cr_md_funder.R | 5 +-- R/cr_md_ind.R | 77 +++++++++++++------------------- R/cr_md_overview.R | 9 ++-- R/cr_md_tdm.R | 5 +-- R/email.R | 6 ++- R/import.R | 5 +-- R/metacheck_package.R | 6 +++ R/open_apc_fetch.R | 56 +++++++++-------------- R/test_helper.R | 3 -- R/utils-pipe.R | 11 ----- man/add_attachment_xlsx.Rd | 17 ------- man/cr_compliance_overview.Rd | 19 ++++++++ man/cr_funder_df.Rd | 19 ++++++++ man/cr_has_orcid.Rd | 19 ++++++++ man/cr_license_ind.Rd | 19 ++++++++ man/cr_md_ind.Rd | 19 ++++++++ man/cr_tdm_df.Rd | 19 ++++++++ man/cr_tdm_ind.Rd | 19 ++++++++ man/gather_ind_table.Rd | 6 +++ man/get_compliant_cc.Rd | 24 +++++++--- man/get_cr_md.Rd | 3 +- man/get_license_md.Rd | 19 ++++++++ man/gh_file.Rd | 11 +++-- man/ind_table_to_gt.Rd | 6 +++ man/license_check.Rd | 25 ++++++++--- man/license_normalise.Rd | 22 ++++++++- man/license_report.Rd | 22 ++++++++- man/license_val.Rd | 26 ++++++++--- man/metacheck-package.Rd | 2 +- man/open_apc_collections.Rd | 1 + man/open_apc_get.Rd | 27 ++++++++--- man/open_apc_get_.Rd | 19 ++++++++ man/pipe.Rd | 12 ----- man/react_ind_table.Rd | 8 +++- man/render_email.Rd | 5 +++ man/runMetacheck.Rd | 2 +- man/send_email.Rd | 5 +++ man/vor_issue.Rd | 24 +++++++--- man/xlsx_path.Rd | 14 ------ 44 files changed, 444 insertions(+), 280 deletions(-) rename R/{metacheck.R => communicate.R} (87%) create mode 100644 R/metacheck_package.R delete mode 100644 R/test_helper.R delete mode 100644 R/utils-pipe.R delete mode 100644 man/add_attachment_xlsx.Rd delete mode 100644 man/pipe.Rd delete mode 100644 man/xlsx_path.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 0f5b7889..6e33e30f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -58,7 +58,6 @@ Imports: blastula, stringi, lubridate, - tidyselect, shiny, htmltools, reactable, diff --git a/NAMESPACE b/NAMESPACE index 347542f9..e3461cfa 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,9 +1,8 @@ # Generated by roxygen2: do not edit by hand -export("%>%") -export(add_attachment_xlsx) export(cr_compliance_overview) export(cr_funder_df) +export(cr_has_orcid) export(cr_license_ind) export(cr_md_ind) export(cr_tdm_df) @@ -12,6 +11,7 @@ export(gather_ind_table) export(get_compliant_cc) export(get_cr_md) export(get_license_md) +export(gh_file) export(ind_table_to_gt) export(license_check) export(license_normalise) @@ -25,39 +25,7 @@ export(render_email) export(runMetacheck) export(send_email) export(vor_issue) -import(gt) -import(reactable) -importFrom(base64enc,base64decode) -importFrom(dplyr,`%>%`) -importFrom(dplyr,across) -importFrom(dplyr,anti_join) -importFrom(dplyr,arrange) -importFrom(dplyr,bind_cols) -importFrom(dplyr,bind_rows) -importFrom(dplyr,desc) -importFrom(dplyr,distinct) -importFrom(dplyr,filter) -importFrom(dplyr,group_by) -importFrom(dplyr,inner_join) -importFrom(dplyr,left_join) -importFrom(dplyr,mutate) -importFrom(dplyr,n_distinct) -importFrom(dplyr,one_of) -importFrom(dplyr,rename) -importFrom(dplyr,select) -importFrom(dplyr,summarise) -importFrom(gh,gh) -importFrom(htmltools,div) +import(dplyr) +import(purrr) +import(tidyr) importFrom(magrittr,"%>%") -importFrom(purrr,"%||%") -importFrom(purrr,keep) -importFrom(purrr,map) -importFrom(purrr,map_df) -importFrom(readr,read_csv) -importFrom(stringi,stri_extract) -importFrom(stringi,stri_match_all_regex) -importFrom(tibble,tribble) -importFrom(tidyr,pivot_longer) -importFrom(tidyr,unnest) -importFrom(tidyselect,any_of) -importFrom(tidyselect,matches) diff --git a/R/metacheck.R b/R/communicate.R similarity index 87% rename from R/metacheck.R rename to R/communicate.R index 90aed776..74ddb15b 100644 --- a/R/metacheck.R +++ b/R/communicate.R @@ -1,6 +1,3 @@ -#' @keywords internal -"_PACKAGE" - #' Start web application #' @inheritDotParams rmarkdown::run #' @inherit rmarkdown::run diff --git a/R/cr_md_cc.R b/R/cr_md_cc.R index cbb1a779..81a8814f 100644 --- a/R/cr_md_cc.R +++ b/R/cr_md_cc.R @@ -1,13 +1,10 @@ #' Extract and validate Crossref license metadata #' -#' @details Workflow to check for compliant open content license metadata in Crossref. -#' License metadata is considered as compliant, if a Creative Commons license is -#' provided for the version-of-record without delay indicated by the license date. +#' Workflow to check for compliant open content license metadata in Crossref. +#' License metadata is considered as compliant, if a Creative Commons license is provided for the version-of-record without delay indicated by the license date. #' #' @param cr crossref metadata using [get_cr_md()] -#' -#' @importFrom dplyr `%>%` bind_rows bind_cols filter mutate anti_join distinct left_join -#' +#' @family transform #' @export license_check <- function(cr) { if (!"license" %in% colnames(cr)) { @@ -63,9 +60,7 @@ license_check <- function(cr) { #' Extract license info from Crossref metadata #' @inheritParams license_check -#' @importFrom dplyr `%>%` mutate filter -#' @importFrom tidyr unnest -#' @importFrom stringi stri_extract +#' @family transform #' @export get_license_md <- function(cr) { cr %>% @@ -78,13 +73,9 @@ get_license_md <- function(cr) { #' Extract records with compliant CC license metadata #' -#' @details In order to be compliant, -#' CC license has to apply to version of record and must be valid -#' without delay. -#' +#' In order to be compliant, CC license has to apply to version of record and must be valid without delay. #' @param license_df normalized license metadata from [license_check()] -#' -#' @importFrom dplyr `%>%` mutate filter +#' @family transform #' @export get_compliant_cc <- function(license_df) { license_df %>% @@ -99,14 +90,10 @@ get_compliant_cc <- function(license_df) { #' Extract records with CC license not applied to version of records #' -#' @details In order to be compliant, -#' CC license has to apply to version of record and must be valid -#' without delay. -#' +#' In order to be compliant, CC license has to apply to version of record and must be valid without delay. #' @inheritParams get_compliant_cc #' @param compliant_dois DOIs representing records with valid CC info -#' -#' @importFrom dplyr `%>%` mutate filter +#' @family transform #' @export vor_issue <- function(license_df, compliant_dois) { license_df %>% diff --git a/R/cr_md_fetch.R b/R/cr_md_fetch.R index 6167ca5e..f2abc0a4 100644 --- a/R/cr_md_fetch.R +++ b/R/cr_md_fetch.R @@ -1,16 +1,11 @@ #' License checker #' -#' Retrieves records from Crossref metadata where -#' the version of record (vor), i.e. publisher version -#' is provided under a Creative Commons license without delay. -#' -#' @param cr tibble with Crossref metadata retrieved from -#' API with `rcrossref:.cr_works()` -#' @importFrom tidyr unnest -#' @importFrom dplyr `%>%` select mutate filter +#' Retrieves records from Crossref metadata where the version of record (vor), i.e. publisher version is provided under a Creative Commons license without delay. #' +#' @param cr +#' tibble with Crossref metadata retrieved from API with `rcrossref:.cr_works()` +#' @family transform #' @export -#' license_val <- function(cr) { if (!is.null(cr)) license_df <- cr %>% @@ -27,15 +22,13 @@ license_val <- function(cr) { #' Obtain records with non-compliant license information #' #' @description In case license metadata do not comply, what are the reasons: -#' - Did the publisher provide license metadata for the article? -#' - Is the article provided under a CC license? -#' - Did the CC license apply immediately after publication? -#' -#' @param cr tibble with non-compliant license metadata retrieved from the -#' Crossref API with `rcrossref:.cr_works()` -#' @importFrom tidyr unnest -#' @importFrom dplyr `%>%` select filter +#' - Did the publisher provide license metadata for the article? +#' - Is the article provided under a CC license? +#' - Did the CC license apply immediately after publication? #' +#' @param cr +#' tibble with non-compliant license metadata retrieved from the Crossref API with `rcrossref:.cr_works()` +#' @family transform #' @export license_report <- function(cr) { faulty_case <- cr %>% @@ -63,10 +56,8 @@ license_report <- function(cr) { } #' Normalise license info from Crossref #' -#' @param cr tibble with non-compliant license metadata retrieved from the -#' Crossref API with `rcrossref:.cr_works()` -#' @importFrom dplyr `%>%` select filter -#' +#' @inheritParams license_report +#' @family transform #' @export license_normalise <- function(cr) { license_val(cr) %>% diff --git a/R/cr_md_funder.R b/R/cr_md_funder.R index 678b1617..01baaf43 100644 --- a/R/cr_md_funder.R +++ b/R/cr_md_funder.R @@ -1,10 +1,7 @@ #' Get funder list from Crossref metadata #' #' @param cr crossref metadata using [get_cr_md()] -#' -#' @importFrom dplyr `%>%` filter select rename -#' @importFrom tidyr unnest -#' +#' @family transform #' @export cr_funder_df <- function(cr) { if (!"funder" %in% colnames(cr)) { diff --git a/R/cr_md_ind.R b/R/cr_md_ind.R index 860f4509..0e182515 100644 --- a/R/cr_md_ind.R +++ b/R/cr_md_ind.R @@ -1,9 +1,7 @@ #' License overview #' #' @param cr crossref metadata -#' -#' @importFrom dplyr `%>%` group_by summarise mutate filter arrange desc n_distinct -#' +#' @family transform #' @export cr_license_ind <- function(cr) { license_normalise(cr) %>% @@ -12,12 +10,11 @@ cr_license_ind <- function(cr) { arrange(desc(articles)) %>% mutate(ind_group = "CC licenses") } + #' TDM overview #' #' @param cr crossref metadata -#' -#' @importFrom dplyr `%>%` group_by summarise mutate filter -#' @importFrom tidyr unnest +#' @family transform #' @export cr_tdm_ind <- function(cr) { cr %>% @@ -28,13 +25,12 @@ cr_tdm_ind <- function(cr) { summarise(articles = n_distinct(doi)) %>% mutate(ind_group = "TDM") } + #' Other types of relevant metadata #' #' @param cr crossref metadata #' @param .group group by variable, like publisher -#' -#' @importFrom tidyr pivot_longer -#' @importFrom dplyr `%>%` group_by summarise mutate +#' @family transform #' @export cr_md_ind <- function(cr, .group) { cr %>% @@ -48,10 +44,11 @@ cr_md_ind <- function(cr, .group) { tidyr::pivot_longer(1:4, names_to = "type", values_to = "articles") %>% mutate(ind_group = "Others") } + #' Create compliance overview table #' #' @param cr crossref metadata -#' @importFrom dplyr `%>%` group_by summarise mutate filter arrange n_distinct bind_rows +#' @family visualize #' @export gather_ind_table <- function(cr) { # get indicators @@ -63,13 +60,13 @@ gather_ind_table <- function(cr) { mutate(all = n_distinct(cr$doi))%>% mutate(prop = articles / all * 100) %>% select(-all) %>% - mutate(prop_bar = map(prop, ~bar_chart(value = .x, color = "#00bfc4"))) + mutate(prop_bar = purrr::map(prop, ~bar_chart(value = .x, color = "#00bfc4"))) } + #' GT representation of compliance overview table #' -#' @import gt #' @param ind_table tibble compliance overview table -#' +#' @family visualize #' @export ind_table_to_gt <- function(ind_table) { gt::gt(ind_table) %>% @@ -78,77 +75,72 @@ ind_table_to_gt <- function(ind_table) { value = "Artikel", prop = "Anteil", prop_bar = "") %>% - tab_style( - style = cell_text(color = "black", weight = "bold"), + gt::tab_style( + style = gt::cell_text(color = "black", weight = "bold"), locations = list( - cells_column_labels(everything()) + gt::cells_column_labels(everything()) ) ) %>% - cols_width( - vars(name) ~ px(150) + gt::cols_width( + vars(name) ~ gt::px(150) ) %>% - cols_width( - vars(prop_bar) ~ px(100) + gt::cols_width( + vars(prop_bar) ~ gt::px(100) ) %>% - fmt_number( + gt::fmt_number( columns = vars(prop), decimals = 0, pattern = "{x}%") %>% - cols_align(align = "right", + gt::cols_align(align = "right", columns = vars(value, prop)) %>% - cols_align(align = "left", + gt::cols_align(align = "left", columns = vars(prop_bar)) %>% - tab_options( - row_group.border.top.width = px(3), + gt::tab_options( + row_group.border.top.width = gt::px(3), row_group.border.top.color = "black", row_group.border.bottom.color = "black", table_body.hlines.color = "white", table.border.top.color = "white", - table.border.top.width = px(3), + table.border.top.width = gt::px(3), table.border.bottom.color = "white", - table.border.bottom.width = px(3), + table.border.bottom.width = gt::px(3), column_labels.border.bottom.color = "black", - column_labels.border.bottom.width = px(2) + column_labels.border.bottom.width = gt::px(2) ) } + #' Embed HTML Bar Charts in gt #' #' #' #' @noRd bar_chart <- function(value, color = "red"){ - glue::glue("   ") %>% as.character() %>% gt::html() } - #' Reactable represenation of metadata indicators -#' -#' Inspired from -#' -#' @import reactable -#' #' @param ind_table tibble compliance overview table #' @param fill_col fill color for bar charts (hex code) -#' +#' @family visualize #' @export react_ind_table <- function(ind_table, fill_col = "#fc5185") { + # Inspired from reactable::reactable( data = ind_table, columns = list( - type = colDef(html = TRUE, + type = reactable::colDef(html = TRUE, name = "", style = list(fontFamily = "monospace", whiteSpace = "pre") ), articles = colDef(html = TRUE, name = "Articles", defaultSortOrder = "desc", - format = colFormat(separators = TRUE), + format = reactable::colFormat(separators = TRUE), style = list(fontFamily = "monospace", whiteSpace = "pre") ), - prop = colDef(html = TRUE, + prop = reactable::colDef(html = TRUE, name = "Share", defaultSortOrder = "desc", # Render the bar charts using a custom cell render function @@ -167,16 +159,9 @@ react_ind_table <- function(ind_table, fill_col = "#fc5185") { } #' React bar chart helper -#' -#' From -#' -#' @importFrom htmltools div -#' #' @noRd react_bar_chart <- function(label, width = "100%", height = "14px", fill = "#00bfc4", background = NULL) { bar <- htmltools::div(style = list(background = fill, width = width, height = height)) chart <- htmltools::div(style = list(flexGrow = 1, marginLeft = "6px", background = background), bar) htmltools::div(style = list(display = "flex", alignItems = "center"), label, chart) } - - diff --git a/R/cr_md_overview.R b/R/cr_md_overview.R index a15cd9e7..bf2628ba 100644 --- a/R/cr_md_overview.R +++ b/R/cr_md_overview.R @@ -1,10 +1,7 @@ #' Get compliance overview #' #' @param cr crossref metadata using [get_cr_md()] -#' -#' @importFrom dplyr `%>%` filter select across one_of -#' @importFrom tidyselect matches -#' +#' @family transform #' @export cr_compliance_overview <- function(cr) { # remove potential duplicated @@ -36,11 +33,11 @@ cr_compliance_overview <- function(cr) { list(cr_overview = cr_overview, cc_license_check = cc_df, tdm = tdm_df, funder_info = funder_df, open_apc_info = open_apc_df ) } - #' Check for ORCIDs #' #' @inheritParams cr_compliance_overview -#' @importFrom purrr map +#' @family transform +#' @export cr_has_orcid <- function(cr) { cr %>% select(doi, author) %>% diff --git a/R/cr_md_tdm.R b/R/cr_md_tdm.R index 1d6f7cc5..b95dcd2f 100644 --- a/R/cr_md_tdm.R +++ b/R/cr_md_tdm.R @@ -1,10 +1,7 @@ #' Get text-mining links from Crossref metadata #' #' @param cr crossref metadata using [get_cr_md()] -#' -#' @importFrom dplyr `%>%` filter select -#' @importFrom tidyr unnest -#' +#' @family transform #' @export cr_tdm_df <- function(cr) { if("link" %in% colnames(cr)) { diff --git a/R/email.R b/R/email.R index a420c874..5dbdd07c 100644 --- a/R/email.R +++ b/R/email.R @@ -1,6 +1,7 @@ #' Render email #' @param dois Character vector of DOIs #' @param session_id Character vector to identify current shiny session +#' @family communicate #' @export render_email <- function(dois, session_id = NULL) { cr <- get_cr_md(dois) @@ -33,9 +34,8 @@ render_email <- function(dois, session_id = NULL) { } #' Add attachment to email -#' @inheritParams blastula::add_attachment #' @inheritParams render_email -#' @export +#' @noRd add_attachment_xlsx <- function(email, session_id = NULL) { blastula::add_attachment( email = email, @@ -46,6 +46,7 @@ add_attachment_xlsx <- function(email, session_id = NULL) { #' Send out email #' @inheritParams blastula::smtp_send +#' @family communicate #' @export send_email <- function(to, email, cc = "metacheck-support@sub.uni-goettingen.de") { blastula::smtp_send( @@ -66,6 +67,7 @@ send_email <- function(to, email, cc = "metacheck-support@sub.uni-goettingen.de" #' Temp path to write xlsx to #' @inheritParams render_email +#' @noRd xlsx_path <- function(session_id = NULL) { fs::path_temp(paste0(session_id, "-license_df.xlsx")) } diff --git a/R/import.R b/R/import.R index 8a99b129..29186bca 100644 --- a/R/import.R +++ b/R/import.R @@ -1,9 +1,8 @@ #' Get Crossref metadata from API #' #' @param dois character vector with DOIs -#' @param .progress show progress bar, use "none" if no progress should be -#' displayed -#' +#' @param .progress +#' show progress bar, use "none" if no progress should be displayed #' @family ETL import #' @export get_cr_md <- function(dois, .progress = "text") { diff --git a/R/metacheck_package.R b/R/metacheck_package.R new file mode 100644 index 00000000..caf306bf --- /dev/null +++ b/R/metacheck_package.R @@ -0,0 +1,6 @@ +#' @keywords internal +"_PACKAGE" + +#' @importFrom magrittr %>% +#' @import dplyr tidyr purrr +NULL diff --git a/R/open_apc_fetch.R b/R/open_apc_fetch.R index 90a4758d..18d1b276 100644 --- a/R/open_apc_fetch.R +++ b/R/open_apc_fetch.R @@ -1,18 +1,12 @@ #' Get most current Open APC snapshot #' -#' Open APC shares several csv files via GitHub, which contain data about -#' institutional spending for open access articles. -#' -#' -#' @param open_apc_cols character vector representing Open APC collections. -#' See `open_apc_collections()` for an overview. -#' -#' @importFrom dplyr filter `%>%` inner_join -#' @importFrom purrr map_df -#' -#' @return Tibble with article-level subset of Open APC dataset including -#' collection. +#' Open APC shares several csv files via GitHub, which contain data about institutional spending for open access articles. +#' @param open_apc_cols +#' character vector representing Open APC collections. +#' See [open_apc_collections()] for an overview. #' +#' @return Tibble with article-level subset of Open APC dataset including collection. +#' @family transform #' @export open_apc_get <- function(open_apc_cols = NULL) { req <- open_apc_collections() %>% @@ -21,25 +15,20 @@ open_apc_get <- function(open_apc_cols = NULL) { out <- purrr::map_df(req, open_apc_get_) inner_join(out, open_apc_collections(), by = "gh_link") } + #' Get single Open APC dataset using GitHub Data API -#' #' @param gh_link URL to GitHub blob -#' -#' @importFrom readr read_csv -#' @importFrom dplyr select mutate -#' @importFrom tidyselect any_of -#' +#' @family transform #' @export open_apc_get_ <- function(gh_link = NULL) { gh_file(gh_link, to_disk = FALSE) %>% - read_csv() %>% + readr::read_csv() %>% select(any_of(c("institution", "doi", "period", "euro", "is_hybrid", "agreement"))) %>% mutate(gh_link = gh_link) } #' Open APC collections -#' -#' @importFrom tibble tribble +#' @family data #' @export open_apc_collections <- function() { tibble::tribble( @@ -50,33 +39,30 @@ open_apc_collections <- function() { "deal-wiley-optout", "https://github.com/OpenAPC/openapc-de/blob/master/data/transformative_agreements/deal_wiley_germany_opt_out/deal_wiley_germany_opt_out.csv" ) } + #' Gets a file from a github repo, using the Data API blob endpoint #' -#' This avoids the 1MB limit of the content API and uses [gh::gh] to deal with -#' authorization and such. See https://developer.github.com/v3/git/blobs/ +#' This avoids the 1MB limit of the content API and uses [gh::gh] to deal with authorization and such. +#' See https://developer.github.com/v3/git/blobs/ #' #' @author Noam Ross #' -#' @param url the URL of the file to download via API, of the form -#' `github.com/:owner/:repo/blob/:path +#' @param url the URL of the file to download via API, of the form `github.com/:owner/:repo/blob/:path #' @param owner,repo,path,ref alternate way to specify the file. These will #' override values in `url` #' @param to_disk,destfile write file to disk (default=TRUE)? If so, use the #' name in `destfile`, or the original filename by default #' @inheritParams gh::gh -#' @importFrom gh gh -#' @importFrom stringi stri_match_all_regex -#' @importFrom purrr %||% keep -#' @importFrom base64enc base64decode -#' @return Either the local path of the downloaded file (default), or a raw -#' vector +#' @family import +#' @export +#' @return Either the local path of the downloaded file (default), or a raw vector gh_file <- function(url = NULL, ref=NULL, owner = NULL, repo = NULL, path = NULL, to_disk=TRUE, destfile=NULL, .token = NULL, .api_url= NULL, .method="GET", .limit = NULL, .send_headers = NULL) { if (!is.null(url)) { - matches <- stri_match_all_regex( + matches <- stringi::stri_match_all_regex( url, "(github\\.com/)?([^\\/]+)/([^\\/]+)/[^\\/]+/([^\\/]+)/([^\\?]+)" ) @@ -88,20 +74,20 @@ gh_file <- function(url = NULL, ref=NULL, pathfile <- basename(path) } - dir_contents <- gh( + dir_contents <- gh::gh( "/repos/:owner/:repo/contents/:path", owner = owner, repo = repo, path = pathdir, ref = ref, .token = NULL, .api_url = NULL, .method = "GET", .limit = NULL, .send_headers = NULL ) file_sha <- keep(dir_contents, ~ .$path == path)[[1]]$sha - blob <- gh( + blob <- gh::gh( "/repos/:owner/:repo/git/blobs/:sha", owner = owner, repo = repo, sha = file_sha, .token = NULL, .api_url = NULL, .method = "GET", .limit = NULL, .send_headers = NULL ) - raw <- base64decode(blob[["content"]]) + raw <- base64enc::base64decode(blob[["content"]]) if (to_disk) { destfile <- destfile %||% pathfile writeBin(raw, con = destfile) diff --git a/R/test_helper.R b/R/test_helper.R deleted file mode 100644 index cd3c20ed..00000000 --- a/R/test_helper.R +++ /dev/null @@ -1,3 +0,0 @@ -is_valid_email <- function(x) { - grepl("^\\s*[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\s*$", as.character(x), ignore.case=TRUE) -} diff --git a/R/utils-pipe.R b/R/utils-pipe.R deleted file mode 100644 index e79f3d80..00000000 --- a/R/utils-pipe.R +++ /dev/null @@ -1,11 +0,0 @@ -#' Pipe operator -#' -#' See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. -#' -#' @name %>% -#' @rdname pipe -#' @keywords internal -#' @export -#' @importFrom magrittr %>% -#' @usage lhs \%>\% rhs -NULL diff --git a/man/add_attachment_xlsx.Rd b/man/add_attachment_xlsx.Rd deleted file mode 100644 index bb86a875..00000000 --- a/man/add_attachment_xlsx.Rd +++ /dev/null @@ -1,17 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/email.R -\name{add_attachment_xlsx} -\alias{add_attachment_xlsx} -\title{Add attachment to email} -\usage{ -add_attachment_xlsx(email, session_id = NULL) -} -\arguments{ -\item{email}{The email message object, as created by the \code{\link[blastula:compose_email]{compose_email()}} -function. The object's class is \code{email_message}.} - -\item{session_id}{Character vector to identify current shiny session} -} -\description{ -Add attachment to email -} diff --git a/man/cr_compliance_overview.Rd b/man/cr_compliance_overview.Rd index 42bc1a9a..445746ba 100644 --- a/man/cr_compliance_overview.Rd +++ b/man/cr_compliance_overview.Rd @@ -12,3 +12,22 @@ cr_compliance_overview(cr) \description{ Get compliance overview } +\seealso{ +Other transform: +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_funder_df.Rd b/man/cr_funder_df.Rd index 370dc751..c12d9af5 100644 --- a/man/cr_funder_df.Rd +++ b/man/cr_funder_df.Rd @@ -12,3 +12,22 @@ cr_funder_df(cr) \description{ Get funder list from Crossref metadata } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_has_orcid.Rd b/man/cr_has_orcid.Rd index 773a1e6b..9100940d 100644 --- a/man/cr_has_orcid.Rd +++ b/man/cr_has_orcid.Rd @@ -12,3 +12,22 @@ cr_has_orcid(cr) \description{ Check for ORCIDs } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_license_ind.Rd b/man/cr_license_ind.Rd index 02dff451..121f9919 100644 --- a/man/cr_license_ind.Rd +++ b/man/cr_license_ind.Rd @@ -12,3 +12,22 @@ cr_license_ind(cr) \description{ License overview } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_md_ind.Rd b/man/cr_md_ind.Rd index 48aa59d0..58c1e72d 100644 --- a/man/cr_md_ind.Rd +++ b/man/cr_md_ind.Rd @@ -14,3 +14,22 @@ cr_md_ind(cr, .group) \description{ Other types of relevant metadata } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_tdm_df.Rd b/man/cr_tdm_df.Rd index f5f3d6ee..dff05fe8 100644 --- a/man/cr_tdm_df.Rd +++ b/man/cr_tdm_df.Rd @@ -12,3 +12,22 @@ cr_tdm_df(cr) \description{ Get text-mining links from Crossref metadata } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/cr_tdm_ind.Rd b/man/cr_tdm_ind.Rd index bc12199d..240c00b1 100644 --- a/man/cr_tdm_ind.Rd +++ b/man/cr_tdm_ind.Rd @@ -12,3 +12,22 @@ cr_tdm_ind(cr) \description{ TDM overview } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/gather_ind_table.Rd b/man/gather_ind_table.Rd index e52ef211..209ed737 100644 --- a/man/gather_ind_table.Rd +++ b/man/gather_ind_table.Rd @@ -12,3 +12,9 @@ gather_ind_table(cr) \description{ Create compliance overview table } +\seealso{ +Other visualize: +\code{\link{ind_table_to_gt}()}, +\code{\link{react_ind_table}()} +} +\concept{visualize} diff --git a/man/get_compliant_cc.Rd b/man/get_compliant_cc.Rd index 9b1f4676..a510afac 100644 --- a/man/get_compliant_cc.Rd +++ b/man/get_compliant_cc.Rd @@ -10,10 +10,24 @@ get_compliant_cc(license_df) \item{license_df}{normalized license metadata from \code{\link[=license_check]{license_check()}}} } \description{ -Extract records with compliant CC license metadata +In order to be compliant, CC license has to apply to version of record and must be valid without delay. } -\details{ -In order to be compliant, -CC license has to apply to version of record and must be valid -without delay. +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} } +\concept{transform} diff --git a/man/get_cr_md.Rd b/man/get_cr_md.Rd index 39903211..c06033dd 100644 --- a/man/get_cr_md.Rd +++ b/man/get_cr_md.Rd @@ -9,8 +9,7 @@ get_cr_md(dois, .progress = "text") \arguments{ \item{dois}{character vector with DOIs} -\item{.progress}{show progress bar, use "none" if no progress should be -displayed} +\item{.progress}{show progress bar, use "none" if no progress should be displayed} } \description{ Get Crossref metadata from API diff --git a/man/get_license_md.Rd b/man/get_license_md.Rd index fb6cd3c9..be400557 100644 --- a/man/get_license_md.Rd +++ b/man/get_license_md.Rd @@ -12,3 +12,22 @@ get_license_md(cr) \description{ Extract license info from Crossref metadata } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/gh_file.Rd b/man/gh_file.Rd index 8858bcc0..7a667e61 100644 --- a/man/gh_file.Rd +++ b/man/gh_file.Rd @@ -20,8 +20,7 @@ gh_file( ) } \arguments{ -\item{url}{the URL of the file to download via API, of the form -`github.com/:owner/:repo/blob/:path} +\item{url}{the URL of the file to download via API, of the form `github.com/:owner/:repo/blob/:path} \item{owner, repo, path, ref}{alternate way to specify the file. These will override values in \code{url}} @@ -56,13 +55,13 @@ used to override or augment the default \code{User-Agent} header: \code{"https://github.com/r-lib/gh"}.} } \value{ -Either the local path of the downloaded file (default), or a raw -vector +Either the local path of the downloaded file (default), or a raw vector } \description{ -This avoids the 1MB limit of the content API and uses \link[gh:gh]{gh::gh} to deal with -authorization and such. See https://developer.github.com/v3/git/blobs/ +This avoids the 1MB limit of the content API and uses \link[gh:gh]{gh::gh} to deal with authorization and such. +See https://developer.github.com/v3/git/blobs/ } \author{ Noam Ross } +\concept{import} diff --git a/man/ind_table_to_gt.Rd b/man/ind_table_to_gt.Rd index fb4e0e6a..a080b95d 100644 --- a/man/ind_table_to_gt.Rd +++ b/man/ind_table_to_gt.Rd @@ -12,3 +12,9 @@ ind_table_to_gt(ind_table) \description{ GT representation of compliance overview table } +\seealso{ +Other visualize: +\code{\link{gather_ind_table}()}, +\code{\link{react_ind_table}()} +} +\concept{visualize} diff --git a/man/license_check.Rd b/man/license_check.Rd index d968542d..4ad1563b 100644 --- a/man/license_check.Rd +++ b/man/license_check.Rd @@ -10,10 +10,25 @@ license_check(cr) \item{cr}{crossref metadata using \code{\link[=get_cr_md]{get_cr_md()}}} } \description{ -Extract and validate Crossref license metadata -} -\details{ Workflow to check for compliant open content license metadata in Crossref. -License metadata is considered as compliant, if a Creative Commons license is -provided for the version-of-record without delay indicated by the license date. +License metadata is considered as compliant, if a Creative Commons license is provided for the version-of-record without delay indicated by the license date. +} +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} } +\concept{transform} diff --git a/man/license_normalise.Rd b/man/license_normalise.Rd index 40ba7b3f..7a7f3a19 100644 --- a/man/license_normalise.Rd +++ b/man/license_normalise.Rd @@ -7,9 +7,27 @@ license_normalise(cr) } \arguments{ -\item{cr}{tibble with non-compliant license metadata retrieved from the -Crossref API with \code{rcrossref:.cr_works()}} +\item{cr}{tibble with non-compliant license metadata retrieved from the Crossref API with \code{rcrossref:.cr_works()}} } \description{ Normalise license info from Crossref } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/license_report.Rd b/man/license_report.Rd index 1290073a..565c386e 100644 --- a/man/license_report.Rd +++ b/man/license_report.Rd @@ -7,8 +7,7 @@ license_report(cr) } \arguments{ -\item{cr}{tibble with non-compliant license metadata retrieved from the -Crossref API with \code{rcrossref:.cr_works()}} +\item{cr}{tibble with non-compliant license metadata retrieved from the Crossref API with \code{rcrossref:.cr_works()}} } \description{ In case license metadata do not comply, what are the reasons: @@ -18,3 +17,22 @@ In case license metadata do not comply, what are the reasons: \item Did the CC license apply immediately after publication? } } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/license_val.Rd b/man/license_val.Rd index 3a6d0a2d..f37ce6e3 100644 --- a/man/license_val.Rd +++ b/man/license_val.Rd @@ -7,11 +7,27 @@ license_val(cr) } \arguments{ -\item{cr}{tibble with Crossref metadata retrieved from -API with \code{rcrossref:.cr_works()}} +\item{cr}{tibble with Crossref metadata retrieved from API with \code{rcrossref:.cr_works()}} } \description{ -Retrieves records from Crossref metadata where -the version of record (vor), i.e. publisher version -is provided under a Creative Commons license without delay. +Retrieves records from Crossref metadata where the version of record (vor), i.e. publisher version is provided under a Creative Commons license without delay. } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/metacheck-package.Rd b/man/metacheck-package.Rd index a3e566f4..47d71a1a 100644 --- a/man/metacheck-package.Rd +++ b/man/metacheck-package.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/metacheck.R +% Please edit documentation in R/metacheck_package.R \docType{package} \name{metacheck-package} \alias{metacheck} diff --git a/man/open_apc_collections.Rd b/man/open_apc_collections.Rd index 6a31acf8..3582b6ea 100644 --- a/man/open_apc_collections.Rd +++ b/man/open_apc_collections.Rd @@ -9,3 +9,4 @@ open_apc_collections() \description{ Open APC collections } +\concept{data} diff --git a/man/open_apc_get.Rd b/man/open_apc_get.Rd index 2186d198..7a7eeb6d 100644 --- a/man/open_apc_get.Rd +++ b/man/open_apc_get.Rd @@ -8,13 +8,30 @@ open_apc_get(open_apc_cols = NULL) } \arguments{ \item{open_apc_cols}{character vector representing Open APC collections. -See \code{open_apc_collections()} for an overview.} +See \code{\link[=open_apc_collections]{open_apc_collections()}} for an overview.} } \value{ -Tibble with article-level subset of Open APC dataset including -collection. +Tibble with article-level subset of Open APC dataset including collection. } \description{ -Open APC shares several csv files via GitHub, which contain data about -institutional spending for open access articles. +Open APC shares several csv files via GitHub, which contain data about institutional spending for open access articles. } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/open_apc_get_.Rd b/man/open_apc_get_.Rd index 378934b7..781043ef 100644 --- a/man/open_apc_get_.Rd +++ b/man/open_apc_get_.Rd @@ -12,3 +12,22 @@ open_apc_get_(gh_link = NULL) \description{ Get single Open APC dataset using GitHub Data API } +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get}()}, +\code{\link{vor_issue}()} +} +\concept{transform} diff --git a/man/pipe.Rd b/man/pipe.Rd deleted file mode 100644 index 0eec7526..00000000 --- a/man/pipe.Rd +++ /dev/null @@ -1,12 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils-pipe.R -\name{\%>\%} -\alias{\%>\%} -\title{Pipe operator} -\usage{ -lhs \%>\% rhs -} -\description{ -See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. -} -\keyword{internal} diff --git a/man/react_ind_table.Rd b/man/react_ind_table.Rd index fee7bef7..8f4b118b 100644 --- a/man/react_ind_table.Rd +++ b/man/react_ind_table.Rd @@ -12,5 +12,11 @@ react_ind_table(ind_table, fill_col = "#fc5185") \item{fill_col}{fill color for bar charts (hex code)} } \description{ -Inspired from \url{https://glin.github.io/reactable/articles/building-twitter-followers.html} +Reactable represenation of metadata indicators } +\seealso{ +Other visualize: +\code{\link{gather_ind_table}()}, +\code{\link{ind_table_to_gt}()} +} +\concept{visualize} diff --git a/man/render_email.Rd b/man/render_email.Rd index 8859c631..56b04617 100644 --- a/man/render_email.Rd +++ b/man/render_email.Rd @@ -14,3 +14,8 @@ render_email(dois, session_id = NULL) \description{ Render email } +\seealso{ +Other communicate: +\code{\link{send_email}()} +} +\concept{communicate} diff --git a/man/runMetacheck.Rd b/man/runMetacheck.Rd index a5fd97d7..74047dcf 100644 --- a/man/runMetacheck.Rd +++ b/man/runMetacheck.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/metacheck.R +% Please edit documentation in R/communicate.R \name{runMetacheck} \alias{runMetacheck} \title{Start web application} diff --git a/man/send_email.Rd b/man/send_email.Rd index 5b6ce706..cef6c630 100644 --- a/man/send_email.Rd +++ b/man/send_email.Rd @@ -27,3 +27,8 @@ email address (e.g., \code{c("Joe Public" = "joe_public@example.com")}).} \description{ Send out email } +\seealso{ +Other communicate: +\code{\link{render_email}()} +} +\concept{communicate} diff --git a/man/vor_issue.Rd b/man/vor_issue.Rd index 19d305cc..6145ec0f 100644 --- a/man/vor_issue.Rd +++ b/man/vor_issue.Rd @@ -12,10 +12,24 @@ vor_issue(license_df, compliant_dois) \item{compliant_dois}{DOIs representing records with valid CC info} } \description{ -Extract records with CC license not applied to version of records +In order to be compliant, CC license has to apply to version of record and must be valid without delay. } -\details{ -In order to be compliant, -CC license has to apply to version of record and must be valid -without delay. +\seealso{ +Other transform: +\code{\link{cr_compliance_overview}()}, +\code{\link{cr_funder_df}()}, +\code{\link{cr_has_orcid}()}, +\code{\link{cr_license_ind}()}, +\code{\link{cr_md_ind}()}, +\code{\link{cr_tdm_df}()}, +\code{\link{cr_tdm_ind}()}, +\code{\link{get_compliant_cc}()}, +\code{\link{get_license_md}()}, +\code{\link{license_check}()}, +\code{\link{license_normalise}()}, +\code{\link{license_report}()}, +\code{\link{license_val}()}, +\code{\link{open_apc_get_}()}, +\code{\link{open_apc_get}()} } +\concept{transform} diff --git a/man/xlsx_path.Rd b/man/xlsx_path.Rd deleted file mode 100644 index dea92e6f..00000000 --- a/man/xlsx_path.Rd +++ /dev/null @@ -1,14 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/email.R -\name{xlsx_path} -\alias{xlsx_path} -\title{Temp path to write xlsx to} -\usage{ -xlsx_path(session_id = NULL) -} -\arguments{ -\item{session_id}{Character vector to identify current shiny session} -} -\description{ -Temp path to write xlsx to -} From 138dd3a17249f45975dd6594f92753a207a2e663 Mon Sep 17 00:00:00 2001 From: Maximilian Held Date: Fri, 5 Feb 2021 09:56:50 +0100 Subject: [PATCH 16/16] expose r4ds structure --- pkgdown/_pkgdown.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 35a1c6f1..3b11d121 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -20,6 +20,35 @@ home: links: - text: Read project description href: https://www.sub.uni-goettingen.de/en/projects-research/project-details/projekt/hybrid-oa-dashboards/ +reference: +- title: Data + desc: Data objects and queries +- contents: + - has_concept("doi") +- title: Import + desc: Read in data +- contents: + - has_concept("import") +- title: Tidy + desc: Normalize data +- contents: + - has_concept("tidy") +- title: Transform + desc: Detect licenses etc. +- contents: + - has_concept("transform") +- title: Visualise + desc: Tables and plots +- contents: + - has_concept("visualise") +- title: Model + desc: Nothing yet +- contents: + - has_concept("model") +- title: Communicate + desc: Shiny app and rmarkdown +- contents: + - has_concept("communicate") navbar: components: support: