Example #1
0
      obj.prototype["get" + names] = function(callback) {
        var scope = this;
        var key = obj.getKey(this.id + ':' + names);
        var promise = new Promise(function(resolve, reject) {
          client.smembers(key, function(err, keys) {
            if (err) reject(err);
            if (!keys.length) resolve(keys);

            relation.get(keys).then(
              function(result) {
                /* If the relation has disappeared, clean the link. */
                for (var i = 0; i < result.length; i++) {
                  if (!result[i]) {
                    scope["remove" + name](keys[i]);
                  }
                }
                resolve(result);
              },
              function(error) { reject(error); }
            );
          });
        });
        promise.nodeify(callback);

        return promise;
      };
Example #2
0
    this.obj.prototype["get" + name] = function(callback) {
      /* Last callback in the chain runs the final done callback via promise. */
      var next, done;
      var promise = new Promise(function(resolve, reject) {
        done = next = function(err, res) { err ? reject(err) : resolve(res); };
      });
      promise.nodeify(callback);

      /* Loop through objects wrapping a new callback around the previous. */
      for (var i = (objs.length - 1); i > 0; i--) {
        var getter = "get" + ((objs[i] === relation) ? name : objs[i].name); /* Might be plural */
        /**
         * @param {function} n Next
         * @param {function} g Getter
         */
        next = function(n, g) {
          return function(err, res) {
            if (err || !res) return done(err, null);
            res[g](n);
          };
        }(next, getter);
      }

      /* Initiate the callback chain by calling the first getter. */
      this["get" + objs[0].name](next);

      return promise;
    };
Example #3
0
      obj.prototype["get" + name] = function(callback) {
        var scope = this;
        var key = obj.getKey(this.id + ':' + name);
        var promise = new Promise(function(resolve, reject) {
          client.get(key, function(err, res) {
            if (err) return reject(err);
            if (!res) return resolve(null);

            relation.get(res).then(
              function(result) {
                /* If the relation has disappeared, clean the link. */
                if (!result) {
                  scope["set" + name](result);
                }

                resolve(result);
              },
              function(error) { reject(error); }
            );
          });
        });
        promise.nodeify(callback);

        return promise;
      };
Example #4
0
  cls[getter] = function(value, callback) {
    var promise = new Promise(function(resolve, reject) {
      client.smembers(getKey(value), function(err, keys) {
        if (err) return reject(err);
        if (!keys.length) return resolve(keys);

        cls.get(keys, function(err, results) {
          if (err) return reject(err);

          var instances = [];
          for (var i = 0; i < results.length; i++) {
            if (!results[i]) {
              client.srem(getKey(value), keys[i]); // cleanup stale index
              continue; /* No longer exists. */
            }
            if (results[i][field] == value) {
              instances.push(results[i]);
            }
          }

          resolve(instances);
        });
      });
    });
    promise.nodeify(callback);

    return promise;
  }
Example #5
0
      obj.prototype["has" + name] = function(related, callback) {
        var key = obj.getKey(this.id + ":" + names);
        var relid = (related instanceof String || typeof related === 'string') ? related : related.id;
        var promise = new Promise(function(resolve, reject) {
          client.sismember(key, relid, function(err, res) {
            if (err) return reject(err);

            resolve(Boolean(res));
          });
        });
        promise.nodeify(callback);
        return promise;
      }
Example #6
0
      obj.prototype["set" + name] = function(relObj, callback) {
        var key = obj.getKey(this.id + ':' + name);
        var promise = new Promise(function(resolve, reject) {
          if (relObj) {
            client.set(key, relObj.id, function(err, res) {
              err ? reject(err) : resolve(true);
            });
          } else {
            client.del(key, function(err, res) {
              err ? reject(err) : resolve(true);
            });
          }
        });
        promise.nodeify(callback);

        return promise;
      }
Example #7
0
      obj.prototype["remove" + name] = function(related, callback) {
        var key = obj.getKey(this.id + ':' + names);
        var relid;

        if (related instanceof String || typeof(related) === "string") {
          relid = related;
        } else {
          relid = related.id;
        }

        var promise = new Promise(function(resolve, reject) {
          client.srem(key, relid, function(err, res) {
            err ? reject(err) : resolve(true);
          });
        });
        promise.nodeify(callback);
        return promise;
      };
