Plato on Github
Report Home
lib/nestorninjablocks.js
Maintainability
70.09
Lines of code
50
Difficulty
11.74
Estimated Errors
0.32
Function weight
By Complexity
By SLOC
var _ = require('lodash'); var ninjaBlocks = require('ninja-blocks'); /** * class NestorNinjaBlocks * * @param {String} token: Ninja Blocks API Access Token https://a.ninja.is/hacking * @param {String} opts: optional * - map: status-hexcolour map, defaults to { OK: '00FF00', FAIL: 'FF0000', WARN: 'FFFF00' } */ function NestorNinjaBlocks(token, opts) { this.token = token; this.opts = opts; const MAP = { ok : '00FF00', fail: 'FF0000', warn: 'FFFF00' }; this.opts.map = this.opts.map || MAP; } /** * Notify build status as a colour on Ninja Blocks device LED. * * @param {String} status: build status */ NestorNinjaBlocks.prototype.notify = function (status) { const UNKNOWN = 'FFFFFF'; var colour = this.opts.map[status] || UNKNOWN; var app = ninjaBlocks.app({ user_access_token: this.token }); app.devices({ device_type: 'rgbled', default_name: 'Nina\'s Eyes' }, function(err, devices) { if (err) { // ninjablocks API passes the payload directly as error instead of a proper Error object // e.g. { statusCode: 200, error: 'Unauthorised' } console.error(err.error); } else if (!_.isEmpty(devices)) { Object.keys(devices).forEach(function (key) { console.log('Setting rgbled device colour to %s for status %s', colour, status); app.device(key).actuate(colour); }); } else { console.warn('No rgbled device found'); } }); }; module.exports = NestorNinjaBlocks;