Node CSV version 0.2.1
By WORMS David
24 juil. 2012
- Catégories
- Node.js
- Tags
- CoffeeScript
- CSV
- Versions et évolutions
- Streaming
Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.
Faisant suite à l’annonce de la version 0.2.0 du parser CSV pour Node.js début octobre, aujourd’hui sort la nouvelle version 0.2.1. Il s’agit essentiellement d’une distribution corrigeant des bugs. Toutefois, quelques fonctionnalités intéressantes ont trouvé leur chemin. La documentation du parser a été mise à jour pour refléter ces changements.
Utilisation des évènements pause/resume dans les flux de données
Voir GitHub issue #52 et issue #54.
Merci à Dan Kearns pour avoir découvert ce bug ainsi qu’à Doug Wilson pour fournir cette superbe “pull request”. C’est une correction importante et implique que tous les utilisateurs de la version 0.2.0 soient encouragés à migrer vers cette nouvelle version.
Transformations asynchrones
Voir GitHub issue #30.
Il semblerait que ce fut la fonctionnalité la plus demandée ces derniers jours. Le parser CSV peut désormais accepter deux types de callbacks, synchrones as asynchrones. La distinction se fait en fonction de la signature de ses arguments. Le callback sera appelé en mode asynchrone s’il est défini avec trois paramètres, autrement il sera appelé en mode synchrone. Les exemples suivant illustrent ces deux modes en renversant les colonnes de chaque ligne.
Exemple synchrone :
csv()
.from('a,b\n1,2')
.to(console.log)
.transform (data, index, callback) ->
data.reverse()
Exemple asynchrone :
csv()
.from('a,b\n1,2')
.to(console.log)
.transform (data, index, callback) ->
process.nextTick ->
callback null, data.reverse()
Numéro de ligne dans les erreurs du parseur
Voir GitHub issue #40.
Merci à E. Timothy Uy pour avoir remonté cette demande. L’idée est d’améliorer les messages d’erreur au sein du parseur avec le numéro de la ligne en cours. De plus, une nouvelle propriété est accessible à l’adresse csv().parser.lines
.
Association entre la propriété d’une colonne et son nom
Voir GitHub issue #53.
Cette fonctionnalité revient à Alex Zylman qui avait besoin d’une manière pour afficher ses propres noms de colonnes en sortie. La solution retenue fut de permettre aux options from.options.columns
et to.options.columns
d’être définies en tant qu’objets. Voici un exemple :
data = 'field1,field2,field3\nval1,val2,val3'
csv()
.from(data, columns: true)
.to (data) ->
data.should.eql 'column1,column3\nval1,val3'
next()
, columns: {field1: 'column1', field3: 'column3'}, header: true
Prise en compte de l’UTF BOM
Voir GitHub issue #36 et issue #55.
Cette fonctionnalité a été remontée par E. Timothy Uy](https://github.com/tofutim) et implémenté par Doug Wilson.
Mise à jour de la documentation
Voir GitHub issue #56.
Merci à Kevin Old qui a pris le temps de passer sur chacun des exemples afin de les aligner avec les changements d’API apportés par la version 0.2.0.
Compatibilité avec Node.js < 0.8.x
Il s’agit d’un bug introduit lors de la mise à jour 0.2.0 et de la migration vers Node.js en version 0.8. la fonction path.exists
est renommée fs.exists
. La correction fut simple et consiste à créer une fonction fs.exists
si celle-ci n’existe pas. Voici un extrait du code source :
fs = require 'fs'
path = require 'path'
fs.exists ?= path.exists
Et même plus…
D’autres améliorations telles que rapportées par le fichier de changements sont :
- Transmettre les options dans les fonctions
from
andto
- La fonction
to.string
reçoit le nombre d’éléments écrits - Correction de
from.array
en association avec l’option “column” - Intégration avec Travis
- Plus de documentation, particulièrement au sujet des colonnes et des transformations