summaryrefslogtreecommitdiff
path: root/app/node_modules/okquery/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/node_modules/okquery/index.js')
-rw-r--r--app/node_modules/okquery/index.js30
1 files changed, 25 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) === ':';
}