Code coverage report for src/iconsdir.js

Statements: 94.55% (52 / 55)      Branches: 86.36% (19 / 22)      Functions: 100% (8 / 8)      Lines: 94.55% (52 / 55)      Ignored: none     

All files » src/ » iconsdir.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109    1 1 1   1   1     1     1 68 68 68 68     68 34     34 1 1 1     1 34   34   34 34 169 169 169     169         169   169   34 229     34   34           1 85 85   85 169 169 169       169 51     34       34       34 85 33     33     33     33   52 51           1  
'use strict';
 
var fs = require('fs');
var util = require('util');
var fileSorter = require('./filesorter');
 
var Readable = require('stream').Readable;
 
require('string.prototype.codepointat');
 
// Inherit of duplex stream
util.inherits(SVGIconsDirStream, Readable);
 
// Constructor
function SVGIconsDirStream(dir, options) {
  var getMetadata = require('../src/metadata')(options);
  var _this = this;
  var filesInfos;
  var gotFilesInfos = false;
 
  // Ensure new were used
  if(!(this instanceof SVGIconsDirStream)) {
    return new SVGIconsDirStream(dir, options);
  }
 
  if(dir instanceof Array) {
    var dirCopy = dir;
    dir = '';
    _getFilesInfos(dirCopy);
  }
 
  function _getFilesInfos(files) {
    var filesProcessed = 0;
 
    filesInfos = [];
    // Ensure prefixed files come first
    files = files.slice(0).sort(fileSorter);
    files.forEach(function(file) {
      getMetadata((dir ? dir + '/' : '') + file, function(err, metadata) {
        filesProcessed++;
        Iif(err) {
          _this.emit('error', err);
        } else {
          Iif(metadata.renamed) {
            options.log('Saved codepoint: ' +
              'u' + metadata.unicode[0].codePointAt(0).toString(16).toUpperCase() +
              ' for the glyph "' + metadata.name + '"');
          }
          filesInfos.push(metadata);
        }
        if(files.length === filesProcessed) {
          // Reorder files
          filesInfos = filesInfos.sort(function(infosA, infosB) {
            return infosA.unicode[0] > infosB.unicode[0] ? 1 : -1;
          });
          // Mark directory as processed
          gotFilesInfos = true;
          // Start processing
          _pushSVGIcons();
        }
      });
    });
  }
 
  function _pushSVGIcons() {
    var fileInfo;
    var svgIconStream;
 
    while(filesInfos.length) {
      fileInfo = filesInfos.shift();
      svgIconStream = fs.createReadStream(fileInfo.path);
      svgIconStream.metadata = {
        name: fileInfo.name,
        unicode: fileInfo.unicode,
      };
      if(!_this.push(svgIconStream)) {
        return;
      }
    }
    _this.push(null);
  }
 
  // Parent constructor
  Readable.call(this, {
    objectMode: true,
  });
 
  this._read = function() {
    if(!filesInfos) {
      fs.readdir(
        dir,
        function(err, files) {
          Iif(err) {
            _this.emit('error', err);
          }
          _getFilesInfos(files);
        }
      );
      return;
    }
    if(gotFilesInfos) {
      _pushSVGIcons();
    }
  };
 
}
 
module.exports = SVGIconsDirStream;