diff --git a/DESCRIPTION b/DESCRIPTION
index 97c6778..e0e2168 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -18,7 +18,8 @@ Imports:
stringi,
jsonlite,
processx,
- dplyr
+ dplyr,
+ tibble,
Language: fr
Encoding: UTF-8
LazyData: true
diff --git a/NAMESPACE b/NAMESPACE
index e398f52..572d5ca 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -7,3 +7,4 @@ import(stringi)
import(jsonlite)
import(processx)
import(dplyr)
+import(tibble)
diff --git a/R/client.R b/R/client.R
index a3a9b21..e07f907 100644
--- a/R/client.R
+++ b/R/client.R
@@ -32,7 +32,6 @@ préparerNomFoncMessage <- function(nomFonction) {
#' mais plutôt d'appeler `constellationR::avecClientEtServeur`, ou bien `constellationR::avecClient`, lesquels
#' s'occuperont de la création et de la fermeture du client pour vous.
#'
-#' @field port Le numéro du port local sur lequel le serveur est ouvert, et auquel le client se connectera.
#'
#' @export
Client <- R6Class(
@@ -47,6 +46,9 @@ Client <- R6Class(
),
public = list(
+ #'
+ #' @param port Le numéro du port local sur lequel le serveur est ouvert, et auquel le client se connectera.
+ #'
initialize = function(
port
) {
@@ -132,7 +134,16 @@ Client <- R6Class(
},
- action = function(fonction, paramètres = NULL) {
+ #' Fonction pour invoquer un action sur Constellation.
+ #'
+ #' @param fonction Le nom de la fonction à invoquer (p. ex., "variables.créerVariable")
+ #' @param paramètres Liste nommée avec les paramètres de la fonction
+ #' @param patience Le nombre de secondes qu'on va attendre pour une réponse
+ #' avant de perdre patience.
+ #'
+ #' @return Le résultat ded la fonction invoquée.
+ #'
+ action = function(fonction, paramètres = NULL, patience = 15) {
nomFonction <- résoudreNomFonction(fonction)
id <- uuid::UUIDgenerate()
@@ -156,12 +167,29 @@ Client <- R6Class(
private$envoyerMessage(messageAction)
- retry::wait_until(isTRUE(résultatReçu), timeout = 30)
+ retry::wait_until(isTRUE(résultatReçu), timeout = patience)
return(résultat)
},
- suivre = function(fonction, paramètres = NULL, nomArgFonction='f', condition=function(x) !is.null(x)) {
+ #' Fonction pour invoquer un suivi sur Constellation.
+ #'
+ #' @param fonction Le nom de la fonction à invoquer (p. ex., "profil.suivreNoms")
+ #' @param paramètres Liste nommée avec les paramètres de la fonction
+ #' @param nomArgFonction Le nom du paramètre correspondant à la
+ #' fonction de suivi (voir documentation IPA Constellation).
+ #' "f" par défaut.
+ #' @param condition Condition nécessaire pour valider le premier résultat
+ #' à retourner. Uniquement utilisé si `paramètres[[nomArgFonction]]` n'existe pas.
+ #' @param patience Le nombre de secondes qu'on va attendre pour une réponse
+ #' avant de perdre patience.
+ #'
+ #' @return Si `paramètres[[nomArgFonction]]` existe, cette fonction sera invoqué de manière
+ #' continue chaque fois que les résultats changent, et la fonction
+ #' `suivre` elle-même retournera une fonction pour annuler le suivi.
+ #' Si `paramètres[[nomArgFonction]]` n'existe pas, retourne le premier résultat obtenu.
+ #'
+ suivre = function(fonction, paramètres = NULL, nomArgFonction='f', condition=function(x) !is.null(x), patience = 15) {
nomFonction <- résoudreNomFonction(fonction)
id <- uuid::UUIDgenerate()
@@ -194,19 +222,35 @@ Client <- R6Class(
)
private$envoyerMessage(messageSuivi)
- retry::wait_until(!is.null(fOublier), timeout = 30)
+ retry::wait_until(!is.null(fOublier), timeout = patience)
if (appelléAvecFonction) {
return(fOublier)
} else {
- retry::wait_until(condition(résultatSuivi), timeout = 30)
+ retry::wait_until(condition(résultatSuivi), timeout = patience)
fOublier()
return(résultatSuivi)
}
},
- rechercher = function(fonction, paramètres, nomArgFonction = "f") {
+ #' Fonction pour invoquer une recherche sur Constellation.
+ #'
+ #' @param fonction Le nom de la fonction à invoquer (p. ex., "recherche.rechercherVariablesSelonNom")
+ #' @param paramètres Liste nommée avec les paramètres de la fonction
+ #' @param nomArgFonction Le nom du paramètre correspondant à la fonction
+ #' de suivi (voir documentation IPA Constellation).
+ #' "f" par défaut.
+ #' @param patience Le nombre de secondes qu'on va attendre pour une réponse
+ #' avant de perdre patience.
+ #'
+ #' @return Si `paramètres[[nomArgFonction]]` existe, cette fonction sera invoqué de manière
+ #' continue chaque fois que les résultats de la recherche changent, et la fonction
+ #' `recherche` elle-même retournera des fonctions pour annuler la recherche et pour
+ #' changer le nombre de résultats désirés. Si `paramètres[[nomArgFonction]]` n'existe
+ #' pas, retourne le premier résultat obtenu par la recherche.
+ #'
+ rechercher = function(fonction, paramètres, nomArgFonction = "f", patience = 15) {
nomFonction <- résoudreNomFonction(fonction)
id <- uuid::UUIDgenerate()
@@ -239,43 +283,70 @@ Client <- R6Class(
)
private$envoyerMessage(messageSuivi)
- retry::wait_until(!is.null(retour), timeout = 30)
+ retry::wait_until(!is.null(retour), timeout = patience)
if (appelléAvecFonction) {
return(retour)
} else {
- retry::wait_until(!is.null(résultatRecherche), timeout = 30)
+ retry::wait_until(!is.null(résultatRecherche), timeout = patience)
retour$fOublier()
return(résultatRecherche)
}
},
- appeler = function(fonction, paramètres = NULL, nomArgFonction='f') {
+ #' Fonction pour invoquer une fonction (action, recherche, ou suivi)
+ #' de Constellation.
+ #'
+ #' @param fonction Le nom de la fonction à invoquer (p. ex., "bds.créerBd")
+ #' @param paramètres Liste nommée avec les paramètres de la fonction, si approprié
+ #' @param nomArgFonction S'il s'agit d'un fonction de suivi ou de recherche, le nom du paramètre
+ #' correspondant à la fonction de suivi (voir documentation IPA Constellation).
+ #' "f" par défaut.
+ #' @param patience Le nombre de secondes qu'on va attendre pour une réponse
+ #' avant de perdre patience.
+ #'
+ #' @return Le résultat de la fonction
+ #'
+ appeler = function(fonction, paramètres = NULL, nomArgFonction='f', patience = 45) {
typeFonction <- constellationR::résoudreTypeFonction(fonction)
if (typeFonction == "action") {
return(
- self$action(fonction=fonction, paramètres = paramètres)
+ self$action(fonction=fonction, paramètres = paramètres, patience = patience)
)
} else if (typeFonction == "suivi") {
return(
self$suivre(
- fonction=fonction, paramètres = paramètres, nomArgFonction = nomArgFonction
+ fonction=fonction, paramètres = paramètres, nomArgFonction = nomArgFonction, patience = patience
)
)
} else if (typeFonction == "recherche") {
return(
self$rechercher(
- fonction = fonction, paramètres = paramètres, nomArgFonction=nomArgFonction
+ fonction = fonction, paramètres = paramètres, nomArgFonction=nomArgFonction, patience = patience
)
)
}
},
+ #' Méthode privée. Touche pas.
+ #'
+ #' @param id Identifiant unique
+ #' @param résoudre Fonction résolution
+ #' @param rejeter Fonction rejet
+ #' @param f Fonction de suivi
+ #'
enregistrerÉcoute = function(id, résoudre, rejeter, f=NULL) {
private$écouteurs[[id]] <- list(résoudre=résoudre, rejeter=rejeter, f=f)
},
+ #' Fonction rapide pour obtenir des données d'un tableau en format tibble
+ #'
+ #' @param idTableau L'identifiant du tableau
+ #' @param langues Liste optionnelle des langues (en ordre de préférence) dans lesquelles on veut obtenir les résultats
+ #'
+ #' @return Les données en format tibble::tibble
+ #'
obtDonnéesTableau = function(idTableau, langues=NULL) {
données <- self$suivre(
"tableaux.suivreDonnéesExportation",
@@ -286,6 +357,33 @@ Client <- R6Class(
return(td)
},
+ #' Fonction rapide pour obtenir des données d'une nuée en format tibble
+ #'
+ #' @param idNuée L'identifiant de la nuée
+ #' @param clefTableau La clef du tableau d'intérêt
+ #' @param langues Liste optionnelle des langues (en ordre de préférence) dans lesquelles on veut obtenir les résultats
+ #' @param nRésultatsDésirés Le nombre de résultats désirés
+ #'
+ #' @return Les données en format tibble::tibble
+ #'
+ obtDonnéesTableauNuée = function(
+ idNuée, clefTableau, nRésultatsDésirés=100, langues=NULL
+ ) {
+ données <- self$suivre(
+ "nuées.suivreDonnéesExportationTableau",
+ paramètres = list(
+ idNuée=idNuée,
+ clefTableau=clefTableau,
+ nRésultatsDésirés=nRésultatsDésirés,
+ langues=langues
+ )
+ )
+
+ return(donnéesNuéeÀTrame(données["données"]))
+ },
+
+ #' Fermer le client
+ #'
fermer = function() {
private$ws$close()
}
diff --git a/R/utils.R b/R/utils.R
index 9a00d8d..b83f414 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -50,11 +50,16 @@ résoudreNomFonction <- function(nomFonction) {
#' @return Une trame de données en format tibble R
#'
#' @examples
-#' données <- jsonlite::fromJSON("{\"données\":[{\"a050decf-fc58-4283-8b85-0b791041aaa9\":123},{\"6a5dfef5-2e7e-46c2-bbe0-134cce21fd66\":\"abc\",\"a050decf-fc58-4283-8b85-0b791041aaa9\":456}]}", simplifyDataFrame = FALSE)
+#' données <- jsonlite::fromJSON("{
+#' \"données\":[{
+#' \"col1\":123},{\"col2\":\"abc\",\"col1\":456}
+#' ]}"
+#' , simplifyDataFrame = FALSE
+#' )
#' td <- donnéesTableauÀTrame(données["données"])
#'
donnéesTableauÀTrame <- function(données) {
- colonnes <- unique(unlist(sapply(données[[1]], function (x) names(x))))
+ colonnes <- unique(unlist(as.vector(sapply(données[[1]], function (x) names(x)))))
nRangées <- length(données[[1]])
trame_données <- data.frame(matrix(nrow=nRangées, ncol=length(colonnes)))
@@ -62,6 +67,28 @@ donnéesTableauÀTrame <- function(données) {
for (colonne in colonnes) {
trame_données[[colonne]] <- sapply(données[[1]], function (x) if (is.null(x[[colonne]])) NA else x[[colonne]])
}
-
return(as_tibble(trame_données))
}
+
+#' Transforme des données de nuée de format Constellation en
+#' format de trame de données tibble R.
+#'
+#' @param données Les données provenant de Constellation
+#'
+#' @return Une trame de données en format tibble R
+#'
+#' @examples
+#' données <- jsonlite::fromJSON(
+#' "{\"données\":[
+#' {\"col1\":123,
+#' \"auteur\": \"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"},
+#' {\"col2\":\"abc\",\"col1\":456,
+#' \"auteur\": \"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"
+#' }]}",
+#' simplifyDataFrame = FALSE
+#' )
+#' td <- donnéesTableauÀTrame(données["données"])
+#'
+donnéesNuéeÀTrame <- function(données) {
+ return(donnéesTableauÀTrame(données))
+}
diff --git a/man/Client.Rd b/man/Client.Rd
index 6293704..f6175b2 100644
--- a/man/Client.Rd
+++ b/man/Client.Rd
@@ -8,20 +8,6 @@ Cette classe se connecte à un serveur Constellation déjà ouvert. Nous vous re
mais plutôt d'appeler `constellationR::avecClientEtServeur`, ou bien `constellationR::avecClient`, lesquels
s'occuperont de la création et de la fermeture du client pour vous.
}
-\section{Public fields}{
-\if{html}{\out{
}}
-\describe{
-\item{\code{port}}{Le numéro du port local sur lequel le serveur est ouvert, et auquel le client se connectera.}
-}
-\if{html}{\out{
}}
-}
-\section{Active bindings}{
-\if{html}{\out{}}
-\describe{
-\item{\code{port}}{Le numéro du port local sur lequel le serveur est ouvert, et auquel le client se connectera.}
-}
-\if{html}{\out{
}}
-}
\section{Methods}{
\subsection{Public methods}{
\itemize{
@@ -31,6 +17,8 @@ s'occuperont de la création et de la fermeture du client pour vous.
\item \href{#method-ClientConstellation-rechercher}{\code{Client$rechercher()}}
\item \href{#method-ClientConstellation-appeler}{\code{Client$appeler()}}
\item \href{#method-ClientConstellation-enregistrerÉcoute}{\code{Client$enregistrerÉcoute()}}
+\item \href{#method-ClientConstellation-obtDonnéesTableau}{\code{Client$obtDonnéesTableau()}}
+\item \href{#method-ClientConstellation-obtDonnéesTableauNuée}{\code{Client$obtDonnéesTableauNuée()}}
\item \href{#method-ClientConstellation-fermer}{\code{Client$fermer()}}
\item \href{#method-ClientConstellation-clone}{\code{Client$clone()}}
}
@@ -43,42 +31,153 @@ s'occuperont de la création et de la fermeture du client pour vous.
\if{html}{\out{}}\preformatted{Client$new(port)}\if{html}{\out{
}}
}
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{port}}{Le numéro du port local sur lequel le serveur est ouvert, et auquel le client se connectera.
+
+Fonction pour invoquer un action sur Constellation.}
+}
+\if{html}{\out{
}}
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
\if{latex}{\out{\hypertarget{method-ClientConstellation-action}{}}}
\subsection{Method \code{action()}}{
\subsection{Usage}{
-\if{html}{\out{}}\preformatted{Client$action(fonction, paramètres = NULL)}\if{html}{\out{
}}
+\if{html}{\out{}}\preformatted{Client$action(fonction, paramètres = NULL, patience = 15)}\if{html}{\out{
}}
+}
+
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{fonction}}{Le nom de la fonction à invoquer (p. ex., "variables.créerVariable")}
+
+\item{\code{paramètres}}{Liste nommée avec les paramètres de la fonction}
+
+\item{\code{patience}}{Le nombre de secondes qu'on va attendre pour une réponse
+avant de perdre patience.}
}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Le résultat ded la fonction invoquée.
+Fonction pour invoquer un suivi sur Constellation.
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
\if{latex}{\out{\hypertarget{method-ClientConstellation-suivre}{}}}
\subsection{Method \code{suivre()}}{
\subsection{Usage}{
-\if{html}{\out{}}\preformatted{Client$suivre(fonction, paramètres = NULL, nomArgFonction = "f")}\if{html}{\out{
}}
+\if{html}{\out{}}\preformatted{Client$suivre(
+ fonction,
+ paramètres = NULL,
+ nomArgFonction = "f",
+ condition = function(x) !is.null(x),
+ patience = 15
+)}\if{html}{\out{
}}
}
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{fonction}}{Le nom de la fonction à invoquer (p. ex., "profil.suivreNoms")}
+
+\item{\code{paramètres}}{Liste nommée avec les paramètres de la fonction}
+
+\item{\code{nomArgFonction}}{Le nom du paramètre correspondant à la
+fonction de suivi (voir documentation IPA Constellation).
+"f" par défaut.}
+
+\item{\code{condition}}{Condition nécessaire pour valider le premier résultat
+à retourner. Uniquement utilisé si `paramètres[[nomArgFonction]]` n'existe pas.}
+
+\item{\code{patience}}{Le nombre de secondes qu'on va attendre pour une réponse
+avant de perdre patience.}
+}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Si `paramètres[[nomArgFonction]]` existe, cette fonction sera invoqué de manière
+continue chaque fois que les résultats changent, et la fonction
+`suivre` elle-même retournera une fonction pour annuler le suivi.
+Si `paramètres[[nomArgFonction]]` n'existe pas, retourne le premier résultat obtenu.
+
+Fonction pour invoquer une recherche sur Constellation.
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
\if{latex}{\out{\hypertarget{method-ClientConstellation-rechercher}{}}}
\subsection{Method \code{rechercher()}}{
\subsection{Usage}{
-\if{html}{\out{}}\preformatted{Client$rechercher(fonction, paramètres, nomArgFonction = "f")}\if{html}{\out{
}}
+\if{html}{\out{}}\preformatted{Client$rechercher(fonction, paramètres, nomArgFonction = "f", patience = 15)}\if{html}{\out{
}}
}
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{fonction}}{Le nom de la fonction à invoquer (p. ex., "recherche.rechercherVariablesSelonNom")}
+
+\item{\code{paramètres}}{Liste nommée avec les paramètres de la fonction}
+
+\item{\code{nomArgFonction}}{Le nom du paramètre correspondant à la fonction
+de suivi (voir documentation IPA Constellation).
+"f" par défaut.}
+
+\item{\code{patience}}{Le nombre de secondes qu'on va attendre pour une réponse
+avant de perdre patience.}
+}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Si `paramètres[[nomArgFonction]]` existe, cette fonction sera invoqué de manière
+continue chaque fois que les résultats de la recherche changent, et la fonction
+`recherche` elle-même retournera des fonctions pour annuler la recherche et pour
+changer le nombre de résultats désirés. Si `paramètres[[nomArgFonction]]` n'existe
+pas, retourne le premier résultat obtenu par la recherche.
+
+Fonction pour invoquer une fonction (action, recherche, ou suivi)
+de Constellation.
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
\if{latex}{\out{\hypertarget{method-ClientConstellation-appeler}{}}}
\subsection{Method \code{appeler()}}{
\subsection{Usage}{
-\if{html}{\out{}}\preformatted{Client$appeler(fonction, paramètres = NULL, nomArgFonction = "f")}\if{html}{\out{
}}
+\if{html}{\out{}}\preformatted{Client$appeler(
+ fonction,
+ paramètres = NULL,
+ nomArgFonction = "f",
+ patience = 45
+)}\if{html}{\out{
}}
}
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{fonction}}{Le nom de la fonction à invoquer (p. ex., "bds.créerBd")}
+
+\item{\code{paramètres}}{Liste nommée avec les paramètres de la fonction, si approprié}
+
+\item{\code{nomArgFonction}}{S'il s'agit d'un fonction de suivi ou de recherche, le nom du paramètre
+correspondant à la fonction de suivi (voir documentation IPA Constellation).
+"f" par défaut.}
+
+\item{\code{patience}}{Le nombre de secondes qu'on va attendre pour une réponse
+avant de perdre patience.}
+}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Le résultat de la fonction
+
+Méthode privée. Touche pas.
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
@@ -88,6 +187,76 @@ s'occuperont de la création et de la fermeture du client pour vous.
\if{html}{\out{}}\preformatted{Client$enregistrerÉcoute(id, résoudre, rejeter, f = NULL)}\if{html}{\out{
}}
}
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{id}}{Identifiant unique}
+
+\item{\code{résoudre}}{Fonction résolution}
+
+\item{\code{rejeter}}{Fonction rejet}
+
+\item{\code{f}}{Fonction de suivi
+
+Fonction rapide pour obtenir des données d'un tableau en format tibble}
+}
+\if{html}{\out{
}}
+}
+}
+\if{html}{\out{
}}
+\if{html}{\out{}}
+\if{latex}{\out{\hypertarget{method-ClientConstellation-obtDonnéesTableau}{}}}
+\subsection{Method \code{obtDonnéesTableau()}}{
+\subsection{Usage}{
+\if{html}{\out{}}\preformatted{Client$obtDonnéesTableau(idTableau, langues = NULL)}\if{html}{\out{
}}
+}
+
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{idTableau}}{L'identifiant du tableau}
+
+\item{\code{langues}}{Liste optionnelle des langues (en ordre de préférence) dans lesquelles on veut obtenir les résultats}
+}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Les données en format tibble::tibble
+
+Fonction rapide pour obtenir des données d'une nuée en format tibble
+}
+}
+\if{html}{\out{
}}
+\if{html}{\out{}}
+\if{latex}{\out{\hypertarget{method-ClientConstellation-obtDonnéesTableauNuée}{}}}
+\subsection{Method \code{obtDonnéesTableauNuée()}}{
+\subsection{Usage}{
+\if{html}{\out{}}\preformatted{Client$obtDonnéesTableauNuée(
+ idNuée,
+ clefTableau,
+ nRésultatsDésirés = 100,
+ langues = NULL
+)}\if{html}{\out{
}}
+}
+
+\subsection{Arguments}{
+\if{html}{\out{}}
+\describe{
+\item{\code{idNuée}}{L'identifiant de la nuée}
+
+\item{\code{clefTableau}}{La clef du tableau d'intérêt}
+
+\item{\code{nRésultatsDésirés}}{Le nombre de résultats désirés}
+
+\item{\code{langues}}{Liste optionnelle des langues (en ordre de préférence) dans lesquelles on veut obtenir les résultats}
+}
+\if{html}{\out{
}}
+}
+\subsection{Returns}{
+Les données en format tibble::tibble
+
+Fermer le client
+}
}
\if{html}{\out{
}}
\if{html}{\out{}}
diff --git a/man/donn-esNu-e-Trame.Rd b/man/donn-esNu-e-Trame.Rd
new file mode 100644
index 0000000..6e1b10e
--- /dev/null
+++ b/man/donn-esNu-e-Trame.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils.R
+\name{donnéesNuéeÀTrame}
+\alias{donnéesNuéeÀTrame}
+\title{Transforme des données de nuée de format Constellation en
+format de trame de données tibble R.}
+\usage{
+donnéesNuéeÀTrame(données)
+}
+\arguments{
+\item{données}{Les données provenant de Constellation}
+}
+\value{
+Une trame de données en format tibble R
+}
+\description{
+Transforme des données de nuée de format Constellation en
+format de trame de données tibble R.
+}
+\examples{
+données <- jsonlite::fromJSON(
+ "{\"données\":[
+ {\"col1\":123,
+ \"auteur\": \"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"},
+ {\"col2\":\"abc\",\"col1\":456,
+ \"auteur\": \"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"
+ }]}",
+ simplifyDataFrame = FALSE
+ )
+td <- donnéesTableauÀTrame(données["données"])
+
+}
diff --git a/man/donn-esTableau-Trame.Rd b/man/donn-esTableau-Trame.Rd
new file mode 100644
index 0000000..d244d9c
--- /dev/null
+++ b/man/donn-esTableau-Trame.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils.R
+\name{donnéesTableauÀTrame}
+\alias{donnéesTableauÀTrame}
+\title{Transforme des données de tableau de format Constellation en
+format de trame de données tibble R.}
+\usage{
+donnéesTableauÀTrame(données)
+}
+\arguments{
+\item{données}{Les données provenant de Constellation}
+}
+\value{
+Une trame de données en format tibble R
+}
+\description{
+Transforme des données de tableau de format Constellation en
+format de trame de données tibble R.
+}
+\examples{
+données <- jsonlite::fromJSON("{
+ \"données\":[{
+ \"col1\":123},{\"col2\":\"abc\",\"col1\":456}
+ ]}"
+ , simplifyDataFrame = FALSE
+ )
+td <- donnéesTableauÀTrame(données["données"])
+
+}
diff --git a/tests/testthat/test-client.R b/tests/testthat/test-client.R
index 7a6688b..5ea17db 100644
--- a/tests/testthat/test-client.R
+++ b/tests/testthat/test-client.R
@@ -162,7 +162,6 @@ avecClientEtServeurTest(
vals2 <- list()
vals2[[idCol]] <- 456
vals2[[idColC]] <- "abc"
- print(list(vals1, vals2))
client$appeler(
"tableaux.ajouterÉlément",
@@ -177,9 +176,52 @@ avecClientEtServeurTest(
testthat::expect_equal(donnéesTableau, référence)
})
+})
+avecClientEtServeurTest(
+ function (client) {
testthat::test_that("Obtenir données nuée", {
+ clefTableau <- "clef"
+
+ idNuée <- client$appeler("nuées.créerNuée")
+ idVariable <- client$appeler("variables.créerVariable", list(catégorie="numérique"))
+ idTableau <- client$appeler("nuées.ajouterTableauNuée", list(
+ idNuée=idNuée,
+ clefTableau=clefTableau
+ ))
+ idCol <- client$appeler('nuées.ajouterColonneTableauNuée', list(
+ idTableau=idTableau,
+ idVariable=idVariable
+ ))
+ schéma <- client$appeler("nuées.générerSchémaBdNuée", list(
+ idNuée=idNuée, licence="ODbl-1_0"
+ ), patience = 60)
+
+ vals1 <- list()
+ vals1[[idCol]] <- 123
+ vals2 <- list()
+ vals2[[idCol]] <- 456
+ client$appeler("bds.ajouterÉlémentÀTableauUnique", list(
+ schémaBd=schéma,
+ idNuéeUnique=idNuée,
+ clefTableau=clefTableau,
+ vals=list(vals1, vals2)
+ ))
+
+ données <- client$obtDonnéesTableauNuée(
+ idNuée=idNuée, clefTableau=clefTableau,
+ nRésultatsDésirés=100
+ )
+
+ idCompte <- client$appeler("obtIdCompte")
+
+ référence <- tibble::tibble(colNumérique=c(123, 456), auteur=c(idCompte, idCompte))
+ names(référence)[names(référence) == "colNumérique"] <- idCol
+
+ testthat::expect_equal(
+ données, référence
+ )
})
}
)
diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R
index b22949d..d62401d 100644
--- a/tests/testthat/test-utils.R
+++ b/tests/testthat/test-utils.R
@@ -21,11 +21,49 @@ testthat::test_that("Auto-détection type recherche", {
testthat::expect_equal(résolu, "recherche")
})
-testthat::test_that("Conversion données tableau", {
+testthat::test_that("Conversion données tableau - une valeur vide", {
données <- jsonlite::fromJSON(
"{\"données\":[{\"col1\":123},{\"col2\":\"abc\",\"col1\":456}]}",
simplifyDataFrame = FALSE
)
td <- donnéesTableauÀTrame(données["données"])
- testthat::expect_equal(td, tibble(col1=c(123, 456), col2=c(NA, "abc")))
+ testthat::expect_equal(td, tibble::tibble(col1=c(123, 456), col2=c(NA, "abc")))
+})
+
+testthat::test_that("Conversion données tableau - données vides", {
+ données <- jsonlite::fromJSON(
+ "{\"données\":[]}",
+ simplifyDataFrame = FALSE
+ )
+ td <- donnéesTableauÀTrame(données["données"])
+ testthat::expect_equal(td, tibble::tibble())
+})
+
+testthat::test_that("Conversion données nuées - toutes valeurs présentes", {
+ auteur <- "/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH"
+ données <- jsonlite::fromJSON(
+ "{\"données\":[{\"col1\":123,\"auteur\":\"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"},{\"col1\":456,\"auteur\":\"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"}]}",
+ simplifyDataFrame = FALSE
+ )
+ td <- donnéesTableauÀTrame(données["données"])
+ testthat::expect_equal(td, tibble(col1=c(123, 456), auteur=c(auteur, auteur)))
+})
+
+testthat::test_that("Conversion données nuées - une valeur vide", {
+ auteur <- "/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH"
+ données <- jsonlite::fromJSON(
+ "{\"données\":[{\"col1\":123,\"auteur\":\"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"},{\"col1\":456,\"col2\":\"abc\",\"auteur\":\"/orbitdb/zdpuB1wjvzSEsY9YZ4Z2kUEX2DLzwV9G8LCQnzfLccHgY1LdH\"}]}",
+ simplifyDataFrame = FALSE
+ )
+ td <- donnéesTableauÀTrame(données["données"])
+ testthat::expect_equal(td, tibble::tibble(col1=c(123, 456), auteur=c(auteur, auteur), col2=c(NA, "abc")))
+})
+
+testthat::test_that("Conversion données nuée - données vides", {
+ données <- jsonlite::fromJSON(
+ "{\"données\":[]}",
+ simplifyDataFrame = FALSE
+ )
+ td <- donnéesTableauÀTrame(données["données"])
+ testthat::expect_equal(td, tibble::tibble())
})