Example #8
0
File: tencent.js Project: eqiuno/im
/**
 * http://www.qcloud.com/doc/product/269/%E7%8B%AC%E7%AB%8B%E6%A8%A1%E5%BC%8F
 * @param identifier 用户Id
 * @param cb 回调函数
 * @returns Promise, 如果回调函数为空,返回promise,否则返回空
 */
function signature(identifier, cb) {
    identifier = identifier + '';
    let sign = spawn(Cmd_Path,
        [Key_Path, APP_ID, identifier],
        {cmd: __dirname});
    let rtn =  new Promise((resv, reject) => {
        let _token = '';
        sign.stdout.on('data', (data) => {_token = data});
        sign.stderr.on('data', reject);
        sign.on('close', (code) => {
            if(code !== 0) {
                reject(`signature failure, code:${code}, err:${_token}`);
            } else {
                resv(_token.toString());
            }
        });
    });

    return rtn.nodeify(cb);
}
Example #9
0
  self.id = function id (success, failure) {
    var p = new Promise(function (resolve, reject) {
      if (self._id) return resolve(self._id);

      var endpoint = urlUtil.resolve(opts.url, '/displayer/convert/email'); 
      request({
        url: endpoint,
        method: 'POST',
        json: {
          email: self._email
        }
      }, function (err, res, body) {
        if (err) return reject(err);
        if (res.statusCode !== 200 || !body || body.status !== 'okay') return reject(makeError(res.statusCode, body));
        self._id = body.userId;
        resolve(body.userId);
      });
    });
    
    if (success && !failure) p.nodeify(success);
    if (success && failure) p.then(success, failure);
    return p;
  };
Example #10
0
module.exports.generate = function generateScout(options, callback) {
  if (!_.isObject(options)) {
    throw new Error('`options` is required');
  }

  _.defaults(options, defaults);

  var webpackOptions = _.cloneDeep(overrides);
  _.merge(webpackOptions, defaults, options.webpackOptions);

  webpackOptions.scout = {
    appModules: options.appModules
  };

  // each build gets its own unique directory
  webpackOptions.output.path = '/build' + buildNumber;
  buildNumber++;

  webpackOptions.plugins = options.webpackOptions.plugins || [];

  // uglify by default
  if (!options.pretty) {
    webpackOptions.plugins.push(new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    }));
  }
  else {
    webpackOptions.output.pathinfo = true;
  }

  var appConfig;

  try {
    appConfig = JSON.stringify(options.appConfig || {});
  }
  catch (e) {
    throw new Error('Cannot stringify appConfig value');
  }

  options.flags = _.defaults(options.flags || {}, {
    APP_NAMESPACE : JSON.stringify(options.namespace || DEFAULT_NAMESPACE),
    SCOUTFILE_APP_CONFIG : appConfig
  });

  webpackOptions.plugins.push(
    new webpack.DefinePlugin(options.flags)
  );

  // initialize webpack and use an in-memory filesystem
  var compiler = webpack(webpackOptions);
  compiler.outputFileSystem = memfs;

  var promise = new BluebirdPromise(function (resolve, reject) {
      BluebirdPromise.promisify(compiler.run, compiler)().
        then(function (stats) {
          var error;

          stats = stats.toJson();

          // annoyingly, this is necessary to detect all errors and warnings
          // http://webpack.github.io/docs/node.js-api.html#error-handling
          if (stats.errors.length || stats.warnings.length) {
            error = new Error(webpackFailureTemplate(stats));
            error.webpackStats = stats;

            return reject(error);
          }

          // look up the bundle, read it as a string, and delete the file
          var bundlePath =
            webpackOptions.output.path + '/' + webpackOptions.output.filename;
          var src = memfs.readFileSync(bundlePath);
          memfs.unlinkSync(bundlePath);
          memfs.rmdirSync(webpackOptions.output.path);

          resolve(src.toString());
        }).
        catch(function (err) {
          reject(err);
        });
    });

  return promise.nodeify(callback);
};