Example #1
0
      function(pkgs, fn){
        
        var res = {}

        Object.keys(pkgs.trackeds).forEach(function(uid){
          res[uid] = pkgs.trackeds[uid]
        })

        Object.keys(res).forEach(function(uid){
          
          pk = res[uid]

          // hasn't metadata
          if (pk.meta === undefined) {
            // set metadata on demand
            pk.meta = function() {
              return self.file.getSync("data-folder", uid, {json: true})
            }

          }

        })

        if (ops.filter !== undefined){
          
          try{
            var query = eql.parse(ops.filter)
            
            if (query !== undefined){
              
              var uf = Object.keys(res).filter(function(uid){
                return self.engine.isMatch(res[uid].meta, query)
              });

              var filtered = {}
              uf.forEach(function(uid){
                filtered[uid] = res[uid]
              });

              return cb && cb(null, filtered)
            }

          } catch(e){}
        }

        return cb && cb(null, res)
      }
Example #2
0
function __exec(ops, data, fn) {
	var matches = []

	var query = eql.parse(ops.query)

	Object.keys(data).forEach(function(uid){
		var p = data[uid]
		p.uid = uid
		if (epm.engine.isMatch(p.meta, query)) {
			matches.push(uid)
		}
	})

	matches.forEach(function(m){
		console.log(" * " + epm.engine.cutUid(m))
	})


	fn && fn(null, matches)
}
Example #3
0
EpmPackages.prototype.execQuery = function(query, cb) {
  var self = this;

  var q = "all";

  try {
    
    if (query !== "" && query !== "all"){
      q = eql.parse(query);  

      if (q.where === undefined){
        throw new Error('Query error');
      }
      
      if (q.where.predicate === undefined){
        throw new Error('Predicate error');
      }
    }
    
  } catch(err){
    cb && cb(err);
    return self;
  }

  var res = [];

  var engines = {};

  var trackeds = self.fs.getSync('packages-file');

  var pkgs = trackeds.packages;

  //var engine = self.plugins.resolveEngine(filename);

  var tasks = Object.keys(pkgs).map(function(uid){
    return function(fn){
      var p = pkgs[uid];
      
      var ext = path.extname(p.filename);
      var engine = self.plugins.resolveEngine(p.filename);

      if (engines[ext] === undefined){
        engines[ext] = new (engine.require())();
      }

      var eng = engines[ext];
      
      _getMeta(uid, p, eng, function(err, meta){
        
        var im = (q === "all" || eng.isMatch(meta, q));

        fn && fn(null, { 
          uid: uid, 
          match: im,
          content: meta.content
        } )
      });
    }
  });

  async.series(
      tasks
    , function(err, results){

      var matches = results.filter(function(obj){
        return obj.match;
      });

      var maps = matches.map(function(obj){
        return { uid: obj.uid, content: obj.content };
      });

      cb && cb(null, maps);

    });

  return self;

  function _getMeta(uid, p, eng, mcb){
    var fmeta = self.fs.resolve('cache-folder', 'data/' + uid);

    if ( !fs.existsSync(fmeta) ) {
      eng.readMetadata(self.repo.resolve(p.filename), function(err, meta){
        if (err || meta === undefined) {
          mcb && mcb(new Error(p.filename + " is corrupted"))
        }

        meta = JSON.parse(meta);

        mcb && mcb(null, meta);
      });
    } else {
      var meta = self.fs.getSync('cache-folder', 'data/' + uid, { json: true });
      mcb && mcb(null, meta);
    }

  }
};