Add support for trigger filters (#91)
diff --git a/actions/changes.js b/actions/changes.js
index dd7b0ee..e332a5b 100644
--- a/actions/changes.js
+++ b/actions/changes.js
@@ -19,6 +19,8 @@
var protocol = msg.protocol || 'https';
var port = msg.port;
var maxTriggers = msg.maxTriggers;
+ var filter;
+ var query_params;
if (lifecycleEvent === 'CREATE') {
@@ -42,6 +44,25 @@
return Promise.reject('You must supply a non-default namespace.');
}
+ if (msg.filter) {
+ filter = msg.filter;
+
+ if (typeof msg.query_params === 'object') {
+ query_params = msg.query_params;
+ }
+ else if (typeof msg.query_params === 'string') {
+ try {
+ query_params = JSON.parse(msg.query_params);
+ }
+ catch (e) {
+ return Promise.reject('The query_params parameter cannot be parsed. Ensure it is valid JSON.');
+ }
+ }
+ }
+ else if (msg.query_params) {
+ return Promise.reject('The query_params parameter is only allowed if the filter parameter is defined');
+ }
+
// auth key for trigger
var apiKey = msg.authKey;
var input = {};
@@ -54,6 +75,8 @@
input.pass = pass;
input.apikey = apiKey;
input.maxTriggers = maxTriggers;
+ input.filter = filter;
+ input.query_params = query_params;
return cloudantHelper(provider_endpoint, 'put', triggerId, input);
} else if (lifecycleEvent === 'DELETE') {
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index 46afe73..122bb06 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -59,6 +59,12 @@
// Listen for changes on this database.
var feed = triggeredDB.follow({since: sinceToUse, include_docs: false});
+ if (dataTrigger.filter) {
+ feed.filter = dataTrigger.filter;
+ }
+ if (dataTrigger.query_params) {
+ feed.query_params = dataTrigger.query_params;
+ }
dataTrigger.feed = feed;
that.triggers[dataTrigger.id] = dataTrigger;
@@ -141,7 +147,9 @@
apikey: obj.apikey,
since: obj.since,
maxTriggers: obj.maxTriggers,
- triggersLeft: obj.maxTriggers
+ triggersLeft: obj.maxTriggers,
+ filter: obj.filter,
+ query_params: obj.query_params
};
return trigger;