From 8ae0a4ac419a127849948c6a81113d71862dae8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABlle=20Salmon?= Date: Thu, 3 May 2018 15:26:27 +0200 Subject: [PATCH] minimal parsing of sys dependencies thanks to @jeroen cf #147 --- DESCRIPTION | 9 +++- R/codemeta_description.R | 4 +- R/parse_depends.R | 19 +++++++ codemeta.json | 11 +++- inst/examples/DESCRIPTION_sysreqs | 79 +++++++++++++++++++++++++++++ tests/testthat/test-parse_depends.R | 7 +++ 6 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 inst/examples/DESCRIPTION_sysreqs diff --git a/DESCRIPTION b/DESCRIPTION index da187816..ac704e4f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -28,10 +28,15 @@ Authors@R: role = "ctb"), person(given = "Noam", family = "Ross", - role = "ctb"), + role = "ctb", + comment=c(ORCID = "0000-0002-2136-0000")), person(given = "Arfon", family = "Smith", - role = "ctb")) + role = "ctb"), + person(given = "Jeroen", + family = "Ooms", + role = "ctb", + comment = c(ORCID = "0000-0002-4035-0289"))) Description: The 'Codemeta' Project defines a 'JSON-LD' format for describing software metadata, as detailed at . This package provides utilities to generate, parse, and modify 'codemeta.json' files diff --git a/R/codemeta_description.R b/R/codemeta_description.R index a69205c7..8b967e40 100644 --- a/R/codemeta_description.R +++ b/R/codemeta_description.R @@ -122,7 +122,9 @@ codemeta_description <- codemeta$softwareSuggestions <- parse_depends(suggests) codemeta$softwareRequirements <- parse_depends(requirements) - + codemeta$softwareRequirements <- c(codemeta$softwareRequirements, + parse_sys_reqs(descr$get("Package"), + descr$get("SystemRequirements"))) ## add any additional codemeta terms found in the DESCRIPTION metadata diff --git a/R/parse_depends.R b/R/parse_depends.R index f24f9860..403e9a4e 100644 --- a/R/parse_depends.R +++ b/R/parse_depends.R @@ -77,3 +77,22 @@ add_remote_to_dep <- function(package, remotes){ remote_provider } } + + +# helper to get system dependencies +get_sys_links <- function(pkg, description = ""){ + out1 <- jsonlite::fromJSON(sprintf("https://sysreqs.r-hub.io/pkg/%s", pkg), simplifyVector = FALSE) + out2 <- jsonlite::fromJSON(sprintf("https://sysreqs.r-hub.io/map/%s", curl::curl_escape(description)), simplifyVector = FALSE) + sysreqs <- unique(c(sapply(out1, names), sapply(out2, names))) + sprintf("https://sysreqs.r-hub.io/get/%s", sysreqs) +} + +format_sys_req <- function(url){ + list("@type" = "SoftwareApplication", + identifier = url) +} + +parse_sys_reqs <- function(pkg, sys_reqs){ + urls <- get_sys_links(pkg, description = sys_reqs) + purrr::map(urls, format_sys_req) +} diff --git a/codemeta.json b/codemeta.json index 6d76cdde..9a6626fe 100644 --- a/codemeta.json +++ b/codemeta.json @@ -64,12 +64,19 @@ { "@type": "Person", "givenName": "Noam", - "familyName": "Ross" + "familyName": "Ross", + "@id": "https://orcid.org/0000-0002-2136-0000" }, { "@type": "Person", "givenName": "Arfon", "familyName": "Smith" + }, + { + "@type": "Person", + "givenName": "Jeroen", + "familyName": "Ooms", + "@id": "https://orcid.org/0000-0002-4035-0289" } ], "copyrightHolder": [ @@ -422,7 +429,7 @@ "keywords": ["metadata", "codemeta", "ropensci", "citation", "credit", "linked-data", "json-ld"], "releaseNotes": "https://github.com/ropensci/codemetar/blob/master/NEWS.md", "readme": "https://github.com/ropensci/codemetar/blob/master/README.md", - "fileSize": "277.352KB", + "fileSize": "278.447KB", "contIntegration": [ "https://travis-ci.org/ropensci/codemetar", "https://ci.appveyor.com/project/cboettig/codemetar/branch/master", diff --git a/inst/examples/DESCRIPTION_sysreqs b/inst/examples/DESCRIPTION_sysreqs new file mode 100644 index 00000000..87c17e2e --- /dev/null +++ b/inst/examples/DESCRIPTION_sysreqs @@ -0,0 +1,79 @@ +Package: codemetar +Type: Package +Title: Generate 'CodeMeta' Metadata for R Packages +Version: 0.1.6 +Authors@R: + c(person(given = "Carl", + family = "Boettiger", + role = c("aut", "cre", "cph"), + email = "cboettig@gmail.com", + comment = c(ORCID = "0000-0002-1642-628X")), + person(given = "Anna", + family = "Krystalli", + role = c("rev", "ctb"), + comment = c(ORCID = "0000-0002-2378-4915")), + person(given = "Toph", + family = "Allen", + role = "rev", + comment = c(ORCID = "0000-0003-4580-091X")), + person(given = "Maƫlle", + family = "Salmon", + role = c("ctb", "aut"), + comment = c(ORCID = "0000-0002-2815-0399")), + person(given = "rOpenSci", + role = "fnd", + comment = "https://ropensci.org/"), + person(given = "Katrin", + family = "Leinweber", + role = "ctb"), + person(given = "Noam", + family = "Ross", + role = "ctb"), + person(given = "Arfon", + family = "Smith", + role = "ctb")) +Description: The 'Codemeta' Project defines a 'JSON-LD' format for describing + software metadata, as detailed at . This package + provides utilities to generate, parse, and modify 'codemeta.json' files + automatically for R packages, as well as tools and examples for working with + 'codemeta.json' 'JSON-LD' more generally. +License: GPL-3 +URL: https://github.com/ropensci/codemetar, https://ropensci.github.io/codemetar +BugReports: https://github.com/ropensci/codemetar/issues +Encoding: UTF-8 +LazyData: true +RoxygenNote: 6.0.1.9000 +Depends: R (>= 3.0.0) +Imports: + jsonlite (>= 1.3), + jsonld, + git2r, + devtools, + memoise, + methods, + stats, + stringi, + readr, + desc, + usethis, + whisker, + tibble, + crul, + gh, + stringr, + sessioninfo, + purrr +Suggests: + testthat, + jsonvalidate, + covr, + knitr, + rmarkdown, + magrittr, + xml2, + dplyr (>= 0.7.0), + printr +SystemRequirements: ImageMagick++: ImageMagick-c++-devel (rpm) or libmagick++-dev (deb) +VignetteBuilder: knitr +X-schema.org-keywords: metadata, codemeta, ropensci, citation, credit, linked-data +X-schema.org-isPartOf: https://ropensci.org diff --git a/tests/testthat/test-parse_depends.R b/tests/testthat/test-parse_depends.R index d86b542b..c354c94d 100644 --- a/tests/testthat/test-parse_depends.R +++ b/tests/testthat/test-parse_depends.R @@ -42,3 +42,10 @@ testthat::test_that("Test the various cases for ids (NOT used currently)", { # a <- guess_dep_id(parse_depends("not-a-package")[[1]]) }) + +testthat::test_that("Sys requirements", { + f <- system.file("examples/DESCRIPTION_sysreqs", package = "codemetar") + descr <- codemeta_description(f) + testthat::expect_equal(descr$softwareRequirements[[22]]$identifier, + "https://sysreqs.r-hub.io/get/imagemagick") +})