-
.
Nome della release: Pubblifier
Linguaggio di programmazione: Javascript
Versione: v1
Descrizione: Permette di effettuare un logging più avanzato dei propri script
Data di pubblicazione: 04/02/16
Licenza: MIT
Altro:
Ho scelto questo nome per lo script perché quando mi serve loggare delle informazioni dentro una funzione anonima a cui voglio accedere dopo tramite console, specie per debugging, uso una variabile chiamata _public.
Lo script mette a disposizione un logging diciamo più avanzato, seguendo il tappezzamento del codice diconsole.log()
come metodo di debugging. Esso permette di inserire e poi visualizzare tutti i dati.
Esso è composto da una funzione principale,pubblifier()
, che accetta un input che specifica se vogliamo visualizzare i messaggi che possiamo specificare all'interno e da 3 metodi:.set()
: come argomenti è possibile specificare quanti oggetti si vogliono secondo la seguente struttura.{ name: ... , content: ... }
, dove name è l'identificativo che potete dare all'oggetto da loggare (per poterlo richiamare dopo) e dove content è il valore che volete memorizzare. Quest'ultimo può essere anche un array..getAll( message )
: è un metodo che stampa tutti i risultati memorizzati. Permette di passare un oggetto contenente le frasi che vogliamo mostrare all'inizio e alla fine della stampa dei nostri dati memorizzati. La struttura che segue è la seguente:{ start: "", end: "" }
.get( key, message )
: permette di stampare un elemento preciso, specificando la chiave che avete usato in.add()
. Se content è un array, verrà stampato interamente, elemento per elemento. Inoltre permette di stampare i messaggi: la struttura è la stessa di quella qui sopra.
Per usarlo è necessario incollare pubblifier nel vostro codice; lo potete trovare minified QUI, su PasteBin. E' anche possibile trovare il codice sorgente qui sotto:SPOILER (clicca per visualizzare)CODICE/* * * * * * * * * * * * * * * * * * * * *
* Pubblifier v1 *
* di Alexander Cerutti *
* per http://syra.forumcommunity.net *
* * * * * * * * * * * * * * * * * * * * */
var pubblifier = function(messages){
messages = messages || false;
window.container = window.container || {};
return Object.freeze({
set: function(){
for(i in arguments){ // posso aggiungere quanti oggetti voglio
var m = arguments[i];
container[m.name] = m.content; // m.content può essere un array o una stringa
}
return this;
},
getAll: function(message){
message = message || {};
messages && message.start ? console.log(message.start+"\n") : false;
for(var i in Object.keys(container)) console.info("__: "+Object.keys(container)[i]+" --> "+container[Object.keys(container)[i]]);
messages && message.end ? console.log(message.end+"\n") : false;
return this;
},
get: function(key, message){
message = message || {};
messages && message.start ? console.log(message.start+"\n") : false;
for(var i in Object.keys(container)){
var m = Object.keys(container)[i];
if(m === key)
if(container[m].constructor === Array){
console.info("__: \""+m+"\" is an array");
for(i in container[m]){
console.info(":: ---> "+container[m][i]);
}
} else {
console.info("__: "+m+" --> "+container[m]);
}
}
messages && message.end ? console.log(message.end+"\n") : false;
return this;
}
});
};
Esempi per testare lo script
Come richiesto, allego degli esempi per dimostrare il funzionamento dello script.CODICEvar memory = pubblifier( [ true | false ] )
memory.set({
name: "status_raxell"
, content: "A Raxell puzzano i piedi"
}, {
name: "status_rootkitneo"
, content: "RootkitNeo puzza male"
}, {
name: "status_syra"
, content: "Syra è bella"
});
/* .get() - i messaggi vengono mostrati
* solo se memory riporta parametro true
*/
memory.get("Delle", {
start: " ****** START DEBUG ****** "
, end: " ****** END DEBUG ****** "
});
/* .getAll() - i messaggi vengono mostrati
* solo se memory riporta parametro true
*/
memory.getAll({
start: "****** START DEBUG ******"
, end: "****** END DEBUGGING ******"
});
/* .set() e .get() concatenati.
* I messaggi vengono mostrati solo se
* memory riporta parametro true.
*/
memory.set({
name: "Demme"
, content: "oiccic"
}, {
name: "Dellem"
, content: "ossss"
}, {
name: "Dekke"
, content: "abacadabra"
}).get("Demme", {
start: "****** START DEBUG ******"
, end: "****** END DEBUGGING ******"
});
/* .set() ed .getAll() concatenati.
* I messaggi vengono mostrati solo se
* memory riporta parametro true.
*/
memory.set({
name: "Demme", content: "oiccic"
}, {
name: "Dellem", content: "ossss"
}, {
name: "Dekke", content: "abacadabra"
}).getAll({
start: "****** START DEBUG ******"
, end: "****** END DEBUGGING ******"
});
Spero possa essere utile a qualcuno.
Edited by eXander - 9/3/2016, 13:27. -
boxHiccup.
User deleted
Non capisco la scelta del nome, sembra quasi un sito tipo pastebin
E' figo, però credo sarebbe utile solo nei script grandi.. ma molto grandi lol Alla fine si aggiunge una riga in più del semplice console.log, cioè, con lo script fai
.add()
.add()
.exposeAll();
Normalmente faresti
console.log();
console.log();
Anche se sarebbero due righe in meno, se con exposeAll usassimo le proprietà start ed end.
A parte questo, mi piace il tuo stile, anche se io gestirei i parametri non obbligatori con un typeof, invece che con l'operatore OR.. -
.
Si ammetto che avrei potuto scegliere un nome migliore, però posso sempre cambiarlo. Se hai suggerimenti dimmi pure.
Si, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare.add({ ... }).exposeAll( message )
oppure.add({ ... }).expose( key, message )
?
E comunque non devi fare due volte .add().
Per i parametri obbligatori, con l'aiuto di raxell è stata fatta una guida proprio su questo. Non so se l'hai vista, in caso contrario, eccola qui: https://syra.forumcommunity.net/?t=57950032.CITAZIONEAnche se sarebbero due righe in meno, se con exposeAll usassimo le proprietà start ed end.
A cosa ti riferisci di preciso?. -
boxHiccup.
User deleted
CITAZIONESi, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare .add().exposeAll() ?
Non mi ero accorto che si potesse fare, sarebbe ilreturn {}
circa ad inizio codice che lo permette?CITAZIONEPer i parametri obbligatori, con l'aiuto di raxell è stata fatta una guida proprio su questo. Non so se l'hai vista, in caso contrario, eccola qui: https://syra.forumcommunity.net/?t=57950032.
Sisi, l'avevo già vista, ma comunque sapevo tutto, tranneparams
earguments
, che mi sarebbero davvero utili effettivamente :VCITAZIONEA cosa ti riferisci di preciso?
Se, normalmente vorremmo fare la stessa cosa che si fa usando.exposeAll({start: "a", end: "b"})
dovremmo fareconsole.log("a"); console.log("qualcosa"); console.log("b");
. -
.CITAZIONESi, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare .add().exposeAll() ?
Non mi ero accorto che si potesse fare, sarebbe ilreturn {}
circa ad inizio codice che lo permette?
Esattamente. In pratica tu ritorni un oggetto e puoi chiamare le sue chiavi al termine della funzione, anche in sequenza.CITAZIONEA cosa ti riferisci di preciso?
Se, normalmente vorremmo fare la stessa cosa che si fa usando.exposeAll({start: "a", end: "b"})
dovremmo fareconsole.log("a"); console.log("qualcosa"); console.log("b");
* volessimo,
Si, quindi sarebbe un po' più lungo "diciamo", seppur si parli di solo 3 righe. Comunque permetto di opzionalizzare anche la scrittura dei messaggi.. -
boxHiccup.
User deleted
CITAZIONE* volessimo,
Piccola svistaCITAZIONEEsattamente. In pratica tu ritorni un oggetto e puoi chiamare le sue chiavi al termine della funzione, anche in sequenza.
Eccomi spiegato jQuery
Sì, beh, effettivamente potrebbe tornare utile, anche perché, se non ho letto male il codice si può usare da console, cosa abbastanza comoda, visto che c'è anche la possibilità di ottenere un solo elemento dal log.
Comunque, quelmessage.end
cosa sarebbe?. -
.
message.end
è il messaggio che puoi mostrare alla fine della serie di output.. -
Demøne.
User deleted
Direi che e utile solo per chi è alle prime armi, ma è molto interessante . -
.
Beh, non è detto che sia utile solo a loro, anzi. Potrebbe servire a chiunque, in caso di debug. .