Comparing version 0.3.4 to 0.4.0
@@ -100,9 +100,9 @@ 'use strict' | ||
BloomRun.prototype.lookup = function (pattern) { | ||
var iterator = new Iterator(this, pattern) | ||
BloomRun.prototype.lookup = function (pattern, opts) { | ||
var iterator = new Iterator(this, pattern, opts) | ||
return iterator.next() | ||
} | ||
BloomRun.prototype.list = function (pattern) { | ||
var iterator = new Iterator(this, pattern) | ||
BloomRun.prototype.list = function (pattern, opts) { | ||
var iterator = new Iterator(this, pattern, opts) | ||
var list = [] | ||
@@ -109,0 +109,0 @@ var current = null |
@@ -6,5 +6,6 @@ 'use strict' | ||
function Iterator (parent, obj) { | ||
function Iterator (parent, obj, opts) { | ||
if (!(this instanceof Iterator)) { | ||
return new Iterator(this, parent) | ||
// this is parent | ||
return new Iterator(this, parent, obj) | ||
} | ||
@@ -14,4 +15,9 @@ | ||
this.pattern = obj | ||
this.onlyPatterns = opts && opts.patterns | ||
this.buckets = matchingBuckets(parent._buckets, obj, parent._properties) | ||
if (obj) { | ||
this.buckets = matchingBuckets(parent._buckets, obj, parent._properties) | ||
} else { | ||
this.buckets = parent._buckets | ||
} | ||
@@ -31,4 +37,8 @@ this.i = 0 | ||
if (deepPartialMatch(current.pattern, this.pattern)) { | ||
match = current.payload | ||
if (!this.pattern || deepPartialMatch(current.pattern, this.pattern)) { | ||
if (this.onlyPatterns) { | ||
match = current.pattern | ||
} else { | ||
match = current.payload | ||
} | ||
} | ||
@@ -35,0 +45,0 @@ |
{ | ||
"name": "bloomrun", | ||
"version": "0.3.4", | ||
"version": "0.4.0", | ||
"description": "JS object pattern matching, powered by bloom filters", | ||
@@ -27,3 +27,2 @@ "main": "bloomrun.js", | ||
"faucet": "0.0.1", | ||
"nanite-drain": "^0.1.0", | ||
"patrun": "^0.4.4", | ||
@@ -30,0 +29,0 @@ "pre-commit": "^1.1.1", |
@@ -86,3 +86,3 @@ [![logo][logo-url]][npm-url] | ||
<a name="lookup"></a> | ||
### instance.lookup(obj) | ||
### instance.lookup(obj [, opts]) | ||
@@ -94,5 +94,9 @@ Looks up the first entry that matches the given obj. A match happens | ||
Options: | ||
* `patterns: true`, if you want to retrieve only patterns, not | ||
payloads | ||
------------------------------------------------------- | ||
<a name="iterator"></a> | ||
### instance.iterator(obj) | ||
### instance.iterator(obj [, opts]) | ||
@@ -102,10 +106,20 @@ Returns an iterator, which is an object with a `next` method. `next` | ||
are no more. | ||
If `obj` is null, all patterns/payload will be returned. | ||
Options: | ||
* `patterns: true`, if you want to retrieve only patterns, not | ||
payloads | ||
------------------------------------------------------- | ||
<a name="list"></a> | ||
### instance.list(obj) | ||
### instance.list(obj [, opts]) | ||
Returns all patterns that matches the object. If a payload was provided | ||
this will be returned instead of the pattern. | ||
If `obj` is null, all patterns/payload will be returned. | ||
Options: | ||
* `patterns: true`, if you want to retrieve only patterns, not | ||
payloads | ||
## Acknowledgements | ||
@@ -112,0 +126,0 @@ |
90
test.js
@@ -5,3 +5,2 @@ 'use strict' | ||
var bloomrun = require('./') | ||
var drain = require('nanite-drain') | ||
@@ -155,5 +154,6 @@ test('null is returned if pattern is not found', function (t) { | ||
var pattern = { group: '123', userId: 'ABC' } | ||
var payloadOne = drain(function (msg, done) { done() }) | ||
var payloadTwo = drain(function (msg, done) { done() }) | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern, payloadOne) | ||
@@ -189,1 +189,85 @@ instance.add(pattern, payloadTwo) | ||
}) | ||
test('patterns can be listed while using payloads', function (t) { | ||
t.plan(1) | ||
var instance = bloomrun() | ||
var pattern1 = { group: '123', userId: 'ABC' } | ||
var pattern2 = { group: '123', userId: 'DEF' } | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern1, payloadOne) | ||
instance.add(pattern2, payloadTwo) | ||
t.deepEqual(instance.list({ group: '123' }, { patterns: true }), [pattern1, pattern2]) | ||
}) | ||
test('patterns can be looked up while using payloads', function (t) { | ||
t.plan(1) | ||
var instance = bloomrun() | ||
var pattern1 = { group: '123', userId: 'ABC' } | ||
var pattern2 = { group: '123', userId: 'DEF' } | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern1, payloadOne) | ||
instance.add(pattern2, payloadTwo) | ||
t.equal(instance.lookup({ group: '123' }, { patterns: true }), pattern1) | ||
}) | ||
test('iterators can be used to fetch only patterns', function (t) { | ||
t.plan(3) | ||
var instance = bloomrun() | ||
var pattern1 = { group: '123', userId: 'ABC' } | ||
var pattern2 = { group: '123', userId: 'DEF' } | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern1, payloadOne) | ||
instance.add(pattern2, payloadTwo) | ||
var iterator = instance.iterator({ group: '123' }, { patterns: true }) | ||
t.equal(iterator.next(), pattern1) | ||
t.equal(iterator.next(), pattern2) | ||
t.equal(iterator.next(), null) | ||
}) | ||
test('listing all payloads', function (t) { | ||
t.plan(1) | ||
var instance = bloomrun() | ||
var pattern1 = { group: '123', userId: 'ABC' } | ||
var pattern2 = { group: '123', userId: 'DEF' } | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern1, payloadOne) | ||
instance.add(pattern2, payloadTwo) | ||
t.deepEqual(instance.list(), [payloadOne, payloadTwo]) | ||
}) | ||
test('listing all patterns', function (t) { | ||
t.plan(1) | ||
var instance = bloomrun() | ||
var pattern1 = { group: '123', userId: 'ABC' } | ||
var pattern2 = { group: '123', userId: 'DEF' } | ||
function payloadOne () { } | ||
function payloadTwo () { } | ||
instance.add(pattern1, payloadOne) | ||
instance.add(pattern2, payloadTwo) | ||
t.deepEqual(instance.list(null, { patterns: true }), [pattern1, pattern2]) | ||
}) |
65256
6
536
143