diff options
Diffstat (limited to 'app/node_modules/okquery')
| -rw-r--r-- | app/node_modules/okquery/index.js | 30 | ||||
| -rw-r--r-- | app/node_modules/okquery/package.json | 1 |
2 files changed, 26 insertions, 5 deletions
diff --git a/app/node_modules/okquery/index.js b/app/node_modules/okquery/index.js index e5bae67..c28971f 100644 --- a/app/node_modules/okquery/index.js +++ b/app/node_modules/okquery/index.js @@ -1,3 +1,5 @@ +var Q = require('q'); + /** * OKQuery! * Takes a query spec for a resource and maps it the proper read @@ -20,17 +22,24 @@ function OKQuery(options) { value: resource.type, writable: false }); - this.get = createQuery(resource, query); + this.get = createQuery(resource, query, { + default: options.default + }); } -function createQuery(resource, query) { +function createQuery(resource, query, options) { + options = options || {}; + var query; if (isDynamic(query)) { - return queryDynamic(resource); + query = queryDynamic(resource); } else if (isSet(query)) { - return queryAll(resource); + query = queryAll(resource); } else { - return querySingle(resource, query); + query = querySingle(resource, query); } + if (options.default) + query = withDefault(query, options.default); + return query; } function queryDynamic(resource) { @@ -51,6 +60,17 @@ function querySingle(resource, id) { } } +function withDefault(queryFn, resultDefault) { + return function() { + return Q.Promise(function(resolve, reject) { + queryFn().then(function(data) { + data = data || resultDefault; + resolve(data); + }, reject); + }); + }; +} + function isDynamic(query) { return query && query.charAt(0) === ':'; } diff --git a/app/node_modules/okquery/package.json b/app/node_modules/okquery/package.json index a503c4b..56cd09f 100644 --- a/app/node_modules/okquery/package.json +++ b/app/node_modules/okquery/package.json @@ -9,5 +9,6 @@ "author": "OKFocus", "license": "None", "dependencies": { + "q": "^1.2.0" } } |
