Mocha: path to mocha.opts with -f

Mocha is a wonderful (:D) test framework which allows you to write really understandable tests in JavaScript. I’ve already introduced it in a previous article, so today I’ll focus on a pull request I’ve proposed.

Like other programs, you can pass arguments to mocha, like for instance –reporter used to specified a way to display test results. By the way, you should try once the nyan reporter. Concerning mocha, it’s also possible to set arguments in a file named « mocha.opts ». Interesting feature, but the file must absolutely be stored in your test directory.

So the idea is to add an argument: -f, –fileconf <path>. Furthermore, the –fileconf option allows you to specify the configuration file that will be used, by default “/test/mocha.opts”; allowing you to store your configuration file anywhere you wanted. This modification is very useful if you make tests using the same configuration file in many directories. Without –fileconf, you have to copy your file in each directory, and even a small modification must be done on each file. Using -f, you store the mocha.opts file in a unique place, so that any modifications of the file would immediatly impact all tests.

About the code

Add the parameter with commander:

.option('-f,--config <path>','specify the path to configuration file')

Load the file using commander to parse the command line:

//-f, --config
program.parse(process.argv);
var pathConf = 'test/mocha.opts';
if (program.config && exists(program.config)) {
  pathConf = program.config;
}
try {
  var opts = fs.readFileSync(pathConf, 'utf8')
    .trim()
    .split(/\s+/);

  process.argv = process.argv
    .slice(0, 2)
    .concat(opts.concat(process.argv.slice(2)));
} catch (err) {
  // ignore
}

In fact, this code is not available in mocha yet since « parsing twice might have some strange side-effects »…

An other way to augment argv without using commander:

//-f, --config

var pathConf = 'test/mocha.opts'
  , fIndex = process.argv.indexOf('-f')
  , configIndex = process.argv.indexOf('--config');

if(fIndex !== -1 && exists(process.argv[fIndex + 1]) ) {
  pathConf = process.argv[fIndex + 1];
}

if(configIndex !== -1 && exists(process.argv[configIndex + 1]) ) {
  pathConf = process.argv[configIndex + 1];
}

And I’ll finished this article by quoting visionmedia:

Maybe it’s ok but that’s still pretty hacky.

[Film] Fight Club

Fight Club est le film qui inaugure la section Films.

Le héros, est un personnage solitaire, il travaille pour pouvoir acheter les objets qui lui plaisent dans des magazines publicitaires. Jusqu’au moment où il trouve la table basse marquée du ying et du yang le dernier objet qu’il lui manquait dans son appartement.

Mais les péripéties qu’il va vivre après cette heureux événement mettront un terme à la monotonie de sa vie. Il va bientôt rejoindre le Fight Club créé par un énième ami « jetable » qu’il rencontre pas si par hasard que ça lors d’un de ses nombreux voyages en avion dans le cadre de son travail.

Il va remettre en question sa propre existence passée et voir le monde qui l’entoure autrement. Une bonne leçon de morale… Mais attention quand même le film est déconseillé au -16 ans.

Date de sortie 1999.

[Vidéo] The League of Steam

Tout le monde connaît les célèbres Gosthbusters, dotés d’un matériel de pointe dans une Amérique moderne. Il est donc temps de changer d’époque, d’espace temps même, puisque les vidéos de The League of Steam se situe dans « l’époque » SteamPunk. Cette confrérie de chasseur de fantômes et autres manifestations surnaturelles dispose néanmoins de nombreux appareils divers et variés. Il ne recule devant rien… ou presque.

The League of Steam a terminé sa deuxième « saison » de vidéo et une troisième série est d’ores et déjà prévue. Les dialogues sont bien sûr en anglais, mais cela n’empêche en rien de suivre avec plaisir les mésaventures du groupe. Les différents épisodes peuvent pour la plupart être visionnés indépendamment les uns des autres. Le mieux reste de les prendre dans l’ordre chronologique de diffusion.

Voici l’un de mes épisodes préférés de la saison 1.
Direction l’Irlande avec ses créatures fantastiques, et sa musique.

Lien vers «  »Fool’s Gold » – Adventures of the League of STEAM »

Node-Elastical: Delete by query option

What is Elastical?

Elastical is a Node.js client library for the ElasticSearch REST API.

That’s it for the presentation.

Until a few weeks ago, it wasn’t possible to delete data by query without using a hack. The hack was the following:

client.delete('twitter', 'tweet', '', {q: 'user:Shay'} );

Here, we set id to an empty string and we use the options parameter to perform a search on user with value Shay. Not so practical at all.

Using curl to interact with ElasticSearch, it is possible to delete by query:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d ' 
  { "term" : { "user" : "kimchy" } 
}
'

This handy way of deleting things in ElasticSearch was not possible with Elastical (unless, you managed to use the hack above).

So I’ve added a new parameter options.query which allow us to perform such a query more easily.

client.delete('twitter', 'tweet', '', {query:
  { "term" : { "user" : "kimchy" } } 
});

When using the query parameter, id and all other options except ignoreMissing will be ignored.

Let’s take a quick look at the code involved:

if(params.query) {
  url = '/' + encode(this.name) + '/' + encode(type) + '/_query';

  this.client._request(url, {method: 'DELETE', json: params.query}
  , function (err, res) {
    if (err) {
      if (ignoreMissing && res && res.found === false) {
        return callback(null, res), undefined;
      } else {
        return callback(err, res), undefined;
      }
    }
    callback(null, res);
  });
} else {

It’s pretty simple. First, we need to build the url, then we’re requesting ElasticSearch on the given url, passing the query in the json parameter. If options.query doesn’t exist, then the original code is used.

As a conclusion, delete by query is now available in Elastical and you should use it!

 

ElasticSearch: Delete By Query API

Journées Du Logiciel Libre 2012

Ce week-end avait lieu la 14e édition des Journées Du Logiciel Libre à Lyon, l’occasion pour moi donc de retrouver l’ambiance des RMLL en plus petit, mais toujours avec autant de convivialité. Une bonne série de conférence était au programme, plusieurs stands d’associations, des représentants de distribution GNU/Linux, et bien d’autres.

Ce fut donc l’occasion d’aller discuter avec les représentants de la FSFE, l’April, Illyse le fournisseur d’accès associatif du coin, MozillaFr entre autres. Découverte également de la LOLBox, une pirateBox améliorée qui permet de diffuser en live la musique stockée dans la pirateBox, le tout grâce à une magnifique radio Ghetto-blaster d’époque. Découverte également de Movim, réseau social alternatif basé sur le protocole XMPP et discussion avec son créateur. Présentation de Newebe, autre réseau social où chacun héberge son nœud.

Conférence Pourquoi GIMP n’a pas besoin de CMJN, réédition de celle des RMLL 2012 à laquelle je n’avais pas pu assister. Présentation de la campagne Libérez Votre Android! de la FSFE. Je viens d’ailleurs de constater que le mode fastboot est bloqué sur mon téléphone et m’empêche donc de le rooter pour le moment, tout ça à cause de l’opérateur. Bref, deux journées bien remplies, avec comme toujours de nombreuses choses à découvrir.