seor bundles a suite of focused R packages for SEO and web-developer workflows into a single metapackage. Installing seor installs every member; library(seor) attaches them all at once, in the style of the tidyverse metapackage.
Members
| Package | Purpose | On CRAN |
|---|---|---|
rurl |
URL parsing and manipulation | yes |
punycoder |
Punycode / internationalized-domain conversion | yes |
pslr |
Public Suffix List lookups | yes |
sitemapr |
XML sitemap parsing | no |
pagerankr |
PageRank estimation | no |
robotstxtr |
robots.txt parsing (planned) |
no |
Because some members are not yet on CRAN, seor is installed from GitLab for now (a metapackage cannot go to CRAN until all of its hard dependencies are on CRAN):
# install.packages("pak")
pak::pak("gitlab::bart-turczynski/seor")pak reads the Remotes: field in DESCRIPTION, so the not-yet-CRAN members are fetched automatically.
Usage
library(seor)
#> -- Attaching seor packages --
#> v rurl ...
#> v punycoder ...
#> ...
seor_packages() # the member packages
seor_conflicts() # name collisions among attached packagesSetup (development)
Install package dependencies (from DESCRIPTION, including the Remotes: sources) plus the dev tooling used by the checks:
Verification
Rscript -e 'lints <- lintr::lint_package(); if (length(lints)) { print(lints); quit(status = 1) }' && Rscript -e 'rcmdcheck::rcmdcheck(args = "--as-cran", error_on = "warning", env = c(callr::rcmd_safe_env(), "_R_CHECK_CRAN_INCOMING_" = "false"))'R CMD check runs the testthat and cucumber specs, so the behaviour specs are verified as part of the check.
The env = argument disables only the CRAN incoming-feasibility step. seor is a metapackage with members that are not yet on CRAN, so that step always reports an ERROR (non-mainstream dependencies, the Remotes: field, the archived seoR name clash) — a permanent, known state rather than a regression. Every other --as-cran check still runs. Re-enable it for the first CRAN submission.
Project Layout
-
R/contains the package source (attach.Rholds the load logic). -
man/contains generated help pages (regenerate withdevtools::document()). -
NAMESPACEandman/are roxygen2-generated — edit the roxygen comments inR/, not these. -
tests/testthat/contains testthat tests and the cucumber feature specs. -
vignettes/contains long-form documentation. -
_pkgdown.ymlconfigures the generated package website insite/. -
DESCRIPTIONdeclares package metadata and dependencies. -
ARCHITECTURE.mdis the living map of the project’s structure. -
design/holds specs (design/specs/) and decision records (design/adr/). -
_scratch/andtmp/are local-only and ignored by git.