diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..803737fe --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..b46d8da9 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1 @@ +Pull requests are welcome, but please update the documentation and tests. The tests are executed by running the default `grunt` task. The tests will probably fail if your changes affect the generated output - please review the differences and when you're happy _temporarily_ edit the `if (false)` in [tests/generation.js#verify()](blob/master/tests/generation.js#L15) and re-run the tests. diff --git a/README.md b/README.md index 568c22d1..1c6e9a61 100644 --- a/README.md +++ b/README.md @@ -129,17 +129,7 @@ methods: description: true if method === 'GET' summary: type: string - description: Provided by the 'description' or 'summary' field in the schema - externalDocs: - type: object - properties: - url: - type: string - description: The URL for the target documentation. Value MUST be in the format of a URL. - required: true - description: - type: string - description: A short description of the target documentation. GitHub-Markdown syntax can be used for rich text representation. + description: Provided by the 'description' field in the schema isSecure: type: boolean description: true if the 'security' is defined for the method in the schema @@ -220,3 +210,6 @@ And example of gulp task is available [here](https://github.com/wcandillon/cells The [CellStore](https://github.com/wcandillon/cellstore) project. [28.io](http://28.io) is using this project to generate their [nodejs](https://github.com/28msec/28.io-nodejs) and [angularjs language bindings](https://github.com/28msec/28.io-angularjs). + +##Contributing +Pull requests welcome, refer to the [contribution guidelines](CONTRIBUTING.md) diff --git a/lib/codegen.js b/lib/codegen.js index dc889ba5..0aa6103a 100644 --- a/lib/codegen.js +++ b/lib/codegen.js @@ -89,8 +89,7 @@ var getViewForSwagger2 = function(opts, type){ methodName: op.operationId ? normalizeName(op.operationId) : getPathToMethodName(opts, m, path), method: m.toUpperCase(), isGET: m.toUpperCase() === 'GET', - summary: op.description || op.summary, - externalDocs: op.externalDocs, + summary: op.description, isSecure: swagger.security !== undefined || op.security !== undefined, parameters: [], headers: [] @@ -190,7 +189,7 @@ var getViewForSwagger1 = function(opts, type){ headers.name = 'Accept'; headers.value.push(op.produces.map(function(value) { return '\'' + value + '\''; }).join(', ')); - + method.headers.push(headers); } diff --git a/templates/typescript-method.mustache b/templates/typescript-method.mustache index 6f94c980..2c6c8f1e 100644 --- a/templates/typescript-method.mustache +++ b/templates/typescript-method.mustache @@ -37,13 +37,11 @@ $queryParameters?: {} /** * {{&summary}} * @method -{{#externalDocs}} -* @see {@link {{&url}}|{{#description}}{{&description}}{{/description}}{{^description}}External docs{{/description}}} -{{/externalDocs}} * @name {{&className}}#{{&methodName}} {{#parameters}} {{^isSingleton}} * @param {{=<% %>=}}{<%&type%>}<%={{ }}=%> {{&camelCaseName}} - {{&description}}{{/isSingleton}} {{/parameters}} +* */ {{&methodName}}(parameters: { {{#parameters}}{{^isSingleton}}'{{&camelCaseName}}'{{&cardinality}}: {{> type}}, diff --git a/tests/generation.js b/tests/generation.js index 4943bf0c..6abd2988 100644 --- a/tests/generation.js +++ b/tests/generation.js @@ -9,6 +9,16 @@ var CodeGen = require('../lib/codegen').CodeGen; var batch = {}; var list = ffs.readdirSync('tests/apis'); + +function verify(result, file, type) { + var reference = file.replace(/^tests\/apis\//, 'tests/reference/' + type + '_'); + if (false) { + fs.writeFileSync(reference, result, 'UTF-8'); + } else { + assert.equal(result, fs.readFileSync(reference, 'UTF-8'), file + ', ', type); + } +} + list.forEach(function(file){ file = 'tests/apis/' + file; batch[file] = function(){ @@ -17,13 +27,13 @@ list.forEach(function(file){ className: 'Test', swagger: swagger }); - assert(typeof(result), 'string'); + verify(result, file, 'node'); result = CodeGen.getAngularCode({ moduleName: 'Test', className: 'Test', swagger: swagger }); - assert(typeof(result), 'string'); + verify(result, file, 'angular'); result = CodeGen.getAngularCode({ moduleName: 'Test', className: 'Test', @@ -31,8 +41,7 @@ list.forEach(function(file){ lint: false, beautify: false }); - assert(typeof(result), 'string'); - assert(typeof(result), 'string'); + verify(result, file, 'angular-ugly'); if(swagger.swagger === '2.0') { result = CodeGen.getTypescriptCode({ moduleName: 'Test', @@ -40,7 +49,7 @@ list.forEach(function(file){ swagger: swagger, lint: false }); - assert(typeof(result), 'string'); + verify(result, file, 'typescript'); } result = CodeGen.getCustomCode({ moduleName: 'Test', @@ -51,7 +60,7 @@ list.forEach(function(file){ method: fs.readFileSync(__dirname + '/../templates/method.mustache', 'utf-8') } }); - assert(typeof(result), 'string'); + verify(result, file, 'custom'); }; }); -vows.describe('Test Generation').addBatch(batch).export(module); \ No newline at end of file +vows.describe('Test Generation').addBatch(batch).export(module); diff --git a/tests/reference/angular-ugly__batch.json b/tests/reference/angular-ugly__batch.json new file mode 100644 index 00000000..f39db073 --- /dev/null +++ b/tests/reference/angular-ugly__batch.json @@ -0,0 +1,218 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Import project contents from an archive + * @method + * @name Test#importProject + * @param {string} url - The archive url. + * @param {string} archive - The archive contents. + * @param {string} root - The path inside the archive that contains the modules and queries folders. Use '/' as folder separator. + * @param {string} overwrite - Whether to overwrite current project queries and modules. Default is true. + * @param {boolean} deleteOrphaned - Whether to delete orphaned file or not. Default is false. + * @param {boolean} simulate - Whether to simulate the operation or not. Default is false. + * @param {string} token - A project token. + * @param {string} contentType -

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * + */ + Test.prototype.importProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_batch/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['url'] !== undefined){ + queryParameters['url'] = parameters['url']; + } + + + + + + + + + + + if(parameters['archive'] !== undefined){ + body = parameters['archive']; + } + + + + + if(parameters['root'] !== undefined){ + queryParameters['root'] = parameters['root']; + } + + + + + + + + if(parameters['overwrite'] !== undefined){ + queryParameters['overwrite'] = parameters['overwrite']; + } + + + + + + + + if(parameters['deleteOrphaned'] !== undefined){ + queryParameters['delete-orphaned'] = parameters['deleteOrphaned']; + } + + + + + + + + if(parameters['simulate'] !== undefined){ + queryParameters['simulate'] = parameters['simulate']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + if(parameters['contentType'] !== undefined){ + headers['Content-Type'] = parameters['contentType']; + } + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly__datasources.json b/tests/reference/angular-ugly__datasources.json new file mode 100644 index 00000000..628900a5 --- /dev/null +++ b/tests/reference/angular-ugly__datasources.json @@ -0,0 +1,2017 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

These resources can be used to manage and explore data sources. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_datasources.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Lists all data sources + * @method + * @name Test#listDatasources + * @param {string} token - A project token. + * + */ + Test.prototype.listDatasources = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists all data sources in a specific category + * @method + * @name Test#listCategoryDatasources + * @param {string} category - The data source category. + * @param {string} token - A project token. + * + */ + Test.prototype.listCategoryDatasources = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates a new data source + * @method + * @name Test#createDatasource + * @param {string} category - The data source category. + * @param {string} name - The name of the data source. The data source name can contain any alphabetic letter, numbers, dots, or dashes, and must start with an alphabetic letter. + * @param {string} token - A project token. + * @param {boolean} default - Whether the new data source will be the default one for its category. The default value is false. + * @param {string} credentials - The data sources credentials as JSON. + * + */ + Test.prototype.createDatasource = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + if(parameters['name'] !== undefined){ + queryParameters['name'] = parameters['name']; + } + + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['default'] !== undefined){ + queryParameters['default'] = parameters['default']; + } + + + + + + + + + + + if(parameters['credentials'] !== undefined){ + body = parameters['credentials']; + } + + + if(parameters['credentials'] === undefined){ + deferred.reject(new Error('Missing required body parameter: credentials')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a data source credentials + * @method + * @name Test#getDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasource = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Updates a data source + * @method + * @name Test#updateDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * @param {string} name - The new name of the data source. If not specified the data source is not renamed. + * @param {boolean} default - Whether the data source should become (if true) or cease to be (if false) the default one for its category. If not specified the data source does not change its default status. + * @param {string} credentials - The new data sources credentials as JSON. If not specified the data sources credentials are not changed + * + */ + Test.prototype.updateDatasource = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['name'] !== undefined){ + queryParameters['name'] = parameters['name']; + } + + + + + + + + if(parameters['default'] !== undefined){ + queryParameters['default'] = parameters['default']; + } + + + + + + + + + + + if(parameters['credentials'] !== undefined){ + body = parameters['credentials']; + } + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes a data source + * @method + * @name Test#removeDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeDatasource = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * List available collections + * @method + * @name Test#getDatasourceContents + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasourceContents = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates collection + * @method + * @name Test#createCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} name - The name of the new collection. + * @param {string} token - A project token. + * + */ + Test.prototype.createCollection = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + if(parameters['name'] !== undefined){ + queryParameters['name'] = parameters['name']; + } + + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves metadata about a collection + * @method + * @name Test#getCollectionMetadata + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.getCollectionMetadata = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes a collection + * @method + * @name Test#removeCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeCollection = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists collection items + * @method + * @name Test#listCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {string} Accept - Serialization format. + * + */ + Test.prototype.listCollection = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['offset'] !== undefined){ + queryParameters['offset'] = parameters['offset']; + } + + + + + + + + if(parameters['limit'] !== undefined){ + queryParameters['limit'] = parameters['limit']; + } + + + + + + + + if(parameters['expand'] !== undefined){ + queryParameters['expand'] = parameters['expand']; + } + + + + + + + + + + if(parameters['Accept'] !== undefined){ + headers['Accept'] = parameters['Accept']; + } + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Inserts an item into a collection + * @method + * @name Test#insertInCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {string} item - The item to insert. + * + */ + Test.prototype.insertInCollection = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + + if(parameters['item'] !== undefined){ + body = parameters['item']; + } + + + if(parameters['item'] === undefined){ + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Truncates a collection + * @method + * @name Test#truncateCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.truncateCollection = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a collection item + * @method + * @name Test#getItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.getItem = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + + path = path.replace('{identifier}', parameters['identifier']); + + + + + if(parameters['identifier'] === undefined){ + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Updates a collection item + * @method + * @name Test#updateItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * @param {string} item - The new item. + * + */ + Test.prototype.updateItem = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + + path = path.replace('{identifier}', parameters['identifier']); + + + + + if(parameters['identifier'] === undefined){ + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + + if(parameters['item'] !== undefined){ + body = parameters['item']; + } + + + if(parameters['item'] === undefined){ + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes an item from a collection + * @method + * @name Test#removeItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.removeItem = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{category}', parameters['category']); + + + + + if(parameters['category'] === undefined){ + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + + + path = path.replace('{datasource}', parameters['datasource']); + + + + + if(parameters['datasource'] === undefined){ + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + + + path = path.replace('{collection}', parameters['collection']); + + + + + if(parameters['collection'] === undefined){ + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + + + path = path.replace('{identifier}', parameters['identifier']); + + + + + if(parameters['identifier'] === undefined){ + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly__jobs.json b/tests/reference/angular-ugly__jobs.json new file mode 100644 index 00000000..02e21ad2 --- /dev/null +++ b/tests/reference/angular-ugly__jobs.json @@ -0,0 +1,609 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

These resources can be used to manage jobs. Jobs are of three kinds: execute, map and shuffle. Each job has one of the following statuses: pending, failed, in-progress, completed, timed-out. To use this API, a default MongoDB database must be configured. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_jobs.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Lists jobs + * @method + * @name Test#listJobs + * @param {array} status - One or more project statuses. + * @param {string} from - The starting date for filtering the listed jobs. + * @param {string} to - The ending date for filtering the listed jobs. + * @param {string} token - A project token. + * + */ + Test.prototype.listJobs = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['status'] !== undefined){ + queryParameters['status'] = parameters['status']; + } + + + + + + + + if(parameters['from'] !== undefined){ + queryParameters['from'] = parameters['from']; + } + + + + + + + + if(parameters['to'] !== undefined){ + queryParameters['to'] = parameters['to']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a job details + * @method + * @name Test#getJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.getJob = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + + + + if(parameters['jobUuid'] === undefined){ + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes a job + * @method + * @name Test#removeJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeJob = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + + + + if(parameters['jobUuid'] === undefined){ + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists the results of a job + * @method + * @name Test#listResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {boolean} allowPartial - Whether to allow to retrieve partial results for in progress or failed jobs. The default value is false. + * @param {string} Accept - Specifies the serialization of the produced objects + * + */ + Test.prototype.listResults = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + + + + if(parameters['jobUuid'] === undefined){ + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['offset'] !== undefined){ + queryParameters['offset'] = parameters['offset']; + } + + + + + + + + if(parameters['limit'] !== undefined){ + queryParameters['limit'] = parameters['limit']; + } + + + + + + + + if(parameters['expand'] !== undefined){ + queryParameters['expand'] = parameters['expand']; + } + + + + + + + + if(parameters['allowPartial'] !== undefined){ + queryParameters['allow-partial'] = parameters['allowPartial']; + } + + + + + + + + + + if(parameters['Accept'] !== undefined){ + headers['Accept'] = parameters['Accept']; + } + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes a job results + * @method + * @name Test#removeResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeResults = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + + + + if(parameters['jobUuid'] === undefined){ + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly__modules.json b/tests/reference/angular-ugly__modules.json new file mode 100644 index 00000000..eb175116 --- /dev/null +++ b/tests/reference/angular-ugly__modules.json @@ -0,0 +1,644 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

These resources can be used to manage JSONiq and XQuery library modules. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_modules.

This API does not allow to retrieve the source code, modify or delete system modules.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Lists available modules + * @method + * @name Test#listModules + * @param {string} startsWith - Filter the available module by their module path. + * @param {boolean} includeSystem - Include modules provided by the platform. + * @param {boolean} includeNs - Include each module's namespace in the listing. + * @param {boolean} includeSrc - Include each module's source code in the listing. + * @param {string} token - A project token. + * + */ + Test.prototype.listModules = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['startsWith'] !== undefined){ + queryParameters['starts-with'] = parameters['startsWith']; + } + + + + + + + + if(parameters['includeSystem'] !== undefined){ + queryParameters['include-system'] = parameters['includeSystem']; + } + + + + + + + + if(parameters['includeNs'] !== undefined){ + queryParameters['include-ns'] = parameters['includeNs']; + } + + + + + + + + if(parameters['includeSrc'] !== undefined){ + queryParameters['include-src'] = parameters['includeSrc']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves the source code of the specified project module + * @method + * @name Test#getModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.getModule = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + + + path = path.replace('{module-path}', parameters['modulePath']); + + + + + if(parameters['modulePath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates a new project module + * @method + * @name Test#createModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The source code of the module. + + * + */ + Test.prototype.createModule = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{module-path}', parameters['modulePath']); + + + + + if(parameters['modulePath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + + if(parameters['compile'] !== undefined){ + queryParameters['compile'] = parameters['compile']; + } + + + + + + + + if(parameters['extension'] !== undefined){ + queryParameters['extension'] = parameters['extension']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + + if(parameters['moduleBody'] !== undefined){ + body = parameters['moduleBody']; + } + + + + + + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates or updates the specified project module + * @method + * @name Test#saveModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The module source code + + * + */ + Test.prototype.saveModule = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{module-path}', parameters['modulePath']); + + + + + if(parameters['modulePath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + + if(parameters['compile'] !== undefined){ + queryParameters['compile'] = parameters['compile']; + } + + + + + + + + if(parameters['extension'] !== undefined){ + queryParameters['extension'] = parameters['extension']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + + if(parameters['moduleBody'] !== undefined){ + body = parameters['moduleBody']; + } + + + + + + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes the specified project module + * @method + * @name Test#removeModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.removeModule = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{module-path}', parameters['modulePath']); + + + + + if(parameters['modulePath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly__queries.json b/tests/reference/angular-ugly__queries.json new file mode 100644 index 00000000..4c3b10be --- /dev/null +++ b/tests/reference/angular-ugly__queries.json @@ -0,0 +1,1047 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

These resources can be used to manage and execute queries. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_queries.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Lists public and/or private queries + * @method + * @name Test#listQueries + * @param {string} visibility - The query visibility. + * @param {string} token - A project token. + * + */ + Test.prototype.listQueries = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{visibility}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{visibility}', parameters['visibility']); + + + + + if(parameters['visibility'] === undefined){ + deferred.reject(new Error('Missing required path parameter: visibility')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Executes a non-side-effecting query + * @method + * @name Test#executeSimpleQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} trace - Whether to enable the output of trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeSimpleQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + + + + if(parameters['Accept'] !== undefined){ + headers['Accept'] = parameters['Accept']; + } + + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + + path = path.replace('{format}', parameters['format']); + + + + + + + if(parameters['trace'] !== undefined){ + queryParameters['trace'] = parameters['trace']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Executes a query + * @method + * @name Test#executeQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} async - Whether to execute the query asynchronously or not. + * @param {string} outputCollection - The output collection when runnng the query asynchronously. + * @param {boolean} trace - Whether to enable the output trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + + + + if(parameters['Accept'] !== undefined){ + headers['Accept'] = parameters['Accept']; + } + + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + + path = path.replace('{format}', parameters['format']); + + + + + + + if(parameters['async'] !== undefined){ + queryParameters['async'] = parameters['async']; + } + + + + + + + + if(parameters['outputCollection'] !== undefined){ + queryParameters['output-collection'] = parameters['outputCollection']; + } + + + + + + + + if(parameters['trace'] !== undefined){ + queryParameters['trace'] = parameters['trace']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a query source code + * @method + * @name Test#getQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates a new query + * @method + * @name Test#createQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The source code of the query + + * + */ + Test.prototype.createQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['compile'] !== undefined){ + queryParameters['compile'] = parameters['compile']; + } + + + + + + + + + + + if(parameters['queryBody'] !== undefined){ + body = parameters['queryBody']; + } + + + if(parameters['queryBody'] === undefined){ + deferred.reject(new Error('Missing required body parameter: queryBody')); + return deferred.promise; + } + + + + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates or updates a query + * @method + * @name Test#saveQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The query source code + + * + */ + Test.prototype.saveQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['compile'] !== undefined){ + queryParameters['compile'] = parameters['compile']; + } + + + + + + + + + + + if(parameters['queryBody'] !== undefined){ + body = parameters['queryBody']; + } + + + + + + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Removes a query + * @method + * @name Test#removeQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.removeQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a query execution plan + * @method + * @name Test#getQueryPlan + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQueryPlan = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Precompiles a query + * @method + * @name Test#compileQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.compileQuery = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{query-path}', parameters['queryPath']); + + + + + if(parameters['queryPath'] === undefined){ + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_account.json b/tests/reference/angular-ugly_account.json new file mode 100644 index 00000000..960da9c5 --- /dev/null +++ b/tests/reference/angular-ugly_account.json @@ -0,0 +1,1844 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Creates a new account + * @method + * @name Test#createAccount + * @param {string} firstname - The account first name. + * @param {string} lastname - The account last name. + * @param {string} company - The account company. + * @param {string} email - The account email. + * @param {string} password - The account password. + * + */ + Test.prototype.createAccount = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['firstname'] !== undefined){ + queryParameters['firstname'] = parameters['firstname']; + } + + + + + + if(parameters['firstname'] === undefined){ + deferred.reject(new Error('Missing required query parameter: firstname')); + return deferred.promise; + } + + + if(parameters['lastname'] !== undefined){ + queryParameters['lastname'] = parameters['lastname']; + } + + + + + + if(parameters['lastname'] === undefined){ + deferred.reject(new Error('Missing required query parameter: lastname')); + return deferred.promise; + } + + + if(parameters['company'] !== undefined){ + queryParameters['company'] = parameters['company']; + } + + + + + + if(parameters['company'] === undefined){ + deferred.reject(new Error('Missing required query parameter: company')); + return deferred.promise; + } + + + if(parameters['email'] !== undefined){ + queryParameters['email'] = parameters['email']; + } + + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required query parameter: email')); + return deferred.promise; + } + + + if(parameters['password'] !== undefined){ + queryParameters['password'] = parameters['password']; + } + + + + + + if(parameters['password'] === undefined){ + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Checks if an account exists + * @method + * @name Test#checkAccount + * @param {string} email - The account email. + * + */ + Test.prototype.checkAccount = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves an account metadata + * @method + * @name Test#getAccountMetadata + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getAccountMetadata = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Updates an account + * @method + * @name Test#updateAccount + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} firstname - The account new first name. If not specified the account firstname is not modified. + * @param {string} lastname - The account new last name. If not specified the account lastname is not modified. + * @param {string} company - The account new company. If not specified the account company is not modified. + * @param {string} password - The account new password. If not specified the account password is not modified. + * + */ + Test.prototype.updateAccount = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['firstname'] !== undefined){ + queryParameters['firstname'] = parameters['firstname']; + } + + + + + + + + if(parameters['lastname'] !== undefined){ + queryParameters['lastname'] = parameters['lastname']; + } + + + + + + + + if(parameters['company'] !== undefined){ + queryParameters['company'] = parameters['company']; + } + + + + + + + + if(parameters['password'] !== undefined){ + queryParameters['password'] = parameters['password']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Resends the confirmation email + * @method + * @name Test#resendConfirmation + * @param {string} email - The account email. + * + */ + Test.prototype.resendConfirmation = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Confirms an account + * @method + * @name Test#confirmAccount + * @param {string} email - The account name. + * @param {string} confirmationToken - The account confirmation token. + * + */ + Test.prototype.confirmAccount = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['confirmationToken'] !== undefined){ + queryParameters['confirmation-token'] = parameters['confirmationToken']; + } + + + + + + if(parameters['confirmationToken'] === undefined){ + deferred.reject(new Error('Missing required query parameter: confirmationToken')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Checks if a reset token is valid + * @method + * @name Test#checkResetToken + * @param {string} email - The account email. + * @param {string} resetToken - The reset token to check. + * + */ + Test.prototype.checkResetToken = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['resetToken'] !== undefined){ + queryParameters['reset-token'] = parameters['resetToken']; + } + + + + + + if(parameters['resetToken'] === undefined){ + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Changes an account password using a reset token + * @method + * @name Test#resetPassword + * @param {string} email - The account email. + * @param {string} resetToken - The latest account reset token. + * @param {string} password - The new account password. + * + */ + Test.prototype.resetPassword = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['resetToken'] !== undefined){ + queryParameters['reset-token'] = parameters['resetToken']; + } + + + + + + if(parameters['resetToken'] === undefined){ + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + + if(parameters['password'] !== undefined){ + queryParameters['password'] = parameters['password']; + } + + + + + + if(parameters['password'] === undefined){ + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Sends a reset token + * @method + * @name Test#sendResetToken + * @param {string} email - The account email. + * @param {string} portalUrl - The Portal URL + * + */ + Test.prototype.sendResetToken = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['portalUrl'] !== undefined){ + queryParameters['portal-url'] = parameters['portalUrl']; + } + + + + + + if(parameters['portalUrl'] === undefined){ + deferred.reject(new Error('Missing required query parameter: portalUrl')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves the user billing data and the data required to update it + * @method + * @name Test#getBillingData + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getBillingData = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/billing'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists the account invoices + * @method + * @name Test#listInvoices + * @param {string} email - The account email. + * @param {string} cursor - Used to control which page is returned. Leave empty for the first page. Use the cursor returned in a reply to fetch the next page. + * @param {integer} limit - The number of records to return per page up to a maximum of 200. Default is 50. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listInvoices = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['cursor'] !== undefined){ + queryParameters['cursor'] = parameters['cursor']; + } + + + + + + + + if(parameters['limit'] !== undefined){ + queryParameters['limit'] = parameters['limit']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves the user billing information + * @method + * @name Test#getInvoice + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} Accept - The format of the response. Default is "application/pdf" + * + */ + Test.prototype.getInvoice = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices/{invoice}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + headers['Accept'] = ['application/json', 'application/pdf']; + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + + + if(parameters['Accept'] !== undefined){ + headers['Accept'] = parameters['Accept']; + } + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists the account subscriptions + * @method + * @name Test#listSubscriptions + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listSubscriptions = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates a new subscription + * @method + * @name Test#createSubscription + * @param {string} email - The account email. + * @param {string} plan - The plan to subscribe to. + * @param {integer} quantity - The quantity for the chosen plan. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.createSubscription = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + if(parameters['plan'] !== undefined){ + queryParameters['plan'] = parameters['plan']; + } + + + + + + if(parameters['plan'] === undefined){ + deferred.reject(new Error('Missing required query parameter: plan')); + return deferred.promise; + } + + + if(parameters['quantity'] !== undefined){ + queryParameters['quantity'] = parameters['quantity']; + } + + + + + + if(parameters['quantity'] === undefined){ + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves the subscription details + * @method + * @name Test#getSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getSubscription = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + + path = path.replace('{subscription}', parameters['subscription']); + + + + + if(parameters['subscription'] === undefined){ + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Updates a subscription + * @method + * @name Test#updateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {integer} quantity - The new quantity. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.updateSubscription = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + + path = path.replace('{subscription}', parameters['subscription']); + + + + + if(parameters['subscription'] === undefined){ + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + + if(parameters['quantity'] !== undefined){ + queryParameters['quantity'] = parameters['quantity']; + } + + + + + + if(parameters['quantity'] === undefined){ + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Terminates a subscription + * @method + * @name Test#terminateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.terminateSubscription = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{email}', parameters['email']); + + + + + if(parameters['email'] === undefined){ + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + + + path = path.replace('{subscription}', parameters['subscription']); + + + + + if(parameters['subscription'] === undefined){ + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_auth.json b/tests/reference/angular-ugly_auth.json new file mode 100644 index 00000000..af50ced3 --- /dev/null +++ b/tests/reference/angular-ugly_auth.json @@ -0,0 +1,174 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

This OAuth2 compliant API can be used to authorize requests. The endpoint for these methods is http://portal.28.io/auth.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Creates or refreshes authorization tokens + * @method + * @name Test#authenticate + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.authenticate = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['grant_type'] !== undefined){ + queryParameters['grant_type'] = parameters['grant_type']; + } + + + + + + if(parameters['grant_type'] === undefined){ + deferred.reject(new Error('Missing required query parameter: grant_type')); + return deferred.promise; + } + + + if(parameters['email'] !== undefined){ + queryParameters['email'] = parameters['email']; + } + + + + + + + + if(parameters['password'] !== undefined){ + queryParameters['password'] = parameters['password']; + } + + + + + + + + if(parameters['refresh_token'] !== undefined){ + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_package.json b/tests/reference/angular-ugly_package.json new file mode 100644 index 00000000..5e3d79c6 --- /dev/null +++ b/tests/reference/angular-ugly_package.json @@ -0,0 +1,131 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Lists available packages + * @method + * @name Test#listPackages + * + */ + Test.prototype.listPackages = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/package'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_ping.json b/tests/reference/angular-ugly_ping.json new file mode 100644 index 00000000..9e120273 --- /dev/null +++ b/tests/reference/angular-ugly_ping.json @@ -0,0 +1,131 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Checks if the service is available. + * @method + * @name Test#ping + * + */ + Test.prototype.ping = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/ping'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_project.json b/tests/reference/angular-ugly_project.json new file mode 100644 index 00000000..2e130bb5 --- /dev/null +++ b/tests/reference/angular-ugly_project.json @@ -0,0 +1,1450 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Retrieves the project metadata for all projects owned by an account + * @method + * @name Test#listProjects + * @param {string} token - An API token. + * + */ + Test.prototype.listProjects = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Creates a new project + * @method + * @name Test#createProject + * @param {string} projectName - The project name. + * @param {string} template - A template name. If not specified the 'default' template will be used. + * @param {string} package - A package name. If not specified the 'free' package will be used. + * @param {string} token - An API token. + * + */ + Test.prototype.createProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['projectName'] !== undefined){ + queryParameters['project-name'] = parameters['projectName']; + } + + + + + + if(parameters['projectName'] === undefined){ + deferred.reject(new Error('Missing required query parameter: projectName')); + return deferred.promise; + } + + + if(parameters['template'] !== undefined){ + queryParameters['template'] = parameters['template']; + } + + + + + + + + if(parameters['package'] !== undefined){ + queryParameters['package'] = parameters['package']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Checks if a project exists + * @method + * @name Test#checkProject + * @param {string} name - The project name. + * + */ + Test.prototype.checkProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves a project metadata + * @method + * @name Test#getProjectMetadata + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getProjectMetadata = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Upgrades a project to the last Sausalito version + * @method + * @name Test#upgradeProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.upgradeProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Changes a project metadata + * @method + * @name Test#updateProject + * @param {string} name - The project name. + * @param {string} newName - The new project name. + * @param {string} package - The project package. + * @param {string} token - An API token. + * + */ + Test.prototype.updateProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['newName'] !== undefined){ + queryParameters['new-name'] = parameters['newName']; + } + + + + + + + + if(parameters['package'] !== undefined){ + queryParameters['package'] = parameters['package']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Deletes a project + * @method + * @name Test#deleteProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteProject = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieves the default MongoDB credentials + * @method + * @name Test#getDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getDefaultMongoDBCredentials = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Updates a project default MongoDB credentials + * @method + * @name Test#updateDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} dbType - The database type. + * @param {string} connString - The database connection string. Only for "user" databases. + * @param {string} db - The database name. Only for "user" databases. + * @param {string} user - The database user. Only for "user" databases. + * @param {string} pass - The database password. Only for "user" databases. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Only for "user" databases. Default is false. + * + */ + Test.prototype.updateDefaultMongoDBCredentials = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['dbType'] !== undefined){ + queryParameters['db-type'] = parameters['dbType']; + } + + + + + + if(parameters['dbType'] === undefined){ + deferred.reject(new Error('Missing required query parameter: dbType')); + return deferred.promise; + } + + + if(parameters['connString'] !== undefined){ + queryParameters['conn-string'] = parameters['connString']; + } + + + + + + + + if(parameters['db'] !== undefined){ + queryParameters['db'] = parameters['db']; + } + + + + + + + + if(parameters['user'] !== undefined){ + queryParameters['user'] = parameters['user']; + } + + + + + + + + if(parameters['pass'] !== undefined){ + queryParameters['pass'] = parameters['pass']; + } + + + + + + + + if(parameters['preDigested'] !== undefined){ + queryParameters['pre-digested'] = parameters['preDigested']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Tests MongoDB credentials + * @method + * @name Test#testDefaultMongoDB + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} connString - The database connection string. + * @param {string} db - The database name. + * @param {string} user - The database user. + * @param {string} pass - The database password. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Default is false. + * + */ + Test.prototype.testDefaultMongoDB = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/test-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters['connString'] !== undefined){ + queryParameters['conn-string'] = parameters['connString']; + } + + + + + + if(parameters['connString'] === undefined){ + deferred.reject(new Error('Missing required query parameter: connString')); + return deferred.promise; + } + + + if(parameters['db'] !== undefined){ + queryParameters['db'] = parameters['db']; + } + + + + + + if(parameters['db'] === undefined){ + deferred.reject(new Error('Missing required query parameter: db')); + return deferred.promise; + } + + + if(parameters['user'] !== undefined){ + queryParameters['user'] = parameters['user']; + } + + + + + + + + if(parameters['pass'] !== undefined){ + queryParameters['pass'] = parameters['pass']; + } + + + + + + + + if(parameters['preDigested'] !== undefined){ + queryParameters['pre-digested'] = parameters['preDigested']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Lists all custom domains of a project + * @method + * @name Test#listCustomDomains + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.listCustomDomains = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Adds a custom domain to a project + * @method + * @name Test#addCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The name of the new custom domain. + * @param {string} token - An API token. + * + */ + Test.prototype.addCustomDomain = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + if(parameters['domainName'] !== undefined){ + queryParameters['domain-name'] = parameters['domainName']; + } + + + + + + if(parameters['domainName'] === undefined){ + deferred.reject(new Error('Missing required query parameter: domainName')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Deletes a project custom domain + * @method + * @name Test#deleteCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteCustomDomain = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains/{domain-name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{name}', parameters['name']); + + + + + if(parameters['name'] === undefined){ + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + + + path = path.replace('{domain-name}', parameters['domainName']); + + + + + if(parameters['domainName'] === undefined){ + deferred.reject(new Error('Missing required path parameter: domainName')); + return deferred.promise; + } + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + if(parameters['token'] === undefined){ + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_protected.json b/tests/reference/angular-ugly_protected.json new file mode 100644 index 00000000..9b350cd8 --- /dev/null +++ b/tests/reference/angular-ugly_protected.json @@ -0,0 +1,275 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/api'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + this.token = (typeof options === 'object') ? (options.token ? options.token : {}) : {}; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Set Token + * @method + * @name Test#setToken + * @param {string} value - token's value + * @param {string} headerOrQueryName - the header or query name to send the token at + * @param {boolean} isQuery - true if send the token as query param, otherwise, send as header param + * + */ + Test.prototype.setToken = function (value, headerOrQueryName, isQuery) { + this.token.value = value; + this.token.headerOrQueryName = headerOrQueryName; + this.token.isQuery = isQuery; + }; + +/** + * Get token + * @method + * @name Test#auth + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.auth = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['grant_type'] !== undefined){ + queryParameters['grant_type'] = parameters['grant_type']; + } + + + + + + if(parameters['grant_type'] === undefined){ + deferred.reject(new Error('Missing required parameter: grant_type')); + return deferred.promise; + } + + + if(parameters['email'] !== undefined){ + queryParameters['email'] = parameters['email']; + } + + + + + + + + if(parameters['password'] !== undefined){ + queryParameters['password'] = parameters['password']; + } + + + + + + + + if(parameters['refresh_token'] !== undefined){ + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Get secure + * @method + * @name Test#getSecure + * @param {string} token - Auth token + * + */ + Test.prototype.getSecure = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (this.token.isQuery) { + queryParameters[this.token.headerOrQueryName] = this.token.value; + } else if (this.token.headerOrQueryName) { + headers[this.token.headerOrQueryName] = this.token.value; + } else { + headers['Authorization'] = 'Bearer ' + this.token.value; + } + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_queries.json b/tests/reference/angular-ugly_queries.json new file mode 100644 index 00000000..6cc2a865 --- /dev/null +++ b/tests/reference/angular-ugly_queries.json @@ -0,0 +1,1500 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + *

This API allows its users to retrieve financial information provided to the US Securities and Exchange Commission (SEC) by public companies using the XBRL global standard technical syntax. Submitted XBRL information is read by the system, converted to a format which is optimized for query (as opposed to XBRL which is optimized for information exchange), and stored in a database in that queriable format. Additional metadata is added to the system which is commonly used when querying this financial information. Please note that only financial information provided within SEC forms 10-Q and 10-K is provided via this system.

Information can be retrieved about entities, the submissions made by those entities, the components contained within those submissions, the model structure of a component, or the facts reported within a component. All information is provided in the following formats: JSON (the default), XML, CSV, and Excel.

For more information about using this system, you can download this Excel spreadsheet which contains working examples. Also, this getting started guide is helpful in understanding the information provided by this system.

Please note that information outside of the DOW30 can only be accessed using a valid token that can be retrieved by creating an account on http://www.secxbrl.info and login is done using the Session API.

Also note, that the POST method can be simulated by using GET and adding the _method=POST parameter to the HTTP request.

Please keep in mind that URLs are case sensitive. That is, all parameters need to be provided as shown in the documentation.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://secxbrl.alpha.xbrl.io/v1/_queries/public/api'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Retrieve information about all or a selection of entities + * @method + * @name Test#listEntities + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listEntities = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/entities.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve the filings of a particular entity + * @method + * @name Test#listFilings + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} aid - The id of the filing + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFilings = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/filings.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['aid'] !== undefined){ + queryParameters['aid'] = parameters['aid']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve a summary for all components of a given filing + * @method + * @name Test#listComponents + * @param {string} format - The result format + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: ALL) + * @param {string} aid - The id of the filing + * @param {string} cid - The id of a particular component + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} disclosure - The disclosure to search for (e.g. BalanceSheet) + * @param {string} reportElement - The name of the report element to search for (e.g. us-gaap:Goodwill) + * @param {string} label - A search term to search in the labels of components (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listComponents = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/components.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + if(parameters['aid'] !== undefined){ + queryParameters['aid'] = parameters['aid']; + } + + + + + + + + if(parameters['cid'] !== undefined){ + queryParameters['cid'] = parameters['cid']; + } + + + + + + + + if(parameters['networkIdentifier'] !== undefined){ + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + + + + + + + if(parameters['disclosure'] !== undefined){ + queryParameters['disclosure'] = parameters['disclosure']; + } + + + + + + + + if(parameters['reportElement'] !== undefined){ + queryParameters['reportElement'] = parameters['reportElement']; + } + + + + + + + + if(parameters['label'] !== undefined){ + queryParameters['label'] = parameters['label']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve the fact table for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listFactTable + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - A tag to filter + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFactTable = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['cid'] !== undefined){ + queryParameters['cid'] = parameters['cid']; + } + + + + + + + + if(parameters['aid'] !== undefined){ + queryParameters['aid'] = parameters['aid']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['networkIdentifier'] !== undefined){ + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + if(parameters['disclosure'] !== undefined){ + queryParameters['disclosure'] = parameters['disclosure']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve the model structure for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listModelStructure + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listModelStructure = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/modelstructure-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['cid'] !== undefined){ + queryParameters['cid'] = parameters['cid']; + } + + + + + + + + if(parameters['aid'] !== undefined){ + queryParameters['aid'] = parameters['aid']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['networkIdentifier'] !== undefined){ + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + if(parameters['disclosure'] !== undefined){ + queryParameters['disclosure'] = parameters['disclosure']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve the fact table for a given set of filings and a report. + * @method + * @name Test#listFactTableForReport + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + * + */ + Test.prototype.listFactTableForReport = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-report.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + queryParameters['report'] = 'FundamentalAccountingConcepts '; + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve one or more facts for a combination of filings. + * @method + * @name Test#listFacts + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} concept - The name of the concept to retrieve the fact for (alternatively, a parameter with name xbrl:Concept can be used). + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + + * @param {string} prefix:dimension - The name of a dimension used for filtering. Accepted format: prefix:dimension. As a value, the value of the dimension or ALL can be provided if all facts with this dimension should be retrieved + * @param {string} prefix:dimension::default - The default value of the dimension [prefix:dimension] that should be returned if the dimension was not provided explicitly for a fact. Accepted format: prefix:dimension::default + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFacts = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facts.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['concept'] !== undefined){ + queryParameters['concept'] = parameters['concept']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + queryParameters['map'] = 'FundamentalAccountingConcepts '; + + + + + + + + queryParameters['rules'] = 'FundamentalAccountingConcepts'; + + + + + + + + Object.keys(parameters).forEach(function(parameterName) { + if(new RegExp('[^:]+:[^:]+').test(parameterName)){ + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + + + + + + + Object.keys(parameters).forEach(function(parameterName) { + if(new RegExp('[^:]+:[^:]+::default').test(parameterName)){ + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Retrieve the report elements contained in a set of filings. + * @method + * @name Test#listReportElements + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} aid - The id of the filing + * @param {string} onlyNames - Whether only the names of the report elements should be returned. If so, the values don't contain duplicates. (default: false) + * @param {string} name - The name of the report element to return (e.g. us-gaap:Assets). + * @param {string} label - A search term to search in the labels of report elements (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listReportElements = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/report-elements.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['format'] !== undefined){ + queryParameters['format'] = parameters['format']; + } + + + + + + + + if(parameters['tag'] !== undefined){ + queryParameters['tag'] = parameters['tag']; + } + + + + + + + + if(parameters['cik'] !== undefined){ + queryParameters['cik'] = parameters['cik']; + } + + + + + + + + if(parameters['ticker'] !== undefined){ + queryParameters['ticker'] = parameters['ticker']; + } + + + + + + + + if(parameters['sic'] !== undefined){ + queryParameters['sic'] = parameters['sic']; + } + + + + + + + + if(parameters['fiscalYear'] !== undefined){ + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + + + + + + + if(parameters['fiscalPeriod'] !== undefined){ + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + + + + + + + if(parameters['aid'] !== undefined){ + queryParameters['aid'] = parameters['aid']; + } + + + + + + + + if(parameters['onlyNames'] !== undefined){ + queryParameters['onlyNames'] = parameters['onlyNames']; + } + + + + + + + + if(parameters['name'] !== undefined){ + queryParameters['name'] = parameters['name']; + } + + + + + + + + if(parameters['label'] !== undefined){ + queryParameters['label'] = parameters['label']; + } + + + + + + + + if(parameters['token'] !== undefined){ + queryParameters['token'] = parameters['token']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_ref.json b/tests/reference/angular-ugly_ref.json new file mode 100644 index 00000000..51aa6114 --- /dev/null +++ b/tests/reference/angular-ugly_ref.json @@ -0,0 +1,146 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Gets `Person` object. + * @method + * @name Test#getPersons + * @param {string} id - id + * + */ + Test.prototype.getPersons = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/persons'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['id'] !== undefined){ + queryParameters['id'] = parameters['id']; + } + + + + + + if(parameters['id'] === undefined){ + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_test.json b/tests/reference/angular-ugly_test.json new file mode 100644 index 00000000..d8ed871f --- /dev/null +++ b/tests/reference/angular-ugly_test.json @@ -0,0 +1,139 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * + * @method + * @name Test#User_exists__head_Users__id_ + * @param {string} id - Model id + * + */ + Test.prototype.User_exists__head_Users__id_ = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/Users/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{id}', parameters['id']); + + + + + if(parameters['id'] === undefined){ + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_uber.json b/tests/reference/angular-ugly_uber.json new file mode 100644 index 00000000..c3fb94b9 --- /dev/null +++ b/tests/reference/angular-ugly_uber.json @@ -0,0 +1,678 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * Move your app forward with the Uber API + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'https://api.uber.com/v1'; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProducts + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProducts = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['latitude'] !== undefined){ + queryParameters['latitude'] = parameters['latitude']; + } + + + + + + if(parameters['latitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + + if(parameters['longitude'] !== undefined){ + queryParameters['longitude'] = parameters['longitude']; + } + + + + + + if(parameters['longitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProductsById + * @param {integer} id - Move your app forward with the Uber API + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProductsById = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{id}', parameters['id']); + + + + + if(parameters['id'] === undefined){ + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + + if(parameters['latitude'] !== undefined){ + queryParameters['latitude'] = parameters['latitude']; + } + + + + + + if(parameters['latitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + + if(parameters['longitude'] !== undefined){ + queryParameters['longitude'] = parameters['longitude']; + } + + + + + + if(parameters['longitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @method + * @name Test#getEstimatesPrice + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {number} end_latitude - Latitude component of end location. + * @param {number} end_longitude - Longitude component of end location. + * + */ + Test.prototype.getEstimatesPrice = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/price'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['start_latitude'] !== undefined){ + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + + + + + if(parameters['start_latitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + + if(parameters['start_longitude'] !== undefined){ + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + + + + + if(parameters['start_longitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + + if(parameters['end_latitude'] !== undefined){ + queryParameters['end_latitude'] = parameters['end_latitude']; + } + + + + + + if(parameters['end_latitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: end_latitude')); + return deferred.promise; + } + + + if(parameters['end_longitude'] !== undefined){ + queryParameters['end_longitude'] = parameters['end_longitude']; + } + + + + + + if(parameters['end_longitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: end_longitude')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @method + * @name Test#getEstimatesTime + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {string} customer_uuid - Unique customer identifier to be used for experience customization. + * @param {string} product_id - Unique identifier representing a specific product for a given latitude & longitude. + * + */ + Test.prototype.getEstimatesTime = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/time'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['start_latitude'] !== undefined){ + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + + + + + if(parameters['start_latitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + + if(parameters['start_longitude'] !== undefined){ + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + + + + + if(parameters['start_longitude'] === undefined){ + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + + if(parameters['customer_uuid'] !== undefined){ + queryParameters['customer_uuid'] = parameters['customer_uuid']; + } + + + + + + + + if(parameters['product_id'] !== undefined){ + queryParameters['product_id'] = parameters['product_id']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @method + * @name Test#getMe + * + */ + Test.prototype.getMe = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/me'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @method + * @name Test#getHistory + * @param {integer} offset - Offset the list of returned results by this amount. Default is zero. + * @param {integer} limit - Number of items to retrieve. Default is 5, maximum is 100. + * + */ + Test.prototype.getHistory = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/history'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + if(parameters['offset'] !== undefined){ + queryParameters['offset'] = parameters['offset']; + } + + + + + + + + if(parameters['limit'] !== undefined){ + queryParameters['limit'] = parameters['limit']; + } + + + + + + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular-ugly_users.json b/tests/reference/angular-ugly_users.json new file mode 100644 index 00000000..8a34aa13 --- /dev/null +++ b/tests/reference/angular-ugly_users.json @@ -0,0 +1,220 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) +.factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope){ + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function(){ + function Test(options, cache){ + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if(this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler){ + var url = this.domain + path; + $scope.$on(url, function(){ + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path){ + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for(var p in obj) { + var val = obj[p]; + if(angular.isArray(val)) { + val.forEach(function(val){ + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + +/** + * Get user + * @method + * @name Test#findById + * @param {string} userId - User's id + * + */ + Test.prototype.findById = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{userId}', parameters['userId']); + + + + + if(parameters['userId'] === undefined){ + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var cached = parameters.$cache && parameters.$cache.get(url); +if(cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; +} +var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; +/** + * Delete user + * @method + * @name Test#delete + * @param {string} userId - User's id + * + */ + Test.prototype.delete = function(parameters){ + if(parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + + + + + path = path.replace('{userId}', parameters['userId']); + + + + + if(parameters['userId'] === undefined){ + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + + if(parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName){ + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + +var url = domain + path; +var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers +}; +if(Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; +} +$http(options) +.success(function(data, status, headers, config){ + deferred.resolve(data); + if(parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } +}) +.error(function(data, status, headers, config){ + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); +}); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; +}]); diff --git a/tests/reference/angular__batch.json b/tests/reference/angular__batch.json new file mode 100644 index 00000000..469eda8f --- /dev/null +++ b/tests/reference/angular__batch.json @@ -0,0 +1,167 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Import project contents from an archive + * @method + * @name Test#importProject + * @param {string} url - The archive url. + * @param {string} archive - The archive contents. + * @param {string} root - The path inside the archive that contains the modules and queries folders. Use '/' as folder separator. + * @param {string} overwrite - Whether to overwrite current project queries and modules. Default is true. + * @param {boolean} deleteOrphaned - Whether to delete orphaned file or not. Default is false. + * @param {boolean} simulate - Whether to simulate the operation or not. Default is false. + * @param {string} token - A project token. + * @param {string} contentType -

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * + */ + Test.prototype.importProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_batch/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['url'] !== undefined) { + queryParameters['url'] = parameters['url']; + } + + if (parameters['archive'] !== undefined) { + body = parameters['archive']; + } + + if (parameters['root'] !== undefined) { + queryParameters['root'] = parameters['root']; + } + + if (parameters['overwrite'] !== undefined) { + queryParameters['overwrite'] = parameters['overwrite']; + } + + if (parameters['deleteOrphaned'] !== undefined) { + queryParameters['delete-orphaned'] = parameters['deleteOrphaned']; + } + + if (parameters['simulate'] !== undefined) { + queryParameters['simulate'] = parameters['simulate']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['contentType'] !== undefined) { + headers['Content-Type'] = parameters['contentType']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular__datasources.json b/tests/reference/angular__datasources.json new file mode 100644 index 00000000..3aea7d5d --- /dev/null +++ b/tests/reference/angular__datasources.json @@ -0,0 +1,1621 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage and explore data sources. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_datasources.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists all data sources + * @method + * @name Test#listDatasources + * @param {string} token - A project token. + * + */ + Test.prototype.listDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists all data sources in a specific category + * @method + * @name Test#listCategoryDatasources + * @param {string} category - The data source category. + * @param {string} token - A project token. + * + */ + Test.prototype.listCategoryDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new data source + * @method + * @name Test#createDatasource + * @param {string} category - The data source category. + * @param {string} name - The name of the data source. The data source name can contain any alphabetic letter, numbers, dots, or dashes, and must start with an alphabetic letter. + * @param {string} token - A project token. + * @param {boolean} default - Whether the new data source will be the default one for its category. The default value is false. + * @param {string} credentials - The data sources credentials as JSON. + * + */ + Test.prototype.createDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters['credentials'] === undefined) { + deferred.reject(new Error('Missing required body parameter: credentials')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a data source credentials + * @method + * @name Test#getDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a data source + * @method + * @name Test#updateDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * @param {string} name - The new name of the data source. If not specified the data source is not renamed. + * @param {boolean} default - Whether the data source should become (if true) or cease to be (if false) the default one for its category. If not specified the data source does not change its default status. + * @param {string} credentials - The new data sources credentials as JSON. If not specified the data sources credentials are not changed + * + */ + Test.prototype.updateDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a data source + * @method + * @name Test#removeDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * List available collections + * @method + * @name Test#getDatasourceContents + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasourceContents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates collection + * @method + * @name Test#createCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} name - The name of the new collection. + * @param {string} token - A project token. + * + */ + Test.prototype.createCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves metadata about a collection + * @method + * @name Test#getCollectionMetadata + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.getCollectionMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a collection + * @method + * @name Test#removeCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists collection items + * @method + * @name Test#listCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {string} Accept - Serialization format. + * + */ + Test.prototype.listCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Inserts an item into a collection + * @method + * @name Test#insertInCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {string} item - The item to insert. + * + */ + Test.prototype.insertInCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Truncates a collection + * @method + * @name Test#truncateCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.truncateCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a collection item + * @method + * @name Test#getItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.getItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a collection item + * @method + * @name Test#updateItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * @param {string} item - The new item. + * + */ + Test.prototype.updateItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes an item from a collection + * @method + * @name Test#removeItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.removeItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular__jobs.json b/tests/reference/angular__jobs.json new file mode 100644 index 00000000..77457cf5 --- /dev/null +++ b/tests/reference/angular__jobs.json @@ -0,0 +1,501 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage jobs. Jobs are of three kinds: execute, map and shuffle. Each job has one of the following statuses: pending, failed, in-progress, completed, timed-out. To use this API, a default MongoDB database must be configured. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_jobs.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists jobs + * @method + * @name Test#listJobs + * @param {array} status - One or more project statuses. + * @param {string} from - The starting date for filtering the listed jobs. + * @param {string} to - The ending date for filtering the listed jobs. + * @param {string} token - A project token. + * + */ + Test.prototype.listJobs = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['status'] !== undefined) { + queryParameters['status'] = parameters['status']; + } + + if (parameters['from'] !== undefined) { + queryParameters['from'] = parameters['from']; + } + + if (parameters['to'] !== undefined) { + queryParameters['to'] = parameters['to']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a job details + * @method + * @name Test#getJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.getJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a job + * @method + * @name Test#removeJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the results of a job + * @method + * @name Test#listResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {boolean} allowPartial - Whether to allow to retrieve partial results for in progress or failed jobs. The default value is false. + * @param {string} Accept - Specifies the serialization of the produced objects + * + */ + Test.prototype.listResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['allowPartial'] !== undefined) { + queryParameters['allow-partial'] = parameters['allowPartial']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a job results + * @method + * @name Test#removeResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular__modules.json b/tests/reference/angular__modules.json new file mode 100644 index 00000000..2149ce59 --- /dev/null +++ b/tests/reference/angular__modules.json @@ -0,0 +1,512 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage JSONiq and XQuery library modules. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_modules.

This API does not allow to retrieve the source code, modify or delete system modules.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists available modules + * @method + * @name Test#listModules + * @param {string} startsWith - Filter the available module by their module path. + * @param {boolean} includeSystem - Include modules provided by the platform. + * @param {boolean} includeNs - Include each module's namespace in the listing. + * @param {boolean} includeSrc - Include each module's source code in the listing. + * @param {string} token - A project token. + * + */ + Test.prototype.listModules = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['startsWith'] !== undefined) { + queryParameters['starts-with'] = parameters['startsWith']; + } + + if (parameters['includeSystem'] !== undefined) { + queryParameters['include-system'] = parameters['includeSystem']; + } + + if (parameters['includeNs'] !== undefined) { + queryParameters['include-ns'] = parameters['includeNs']; + } + + if (parameters['includeSrc'] !== undefined) { + queryParameters['include-src'] = parameters['includeSrc']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the source code of the specified project module + * @method + * @name Test#getModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.getModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new project module + * @method + * @name Test#createModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The source code of the module. + + * + */ + Test.prototype.createModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates or updates the specified project module + * @method + * @name Test#saveModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The module source code + + * + */ + Test.prototype.saveModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes the specified project module + * @method + * @name Test#removeModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.removeModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular__queries.json b/tests/reference/angular__queries.json new file mode 100644 index 00000000..ce7d42ee --- /dev/null +++ b/tests/reference/angular__queries.json @@ -0,0 +1,847 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage and execute queries. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_queries.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists public and/or private queries + * @method + * @name Test#listQueries + * @param {string} visibility - The query visibility. + * @param {string} token - A project token. + * + */ + Test.prototype.listQueries = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{visibility}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{visibility}', parameters['visibility']); + + if (parameters['visibility'] === undefined) { + deferred.reject(new Error('Missing required path parameter: visibility')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Executes a non-side-effecting query + * @method + * @name Test#executeSimpleQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} trace - Whether to enable the output of trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeSimpleQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Executes a query + * @method + * @name Test#executeQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} async - Whether to execute the query asynchronously or not. + * @param {string} outputCollection - The output collection when runnng the query asynchronously. + * @param {boolean} trace - Whether to enable the output trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['async'] !== undefined) { + queryParameters['async'] = parameters['async']; + } + + if (parameters['outputCollection'] !== undefined) { + queryParameters['output-collection'] = parameters['outputCollection']; + } + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a query source code + * @method + * @name Test#getQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new query + * @method + * @name Test#createQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The source code of the query + + * + */ + Test.prototype.createQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + if (parameters['queryBody'] === undefined) { + deferred.reject(new Error('Missing required body parameter: queryBody')); + return deferred.promise; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates or updates a query + * @method + * @name Test#saveQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The query source code + + * + */ + Test.prototype.saveQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a query + * @method + * @name Test#removeQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.removeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a query execution plan + * @method + * @name Test#getQueryPlan + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQueryPlan = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Precompiles a query + * @method + * @name Test#compileQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.compileQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_account.json b/tests/reference/angular_account.json new file mode 100644 index 00000000..f19e16c2 --- /dev/null +++ b/tests/reference/angular_account.json @@ -0,0 +1,1541 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Creates a new account + * @method + * @name Test#createAccount + * @param {string} firstname - The account first name. + * @param {string} lastname - The account last name. + * @param {string} company - The account company. + * @param {string} email - The account email. + * @param {string} password - The account password. + * + */ + Test.prototype.createAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['firstname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: firstname')); + return deferred.promise; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['lastname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: lastname')); + return deferred.promise; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['company'] === undefined) { + deferred.reject(new Error('Missing required query parameter: company')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required query parameter: email')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if an account exists + * @method + * @name Test#checkAccount + * @param {string} email - The account email. + * + */ + Test.prototype.checkAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves an account metadata + * @method + * @name Test#getAccountMetadata + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getAccountMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates an account + * @method + * @name Test#updateAccount + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} firstname - The account new first name. If not specified the account firstname is not modified. + * @param {string} lastname - The account new last name. If not specified the account lastname is not modified. + * @param {string} company - The account new company. If not specified the account company is not modified. + * @param {string} password - The account new password. If not specified the account password is not modified. + * + */ + Test.prototype.updateAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Resends the confirmation email + * @method + * @name Test#resendConfirmation + * @param {string} email - The account email. + * + */ + Test.prototype.resendConfirmation = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Confirms an account + * @method + * @name Test#confirmAccount + * @param {string} email - The account name. + * @param {string} confirmationToken - The account confirmation token. + * + */ + Test.prototype.confirmAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['confirmationToken'] !== undefined) { + queryParameters['confirmation-token'] = parameters['confirmationToken']; + } + + if (parameters['confirmationToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: confirmationToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if a reset token is valid + * @method + * @name Test#checkResetToken + * @param {string} email - The account email. + * @param {string} resetToken - The reset token to check. + * + */ + Test.prototype.checkResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Changes an account password using a reset token + * @method + * @name Test#resetPassword + * @param {string} email - The account email. + * @param {string} resetToken - The latest account reset token. + * @param {string} password - The new account password. + * + */ + Test.prototype.resetPassword = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Sends a reset token + * @method + * @name Test#sendResetToken + * @param {string} email - The account email. + * @param {string} portalUrl - The Portal URL + * + */ + Test.prototype.sendResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['portalUrl'] !== undefined) { + queryParameters['portal-url'] = parameters['portalUrl']; + } + + if (parameters['portalUrl'] === undefined) { + deferred.reject(new Error('Missing required query parameter: portalUrl')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing data and the data required to update it + * @method + * @name Test#getBillingData + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getBillingData = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/billing'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the account invoices + * @method + * @name Test#listInvoices + * @param {string} email - The account email. + * @param {string} cursor - Used to control which page is returned. Leave empty for the first page. Use the cursor returned in a reply to fetch the next page. + * @param {integer} limit - The number of records to return per page up to a maximum of 200. Default is 50. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listInvoices = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['cursor'] !== undefined) { + queryParameters['cursor'] = parameters['cursor']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing information + * @method + * @name Test#getInvoice + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} Accept - The format of the response. Default is "application/pdf" + * + */ + Test.prototype.getInvoice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices/{invoice}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['application/json', 'application/pdf']; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the account subscriptions + * @method + * @name Test#listSubscriptions + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listSubscriptions = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new subscription + * @method + * @name Test#createSubscription + * @param {string} email - The account email. + * @param {string} plan - The plan to subscribe to. + * @param {integer} quantity - The quantity for the chosen plan. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.createSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['plan'] !== undefined) { + queryParameters['plan'] = parameters['plan']; + } + + if (parameters['plan'] === undefined) { + deferred.reject(new Error('Missing required query parameter: plan')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the subscription details + * @method + * @name Test#getSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a subscription + * @method + * @name Test#updateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {integer} quantity - The new quantity. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.updateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Terminates a subscription + * @method + * @name Test#terminateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.terminateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_auth.json b/tests/reference/angular_auth.json new file mode 100644 index 00000000..46e73f5d --- /dev/null +++ b/tests/reference/angular_auth.json @@ -0,0 +1,147 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

This OAuth2 compliant API can be used to authorize requests. The endpoint for these methods is http://portal.28.io/auth.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Creates or refreshes authorization tokens + * @method + * @name Test#authenticate + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.authenticate = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required query parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_package.json b/tests/reference/angular_package.json new file mode 100644 index 00000000..a1501bbd --- /dev/null +++ b/tests/reference/angular_package.json @@ -0,0 +1,127 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists available packages + * @method + * @name Test#listPackages + * + */ + Test.prototype.listPackages = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/package'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_ping.json b/tests/reference/angular_ping.json new file mode 100644 index 00000000..42a5f5ae --- /dev/null +++ b/tests/reference/angular_ping.json @@ -0,0 +1,127 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Checks if the service is available. + * @method + * @name Test#ping + * + */ + Test.prototype.ping = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/ping'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_project.json b/tests/reference/angular_project.json new file mode 100644 index 00000000..4d80cae9 --- /dev/null +++ b/tests/reference/angular_project.json @@ -0,0 +1,1193 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Retrieves the project metadata for all projects owned by an account + * @method + * @name Test#listProjects + * @param {string} token - An API token. + * + */ + Test.prototype.listProjects = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new project + * @method + * @name Test#createProject + * @param {string} projectName - The project name. + * @param {string} template - A template name. If not specified the 'default' template will be used. + * @param {string} package - A package name. If not specified the 'free' package will be used. + * @param {string} token - An API token. + * + */ + Test.prototype.createProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['projectName'] !== undefined) { + queryParameters['project-name'] = parameters['projectName']; + } + + if (parameters['projectName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: projectName')); + return deferred.promise; + } + + if (parameters['template'] !== undefined) { + queryParameters['template'] = parameters['template']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if a project exists + * @method + * @name Test#checkProject + * @param {string} name - The project name. + * + */ + Test.prototype.checkProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a project metadata + * @method + * @name Test#getProjectMetadata + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getProjectMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Upgrades a project to the last Sausalito version + * @method + * @name Test#upgradeProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.upgradeProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Changes a project metadata + * @method + * @name Test#updateProject + * @param {string} name - The project name. + * @param {string} newName - The new project name. + * @param {string} package - The project package. + * @param {string} token - An API token. + * + */ + Test.prototype.updateProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['newName'] !== undefined) { + queryParameters['new-name'] = parameters['newName']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Deletes a project + * @method + * @name Test#deleteProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the default MongoDB credentials + * @method + * @name Test#getDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a project default MongoDB credentials + * @method + * @name Test#updateDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} dbType - The database type. + * @param {string} connString - The database connection string. Only for "user" databases. + * @param {string} db - The database name. Only for "user" databases. + * @param {string} user - The database user. Only for "user" databases. + * @param {string} pass - The database password. Only for "user" databases. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Only for "user" databases. Default is false. + * + */ + Test.prototype.updateDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['dbType'] !== undefined) { + queryParameters['db-type'] = parameters['dbType']; + } + + if (parameters['dbType'] === undefined) { + deferred.reject(new Error('Missing required query parameter: dbType')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Tests MongoDB credentials + * @method + * @name Test#testDefaultMongoDB + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} connString - The database connection string. + * @param {string} db - The database name. + * @param {string} user - The database user. + * @param {string} pass - The database password. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Default is false. + * + */ + Test.prototype.testDefaultMongoDB = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/test-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['connString'] === undefined) { + deferred.reject(new Error('Missing required query parameter: connString')); + return deferred.promise; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['db'] === undefined) { + deferred.reject(new Error('Missing required query parameter: db')); + return deferred.promise; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists all custom domains of a project + * @method + * @name Test#listCustomDomains + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.listCustomDomains = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Adds a custom domain to a project + * @method + * @name Test#addCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The name of the new custom domain. + * @param {string} token - An API token. + * + */ + Test.prototype.addCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['domainName'] !== undefined) { + queryParameters['domain-name'] = parameters['domainName']; + } + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Deletes a project custom domain + * @method + * @name Test#deleteCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains/{domain-name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + path = path.replace('{domain-name}', parameters['domainName']); + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required path parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_protected.json b/tests/reference/angular_protected.json new file mode 100644 index 00000000..ee1f3515 --- /dev/null +++ b/tests/reference/angular_protected.json @@ -0,0 +1,241 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + this.token = (typeof options === 'object') ? (options.token ? options.token : {}) : {}; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Set Token + * @method + * @name Test#setToken + * @param {string} value - token's value + * @param {string} headerOrQueryName - the header or query name to send the token at + * @param {boolean} isQuery - true if send the token as query param, otherwise, send as header param + * + */ + Test.prototype.setToken = function(value, headerOrQueryName, isQuery) { + this.token.value = value; + this.token.headerOrQueryName = headerOrQueryName; + this.token.isQuery = isQuery; + }; + + /** + * Get token + * @method + * @name Test#auth + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.auth = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Get secure + * @method + * @name Test#getSecure + * @param {string} token - Auth token + * + */ + Test.prototype.getSecure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (this.token.isQuery) { + queryParameters[this.token.headerOrQueryName] = this.token.value; + } else if (this.token.headerOrQueryName) { + headers[this.token.headerOrQueryName] = this.token.value; + } else { + headers['Authorization'] = 'Bearer ' + this.token.value; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_queries.json b/tests/reference/angular_queries.json new file mode 100644 index 00000000..1a4a5983 --- /dev/null +++ b/tests/reference/angular_queries.json @@ -0,0 +1,965 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

This API allows its users to retrieve financial information provided to the US Securities and Exchange Commission (SEC) by public companies using the XBRL global standard technical syntax. Submitted XBRL information is read by the system, converted to a format which is optimized for query (as opposed to XBRL which is optimized for information exchange), and stored in a database in that queriable format. Additional metadata is added to the system which is commonly used when querying this financial information. Please note that only financial information provided within SEC forms 10-Q and 10-K is provided via this system.

Information can be retrieved about entities, the submissions made by those entities, the components contained within those submissions, the model structure of a component, or the facts reported within a component. All information is provided in the following formats: JSON (the default), XML, CSV, and Excel.

For more information about using this system, you can download this Excel spreadsheet which contains working examples. Also, this getting started guide is helpful in understanding the information provided by this system.

Please note that information outside of the DOW30 can only be accessed using a valid token that can be retrieved by creating an account on http://www.secxbrl.info and login is done using the Session API.

Also note, that the POST method can be simulated by using GET and adding the _method=POST parameter to the HTTP request.

Please keep in mind that URLs are case sensitive. That is, all parameters need to be provided as shown in the documentation.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://secxbrl.alpha.xbrl.io/v1/_queries/public/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Retrieve information about all or a selection of entities + * @method + * @name Test#listEntities + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listEntities = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/entities.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the filings of a particular entity + * @method + * @name Test#listFilings + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} aid - The id of the filing + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFilings = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/filings.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve a summary for all components of a given filing + * @method + * @name Test#listComponents + * @param {string} format - The result format + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: ALL) + * @param {string} aid - The id of the filing + * @param {string} cid - The id of a particular component + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} disclosure - The disclosure to search for (e.g. BalanceSheet) + * @param {string} reportElement - The name of the report element to search for (e.g. us-gaap:Goodwill) + * @param {string} label - A search term to search in the labels of components (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listComponents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/components.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['reportElement'] !== undefined) { + queryParameters['reportElement'] = parameters['reportElement']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listFactTable + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - A tag to filter + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFactTable = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the model structure for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listModelStructure + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listModelStructure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/modelstructure-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given set of filings and a report. + * @method + * @name Test#listFactTableForReport + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + * + */ + Test.prototype.listFactTableForReport = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-report.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['report'] = 'FundamentalAccountingConcepts '; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve one or more facts for a combination of filings. + * @method + * @name Test#listFacts + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} concept - The name of the concept to retrieve the fact for (alternatively, a parameter with name xbrl:Concept can be used). + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + + * @param {string} prefix:dimension - The name of a dimension used for filtering. Accepted format: prefix:dimension. As a value, the value of the dimension or ALL can be provided if all facts with this dimension should be retrieved + * @param {string} prefix:dimension::default - The default value of the dimension [prefix:dimension] that should be returned if the dimension was not provided explicitly for a fact. Accepted format: prefix:dimension::default + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFacts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facts.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['concept'] !== undefined) { + queryParameters['concept'] = parameters['concept']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['map'] = 'FundamentalAccountingConcepts '; + + queryParameters['rules'] = 'FundamentalAccountingConcepts'; + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+::default').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the report elements contained in a set of filings. + * @method + * @name Test#listReportElements + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} aid - The id of the filing + * @param {string} onlyNames - Whether only the names of the report elements should be returned. If so, the values don't contain duplicates. (default: false) + * @param {string} name - The name of the report element to return (e.g. us-gaap:Assets). + * @param {string} label - A search term to search in the labels of report elements (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listReportElements = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/report-elements.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['onlyNames'] !== undefined) { + queryParameters['onlyNames'] = parameters['onlyNames']; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_ref.json b/tests/reference/angular_ref.json new file mode 100644 index 00000000..c38fc76a --- /dev/null +++ b/tests/reference/angular_ref.json @@ -0,0 +1,137 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Gets `Person` object. + * @method + * @name Test#getPersons + * @param {string} id - id + * + */ + Test.prototype.getPersons = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/persons'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['id'] !== undefined) { + queryParameters['id'] = parameters['id']; + } + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_test.json b/tests/reference/angular_test.json new file mode 100644 index 00000000..30ef08de --- /dev/null +++ b/tests/reference/angular_test.json @@ -0,0 +1,130 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * + * @method + * @name Test#User_exists__head_Users__id_ + * @param {string} id - Model id + * + */ + Test.prototype.User_exists__head_Users__id_ = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/Users/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_uber.json b/tests/reference/angular_uber.json new file mode 100644 index 00000000..f7c8ed30 --- /dev/null +++ b/tests/reference/angular_uber.json @@ -0,0 +1,580 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * Move your app forward with the Uber API + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'https://api.uber.com/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProducts + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProducts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProductsById + * @param {integer} id - Move your app forward with the Uber API + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProductsById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @method + * @name Test#getEstimatesPrice + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {number} end_latitude - Latitude component of end location. + * @param {number} end_longitude - Longitude component of end location. + * + */ + Test.prototype.getEstimatesPrice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/price'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['end_latitude'] !== undefined) { + queryParameters['end_latitude'] = parameters['end_latitude']; + } + + if (parameters['end_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_latitude')); + return deferred.promise; + } + + if (parameters['end_longitude'] !== undefined) { + queryParameters['end_longitude'] = parameters['end_longitude']; + } + + if (parameters['end_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @method + * @name Test#getEstimatesTime + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {string} customer_uuid - Unique customer identifier to be used for experience customization. + * @param {string} product_id - Unique identifier representing a specific product for a given latitude & longitude. + * + */ + Test.prototype.getEstimatesTime = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/time'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['customer_uuid'] !== undefined) { + queryParameters['customer_uuid'] = parameters['customer_uuid']; + } + + if (parameters['product_id'] !== undefined) { + queryParameters['product_id'] = parameters['product_id']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @method + * @name Test#getMe + * + */ + Test.prototype.getMe = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/me'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @method + * @name Test#getHistory + * @param {integer} offset - Offset the list of returned results by this amount. Default is zero. + * @param {integer} limit - Number of items to retrieve. Default is 5, maximum is 100. + * + */ + Test.prototype.getHistory = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/history'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/angular_users.json b/tests/reference/angular_users.json new file mode 100644 index 00000000..285b1c40 --- /dev/null +++ b/tests/reference/angular_users.json @@ -0,0 +1,203 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Get user + * @method + * @name Test#findById + * @param {string} userId - User's id + * + */ + Test.prototype.findById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Delete user + * @method + * @name Test#delete + * @param {string} userId - User's id + * + */ + Test.prototype.delete = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom__batch.json b/tests/reference/custom__batch.json new file mode 100644 index 00000000..469eda8f --- /dev/null +++ b/tests/reference/custom__batch.json @@ -0,0 +1,167 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Import project contents from an archive + * @method + * @name Test#importProject + * @param {string} url - The archive url. + * @param {string} archive - The archive contents. + * @param {string} root - The path inside the archive that contains the modules and queries folders. Use '/' as folder separator. + * @param {string} overwrite - Whether to overwrite current project queries and modules. Default is true. + * @param {boolean} deleteOrphaned - Whether to delete orphaned file or not. Default is false. + * @param {boolean} simulate - Whether to simulate the operation or not. Default is false. + * @param {string} token - A project token. + * @param {string} contentType -

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * + */ + Test.prototype.importProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_batch/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['url'] !== undefined) { + queryParameters['url'] = parameters['url']; + } + + if (parameters['archive'] !== undefined) { + body = parameters['archive']; + } + + if (parameters['root'] !== undefined) { + queryParameters['root'] = parameters['root']; + } + + if (parameters['overwrite'] !== undefined) { + queryParameters['overwrite'] = parameters['overwrite']; + } + + if (parameters['deleteOrphaned'] !== undefined) { + queryParameters['delete-orphaned'] = parameters['deleteOrphaned']; + } + + if (parameters['simulate'] !== undefined) { + queryParameters['simulate'] = parameters['simulate']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['contentType'] !== undefined) { + headers['Content-Type'] = parameters['contentType']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom__datasources.json b/tests/reference/custom__datasources.json new file mode 100644 index 00000000..3aea7d5d --- /dev/null +++ b/tests/reference/custom__datasources.json @@ -0,0 +1,1621 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage and explore data sources. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_datasources.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists all data sources + * @method + * @name Test#listDatasources + * @param {string} token - A project token. + * + */ + Test.prototype.listDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists all data sources in a specific category + * @method + * @name Test#listCategoryDatasources + * @param {string} category - The data source category. + * @param {string} token - A project token. + * + */ + Test.prototype.listCategoryDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new data source + * @method + * @name Test#createDatasource + * @param {string} category - The data source category. + * @param {string} name - The name of the data source. The data source name can contain any alphabetic letter, numbers, dots, or dashes, and must start with an alphabetic letter. + * @param {string} token - A project token. + * @param {boolean} default - Whether the new data source will be the default one for its category. The default value is false. + * @param {string} credentials - The data sources credentials as JSON. + * + */ + Test.prototype.createDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters['credentials'] === undefined) { + deferred.reject(new Error('Missing required body parameter: credentials')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a data source credentials + * @method + * @name Test#getDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a data source + * @method + * @name Test#updateDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * @param {string} name - The new name of the data source. If not specified the data source is not renamed. + * @param {boolean} default - Whether the data source should become (if true) or cease to be (if false) the default one for its category. If not specified the data source does not change its default status. + * @param {string} credentials - The new data sources credentials as JSON. If not specified the data sources credentials are not changed + * + */ + Test.prototype.updateDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a data source + * @method + * @name Test#removeDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * List available collections + * @method + * @name Test#getDatasourceContents + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasourceContents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates collection + * @method + * @name Test#createCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} name - The name of the new collection. + * @param {string} token - A project token. + * + */ + Test.prototype.createCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves metadata about a collection + * @method + * @name Test#getCollectionMetadata + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.getCollectionMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a collection + * @method + * @name Test#removeCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists collection items + * @method + * @name Test#listCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {string} Accept - Serialization format. + * + */ + Test.prototype.listCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Inserts an item into a collection + * @method + * @name Test#insertInCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {string} item - The item to insert. + * + */ + Test.prototype.insertInCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Truncates a collection + * @method + * @name Test#truncateCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.truncateCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a collection item + * @method + * @name Test#getItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.getItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a collection item + * @method + * @name Test#updateItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * @param {string} item - The new item. + * + */ + Test.prototype.updateItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes an item from a collection + * @method + * @name Test#removeItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.removeItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom__jobs.json b/tests/reference/custom__jobs.json new file mode 100644 index 00000000..77457cf5 --- /dev/null +++ b/tests/reference/custom__jobs.json @@ -0,0 +1,501 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage jobs. Jobs are of three kinds: execute, map and shuffle. Each job has one of the following statuses: pending, failed, in-progress, completed, timed-out. To use this API, a default MongoDB database must be configured. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_jobs.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists jobs + * @method + * @name Test#listJobs + * @param {array} status - One or more project statuses. + * @param {string} from - The starting date for filtering the listed jobs. + * @param {string} to - The ending date for filtering the listed jobs. + * @param {string} token - A project token. + * + */ + Test.prototype.listJobs = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['status'] !== undefined) { + queryParameters['status'] = parameters['status']; + } + + if (parameters['from'] !== undefined) { + queryParameters['from'] = parameters['from']; + } + + if (parameters['to'] !== undefined) { + queryParameters['to'] = parameters['to']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a job details + * @method + * @name Test#getJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.getJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a job + * @method + * @name Test#removeJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the results of a job + * @method + * @name Test#listResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {boolean} allowPartial - Whether to allow to retrieve partial results for in progress or failed jobs. The default value is false. + * @param {string} Accept - Specifies the serialization of the produced objects + * + */ + Test.prototype.listResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['allowPartial'] !== undefined) { + queryParameters['allow-partial'] = parameters['allowPartial']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a job results + * @method + * @name Test#removeResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom__modules.json b/tests/reference/custom__modules.json new file mode 100644 index 00000000..2149ce59 --- /dev/null +++ b/tests/reference/custom__modules.json @@ -0,0 +1,512 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage JSONiq and XQuery library modules. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_modules.

This API does not allow to retrieve the source code, modify or delete system modules.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists available modules + * @method + * @name Test#listModules + * @param {string} startsWith - Filter the available module by their module path. + * @param {boolean} includeSystem - Include modules provided by the platform. + * @param {boolean} includeNs - Include each module's namespace in the listing. + * @param {boolean} includeSrc - Include each module's source code in the listing. + * @param {string} token - A project token. + * + */ + Test.prototype.listModules = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['startsWith'] !== undefined) { + queryParameters['starts-with'] = parameters['startsWith']; + } + + if (parameters['includeSystem'] !== undefined) { + queryParameters['include-system'] = parameters['includeSystem']; + } + + if (parameters['includeNs'] !== undefined) { + queryParameters['include-ns'] = parameters['includeNs']; + } + + if (parameters['includeSrc'] !== undefined) { + queryParameters['include-src'] = parameters['includeSrc']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the source code of the specified project module + * @method + * @name Test#getModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.getModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new project module + * @method + * @name Test#createModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The source code of the module. + + * + */ + Test.prototype.createModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates or updates the specified project module + * @method + * @name Test#saveModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The module source code + + * + */ + Test.prototype.saveModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes the specified project module + * @method + * @name Test#removeModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.removeModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom__queries.json b/tests/reference/custom__queries.json new file mode 100644 index 00000000..ce7d42ee --- /dev/null +++ b/tests/reference/custom__queries.json @@ -0,0 +1,847 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

These resources can be used to manage and execute queries. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_queries.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists public and/or private queries + * @method + * @name Test#listQueries + * @param {string} visibility - The query visibility. + * @param {string} token - A project token. + * + */ + Test.prototype.listQueries = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{visibility}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{visibility}', parameters['visibility']); + + if (parameters['visibility'] === undefined) { + deferred.reject(new Error('Missing required path parameter: visibility')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Executes a non-side-effecting query + * @method + * @name Test#executeSimpleQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} trace - Whether to enable the output of trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeSimpleQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Executes a query + * @method + * @name Test#executeQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} async - Whether to execute the query asynchronously or not. + * @param {string} outputCollection - The output collection when runnng the query asynchronously. + * @param {boolean} trace - Whether to enable the output trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['async'] !== undefined) { + queryParameters['async'] = parameters['async']; + } + + if (parameters['outputCollection'] !== undefined) { + queryParameters['output-collection'] = parameters['outputCollection']; + } + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a query source code + * @method + * @name Test#getQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new query + * @method + * @name Test#createQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The source code of the query + + * + */ + Test.prototype.createQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + if (parameters['queryBody'] === undefined) { + deferred.reject(new Error('Missing required body parameter: queryBody')); + return deferred.promise; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates or updates a query + * @method + * @name Test#saveQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The query source code + + * + */ + Test.prototype.saveQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Removes a query + * @method + * @name Test#removeQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.removeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a query execution plan + * @method + * @name Test#getQueryPlan + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQueryPlan = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Precompiles a query + * @method + * @name Test#compileQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.compileQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_account.json b/tests/reference/custom_account.json new file mode 100644 index 00000000..f19e16c2 --- /dev/null +++ b/tests/reference/custom_account.json @@ -0,0 +1,1541 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Creates a new account + * @method + * @name Test#createAccount + * @param {string} firstname - The account first name. + * @param {string} lastname - The account last name. + * @param {string} company - The account company. + * @param {string} email - The account email. + * @param {string} password - The account password. + * + */ + Test.prototype.createAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['firstname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: firstname')); + return deferred.promise; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['lastname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: lastname')); + return deferred.promise; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['company'] === undefined) { + deferred.reject(new Error('Missing required query parameter: company')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required query parameter: email')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if an account exists + * @method + * @name Test#checkAccount + * @param {string} email - The account email. + * + */ + Test.prototype.checkAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves an account metadata + * @method + * @name Test#getAccountMetadata + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getAccountMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates an account + * @method + * @name Test#updateAccount + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} firstname - The account new first name. If not specified the account firstname is not modified. + * @param {string} lastname - The account new last name. If not specified the account lastname is not modified. + * @param {string} company - The account new company. If not specified the account company is not modified. + * @param {string} password - The account new password. If not specified the account password is not modified. + * + */ + Test.prototype.updateAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Resends the confirmation email + * @method + * @name Test#resendConfirmation + * @param {string} email - The account email. + * + */ + Test.prototype.resendConfirmation = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Confirms an account + * @method + * @name Test#confirmAccount + * @param {string} email - The account name. + * @param {string} confirmationToken - The account confirmation token. + * + */ + Test.prototype.confirmAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['confirmationToken'] !== undefined) { + queryParameters['confirmation-token'] = parameters['confirmationToken']; + } + + if (parameters['confirmationToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: confirmationToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if a reset token is valid + * @method + * @name Test#checkResetToken + * @param {string} email - The account email. + * @param {string} resetToken - The reset token to check. + * + */ + Test.prototype.checkResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Changes an account password using a reset token + * @method + * @name Test#resetPassword + * @param {string} email - The account email. + * @param {string} resetToken - The latest account reset token. + * @param {string} password - The new account password. + * + */ + Test.prototype.resetPassword = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Sends a reset token + * @method + * @name Test#sendResetToken + * @param {string} email - The account email. + * @param {string} portalUrl - The Portal URL + * + */ + Test.prototype.sendResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['portalUrl'] !== undefined) { + queryParameters['portal-url'] = parameters['portalUrl']; + } + + if (parameters['portalUrl'] === undefined) { + deferred.reject(new Error('Missing required query parameter: portalUrl')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing data and the data required to update it + * @method + * @name Test#getBillingData + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getBillingData = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/billing'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the account invoices + * @method + * @name Test#listInvoices + * @param {string} email - The account email. + * @param {string} cursor - Used to control which page is returned. Leave empty for the first page. Use the cursor returned in a reply to fetch the next page. + * @param {integer} limit - The number of records to return per page up to a maximum of 200. Default is 50. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listInvoices = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['cursor'] !== undefined) { + queryParameters['cursor'] = parameters['cursor']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing information + * @method + * @name Test#getInvoice + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} Accept - The format of the response. Default is "application/pdf" + * + */ + Test.prototype.getInvoice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices/{invoice}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['application/json', 'application/pdf']; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists the account subscriptions + * @method + * @name Test#listSubscriptions + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listSubscriptions = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new subscription + * @method + * @name Test#createSubscription + * @param {string} email - The account email. + * @param {string} plan - The plan to subscribe to. + * @param {integer} quantity - The quantity for the chosen plan. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.createSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['plan'] !== undefined) { + queryParameters['plan'] = parameters['plan']; + } + + if (parameters['plan'] === undefined) { + deferred.reject(new Error('Missing required query parameter: plan')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the subscription details + * @method + * @name Test#getSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a subscription + * @method + * @name Test#updateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {integer} quantity - The new quantity. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.updateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Terminates a subscription + * @method + * @name Test#terminateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.terminateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_auth.json b/tests/reference/custom_auth.json new file mode 100644 index 00000000..46e73f5d --- /dev/null +++ b/tests/reference/custom_auth.json @@ -0,0 +1,147 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

This OAuth2 compliant API can be used to authorize requests. The endpoint for these methods is http://portal.28.io/auth.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Creates or refreshes authorization tokens + * @method + * @name Test#authenticate + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.authenticate = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required query parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_package.json b/tests/reference/custom_package.json new file mode 100644 index 00000000..a1501bbd --- /dev/null +++ b/tests/reference/custom_package.json @@ -0,0 +1,127 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Lists available packages + * @method + * @name Test#listPackages + * + */ + Test.prototype.listPackages = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/package'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_ping.json b/tests/reference/custom_ping.json new file mode 100644 index 00000000..42a5f5ae --- /dev/null +++ b/tests/reference/custom_ping.json @@ -0,0 +1,127 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Checks if the service is available. + * @method + * @name Test#ping + * + */ + Test.prototype.ping = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/ping'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_project.json b/tests/reference/custom_project.json new file mode 100644 index 00000000..4d80cae9 --- /dev/null +++ b/tests/reference/custom_project.json @@ -0,0 +1,1193 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Retrieves the project metadata for all projects owned by an account + * @method + * @name Test#listProjects + * @param {string} token - An API token. + * + */ + Test.prototype.listProjects = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Creates a new project + * @method + * @name Test#createProject + * @param {string} projectName - The project name. + * @param {string} template - A template name. If not specified the 'default' template will be used. + * @param {string} package - A package name. If not specified the 'free' package will be used. + * @param {string} token - An API token. + * + */ + Test.prototype.createProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['projectName'] !== undefined) { + queryParameters['project-name'] = parameters['projectName']; + } + + if (parameters['projectName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: projectName')); + return deferred.promise; + } + + if (parameters['template'] !== undefined) { + queryParameters['template'] = parameters['template']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Checks if a project exists + * @method + * @name Test#checkProject + * @param {string} name - The project name. + * + */ + Test.prototype.checkProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves a project metadata + * @method + * @name Test#getProjectMetadata + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getProjectMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Upgrades a project to the last Sausalito version + * @method + * @name Test#upgradeProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.upgradeProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Changes a project metadata + * @method + * @name Test#updateProject + * @param {string} name - The project name. + * @param {string} newName - The new project name. + * @param {string} package - The project package. + * @param {string} token - An API token. + * + */ + Test.prototype.updateProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['newName'] !== undefined) { + queryParameters['new-name'] = parameters['newName']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PATCH', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Deletes a project + * @method + * @name Test#deleteProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieves the default MongoDB credentials + * @method + * @name Test#getDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Updates a project default MongoDB credentials + * @method + * @name Test#updateDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} dbType - The database type. + * @param {string} connString - The database connection string. Only for "user" databases. + * @param {string} db - The database name. Only for "user" databases. + * @param {string} user - The database user. Only for "user" databases. + * @param {string} pass - The database password. Only for "user" databases. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Only for "user" databases. Default is false. + * + */ + Test.prototype.updateDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['dbType'] !== undefined) { + queryParameters['db-type'] = parameters['dbType']; + } + + if (parameters['dbType'] === undefined) { + deferred.reject(new Error('Missing required query parameter: dbType')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'PUT', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Tests MongoDB credentials + * @method + * @name Test#testDefaultMongoDB + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} connString - The database connection string. + * @param {string} db - The database name. + * @param {string} user - The database user. + * @param {string} pass - The database password. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Default is false. + * + */ + Test.prototype.testDefaultMongoDB = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/test-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['connString'] === undefined) { + deferred.reject(new Error('Missing required query parameter: connString')); + return deferred.promise; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['db'] === undefined) { + deferred.reject(new Error('Missing required query parameter: db')); + return deferred.promise; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Lists all custom domains of a project + * @method + * @name Test#listCustomDomains + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.listCustomDomains = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Adds a custom domain to a project + * @method + * @name Test#addCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The name of the new custom domain. + * @param {string} token - An API token. + * + */ + Test.prototype.addCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['domainName'] !== undefined) { + queryParameters['domain-name'] = parameters['domainName']; + } + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Deletes a project custom domain + * @method + * @name Test#deleteCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains/{domain-name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + path = path.replace('{domain-name}', parameters['domainName']); + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required path parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_protected.json b/tests/reference/custom_protected.json new file mode 100644 index 00000000..ee1f3515 --- /dev/null +++ b/tests/reference/custom_protected.json @@ -0,0 +1,241 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://portal.28.io/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + this.token = (typeof options === 'object') ? (options.token ? options.token : {}) : {}; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Set Token + * @method + * @name Test#setToken + * @param {string} value - token's value + * @param {string} headerOrQueryName - the header or query name to send the token at + * @param {boolean} isQuery - true if send the token as query param, otherwise, send as header param + * + */ + Test.prototype.setToken = function(value, headerOrQueryName, isQuery) { + this.token.value = value; + this.token.headerOrQueryName = headerOrQueryName; + this.token.isQuery = isQuery; + }; + + /** + * Get token + * @method + * @name Test#auth + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.auth = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Get secure + * @method + * @name Test#getSecure + * @param {string} token - Auth token + * + */ + Test.prototype.getSecure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (this.token.isQuery) { + queryParameters[this.token.headerOrQueryName] = this.token.value; + } else if (this.token.headerOrQueryName) { + headers[this.token.headerOrQueryName] = this.token.value; + } else { + headers['Authorization'] = 'Bearer ' + this.token.value; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_queries.json b/tests/reference/custom_queries.json new file mode 100644 index 00000000..1a4a5983 --- /dev/null +++ b/tests/reference/custom_queries.json @@ -0,0 +1,965 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + *

This API allows its users to retrieve financial information provided to the US Securities and Exchange Commission (SEC) by public companies using the XBRL global standard technical syntax. Submitted XBRL information is read by the system, converted to a format which is optimized for query (as opposed to XBRL which is optimized for information exchange), and stored in a database in that queriable format. Additional metadata is added to the system which is commonly used when querying this financial information. Please note that only financial information provided within SEC forms 10-Q and 10-K is provided via this system.

Information can be retrieved about entities, the submissions made by those entities, the components contained within those submissions, the model structure of a component, or the facts reported within a component. All information is provided in the following formats: JSON (the default), XML, CSV, and Excel.

For more information about using this system, you can download this Excel spreadsheet which contains working examples. Also, this getting started guide is helpful in understanding the information provided by this system.

Please note that information outside of the DOW30 can only be accessed using a valid token that can be retrieved by creating an account on http://www.secxbrl.info and login is done using the Session API.

Also note, that the POST method can be simulated by using GET and adding the _method=POST parameter to the HTTP request.

Please keep in mind that URLs are case sensitive. That is, all parameters need to be provided as shown in the documentation.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'http://secxbrl.alpha.xbrl.io/v1/_queries/public/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Retrieve information about all or a selection of entities + * @method + * @name Test#listEntities + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listEntities = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/entities.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the filings of a particular entity + * @method + * @name Test#listFilings + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} aid - The id of the filing + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFilings = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/filings.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve a summary for all components of a given filing + * @method + * @name Test#listComponents + * @param {string} format - The result format + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: ALL) + * @param {string} aid - The id of the filing + * @param {string} cid - The id of a particular component + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} disclosure - The disclosure to search for (e.g. BalanceSheet) + * @param {string} reportElement - The name of the report element to search for (e.g. us-gaap:Goodwill) + * @param {string} label - A search term to search in the labels of components (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listComponents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/components.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['reportElement'] !== undefined) { + queryParameters['reportElement'] = parameters['reportElement']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listFactTable + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - A tag to filter + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFactTable = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the model structure for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listModelStructure + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listModelStructure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/modelstructure-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given set of filings and a report. + * @method + * @name Test#listFactTableForReport + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + * + */ + Test.prototype.listFactTableForReport = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facttable-for-report.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['report'] = 'FundamentalAccountingConcepts '; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve one or more facts for a combination of filings. + * @method + * @name Test#listFacts + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} concept - The name of the concept to retrieve the fact for (alternatively, a parameter with name xbrl:Concept can be used). + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + + * @param {string} prefix:dimension - The name of a dimension used for filtering. Accepted format: prefix:dimension. As a value, the value of the dimension or ALL can be provided if all facts with this dimension should be retrieved + * @param {string} prefix:dimension::default - The default value of the dimension [prefix:dimension] that should be returned if the dimension was not provided explicitly for a fact. Accepted format: prefix:dimension::default + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFacts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/facts.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['concept'] !== undefined) { + queryParameters['concept'] = parameters['concept']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['map'] = 'FundamentalAccountingConcepts '; + + queryParameters['rules'] = 'FundamentalAccountingConcepts'; + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+::default').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Retrieve the report elements contained in a set of filings. + * @method + * @name Test#listReportElements + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} aid - The id of the filing + * @param {string} onlyNames - Whether only the names of the report elements should be returned. If so, the values don't contain duplicates. (default: false) + * @param {string} name - The name of the report element to return (e.g. us-gaap:Assets). + * @param {string} label - A search term to search in the labels of report elements (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listReportElements = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/report-elements.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['onlyNames'] !== undefined) { + queryParameters['onlyNames'] = parameters['onlyNames']; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'POST', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_ref.json b/tests/reference/custom_ref.json new file mode 100644 index 00000000..c38fc76a --- /dev/null +++ b/tests/reference/custom_ref.json @@ -0,0 +1,137 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Gets `Person` object. + * @method + * @name Test#getPersons + * @param {string} id - id + * + */ + Test.prototype.getPersons = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/persons'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['id'] !== undefined) { + queryParameters['id'] = parameters['id']; + } + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_test.json b/tests/reference/custom_test.json new file mode 100644 index 00000000..30ef08de --- /dev/null +++ b/tests/reference/custom_test.json @@ -0,0 +1,130 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * + * @method + * @name Test#User_exists__head_Users__id_ + * @param {string} id - Model id + * + */ + Test.prototype.User_exists__head_Users__id_ = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/Users/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'HEAD', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_uber.json b/tests/reference/custom_uber.json new file mode 100644 index 00000000..f7c8ed30 --- /dev/null +++ b/tests/reference/custom_uber.json @@ -0,0 +1,580 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * Move your app forward with the Uber API + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : 'https://api.uber.com/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProducts + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProducts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProductsById + * @param {integer} id - Move your app forward with the Uber API + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProductsById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/products/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @method + * @name Test#getEstimatesPrice + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {number} end_latitude - Latitude component of end location. + * @param {number} end_longitude - Longitude component of end location. + * + */ + Test.prototype.getEstimatesPrice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/price'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['end_latitude'] !== undefined) { + queryParameters['end_latitude'] = parameters['end_latitude']; + } + + if (parameters['end_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_latitude')); + return deferred.promise; + } + + if (parameters['end_longitude'] !== undefined) { + queryParameters['end_longitude'] = parameters['end_longitude']; + } + + if (parameters['end_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @method + * @name Test#getEstimatesTime + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {string} customer_uuid - Unique customer identifier to be used for experience customization. + * @param {string} product_id - Unique identifier representing a specific product for a given latitude & longitude. + * + */ + Test.prototype.getEstimatesTime = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/estimates/time'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['customer_uuid'] !== undefined) { + queryParameters['customer_uuid'] = parameters['customer_uuid']; + } + + if (parameters['product_id'] !== undefined) { + queryParameters['product_id'] = parameters['product_id']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @method + * @name Test#getMe + * + */ + Test.prototype.getMe = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/me'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @method + * @name Test#getHistory + * @param {integer} offset - Offset the list of returned results by this amount. Default is zero. + * @param {integer} limit - Number of items to retrieve. Default is 5, maximum is 100. + * + */ + Test.prototype.getHistory = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/history'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/custom_users.json b/tests/reference/custom_users.json new file mode 100644 index 00000000..285b1c40 --- /dev/null +++ b/tests/reference/custom_users.json @@ -0,0 +1,203 @@ +/*jshint -W069 */ +/*global angular:false */ +angular.module('Test', []) + .factory('Test', ['$q', '$http', '$rootScope', function($q, $http, $rootScope) { + 'use strict'; + + /** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {string} [domainOrOptions.cache] - An angularjs cache implementation + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + * @param {string} [cache] - An angularjs cache implementation + */ + var Test = (function() { + function Test(options, cache) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = typeof(domain) === 'string' ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + cache = cache || ((typeof options === 'object') ? options.cache : cache); + this.cache = cache; + } + + Test.prototype.$on = function($scope, path, handler) { + var url = this.domain + path; + $scope.$on(url, function() { + handler(); + }); + return this; + }; + + Test.prototype.$broadcast = function(path) { + var url = this.domain + path; + //cache.remove(url); + $rootScope.$broadcast(url); + return this; + }; + + Test.transformRequest = function(obj) { + var str = []; + for (var p in obj) { + var val = obj[p]; + if (angular.isArray(val)) { + val.forEach(function(val) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + }); + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(val)); + } + } + return str.join("&"); + }; + + /** + * Get user + * @method + * @name Test#findById + * @param {string} userId - User's id + * + */ + Test.prototype.findById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var cached = parameters.$cache && parameters.$cache.get(url); + if (cached !== undefined && parameters.$refresh !== true) { + deferred.resolve(cached); + return deferred.promise; + } + var options = { + timeout: parameters.$timeout, + method: 'GET', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + /** + * Delete user + * @method + * @name Test#delete + * @param {string} userId - User's id + * + */ + Test.prototype.delete = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = $q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var url = domain + path; + var options = { + timeout: parameters.$timeout, + method: 'DELETE', + url: url, + params: queryParameters, + data: body, + headers: headers + }; + if (Object.keys(form).length > 0) { + options.data = form; + options.headers['Content-Type'] = 'application/x-www-form-urlencoded'; + options.transformRequest = Test.transformRequest; + } + $http(options) + .success(function(data, status, headers, config) { + deferred.resolve(data); + if (parameters.$cache !== undefined) { + parameters.$cache.put(url, data, parameters.$cacheItemOpts ? parameters.$cacheItemOpts : {}); + } + }) + .error(function(data, status, headers, config) { + deferred.reject({ + status: status, + headers: headers, + config: config, + body: data + }); + }); + + return deferred.promise; + }; + + return Test; + })(); + + return Test; + }]); \ No newline at end of file diff --git a/tests/reference/node__batch.json b/tests/reference/node__batch.json new file mode 100644 index 00000000..f3ef6877 --- /dev/null +++ b/tests/reference/node__batch.json @@ -0,0 +1,144 @@ +/*jshint -W069 */ +/** + *

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Import project contents from an archive + * @method + * @name Test#importProject + * @param {string} url - The archive url. + * @param {string} archive - The archive contents. + * @param {string} root - The path inside the archive that contains the modules and queries folders. Use '/' as folder separator. + * @param {string} overwrite - Whether to overwrite current project queries and modules. Default is true. + * @param {boolean} deleteOrphaned - Whether to delete orphaned file or not. Default is false. + * @param {boolean} simulate - Whether to simulate the operation or not. Default is false. + * @param {string} token - A project token. + * @param {string} contentType -

These resources can be used to perform batch operations. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_batch.

+ * + */ + Test.prototype.importProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_batch/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['url'] !== undefined) { + queryParameters['url'] = parameters['url']; + } + + if (parameters['archive'] !== undefined) { + body = parameters['archive']; + } + + if (parameters['root'] !== undefined) { + queryParameters['root'] = parameters['root']; + } + + if (parameters['overwrite'] !== undefined) { + queryParameters['overwrite'] = parameters['overwrite']; + } + + if (parameters['deleteOrphaned'] !== undefined) { + queryParameters['delete-orphaned'] = parameters['deleteOrphaned']; + } + + if (parameters['simulate'] !== undefined) { + queryParameters['simulate'] = parameters['simulate']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['contentType'] !== undefined) { + headers['Content-Type'] = parameters['contentType']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node__datasources.json b/tests/reference/node__datasources.json new file mode 100644 index 00000000..a2f15fe8 --- /dev/null +++ b/tests/reference/node__datasources.json @@ -0,0 +1,1743 @@ +/*jshint -W069 */ +/** + *

These resources can be used to manage and explore data sources. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be will be: http://myproject.28.io/v1/_datasources.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Lists all data sources + * @method + * @name Test#listDatasources + * @param {string} token - A project token. + * + */ + Test.prototype.listDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists all data sources in a specific category + * @method + * @name Test#listCategoryDatasources + * @param {string} category - The data source category. + * @param {string} token - A project token. + * + */ + Test.prototype.listCategoryDatasources = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates a new data source + * @method + * @name Test#createDatasource + * @param {string} category - The data source category. + * @param {string} name - The name of the data source. The data source name can contain any alphabetic letter, numbers, dots, or dashes, and must start with an alphabetic letter. + * @param {string} token - A project token. + * @param {boolean} default - Whether the new data source will be the default one for its category. The default value is false. + * @param {string} credentials - The data sources credentials as JSON. + * + */ + Test.prototype.createDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters['credentials'] === undefined) { + deferred.reject(new Error('Missing required body parameter: credentials')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a data source credentials + * @method + * @name Test#getDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Updates a data source + * @method + * @name Test#updateDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * @param {string} name - The new name of the data source. If not specified the data source is not renamed. + * @param {boolean} default - Whether the data source should become (if true) or cease to be (if false) the default one for its category. If not specified the data source does not change its default status. + * @param {string} credentials - The new data sources credentials as JSON. If not specified the data sources credentials are not changed + * + */ + Test.prototype.updateDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['default'] !== undefined) { + queryParameters['default'] = parameters['default']; + } + + if (parameters['credentials'] !== undefined) { + body = parameters['credentials']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PATCH', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes a data source + * @method + * @name Test#removeDatasource + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeDatasource = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * List available collections + * @method + * @name Test#getDatasourceContents + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} token - A project token. + * + */ + Test.prototype.getDatasourceContents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates collection + * @method + * @name Test#createCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} name - The name of the new collection. + * @param {string} token - A project token. + * + */ + Test.prototype.createCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required query parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves metadata about a collection + * @method + * @name Test#getCollectionMetadata + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.getCollectionMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes a collection + * @method + * @name Test#removeCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.removeCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists collection items + * @method + * @name Test#listCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {string} Accept - Serialization format. + * + */ + Test.prototype.listCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Inserts an item into a collection + * @method + * @name Test#insertInCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * @param {string} item - The item to insert. + * + */ + Test.prototype.insertInCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Truncates a collection + * @method + * @name Test#truncateCollection + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} token - A project token. + * + */ + Test.prototype.truncateCollection = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a collection item + * @method + * @name Test#getItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.getItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Updates a collection item + * @method + * @name Test#updateItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * @param {string} item - The new item. + * + */ + Test.prototype.updateItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['item'] !== undefined) { + body = parameters['item']; + } + + if (parameters['item'] === undefined) { + deferred.reject(new Error('Missing required body parameter: item')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes an item from a collection + * @method + * @name Test#removeItem + * @param {string} category - The data source category. + * @param {string} datasource - The data source name. + * @param {string} collection - The collection name. + * @param {string} identifier - The item identifier. + * @param {string} token - A project token. + * + */ + Test.prototype.removeItem = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_datasources/{category}/{datasource}/contents/{collection}/items/{identifier}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{category}', parameters['category']); + + if (parameters['category'] === undefined) { + deferred.reject(new Error('Missing required path parameter: category')); + return deferred.promise; + } + + path = path.replace('{datasource}', parameters['datasource']); + + if (parameters['datasource'] === undefined) { + deferred.reject(new Error('Missing required path parameter: datasource')); + return deferred.promise; + } + + path = path.replace('{collection}', parameters['collection']); + + if (parameters['collection'] === undefined) { + deferred.reject(new Error('Missing required path parameter: collection')); + return deferred.promise; + } + + path = path.replace('{identifier}', parameters['identifier']); + + if (parameters['identifier'] === undefined) { + deferred.reject(new Error('Missing required path parameter: identifier')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node__jobs.json b/tests/reference/node__jobs.json new file mode 100644 index 00000000..5e680614 --- /dev/null +++ b/tests/reference/node__jobs.json @@ -0,0 +1,511 @@ +/*jshint -W069 */ +/** + *

These resources can be used to manage jobs. Jobs are of three kinds: execute, map and shuffle. Each job has one of the following statuses: pending, failed, in-progress, completed, timed-out. To use this API, a default MongoDB database must be configured. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_jobs.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Lists jobs + * @method + * @name Test#listJobs + * @param {array} status - One or more project statuses. + * @param {string} from - The starting date for filtering the listed jobs. + * @param {string} to - The ending date for filtering the listed jobs. + * @param {string} token - A project token. + * + */ + Test.prototype.listJobs = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_jobs'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['status'] !== undefined) { + queryParameters['status'] = parameters['status']; + } + + if (parameters['from'] !== undefined) { + queryParameters['from'] = parameters['from']; + } + + if (parameters['to'] !== undefined) { + queryParameters['to'] = parameters['to']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a job details + * @method + * @name Test#getJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.getJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes a job + * @method + * @name Test#removeJob + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeJob = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists the results of a job + * @method + * @name Test#listResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * @param {integer} offset - The index of the first item from which to start listing the collection items. Default is 1. + * @param {integer} limit - The number of collection items to list. Default is 10. + * @param {boolean} expand - Whether to include the serialized item in the listing. The default value is false. + * @param {boolean} allowPartial - Whether to allow to retrieve partial results for in progress or failed jobs. The default value is false. + * @param {string} Accept - Specifies the serialization of the produced objects + * + */ + Test.prototype.listResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json']; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['expand'] !== undefined) { + queryParameters['expand'] = parameters['expand']; + } + + if (parameters['allowPartial'] !== undefined) { + queryParameters['allow-partial'] = parameters['allowPartial']; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes a job results + * @method + * @name Test#removeResults + * @param {string} jobUuid - The job UUID. + * @param {string} token - A project token. + * + */ + Test.prototype.removeResults = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_jobs/{job-uuid}/results'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{job-uuid}', parameters['jobUuid']); + + if (parameters['jobUuid'] === undefined) { + deferred.reject(new Error('Missing required path parameter: jobUuid')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node__modules.json b/tests/reference/node__modules.json new file mode 100644 index 00000000..3f9a48bc --- /dev/null +++ b/tests/reference/node__modules.json @@ -0,0 +1,527 @@ +/*jshint -W069 */ +/** + *

These resources can be used to manage JSONiq and XQuery library modules. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_modules.

This API does not allow to retrieve the source code, modify or delete system modules.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Lists available modules + * @method + * @name Test#listModules + * @param {string} startsWith - Filter the available module by their module path. + * @param {boolean} includeSystem - Include modules provided by the platform. + * @param {boolean} includeNs - Include each module's namespace in the listing. + * @param {boolean} includeSrc - Include each module's source code in the listing. + * @param {string} token - A project token. + * + */ + Test.prototype.listModules = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_modules'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['startsWith'] !== undefined) { + queryParameters['starts-with'] = parameters['startsWith']; + } + + if (parameters['includeSystem'] !== undefined) { + queryParameters['include-system'] = parameters['includeSystem']; + } + + if (parameters['includeNs'] !== undefined) { + queryParameters['include-ns'] = parameters['includeNs']; + } + + if (parameters['includeSrc'] !== undefined) { + queryParameters['include-src'] = parameters['includeSrc']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves the source code of the specified project module + * @method + * @name Test#getModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.getModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates a new project module + * @method + * @name Test#createModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The source code of the module. + + * + */ + Test.prototype.createModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates or updates the specified project module + * @method + * @name Test#saveModule + * @param {string} modulePath - The module path. + * @param {string} compile - The kind of compilation to perform. The default is "lax". + * @param {string} extension - The new module extension. The default is "jq". + * @param {string} token - A project token. + * @param {string} moduleBody - The module source code + + * + */ + Test.prototype.saveModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['extension'] !== undefined) { + queryParameters['extension'] = parameters['extension']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['moduleBody'] !== undefined) { + body = parameters['moduleBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes the specified project module + * @method + * @name Test#removeModule + * @param {string} modulePath - The module path. + * @param {string} token - A project token. + * + */ + Test.prototype.removeModule = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_modules/{module-path}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{module-path}', parameters['modulePath']); + + if (parameters['modulePath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: modulePath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node__queries.json b/tests/reference/node__queries.json new file mode 100644 index 00000000..8f90b7c1 --- /dev/null +++ b/tests/reference/node__queries.json @@ -0,0 +1,900 @@ +/*jshint -W069 */ +/** + *

These resources can be used to manage and execute queries. The endpoint of these resources is based on your project name. For instance, if your 28.io project is named myproject, your endpoint for this API will be: http://myproject.28.io/v1/_queries.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Lists public and/or private queries + * @method + * @name Test#listQueries + * @param {string} visibility - The query visibility. + * @param {string} token - A project token. + * + */ + Test.prototype.listQueries = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{visibility}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{visibility}', parameters['visibility']); + + if (parameters['visibility'] === undefined) { + deferred.reject(new Error('Missing required path parameter: visibility')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Executes a non-side-effecting query + * @method + * @name Test#executeSimpleQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} trace - Whether to enable the output of trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeSimpleQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Executes a query + * @method + * @name Test#executeQuery + * @param {string} Accept - Value of the Accept header. + * @param {string} queryPath - The query path. It starts with public or private and can contain slashes. + * @param {string} format - The serialization method to use for the results of the executed query. When choosing a serialization method, this parameter has a lower priority than the Accept header. + * @param {boolean} async - Whether to execute the query asynchronously or not. + * @param {string} outputCollection - The output collection when runnng the query asynchronously. + * @param {boolean} trace - Whether to enable the output trace#2. + * @param {string} token - A project token. + * + */ + Test.prototype.executeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}{format}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['*/*', 'application/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'application/json', 'application/28.io+json', 'application/mixed-json-xml']; + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + path = path.replace('{format}', parameters['format']); + + if (parameters['async'] !== undefined) { + queryParameters['async'] = parameters['async']; + } + + if (parameters['outputCollection'] !== undefined) { + queryParameters['output-collection'] = parameters['outputCollection']; + } + + if (parameters['trace'] !== undefined) { + queryParameters['trace'] = parameters['trace']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a query source code + * @method + * @name Test#getQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['text/x-jsoniq;charset=UTF-8', 'text/x-xquery;charset=UTF-8']; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates a new query + * @method + * @name Test#createQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The source code of the query + + * + */ + Test.prototype.createQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + if (parameters['queryBody'] === undefined) { + deferred.reject(new Error('Missing required body parameter: queryBody')); + return deferred.promise; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates or updates a query + * @method + * @name Test#saveQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * @param {string} compile - The kind of compilation to perform. The default is none. + * @param {string} queryBody - The query source code + + * + */ + Test.prototype.saveQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['compile'] !== undefined) { + queryParameters['compile'] = parameters['compile']; + } + + if (parameters['queryBody'] !== undefined) { + body = parameters['queryBody']; + } + + headers['Content-Type'] = 'text/plain; charset=utf-8'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Removes a query + * @method + * @name Test#removeQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.removeQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/source'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a query execution plan + * @method + * @name Test#getQueryPlan + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.getQueryPlan = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Precompiles a query + * @method + * @name Test#compileQuery + * @param {string} queryPath - The query path. It starts with "public" or "private" and contains slashes. + * @param {string} token - A project token. + * + */ + Test.prototype.compileQuery = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/_queries/{query-path}/metadata/plan'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{query-path}', parameters['queryPath']); + + if (parameters['queryPath'] === undefined) { + deferred.reject(new Error('Missing required path parameter: queryPath')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_account.json b/tests/reference/node_account.json new file mode 100644 index 00000000..9acb33bf --- /dev/null +++ b/tests/reference/node_account.json @@ -0,0 +1,1670 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Creates a new account + * @method + * @name Test#createAccount + * @param {string} firstname - The account first name. + * @param {string} lastname - The account last name. + * @param {string} company - The account company. + * @param {string} email - The account email. + * @param {string} password - The account password. + * + */ + Test.prototype.createAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['firstname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: firstname')); + return deferred.promise; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['lastname'] === undefined) { + deferred.reject(new Error('Missing required query parameter: lastname')); + return deferred.promise; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['company'] === undefined) { + deferred.reject(new Error('Missing required query parameter: company')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required query parameter: email')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Checks if an account exists + * @method + * @name Test#checkAccount + * @param {string} email - The account email. + * + */ + Test.prototype.checkAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'HEAD', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves an account metadata + * @method + * @name Test#getAccountMetadata + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getAccountMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Updates an account + * @method + * @name Test#updateAccount + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} firstname - The account new first name. If not specified the account firstname is not modified. + * @param {string} lastname - The account new last name. If not specified the account lastname is not modified. + * @param {string} company - The account new company. If not specified the account company is not modified. + * @param {string} password - The account new password. If not specified the account password is not modified. + * + */ + Test.prototype.updateAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['firstname'] !== undefined) { + queryParameters['firstname'] = parameters['firstname']; + } + + if (parameters['lastname'] !== undefined) { + queryParameters['lastname'] = parameters['lastname']; + } + + if (parameters['company'] !== undefined) { + queryParameters['company'] = parameters['company']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PATCH', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Resends the confirmation email + * @method + * @name Test#resendConfirmation + * @param {string} email - The account email. + * + */ + Test.prototype.resendConfirmation = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Confirms an account + * @method + * @name Test#confirmAccount + * @param {string} email - The account name. + * @param {string} confirmationToken - The account confirmation token. + * + */ + Test.prototype.confirmAccount = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/confirm'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['confirmationToken'] !== undefined) { + queryParameters['confirmation-token'] = parameters['confirmationToken']; + } + + if (parameters['confirmationToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: confirmationToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Checks if a reset token is valid + * @method + * @name Test#checkResetToken + * @param {string} email - The account email. + * @param {string} resetToken - The reset token to check. + * + */ + Test.prototype.checkResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Changes an account password using a reset token + * @method + * @name Test#resetPassword + * @param {string} email - The account email. + * @param {string} resetToken - The latest account reset token. + * @param {string} password - The new account password. + * + */ + Test.prototype.resetPassword = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['resetToken'] !== undefined) { + queryParameters['reset-token'] = parameters['resetToken']; + } + + if (parameters['resetToken'] === undefined) { + deferred.reject(new Error('Missing required query parameter: resetToken')); + return deferred.promise; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['password'] === undefined) { + deferred.reject(new Error('Missing required query parameter: password')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Sends a reset token + * @method + * @name Test#sendResetToken + * @param {string} email - The account email. + * @param {string} portalUrl - The Portal URL + * + */ + Test.prototype.sendResetToken = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/reset'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['portalUrl'] !== undefined) { + queryParameters['portal-url'] = parameters['portalUrl']; + } + + if (parameters['portalUrl'] === undefined) { + deferred.reject(new Error('Missing required query parameter: portalUrl')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing data and the data required to update it + * @method + * @name Test#getBillingData + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getBillingData = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/billing'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists the account invoices + * @method + * @name Test#listInvoices + * @param {string} email - The account email. + * @param {string} cursor - Used to control which page is returned. Leave empty for the first page. Use the cursor returned in a reply to fetch the next page. + * @param {integer} limit - The number of records to return per page up to a maximum of 200. Default is 50. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listInvoices = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['cursor'] !== undefined) { + queryParameters['cursor'] = parameters['cursor']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves the user billing information + * @method + * @name Test#getInvoice + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * @param {string} Accept - The format of the response. Default is "application/pdf" + * + */ + Test.prototype.getInvoice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/invoices/{invoice}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + headers['Accept'] = ['application/json', 'application/pdf']; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['Accept'] !== undefined) { + headers['Accept'] = parameters['Accept']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists the account subscriptions + * @method + * @name Test#listSubscriptions + * @param {string} email - The account email. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.listSubscriptions = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates a new subscription + * @method + * @name Test#createSubscription + * @param {string} email - The account email. + * @param {string} plan - The plan to subscribe to. + * @param {integer} quantity - The quantity for the chosen plan. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.createSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + if (parameters['plan'] !== undefined) { + queryParameters['plan'] = parameters['plan']; + } + + if (parameters['plan'] === undefined) { + deferred.reject(new Error('Missing required query parameter: plan')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves the subscription details + * @method + * @name Test#getSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.getSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Updates a subscription + * @method + * @name Test#updateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {integer} quantity - The new quantity. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.updateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['quantity'] !== undefined) { + queryParameters['quantity'] = parameters['quantity']; + } + + if (parameters['quantity'] === undefined) { + deferred.reject(new Error('Missing required query parameter: quantity')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Terminates a subscription + * @method + * @name Test#terminateSubscription + * @param {string} email - The account email. + * @param {string} subscription - The subscription uuid. + * @param {string} token - An API token generated for the specified account. + * + */ + Test.prototype.terminateSubscription = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/account/{email}/subscriptions/{subscription}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{email}', parameters['email']); + + if (parameters['email'] === undefined) { + deferred.reject(new Error('Missing required path parameter: email')); + return deferred.promise; + } + + path = path.replace('{subscription}', parameters['subscription']); + + if (parameters['subscription'] === undefined) { + deferred.reject(new Error('Missing required path parameter: subscription')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_auth.json b/tests/reference/node_auth.json new file mode 100644 index 00000000..fc1049e2 --- /dev/null +++ b/tests/reference/node_auth.json @@ -0,0 +1,124 @@ +/*jshint -W069 */ +/** + *

This OAuth2 compliant API can be used to authorize requests. The endpoint for these methods is http://portal.28.io/auth.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Creates or refreshes authorization tokens + * @method + * @name Test#authenticate + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.authenticate = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required query parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_package.json b/tests/reference/node_package.json new file mode 100644 index 00000000..9c3ddf4f --- /dev/null +++ b/tests/reference/node_package.json @@ -0,0 +1,99 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Lists available packages + * @method + * @name Test#listPackages + * + */ + Test.prototype.listPackages = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/package'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_ping.json b/tests/reference/node_ping.json new file mode 100644 index 00000000..c8e9c672 --- /dev/null +++ b/tests/reference/node_ping.json @@ -0,0 +1,99 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Checks if the service is available. + * @method + * @name Test#ping + * + */ + Test.prototype.ping = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/ping'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_project.json b/tests/reference/node_project.json new file mode 100644 index 00000000..4ce9f2da --- /dev/null +++ b/tests/reference/node_project.json @@ -0,0 +1,1289 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://api.xbrl.io'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Retrieves the project metadata for all projects owned by an account + * @method + * @name Test#listProjects + * @param {string} token - An API token. + * + */ + Test.prototype.listProjects = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Creates a new project + * @method + * @name Test#createProject + * @param {string} projectName - The project name. + * @param {string} template - A template name. If not specified the 'default' template will be used. + * @param {string} package - A package name. If not specified the 'free' package will be used. + * @param {string} token - An API token. + * + */ + Test.prototype.createProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['projectName'] !== undefined) { + queryParameters['project-name'] = parameters['projectName']; + } + + if (parameters['projectName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: projectName')); + return deferred.promise; + } + + if (parameters['template'] !== undefined) { + queryParameters['template'] = parameters['template']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Checks if a project exists + * @method + * @name Test#checkProject + * @param {string} name - The project name. + * + */ + Test.prototype.checkProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'HEAD', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves a project metadata + * @method + * @name Test#getProjectMetadata + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getProjectMetadata = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Upgrades a project to the last Sausalito version + * @method + * @name Test#upgradeProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.upgradeProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Changes a project metadata + * @method + * @name Test#updateProject + * @param {string} name - The project name. + * @param {string} newName - The new project name. + * @param {string} package - The project package. + * @param {string} token - An API token. + * + */ + Test.prototype.updateProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['newName'] !== undefined) { + queryParameters['new-name'] = parameters['newName']; + } + + if (parameters['package'] !== undefined) { + queryParameters['package'] = parameters['package']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PATCH', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Deletes a project + * @method + * @name Test#deleteProject + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteProject = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieves the default MongoDB credentials + * @method + * @name Test#getDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.getDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Updates a project default MongoDB credentials + * @method + * @name Test#updateDefaultMongoDBCredentials + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} dbType - The database type. + * @param {string} connString - The database connection string. Only for "user" databases. + * @param {string} db - The database name. Only for "user" databases. + * @param {string} user - The database user. Only for "user" databases. + * @param {string} pass - The database password. Only for "user" databases. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Only for "user" databases. Default is false. + * + */ + Test.prototype.updateDefaultMongoDBCredentials = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/default-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['dbType'] !== undefined) { + queryParameters['db-type'] = parameters['dbType']; + } + + if (parameters['dbType'] === undefined) { + deferred.reject(new Error('Missing required query parameter: dbType')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'PUT', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Tests MongoDB credentials + * @method + * @name Test#testDefaultMongoDB + * @param {string} name - The project name. + * @param {string} token - An API token. + * @param {string} connString - The database connection string. + * @param {string} db - The database name. + * @param {string} user - The database user. + * @param {string} pass - The database password. + * @param {boolean} preDigested - Whether the specified password is pre-digested or not. Default is false. + * + */ + Test.prototype.testDefaultMongoDB = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/test-mongodb'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters['connString'] !== undefined) { + queryParameters['conn-string'] = parameters['connString']; + } + + if (parameters['connString'] === undefined) { + deferred.reject(new Error('Missing required query parameter: connString')); + return deferred.promise; + } + + if (parameters['db'] !== undefined) { + queryParameters['db'] = parameters['db']; + } + + if (parameters['db'] === undefined) { + deferred.reject(new Error('Missing required query parameter: db')); + return deferred.promise; + } + + if (parameters['user'] !== undefined) { + queryParameters['user'] = parameters['user']; + } + + if (parameters['pass'] !== undefined) { + queryParameters['pass'] = parameters['pass']; + } + + if (parameters['preDigested'] !== undefined) { + queryParameters['pre-digested'] = parameters['preDigested']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Lists all custom domains of a project + * @method + * @name Test#listCustomDomains + * @param {string} name - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.listCustomDomains = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Adds a custom domain to a project + * @method + * @name Test#addCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The name of the new custom domain. + * @param {string} token - An API token. + * + */ + Test.prototype.addCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + if (parameters['domainName'] !== undefined) { + queryParameters['domain-name'] = parameters['domainName']; + } + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required query parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Deletes a project custom domain + * @method + * @name Test#deleteCustomDomain + * @param {string} name - The project name. + * @param {string} domainName - The project name. + * @param {string} token - An API token. + * + */ + Test.prototype.deleteCustomDomain = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project/{name}/domains/{domain-name}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{name}', parameters['name']); + + if (parameters['name'] === undefined) { + deferred.reject(new Error('Missing required path parameter: name')); + return deferred.promise; + } + + path = path.replace('{domain-name}', parameters['domainName']); + + if (parameters['domainName'] === undefined) { + deferred.reject(new Error('Missing required path parameter: domainName')); + return deferred.promise; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters['token'] === undefined) { + deferred.reject(new Error('Missing required query parameter: token')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_protected.json b/tests/reference/node_protected.json new file mode 100644 index 00000000..04953adf --- /dev/null +++ b/tests/reference/node_protected.json @@ -0,0 +1,225 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://portal.28.io/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + this.token = (typeof options === 'object') ? (options.token ? options.token : {}) : {}; + } + + /** + * Set Token + * @method + * @name Test#setToken + * @param {string} value - token's value + * @param {string} headerOrQueryName - the header or query name to send the token at + * @param {boolean} isQuery - true if send the token as query param, otherwise, send as header param + * + */ + Test.prototype.setToken = function(value, headerOrQueryName, isQuery) { + this.token.value = value; + this.token.headerOrQueryName = headerOrQueryName; + this.token.isQuery = isQuery; + }; + + /** + * Get token + * @method + * @name Test#auth + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + Test.prototype.auth = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/auth'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + deferred.reject(new Error('Missing required parameter: grant_type')); + return deferred.promise; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Get secure + * @method + * @name Test#getSecure + * @param {string} token - Auth token + * + */ + Test.prototype.getSecure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/project'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (this.token.isQuery) { + queryParameters[this.token.headerOrQueryName] = this.token.value; + } else if (this.token.headerOrQueryName) { + headers[this.token.headerOrQueryName] = this.token.value; + } else { + headers['Authorization'] = 'Bearer ' + this.token.value; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_queries.json b/tests/reference/node_queries.json new file mode 100644 index 00000000..3c881be9 --- /dev/null +++ b/tests/reference/node_queries.json @@ -0,0 +1,1026 @@ +/*jshint -W069 */ +/** + *

This API allows its users to retrieve financial information provided to the US Securities and Exchange Commission (SEC) by public companies using the XBRL global standard technical syntax. Submitted XBRL information is read by the system, converted to a format which is optimized for query (as opposed to XBRL which is optimized for information exchange), and stored in a database in that queriable format. Additional metadata is added to the system which is commonly used when querying this financial information. Please note that only financial information provided within SEC forms 10-Q and 10-K is provided via this system.

Information can be retrieved about entities, the submissions made by those entities, the components contained within those submissions, the model structure of a component, or the facts reported within a component. All information is provided in the following formats: JSON (the default), XML, CSV, and Excel.

For more information about using this system, you can download this Excel spreadsheet which contains working examples. Also, this getting started guide is helpful in understanding the information provided by this system.

Please note that information outside of the DOW30 can only be accessed using a valid token that can be retrieved by creating an account on http://www.secxbrl.info and login is done using the Session API.

Also note, that the POST method can be simulated by using GET and adding the _method=POST parameter to the HTTP request.

Please keep in mind that URLs are case sensitive. That is, all parameters need to be provided as shown in the documentation.

+ * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'http://secxbrl.alpha.xbrl.io/v1/_queries/public/api'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Retrieve information about all or a selection of entities + * @method + * @name Test#listEntities + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listEntities = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/entities.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve the filings of a particular entity + * @method + * @name Test#listFilings + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} aid - The id of the filing + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFilings = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/filings.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve a summary for all components of a given filing + * @method + * @name Test#listComponents + * @param {string} format - The result format + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: ALL) + * @param {string} aid - The id of the filing + * @param {string} cid - The id of a particular component + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} disclosure - The disclosure to search for (e.g. BalanceSheet) + * @param {string} reportElement - The name of the report element to search for (e.g. us-gaap:Goodwill) + * @param {string} label - A search term to search in the labels of components (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listComponents = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/components.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['reportElement'] !== undefined) { + queryParameters['reportElement'] = parameters['reportElement']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listFactTable + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - A tag to filter + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFactTable = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/facttable-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve the model structure for a given component. A component can be selected in three ways. (1) by component id (cid), (2) by accession number and disclosure (aid and disclosure), or (3) by CIK, fiscal year, fiscal period, and disclosure (cik, fiscalYear, fiscalPeriod, and disclosure). + * @method + * @name Test#listModelStructure + * @param {string} format - The result format + * @param {string} cid - The id of the component + * @param {string} aid - The accession number of the filing. This parameter needs to be used together with the disclosure parameter to identify a component. + * @param {string} cik - The CIK of an entity. This parameter needs to be used together with the fiscalYear, fiscalPeriod, and disclosure parameters to identify a component. + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} networkIdentifier - The network identifier of a particular component + * @param {string} fiscalYear - The fiscal year of the filing + * @param {string} fiscalPeriod - The fiscal period of the filing + * @param {string} disclosure - The disclosure of the component (e.g. BalanceSheet) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listModelStructure = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/modelstructure-for-component.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cid'] !== undefined) { + queryParameters['cid'] = parameters['cid']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['networkIdentifier'] !== undefined) { + queryParameters['networkIdentifier'] = parameters['networkIdentifier']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['disclosure'] !== undefined) { + queryParameters['disclosure'] = parameters['disclosure']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve the fact table for a given set of filings and a report. + * @method + * @name Test#listFactTableForReport + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + * + */ + Test.prototype.listFactTableForReport = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/facttable-for-report.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['report'] = 'FundamentalAccountingConcepts '; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve one or more facts for a combination of filings. + * @method + * @name Test#listFacts + * @param {string} format - The result format + * @param {string} cik - The CIK of the entity + * @param {string} ticker - The ticker of the entity + * @param {string} tag - The tag to filter entities + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: LATEST) + * @param {string} concept - The name of the concept to retrieve the fact for (alternatively, a parameter with name xbrl:Concept can be used). + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + + + * @param {string} prefix:dimension - The name of a dimension used for filtering. Accepted format: prefix:dimension. As a value, the value of the dimension or ALL can be provided if all facts with this dimension should be retrieved + * @param {string} prefix:dimension::default - The default value of the dimension [prefix:dimension] that should be returned if the dimension was not provided explicitly for a fact. Accepted format: prefix:dimension::default + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listFacts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/facts.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['concept'] !== undefined) { + queryParameters['concept'] = parameters['concept']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + queryParameters['map'] = 'FundamentalAccountingConcepts '; + + queryParameters['rules'] = 'FundamentalAccountingConcepts'; + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + Object.keys(parameters).forEach(function(parameterName) { + if (new RegExp('[^:]+:[^:]+::default').test(parameterName)) { + queryParameters[parameterName] = parameters[parameterName]; + } + }); + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Retrieve the report elements contained in a set of filings. + * @method + * @name Test#listReportElements + * @param {string} format - The result format + * @param {string} tag - A tag to filter + * @param {string} cik - A CIK number + * @param {string} ticker - A ticker symbols + * @param {string} sic - The industry group + * @param {string} fiscalYear - The fiscal year of the fact to retrieve (default: ALL) + * @param {string} fiscalPeriod - The fiscal period of the fact to retrieve (default: FY) + * @param {string} aid - The id of the filing + * @param {string} onlyNames - Whether only the names of the report elements should be returned. If so, the values don't contain duplicates. (default: false) + * @param {string} name - The name of the report element to return (e.g. us-gaap:Assets). + * @param {string} label - A search term to search in the labels of report elements (e.g. stock) + * @param {string} token - The token of the current session (if accessing entities beyond DOW30) + * + */ + Test.prototype.listReportElements = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/report-elements.jq'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['format'] !== undefined) { + queryParameters['format'] = parameters['format']; + } + + if (parameters['tag'] !== undefined) { + queryParameters['tag'] = parameters['tag']; + } + + if (parameters['cik'] !== undefined) { + queryParameters['cik'] = parameters['cik']; + } + + if (parameters['ticker'] !== undefined) { + queryParameters['ticker'] = parameters['ticker']; + } + + if (parameters['sic'] !== undefined) { + queryParameters['sic'] = parameters['sic']; + } + + if (parameters['fiscalYear'] !== undefined) { + queryParameters['fiscalYear'] = parameters['fiscalYear']; + } + + if (parameters['fiscalPeriod'] !== undefined) { + queryParameters['fiscalPeriod'] = parameters['fiscalPeriod']; + } + + if (parameters['aid'] !== undefined) { + queryParameters['aid'] = parameters['aid']; + } + + if (parameters['onlyNames'] !== undefined) { + queryParameters['onlyNames'] = parameters['onlyNames']; + } + + if (parameters['name'] !== undefined) { + queryParameters['name'] = parameters['name']; + } + + if (parameters['label'] !== undefined) { + queryParameters['label'] = parameters['label']; + } + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'POST', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_ref.json b/tests/reference/node_ref.json new file mode 100644 index 00000000..5089d6ff --- /dev/null +++ b/tests/reference/node_ref.json @@ -0,0 +1,109 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Gets `Person` object. + * @method + * @name Test#getPersons + * @param {string} id - id + * + */ + Test.prototype.getPersons = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/persons'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['id'] !== undefined) { + queryParameters['id'] = parameters['id']; + } + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_test.json b/tests/reference/node_test.json new file mode 100644 index 00000000..df552964 --- /dev/null +++ b/tests/reference/node_test.json @@ -0,0 +1,107 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * + * @method + * @name Test#User_exists__head_Users__id_ + * @param {string} id - Model id + * + */ + Test.prototype.User_exists__head_Users__id_ = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/Users/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'HEAD', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_uber.json b/tests/reference/node_uber.json new file mode 100644 index 00000000..27dbb1c8 --- /dev/null +++ b/tests/reference/node_uber.json @@ -0,0 +1,587 @@ +/*jshint -W069 */ +/** + * Move your app forward with the Uber API + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : 'https://api.uber.com/v1'; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProducts + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProducts = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/products'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProductsById + * @param {integer} id - Move your app forward with the Uber API + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + Test.prototype.getProductsById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/products/{id}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + deferred.reject(new Error('Missing required parameter: id')); + return deferred.promise; + } + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: latitude')); + return deferred.promise; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @method + * @name Test#getEstimatesPrice + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {number} end_latitude - Latitude component of end location. + * @param {number} end_longitude - Longitude component of end location. + * + */ + Test.prototype.getEstimatesPrice = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/estimates/price'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['end_latitude'] !== undefined) { + queryParameters['end_latitude'] = parameters['end_latitude']; + } + + if (parameters['end_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_latitude')); + return deferred.promise; + } + + if (parameters['end_longitude'] !== undefined) { + queryParameters['end_longitude'] = parameters['end_longitude']; + } + + if (parameters['end_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: end_longitude')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @method + * @name Test#getEstimatesTime + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {string} customer_uuid - Unique customer identifier to be used for experience customization. + * @param {string} product_id - Unique identifier representing a specific product for a given latitude & longitude. + * + */ + Test.prototype.getEstimatesTime = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/estimates/time'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_latitude')); + return deferred.promise; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + deferred.reject(new Error('Missing required parameter: start_longitude')); + return deferred.promise; + } + + if (parameters['customer_uuid'] !== undefined) { + queryParameters['customer_uuid'] = parameters['customer_uuid']; + } + + if (parameters['product_id'] !== undefined) { + queryParameters['product_id'] = parameters['product_id']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @method + * @name Test#getMe + * + */ + Test.prototype.getMe = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/me'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @method + * @name Test#getHistory + * @param {integer} offset - Offset the list of returned results by this amount. Default is zero. + * @param {integer} limit - Number of items to retrieve. Default is 5, maximum is 100. + * + */ + Test.prototype.getHistory = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/history'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/node_users.json b/tests/reference/node_users.json new file mode 100644 index 00000000..8375e339 --- /dev/null +++ b/tests/reference/node_users.json @@ -0,0 +1,187 @@ +/*jshint -W069 */ +/** + * + * @class Test + * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties. + * @param {string} [domainOrOptions.domain] - The project domain + * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties + */ +var Test = (function() { + 'use strict'; + + var request = require('request'); + var Q = require('q'); + + function Test(options) { + var domain = (typeof options === 'object') ? options.domain : options; + this.domain = domain ? domain : ''; + if (this.domain.length === 0) { + throw new Error('Domain parameter must be specified as a string.'); + } + } + + /** + * Get user + * @method + * @name Test#findById + * @param {string} userId - User's id + * + */ + Test.prototype.findById = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'GET', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + /** + * Delete user + * @method + * @name Test#delete + * @param {string} userId - User's id + * + */ + Test.prototype.delete = function(parameters) { + if (parameters === undefined) { + parameters = {}; + } + var deferred = Q.defer(); + + var domain = this.domain; + var path = '/users/{userId}'; + + var body; + var queryParameters = {}; + var headers = {}; + var form = {}; + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + deferred.reject(new Error('Missing required parameter: userId')); + return deferred.promise; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters) + .forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + var req = { + method: 'DELETE', + uri: domain + path, + qs: queryParameters, + headers: headers, + body: body + }; + if (Object.keys(form).length > 0) { + req.form = form; + } + if (typeof(body) === 'object' && !(body instanceof Buffer)) { + req.json = true; + } + request(req, function(error, response, body) { + if (error) { + deferred.reject(error); + } else { + if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) { + try { + body = JSON.parse(body); + } catch (e) { + + } + } + if (response.statusCode === 204) { + deferred.resolve({ + response: response + }); + } else if (response.statusCode >= 200 && response.statusCode <= 299) { + deferred.resolve({ + response: response, + body: body + }); + } else { + deferred.reject({ + response: response, + body: body + }); + } + } + }); + + return deferred.promise; + }; + + return Test; +})(); + +exports.Test = Test; \ No newline at end of file diff --git a/tests/reference/typescript_protected.json b/tests/reference/typescript_protected.json new file mode 100644 index 00000000..0c7fe0e2 --- /dev/null +++ b/tests/reference/typescript_protected.json @@ -0,0 +1,163 @@ +import * as request from "superagent"; + +/** + * + * @class Test + * @param {(string)} [domainOrOptions] - The project domain. + */ +export default class Test { + + private domain: string; + + constructor(domain: string) { + this.domain = domain; + } + + /** + * Get token + * @method + * @name Test#auth + * @param {string} grant_type - Authorization grant type. Use client_credentials to create a token or refresh_token to refresh a token + * @param {string} email - The account email. Mandatory if grant_type=client_credentials. + * @param {string} password - The account password. Mandatory if grant_type=client_credentials. + * @param {string} refresh_token - The refresh_token obtained in the last successful request to this endpoint. Mandatory if grant_type=refresh_token. + * + */ + auth(parameters: { + 'grant_type': string, + 'email' ? : string, + 'password' ? : string, + 'refresh_token' ? : string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/auth'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['grant_type'] !== undefined) { + queryParameters['grant_type'] = parameters['grant_type']; + } + + if (parameters['grant_type'] === undefined) { + reject(new Error('Missing required parameter: grant_type')); + return; + } + + if (parameters['email'] !== undefined) { + queryParameters['email'] = parameters['email']; + } + + if (parameters['password'] !== undefined) { + queryParameters['password'] = parameters['password']; + } + + if (parameters['refresh_token'] !== undefined) { + queryParameters['refresh_token'] = parameters['refresh_token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('POST', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * Get secure + * @method + * @name Test#getSecure + * @param {string} token - Auth token + * + */ + getSecure(parameters: { + 'token' ? : string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/project'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['token'] !== undefined) { + queryParameters['token'] = parameters['token']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + +} \ No newline at end of file diff --git a/tests/reference/typescript_ref.json b/tests/reference/typescript_ref.json new file mode 100644 index 00000000..5f5eb36d --- /dev/null +++ b/tests/reference/typescript_ref.json @@ -0,0 +1,83 @@ +import * as request from "superagent"; + +/** + * + * @class Test + * @param {(string)} [domainOrOptions] - The project domain. + */ +export default class Test { + + private domain: string; + + constructor(domain: string) { + this.domain = domain; + } + + /** + * Gets `Person` object. + * @method + * @name Test#getPersons + * @param {string} id - id + * + */ + getPersons(parameters: { + 'id': string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/persons'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['id'] !== undefined) { + queryParameters['id'] = parameters['id']; + } + + if (parameters['id'] === undefined) { + reject(new Error('Missing required parameter: id')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + +} \ No newline at end of file diff --git a/tests/reference/typescript_test.json b/tests/reference/typescript_test.json new file mode 100644 index 00000000..bc9731bc --- /dev/null +++ b/tests/reference/typescript_test.json @@ -0,0 +1,81 @@ +import * as request from "superagent"; + +/** + * + * @class Test + * @param {(string)} [domainOrOptions] - The project domain. + */ +export default class Test { + + private domain: string; + + constructor(domain: string) { + this.domain = domain; + } + + /** + * + * @method + * @name Test#User_exists__head_Users__id_ + * @param {string} id - Model id + * + */ + User_exists__head_Users__id_(parameters: { + 'id': string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/Users/{id}'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + reject(new Error('Missing required parameter: id')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('HEAD', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + +} \ No newline at end of file diff --git a/tests/reference/typescript_uber.json b/tests/reference/typescript_uber.json new file mode 100644 index 00000000..bc1b8bd4 --- /dev/null +++ b/tests/reference/typescript_uber.json @@ -0,0 +1,495 @@ +import * as request from "superagent"; + +/** + * Move your app forward with the Uber API + * @class Test + * @param {(string)} [domainOrOptions] - The project domain. + */ +export default class Test { + + private domain: string; + + constructor(domain: string) { + this.domain = domain; + } + + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProducts + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + getProducts(parameters: { + 'latitude': number, + 'longitude': number, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/products'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + reject(new Error('Missing required parameter: latitude')); + return; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + reject(new Error('Missing required parameter: longitude')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order. + * @method + * @name Test#getProductsById + * @param {integer} id - Move your app forward with the Uber API + * @param {number} latitude - Latitude component of location. + * @param {number} longitude - Longitude component of location. + * + */ + getProductsById(parameters: { + 'id': number, + 'latitude': number, + 'longitude': number, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/products/{id}'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + path = path.replace('{id}', parameters['id']); + + if (parameters['id'] === undefined) { + reject(new Error('Missing required parameter: id')); + return; + } + + if (parameters['latitude'] !== undefined) { + queryParameters['latitude'] = parameters['latitude']; + } + + if (parameters['latitude'] === undefined) { + reject(new Error('Missing required parameter: latitude')); + return; + } + + if (parameters['longitude'] !== undefined) { + queryParameters['longitude'] = parameters['longitude']; + } + + if (parameters['longitude'] === undefined) { + reject(new Error('Missing required parameter: longitude')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier. + * @method + * @name Test#getEstimatesPrice + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {number} end_latitude - Latitude component of end location. + * @param {number} end_longitude - Longitude component of end location. + * + */ + getEstimatesPrice(parameters: { + 'start_latitude': number, + 'start_longitude': number, + 'end_latitude': number, + 'end_longitude': number, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/estimates/price'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + reject(new Error('Missing required parameter: start_latitude')); + return; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + reject(new Error('Missing required parameter: start_longitude')); + return; + } + + if (parameters['end_latitude'] !== undefined) { + queryParameters['end_latitude'] = parameters['end_latitude']; + } + + if (parameters['end_latitude'] === undefined) { + reject(new Error('Missing required parameter: end_latitude')); + return; + } + + if (parameters['end_longitude'] !== undefined) { + queryParameters['end_longitude'] = parameters['end_longitude']; + } + + if (parameters['end_longitude'] === undefined) { + reject(new Error('Missing required parameter: end_longitude')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs. + * @method + * @name Test#getEstimatesTime + * @param {number} start_latitude - Latitude component of start location. + * @param {number} start_longitude - Longitude component of start location. + * @param {string} customer_uuid - Unique customer identifier to be used for experience customization. + * @param {string} product_id - Unique identifier representing a specific product for a given latitude & longitude. + * + */ + getEstimatesTime(parameters: { + 'start_latitude': number, + 'start_longitude': number, + 'customer_uuid' ? : string, + 'product_id' ? : string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/estimates/time'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['start_latitude'] !== undefined) { + queryParameters['start_latitude'] = parameters['start_latitude']; + } + + if (parameters['start_latitude'] === undefined) { + reject(new Error('Missing required parameter: start_latitude')); + return; + } + + if (parameters['start_longitude'] !== undefined) { + queryParameters['start_longitude'] = parameters['start_longitude']; + } + + if (parameters['start_longitude'] === undefined) { + reject(new Error('Missing required parameter: start_longitude')); + return; + } + + if (parameters['customer_uuid'] !== undefined) { + queryParameters['customer_uuid'] = parameters['customer_uuid']; + } + + if (parameters['product_id'] !== undefined) { + queryParameters['product_id'] = parameters['product_id']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * The User Profile endpoint returns information about the Uber user that has authorized with the application. + * @method + * @name Test#getMe + * + */ + getMe(parameters: { + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/me'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary. + * @method + * @name Test#getHistory + * @param {integer} offset - Offset the list of returned results by this amount. Default is zero. + * @param {integer} limit - Number of items to retrieve. Default is 5, maximum is 100. + * + */ + getHistory(parameters: { + 'offset' ? : number, + 'limit' ? : number, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/history'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + if (parameters['offset'] !== undefined) { + queryParameters['offset'] = parameters['offset']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + +} \ No newline at end of file diff --git a/tests/reference/typescript_users.json b/tests/reference/typescript_users.json new file mode 100644 index 00000000..a7fb208d --- /dev/null +++ b/tests/reference/typescript_users.json @@ -0,0 +1,146 @@ +import * as request from "superagent"; + +/** + * + * @class Test + * @param {(string)} [domainOrOptions] - The project domain. + */ +export default class Test { + + private domain: string; + + constructor(domain: string) { + this.domain = domain; + } + + /** + * Get user + * @method + * @name Test#findById + * @param {string} userId - User's id + * + */ + findById(parameters: { + 'userId': string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/users/{userId}'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + reject(new Error('Missing required parameter: userId')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('GET', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + + /** + * Delete user + * @method + * @name Test#delete + * @param {string} userId - User's id + * + */ + delete(parameters: { + 'userId': string, + $queryParameters ? : {} + }): Promise < request.Response > { + let domain = this.domain; + let path = '/users/{userId}'; + let body; + let queryParameters = {}; + let headers = {}; + let form = {}; + return new Promise(function(resolve, reject) { + + path = path.replace('{userId}', parameters['userId']); + + if (parameters['userId'] === undefined) { + reject(new Error('Missing required parameter: userId')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + let req = request('DELETE', domain + path) + .query(queryParameters); + Object.keys(headers).forEach(key => { + req.set(key, headers[key]); + }); + + if (body) { + req.send(body); + } + + if (typeof(body) === 'object' && !(body.constructor.name === 'Buffer')) { + req.set('Content-Type', 'application/json'); + } + + if (Object.keys(form).length > 0) { + req.type('form'); + req.send(form); + } + + req.end((error, response) => { + if (error) { + reject(error); + } else if (response.status >= 200 && response.status <= 299) { + resolve(response); + } else { + reject(response); + } + }); + + }); + }; + +} \ No newline at end of file