Interoperability
Hint
You can use .result, .test, .assert and .through with any library
that expects a callback receiving the value to resolve. Those methods
are bound to the expression instance so there is no need to force a scope
when using them.
Lo-Dash
The library wraps Lo-Dash _.createCallback to make it understand about expression chains. This means that in every Lo-Dash function accepting a callback it'll now accept an expression, which will get automatically evaluated every time it's used by Lo-Dash.
var over18 = ass.prop('age').above(18);
var adults = _.filter(students, over18);
That works well for the whole filtering primitives but if we want to use something
like _.map, it'll get just true or false. To get the mutated value from an
expression we can use .result() like so:
var truncateName = ass.prop('name').slice(0, 20).result;
var result = _.map(students, truncateName);
Hint
_.isEquals is also wrapped to make it understand our expressions, so you
can use it to check arbitrary object structures with nested expressions.
Sinon
Expressions expose a .test method returning a boolean value which make
them compatible with the Sinon test doubles library.
var callback = sinon.stub();
callback.withArgs(ass.string.contains('foo')).returns(true);
callback.withArgs(ass.has({
foo: ass.number
})).returns(null);
Caution
Actually .test may return undefined when resolving an asynchronous
expression, however since Sinon doesn't have that concept it'll be coerced
into a failed evaluation.