feat: export cog_manifest() accessor + pin CPI coverage 1967-present
R-CMD-check / check (push) Successful in 2m47s
R-CMD-check / check (pull_request) Successful in 2m57s

This commit is contained in:
2026-07-18 13:40:54 -04:00
parent 70cf553828
commit 4d61692f05
5 changed files with 52 additions and 0 deletions
+1
View File
@@ -7,6 +7,7 @@ export(cog_explain)
export(cog_find_peers) export(cog_find_peers)
export(cog_geographic_rollup) export(cog_geographic_rollup)
export(cog_gov_search) export(cog_gov_search)
export(cog_manifest)
export(cog_mirror) export(cog_mirror)
export(cog_peer_compare) export(cog_peer_compare)
export(cog_revenue) export(cog_revenue)
+15
View File
@@ -146,3 +146,18 @@
} }
`%||%` <- function(a, b) if (is.null(a) || (length(a) == 1 && is.na(a))) b else a `%||%` <- function(a, b) if (is.null(a) || (length(a) == 1 && is.na(a))) b else a
#' Return the parsed corpus manifest for the active session.
#'
#' Opens a session (connecting to the configured corpus) if none is active,
#' then returns the manifest exactly as parsed from `manifest.json`. Useful
#' for consumers that need the published year range (`years` block, schema
#' v5+) or the partition list without issuing a data query.
#'
#' @return Named list: `schema_version`, `built_at`, `pipeline_commit`,
#' `data_vintage`, `scope`, `years` (schema v5+), `schema`, `files`.
#' @export
cog_manifest <- function() {
.ensure_session()
.uscogdata_env$manifest
}
+18
View File
@@ -0,0 +1,18 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/manifest.R
\name{cog_manifest}
\alias{cog_manifest}
\title{Return the parsed corpus manifest for the active session.}
\usage{
cog_manifest()
}
\value{
Named list: `schema_version`, `built_at`, `pipeline_commit`,
`data_vintage`, `scope`, `years` (schema v5+), `schema`, `files`.
}
\description{
Opens a session (connecting to the configured corpus) if none is active,
then returns the manifest exactly as parsed from `manifest.json`. Useful
for consumers that need the published year range (`years` block, schema
v5+) or the partition list without issuing a data query.
}
+7
View File
@@ -41,3 +41,10 @@ test_that(".inflate preserves NA amounts", {
expect_true(is.na(result[2])) expect_true(is.na(result[2]))
expect_false(any(is.na(result[c(1, 3)]))) expect_false(any(is.na(result[c(1, 3)])))
}) })
test_that("bundled CPI covers the full 1967+ corpus era through this year", {
cpi <- .cpi_table()
expect_lte(min(cpi$year), 1967L)
expect_gte(max(cpi$year), as.integer(format(Sys.Date(), "%Y")))
expect_false(any(is.na(cpi$cpi)))
})
+11
View File
@@ -99,3 +99,14 @@ test_that("remote manifest fetch does not poison cache when response is HTML", {
0L 0L
) )
}) })
test_that("cog_manifest returns the active session's parsed manifest", {
with_fixture_corpus({
m <- cog_manifest()
expect_type(m, "list")
expect_true(m$schema_version >= 4L)
yrs <- vapply(m$files$long_partitions, function(p) as.integer(p$year),
integer(1))
expect_setequal(yrs, c(2019L, 2020L))
})
})