parse_sidra_url() / fetch_sidra_url(): a SIDRA URL without a /p/
(periods) segment no longer crashes the print method and the fetch; the
equivalent call falls back to the ibge_variables() default (last 6
periods) (reported by @ddiannae).parse_sidra_url(): a territorial level that is not in the internal
lookup table (e.g. n12) no longer errors with "subscript out of
bounds". Levels that the aggregate does not offer now raise a warning at
parse time listing the available levels, and fetch_sidra_url() fails
through the regular validation (reported by @ddiannae).parse_sidra_url(): URLs with several territorial levels (e.g.
n1/all/n3/all) produced an "Equivalent ibger call" with an unnamed
list that ibge_variables() rejects. The printed call and
fetch_sidra_url() now share one translation: a named list when every
level has specific codes, and the API's pipe syntax ("N1|N3[33,35]")
otherwise (reported by @ddiannae).ibge_aggregates() now checks the format of its five filters before the
request. The API silently drops filters it cannot parse (returning the
whole catalog under a success message) and answers HTTP 500 to others,
e.g. periodicity = 30; malformed values now abort with an example of
the expected format. An empty result is reported with a warning instead
of a green "0 aggregates found", and keeps the documented columns
(reported by @ddiannae).ibge_aggregates(): the periodicity codes in the documentation were
wrong (P10 and P58 do not exist; P13 is the rolling quarter, not
annual). The documented table now lists the codes observed in the
catalog: P1 annual, P5 monthly, P8 semi-annual, P9 quarterly,
P13 rolling quarter, plus the multi-year codes (reported by @ddiannae).ibge_localities() with several levels queries each level separately
and binds the results: the API's own multi-level endpoint returns an
empty list as soon as one of the levels has no localities for the
aggregate. An empty result now keeps the documented columns and is
reported with a warning (reported by @ddiannae).ibge_variables()); for the other endpoints, where a
500 means the API could not interpret the request (non-existent
aggregate, invalid filter), the message says so (reported by @ddiannae).getting-started and api-concepts are now precomputed
against the live API like the other two (vignettes/precompile.R), so
every printed output is real. This removed a set of wrong hand-written
outputs — aggregate 1705 (IPCA-15) was described as the quarterly animal
slaughter table, which is 1092; the ibge_variables(1705, localities = "N3") example (also in ?ibge_variables) errors because 1705 has no
state level; periodicity = "P10" returned nothing — and replaced the
advice to split large queries by hand with a section on the automatic
chunking (chunk) in all three vignettes that mentioned the limit
(reported by @ddiannae; precomputing suggested by @beatrizmilz).ibge_localities() example: ibge_localities(1437, level = c("N6", "N7")) returned an empty tibble (1437 has no metropolitan-area
localities); the example now uses c("N2", "N3") (reported by
@ddiannae).Fixed the bsicons availability check in ibge_explorer(), which told
users to install bslib instead of bsicons (reported by @allanvc).
Fixed the documentation of the launch.browser argument of
ibge_explorer(), which described FALSE as the default; the default is
and remains TRUE (open in the browser), and FALSE opens the app in the
RStudio Viewer pane (reported by @allanvc).
Documented the IBGE API's server-side latency for large queries in
?ibge_variables and the README: municipality-level requests can take one
to several minutes each (suggested by @allanvc).
README: replaced the link to IBGE's terms of use, whose old address now returns a 404, with the current "Termo de Uso e Política de Privacidade" page (reported by @allanvc).
Removed the stray .Rhistory file from the repository (suggested by
@allanvc).
curl (>= 6.0.0) is now declared in Imports, enforcing at install time
the version requirement that was previously only documented in the README
(older curl versions fail with curl_modify_url is not an exported object).
The table of IBGE special value codes (-, .., ..., X) is now
documented in a single place — ?parse_ibge_value — and linked from the
README and vignettes instead of being repeated.
The ipca-example and tutorial vignettes are now precompiled from
.Rmd.orig sources against the live IBGE API (vignettes/precompile.R),
so their output and ggplot2 figures render on the pkgdown site.
README: added the rOpenSci review badge, linked the API-concepts vignette
from the quick start, pointed the "Value column" section to
parse_ibge_value(), and rewrote the ibge_explorer() section to match
the tone of the rest of the page.
Examples no longer use \dontrun{}: examples that query the live IBGE
API (or launch the Shiny explorer) are now guarded with
@examplesIf interactive(), so they render in the docs and run for
interactive users without hitting the network during checks.
Internal refactor to address the remaining pkgcheck/goodpractice notes:
every function is now below the cyclomatic-complexity threshold of 15
(long functions such as parse_sidra_url(), fetch_sidra_url(),
ibge_metadata() and ibge_survey_metadata() were decomposed into
focused helpers), duplicated @param docs were replaced with
@inheritParams, and the lintr issues flagged in the review (long
lines, expect_equal() vs expect_identical(), static regexes without
fixed = TRUE, duplicate cli bullet names, <<-, require() in the
Shiny app, setwd() in precompile.R) were cleaned up. No user-facing
behavior changes.
httptest2 (no network needed).R CMD check on Linux/macOS/Windows and
test coverage reporting via GitHub Actions.CONTRIBUTING.md, CODE_OF_CONDUCT.md and codemeta.json in
preparation for rOpenSci submission.ibge_variables() gains a chunk argument (default TRUE): queries whose
estimated result exceeds the API's value limit are now transparently split
into multiple smaller requests (by periods, then by localities) and
combined into a single tibble, instead of failing with HTTP 500
(#1, @danielvartan). Use chunk = FALSE to disable, or a positive number
for a custom per-request limit. The documented API limit is 100,000 values,
but empirically requests fail above ~50,000, so that is the default.ibge_clear_cache()).ibge_aggregates(), ibge_metadata(), ibge_periods(),
ibge_localities(), ibge_variables().ibge_clear_cache().parse_ibge_value() utility for converting IBGE special value codes.parse_sidra_url() and fetch_sidra_url() for migrating from SIDRA API
URLs (e.g. from the Query Builder or sidrar package).view = "flat") response parsing.