Nothing
#' Methods for ShojiTuples
#'
#' ShojiTuples are objects extracted from ShojiCatalogs. They are internally
#' used.
#'
#' @param x a Tuple
#' @param name a Tuple slot to get or set
#' @param i In [[, a Tuple slot to get
#' @param value What to set in a given slot
#' @name tuple-methods
#' @aliases entity
#' @keywords internal
NULL
#' @rdname tuple-methods
#' @export
setMethod("refresh", "ShojiTuple", function(x) {
dropCache(x@index_url)
catalog <- ShojiCatalog(crGET(x@index_url))
tup <- catalog[[x@entity_url]]
if (is.null(tup)) {
## Get the object type from the (sub)class name
cls <- sub("Tuple$", "", class(x))
if (cls == "Shoji") cls <- "Object"
halt(cls, " not found. It may have been deleted.")
}
x@body <- tup
return(x)
})
#' @rdname tuple-methods
#' @export
setMethod("$", "ShojiTuple", function(x, name) x@body[[name]])
#' @rdname tuple-methods
#' @export
setMethod("$<-", "ShojiTuple", function(x, name, value) {
x@body[[name]] <- value
return(x)
})
#' @rdname tuple-methods
#' @export
setMethod("[[", "ShojiTuple", function(x, i) x@body[[i]])
#' @rdname tuple-methods
#' @export
setMethod("[[<-", "ShojiTuple", function(x, i, value) {
x@body[[i]] <- value
return(x)
})
setTupleSlot <- function(x, name, value) {
if (!inherits(x, "ShojiTuple")) {
tuple(x) <- setTupleSlot(tuple(x), name, value)
} else if (!identical(x[[name]], value)) {
## Skip updating if not modified
x[[name]] <- value
payload <- toJSON(structure(list(structure(list(value), .Names = name)),
.Names = x@entity_url
))
crPATCH(x@index_url, body = payload)
}
invisible(x)
}
#' @rdname tuple-methods
#' @export
setMethod("self", "ShojiTuple", function(x) x@entity_url)
#' @rdname tuple-methods
#' @export
setMethod("entity", "VariableTuple", function(x) {
return(VariableEntity(crGET(x@entity_url)))
})
#' @rdname tuple-methods
#' @export
setMethod("entity", "CrunchVariable", function(x) {
return(VariableEntity(crGET(self(x))))
})
#' @rdname tuple-methods
#' @export
setMethod("entity", "DatasetTuple", function(x) {
return(as.dataset(crGET(x@entity_url), tuple = x))
})
#' @rdname tuple-methods
#' @export
setMethod("id", "DatasetTuple", function(x) x$id)
#' @rdname tuple-methods
#' @export
setMethod("name", "ShojiTuple", vget("name"))
#' @rdname tuple-methods
#' @export
setMethod(
"name<-", "ShojiTuple",
function(x, value) setTupleSlot(x, "name", validateNewName(value))
)
#' @rdname tuple-methods
#' @export
setMethod("type", "ShojiTuple", vget("type"))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.