Sindbad~EG File Manager

Current Path : /home/infinitibizsol/.trash/node_modules.3/cloudinary/lib-es5/v2/
Upload File :
Current File : /home/infinitibizsol/.trash/node_modules.3/cloudinary/lib-es5/v2/search.js

'use strict';

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var api = require('./api');
var config = require('../config');

var _require = require('../utils'),
    isEmpty = _require.isEmpty,
    isNumber = _require.isNumber,
    compute_hash = _require.compute_hash,
    build_distribution_domain = _require.build_distribution_domain,
    clear_blank = _require.clear_blank,
    sort_object_by_key = _require.sort_object_by_key;

var _require2 = require('../utils/encoding/base64Encode'),
    base64Encode = _require2.base64Encode;

var Search = function () {
  function Search() {
    _classCallCheck(this, Search);

    this.query_hash = {
      sort_by: [],
      aggregate: [],
      with_field: []
    };
    this._ttl = 300;
  }

  _createClass(Search, [{
    key: 'expression',
    value: function expression(value) {
      this.query_hash.expression = value;
      return this;
    }
  }, {
    key: 'max_results',
    value: function max_results(value) {
      this.query_hash.max_results = value;
      return this;
    }
  }, {
    key: 'next_cursor',
    value: function next_cursor(value) {
      this.query_hash.next_cursor = value;
      return this;
    }
  }, {
    key: 'aggregate',
    value: function aggregate(value) {
      var found = this.query_hash.aggregate.find(function (v) {
        return v === value;
      });

      if (!found) {
        this.query_hash.aggregate.push(value);
      }

      return this;
    }
  }, {
    key: 'with_field',
    value: function with_field(value) {
      var found = this.query_hash.with_field.find(function (v) {
        return v === value;
      });

      if (!found) {
        this.query_hash.with_field.push(value);
      }

      return this;
    }
  }, {
    key: 'sort_by',
    value: function sort_by(field_name) {
      var dir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "desc";

      var sort_bucket = void 0;
      sort_bucket = {};
      sort_bucket[field_name] = dir;

      // Check if this field name is already stored in the hash
      var previously_sorted_obj = this.query_hash.sort_by.find(function (sort_by) {
        return sort_by[field_name];
      });

      // Since objects are references in Javascript, we can update the reference we found
      // For example,
      if (previously_sorted_obj) {
        previously_sorted_obj[field_name] = dir;
      } else {
        this.query_hash.sort_by.push(sort_bucket);
      }

      return this;
    }
  }, {
    key: 'ttl',
    value: function ttl(newTtl) {
      if (isNumber(newTtl)) {
        this._ttl = newTtl;
        return this;
      }

      throw new Error('New TTL value has to be a Number.');
    }
  }, {
    key: 'to_query',
    value: function to_query() {
      var _this = this;

      Object.keys(this.query_hash).forEach(function (k) {
        var v = _this.query_hash[k];
        if (!isNumber(v) && isEmpty(v)) {
          delete _this.query_hash[k];
        }
      });
      return this.query_hash;
    }
  }, {
    key: 'execute',
    value: function execute(options, callback) {
      if (callback === null) {
        callback = options;
      }
      options = options || {};
      return api.search(this.to_query(), options, callback);
    }
  }, {
    key: 'to_url',
    value: function to_url(ttl, next_cursor) {
      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

      var apiSecret = 'api_secret' in options ? options.api_secret : config().api_secret;
      if (!apiSecret) {
        throw new Error('Must supply api_secret');
      }

      var urlTtl = ttl || this._ttl;

      var query = this.to_query();

      var urlCursor = next_cursor;
      if (query.next_cursor && !next_cursor) {
        urlCursor = query.next_cursor;
      }
      delete query.next_cursor;

      var dataOrderedByKey = sort_object_by_key(clear_blank(query));
      var encodedQuery = base64Encode(JSON.stringify(dataOrderedByKey));

      var urlPrefix = build_distribution_domain(options.source, options);

      var signature = compute_hash(`${urlTtl}${encodedQuery}${apiSecret}`, 'sha256', 'hex');

      var urlWithoutCursor = `${urlPrefix}/search/${signature}/${urlTtl}/${encodedQuery}`;
      return urlCursor ? `${urlWithoutCursor}/${urlCursor}` : urlWithoutCursor;
    }
  }], [{
    key: 'instance',
    value: function instance() {
      return new Search();
    }
  }, {
    key: 'expression',
    value: function expression(value) {
      return this.instance().expression(value);
    }
  }, {
    key: 'max_results',
    value: function max_results(value) {
      return this.instance().max_results(value);
    }
  }, {
    key: 'next_cursor',
    value: function next_cursor(value) {
      return this.instance().next_cursor(value);
    }
  }, {
    key: 'aggregate',
    value: function aggregate(value) {
      return this.instance().aggregate(value);
    }
  }, {
    key: 'with_field',
    value: function with_field(value) {
      return this.instance().with_field(value);
    }
  }, {
    key: 'sort_by',
    value: function sort_by(field_name) {
      var dir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'asc';

      return this.instance().sort_by(field_name, dir);
    }
  }, {
    key: 'ttl',
    value: function ttl(newTtl) {
      return this.instance().ttl(newTtl);
    }
  }]);

  return Search;
}();

module.exports = Search;

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists