123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 'use strict';
- var fs = require('jsdoc/fs');
- var path = require('jsdoc/path');
- var klaw = require('klaw');
- var specs = [];
- var finalSpecs = [];
- var createSpecObj = function(_path, root) {
- function relativePath() {
- return _path.replace(root, '').replace(/^[/\\]/, '').replace(/\\/g, '/');
- }
- return {
- path: function() {
- return _path;
- },
- relativePath: relativePath,
- directory: function() {
- return _path.replace(/[/\\][\s\w.-]*$/, '').replace(/\\/g, '/');
- },
- relativeDirectory: function() {
- return relativePath().replace(/[/\\][\s\w.-]*$/, '').replace(/\\/g, '/');
- },
- filename: function() {
- return _path.replace(/^.*[\\/]/, '');
- }
- };
- };
- var clearSpecs = exports.clearSpecs = function() {
- specs.splice(0, specs.length);
- };
- function addSpec(file, target) {
- target = target || specs;
- target.push( createSpecObj(file) );
- }
- function isValidSpec(file, matcher) {
- var result;
- // valid specs must...
- try {
- // ...be a file
- result = fs.statSync(file).isFile() &&
- // ...match the matcher
- matcher.test( path.basename(file) );
- }
- catch (e) {
- result = false;
- }
- return result;
- }
- function shouldLoad(file, matcher) {
- var result = false;
- // should this spec run at the end?
- if ( /schema\.js$/.test(file) && isValidSpec(file, matcher) ) {
- addSpec(file, finalSpecs);
- }
- else {
- result = isValidSpec(file, matcher);
- }
- return result;
- }
- exports.load = function(loadpath, matcher, clear, callback) {
- var wannaBeSpecs = [];
- if (clear === true) {
- clearSpecs();
- }
- klaw(loadpath)
- .on('data', function(spec) {
- wannaBeSpecs.push(spec.path);
- })
- .on('end', function() {
- for (var i = 0; i < wannaBeSpecs.length; i++) {
- var file = wannaBeSpecs[i];
- if ( shouldLoad(file, matcher) ) {
- addSpec(file);
- }
- }
- callback();
- });
- };
- exports.getSpecs = function() {
- return specs.concat(finalSpecs);
- };
|