Registro de Entradas
Consultar y modificar entradas registradas. Acceder a metadatos, instantaneas e historial de versiones.
Carga
local registry = require("registry")
Estructura de Entrada
{
id = "app.lib:assert", -- string: "namespace:name"
kind = "function.lua", -- string: tipo de entrada
meta = {type = "test"}, -- table: metadatos buscables
data = {...} -- any: carga de entrada
}
Obtener Entrada
local entry, err = registry.get("app.lib:assert")
Permiso: registry.get en ID de entrada
Buscar Entradas
local entries, err = registry.find({kind = "function.lua"})
local entries, err = registry.find({kind = "http.endpoint", namespace = "app.api"})
Los campos de filtro coinciden con los metadatos de entrada.
Parsear ID
local id = registry.parse_id("app.lib:assert")
-- id.ns = "app.lib", id.name = "assert"
Instantaneas
Vista punto en el tiempo del registro:
local snap, err = registry.snapshot() -- estado actual
local snap, err = registry.snapshot_at(5) -- en versión 5
Metodos de Instantanea
| Método | Devuelve | Descripción |
|---|---|---|
snap:entries() |
Entry[], error |
Todas las entradas accesibles |
snap:get(id) |
Entry, error |
Entrada unica por ID |
snap:find(filter) |
Entry[] |
Filtrar entradas |
snap:namespace(ns) |
Entry[] |
Entradas en namespace |
snap:versión() |
Versión |
Versión de instantanea |
snap:changes() |
Changes |
Crear conjunto de cambios |
Versiones
local versión, err = registry.current_version()
local versions, err = registry.versions()
print(versión:id()) -- ID numerico
print(versión:string()) -- cadena de visualizacion
local prev = versión:previous() -- versión anterior o nil
Historial
local hist, err = registry.history()
local versions, err = hist:versions()
local versión, err = hist:get_version(5)
local snap, err = hist:snapshot_at(versión)
Conjuntos de Cambios
Construir y aplicar modificaciones:
local snap, err = registry.snapshot()
local changes = snap:changes()
changes:create({
id = "test:new_entry",
kind = "test.kind",
meta = {type = "test"},
data = {config = "value"}
})
changes:update({
id = "test:existing",
kind = "test.kind",
meta = {updated = true},
data = {new_value = true}
})
changes:delete("test:old_entry")
local new_version, err = changes:apply()
Permiso: registry.apply para changes:apply()
Metodos de Changes
| Método | Descripción |
|---|---|
changes:create(entry) |
Agregar operación de creacion |
changes:update(entry) |
Agregar operación de actualizacion |
changes:delete(id) |
Agregar operación de eliminacion (string o {ns, name}) |
changes:ops() |
Obtener operaciones pendientes |
changes:apply() |
Aplicar cambios, devuelve nueva Versión |
Aplicar Versión
Retroceder o avanzar a una versión especifica:
local prev = current_version:previous()
local ok, err = registry.apply_version(prev)
Permiso: registry.apply_version
Construir Delta
Calcular operaciones para transicionar entre estados:
local from = {{id = "test:a", kind = "test", meta = {}, data = {}}}
local to = {{id = "test:b", kind = "test", meta = {}, data = {}}}
local ops, err = registry.build_delta(from, to)
for _, op in ipairs(ops) do
print(op.kind, op.entry.id) -- "entry.create", "entry.update", "entry.delete"
end
Permisos
| Permiso | Recurso | Descripción |
|---|---|---|
registry.get |
ID de entrada | Leer entrada (también filtra resultados de find/entries) |
registry.apply |
- | Aplicar conjunto de cambios |
registry.apply_version |
- | Aplicar/revertir versión |
Errores
| Condición | Tipo |
|---|---|
| Entrada no encontrada | errors.NOT_FOUND |
| Versión no encontrada | errors.NOT_FOUND |
| Permiso denegado | errors.PERMISSION_DENIED |
| Parámetro invalido | errors.INVALID |
| Sin cambios para aplicar | errors.INVALID |
| Registro no disponible | errors.INTERNAL |
Consulte Manejo de Errores para trabajar con errores.