Title: | Infrastructure for R Package Registries |
---|---|
Description: | Provides a generic infrastructure for creating and using registries. |
Authors: | David Meyer |
Maintainer: | David Meyer <[email protected]> |
License: | GPL-2 |
Version: | 0.5-1 |
Built: | 2024-12-01 08:43:59 UTC |
Source: | CRAN |
Functions used for lookups of search keys.
match_ignorecase(lookup, entry, ...) match_exact(lookup, entry, ...) match_partial(lookup, entry, ...) match_partial_ignorecase(lookup, entry, ...) match_regexp(lookup, entry, ...)
match_ignorecase(lookup, entry, ...) match_exact(lookup, entry, ...) match_partial(lookup, entry, ...) match_partial_ignorecase(lookup, entry, ...) match_regexp(lookup, entry, ...)
lookup |
Search value to look up (for some key field). |
entry |
Vector of key values where |
... |
For |
These are matching functions to be specified for key fields, controlling how search values are looked up in the registry.
David Meyer [email protected]
## use exact matching R <- registry(stop_if_missing = FALSE) R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_exact) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R[["the key"]] R[["the"]] ## use partial matching R <- registry() R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_partial) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R[["the"]] ## use regular expressions R <- registry() R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_regexp) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R$set_entry("key", 2) R[["k.*"]] R["k.*"]
## use exact matching R <- registry(stop_if_missing = FALSE) R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_exact) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R[["the key"]] R[["the"]] ## use partial matching R <- registry() R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_partial) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R[["the"]] ## use regular expressions R <- registry() R$set_field("Key", type = "character", is_key = TRUE, index_FUN = match_regexp) R$set_field("Value", type = "numeric") R$set_entry("the key", 1) R$set_entry("key", 2) R[["k.*"]] R["k.*"]
Function to create a registry object.
registry(entry_class = NULL, registry_class = NULL, validity_FUN = NULL, stop_if_missing = FALSE)
registry(entry_class = NULL, registry_class = NULL, validity_FUN = NULL, stop_if_missing = FALSE)
entry_class |
character string indicating a class the returned registry object will additionally inherit from (optional). Used for dispatching user-specified print and summary methods. |
registry_class |
character string indicating a class the registry entries will additionally inherit from (optional). Used for dispatching user-specified print and summary methods. |
validity_FUN |
a function accepting a new registry entry as argument for checking its validity and possibly aborting with an error message. The entry will be provided by the calling function as a list with named components (fields). |
stop_if_missing |
logical indicating whether the registry lookup
functions should abort or just return |
This is a generating function that will return a registry object whose
components are accessor functions for the contained data. These are
documented separately (regobj
).
David Meyer [email protected]
R <- registry() R$set_field("X", type = TRUE) R$set_field("Y", type = "character") R$set_field("index", type = "character", is_key = TRUE, index_FUN = match_partial_ignorecase) R$set_field("index2", type = "integer", is_key = TRUE) R$set_entry(X = TRUE, Y = "bla", index = "test", index2 = 1L) R$set_entry(X = FALSE, Y = "foo", index = c("test", "bar"), index2 = 2L) R$get_entries("test") R[["test", 1]] R["test"] R[["test"]]
R <- registry() R$set_field("X", type = TRUE) R$set_field("Y", type = "character") R$set_field("index", type = "character", is_key = TRUE, index_FUN = match_partial_ignorecase) R$set_field("index2", type = "integer", is_key = TRUE) R$set_entry(X = TRUE, Y = "bla", index = "test", index2 = 1L) R$set_entry(X = FALSE, Y = "foo", index = c("test", "bar"), index2 = 2L) R$get_entries("test") R[["test", 1]] R["test"] R[["test"]]
Registry object.
regobj$get_field(name) regobj$get_fields() regobj$get_field_names() regobj$set_field(name, type = NA, alternatives = NA, default = NA, is_mandatory = FALSE, is_modifiable = TRUE, is_key = FALSE, validity_FUN = NULL, index_FUN = match_ignorecase, ...) regobj$has_entry(key) regobj$get_entry(...) regobj$get_entries(...) regobj$grep_entries(pattern, ...) regobj$get_entry_names() regobj$set_entry(...) regobj$modify_entry(...) regobj$delete_entry(...) regobj$n_of_entries(name) regobj$get_field_entries(field, unlist = TRUE) regobj$get_permissions() regobj$restrict_permissions(set_entries = TRUE, modify_entries = TRUE, delete_entries = TRUE, set_fields = TRUE) regobj$seal_entries() regobj$get_sealed_field_names() ## S3 method for class 'registry' print(x, ...) ## S3 method for class 'registry' summary(object, ...) ## S3 method for class 'registry' x[[...]] ## S3 method for class 'registry' x[...]
regobj$get_field(name) regobj$get_fields() regobj$get_field_names() regobj$set_field(name, type = NA, alternatives = NA, default = NA, is_mandatory = FALSE, is_modifiable = TRUE, is_key = FALSE, validity_FUN = NULL, index_FUN = match_ignorecase, ...) regobj$has_entry(key) regobj$get_entry(...) regobj$get_entries(...) regobj$grep_entries(pattern, ...) regobj$get_entry_names() regobj$set_entry(...) regobj$modify_entry(...) regobj$delete_entry(...) regobj$n_of_entries(name) regobj$get_field_entries(field, unlist = TRUE) regobj$get_permissions() regobj$restrict_permissions(set_entries = TRUE, modify_entries = TRUE, delete_entries = TRUE, set_fields = TRUE) regobj$seal_entries() regobj$get_sealed_field_names() ## S3 method for class 'registry' print(x, ...) ## S3 method for class 'registry' summary(object, ...) ## S3 method for class 'registry' x[[...]] ## S3 method for class 'registry' x[...]
name |
character string representing the name of an entry (case-insensitive). |
pattern |
regular expression to be matched to all fields of class
|
type |
character vector specifying accepted classes
for this field. If |
alternatives |
vector of alternatives accepted for this field. |
default |
optional default value for the field. |
is_mandatory |
logical specifying whether new entries are required to have a value for this field. |
is_modifiable |
logical specifying whether entries can be changed with respect to that field. |
is_key |
logical indicating whether the field is (part of) an index. |
validity_FUN |
optional function or character string with the name of a function that checks the validity of a field entry. Such a function gets the value to be investigated as argument, and should stop with an error message if the value is not correct. |
index_FUN |
vectorized predicate function matching an index value to a vector (of existing field entries). See matchfuns. |
x , object
|
a registry object. |
... |
for |
regobj
represents a registry object returned by
registry
whose elements can be processed using
the following accessor functions:
get_field_names()
returns a character
vector with all field names. get_field()
returns the information
for a specific field as a list with components named as described
above. get_fields()
returns a list with all field
entries. set_field()
is used to create new fields in the
repository (the default value will be set in all
entries).
get_entry_names()
returns a character vector with (the first
alias of) all entries. entry_exists()
is a predicate checking
if an entry with the specified alias exists in the
registry. get_entry()
returns the first specified entry
if at least one exists (and, by
default, gives an error if it does not). get_entries()
is used to
query more than one entry matching the index
(named argument list) exactly. grep_entries()
returns those entries
where the regular expression in pattern
matches any
character field in an entry. By default, all values are
returned. delete_entry
removes an existing entry from the
registry.
set_entry
, delete_entry
and modify_entry
require a named list
of arguments used as field entries.
At least the index fields are required.
set_entry
will check for all other mandatory fields. If specified in the field
meta data, each field entry and the entry as a whole is checked for
validity. Note that it is possible to specify a vector of values for
an index field, treated as alternative keys for this entry.
It is possible to restrict permissions (for setting, getting, deleting
and modifying entries) using restrict_permissions
. Further, a
user can seal the current registry state (fields, entries) so
that existing structure and information becomes
immutable. Additional fields and entries can be changed according to the
permissions set. Permissions and sealing are useful for exported
registry objects to control the users' capabilities of
modifying/extending them.
David Meyer [email protected]
regobj <- registry() regobj$set_field("X", type = TRUE) regobj$set_field("Y", type = "character") regobj$set_field("index", type = "character", is_key = TRUE, index_FUN = match_partial_ignorecase) regobj$set_field("index2", type = "integer", is_key = TRUE) regobj$set_entry(X = TRUE, Y = "bla", index = "test", index2 = 1L) regobj$set_entry(X = FALSE, Y = "foo", index = c("test", "bar"), index2 = 2L) regobj$get_entries("test") regobj[["test", 1]] regobj["test"] regobj[["test"]]
regobj <- registry() regobj$set_field("X", type = TRUE) regobj$set_field("Y", type = "character") regobj$set_field("index", type = "character", is_key = TRUE, index_FUN = match_partial_ignorecase) regobj$set_field("index2", type = "integer", is_key = TRUE) regobj$set_entry(X = TRUE, Y = "bla", index = "test", index2 = 1L) regobj$set_entry(X = FALSE, Y = "foo", index = c("test", "bar"), index2 = 2L) regobj$get_entries("test") regobj[["test", 1]] regobj["test"] regobj[["test"]]