Mercurial > repos > prog > lcmsmatching
diff BiodbObject.R @ 2:20d69a062da3 draft
planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit d4048accde6bdfd5b3e14f5394902d38991854f8
author | prog |
---|---|
date | Thu, 02 Mar 2017 08:55:00 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BiodbObject.R Thu Mar 02 08:55:00 2017 -0500 @@ -0,0 +1,32 @@ +########################## +# CLASS DECLARATION {{{1 # +########################## + +BiodbObject <- methods::setRefClass("BiodbObject", fields = list( .observers = "ANY" )) + +######################## +# ABSTRACT METHOD {{{1 # +######################## + +BiodbObject$methods( .abstract.method = function() { + + class <- class(.self) + method <- sys.call(length(sys.calls()) - 1) + method <- sub('^[^$]*\\$([^(]*)\\(.*$', '\\1()', method) + + stop(paste("Method", method, "is not implemented in", class, "class.")) +}) + +###################### +# ADD OBSERVERS {{{1 # +###################### + +BiodbObject$methods( addObservers = function(obs) { + + # Check types of observers + if ( ( ! is.list(obs) && ! inherits(obs, "BiodbObserver")) || (is.list(obs) && any( ! vapply(obs, function(o) inherits(o, "BiodbObserver"), FUN.VALUE = TRUE)))) + stop("Observers must inherit from BiodbObserver class.") + + # Add observers to current list + .observers <<- if (is.null(.self$.observers)) c(obs) else c(.self$.observers, obs) +})