jsdoc-oblivion
Version:
A gray and blue theme for JSDoc.
3,815 lines (1,232 loc) • 57.8 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=yes, width=device-width">
<title>Oblivion — Module: documents/probe</title>
<link rel="shortcut icon" href="/favicon.ico">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/sunlight.dark.css">
<link type="text/css" rel="stylesheet" href="styles/site.oblivion.css">
</head>
<body>
<div class="container-fluid">
<div class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<a class="brand" href="index.html">Oblivion</a>
<ul class="nav">
<li class="dropdown">
<a href="modules.list.html" class="dropdown-toggle" data-toggle="dropdown">Modules<b
class="caret"></b></a>
<ul class="dropdown-menu ">
<li>
<a href="module-base.html">base</a>
</li>
<li>
<a href="chains_.html">base/chains</a>
</li>
<li>
<a href="binder.html">documents/binder</a>
</li>
<li>
<a href="model_.html">documents/model</a>
</li>
<li>
<a href="probe.html">documents/probe</a>
</li>
<li>
<a href="schema_.html">documents/schema</a>
</li>
<li>
<a href="collector.html">ink/collector</a>
</li>
<li>
<a href="bussable_.html">mixins/bussable</a>
</li>
<li>
<a href="signalable_.html">mixins/signalable</a>
</li>
<li>
<a href="format.html">strings/format</a>
</li>
<li>
<a href="logger.html">utils/logger</a>
</li>
</ul>
</li>
<li class="dropdown">
<a href="classes.list.html" class="dropdown-toggle" data-toggle="dropdown">Classes<b
class="caret"></b></a>
<ul class="dropdown-menu ">
<li>
<a href="base.html">base</a>
</li>
<li>
<a href="chains.html">base/chains</a>
</li>
<li>
<a href="model.html">documents/model</a>
</li>
<li>
<a href="probe.queryOperators.html">documents/probe.queryOperators</a>
</li>
<li>
<a href="probe.updateOperators.html">documents/probe.updateOperators</a>
</li>
<li>
<a href="collector-ACollector.html">ink/collector~ACollector</a>
</li>
<li>
<a href="collector-CollectorBase_.html">ink/collector~CollectorBase</a>
</li>
<li>
<a href="collector-OCollector.html">ink/collector~OCollector</a>
</li>
<li>
<a href="signalable-Signal.html">mixins/signalable~Signal</a>
</li>
<li>
<a href="logger.Logger.html">utils/logger.Logger</a>
</li>
</ul>
</li>
<li class="dropdown">
<a href="mixins.list.html" class="dropdown-toggle" data-toggle="dropdown">Mixins<b
class="caret"></b></a>
<ul class="dropdown-menu ">
<li>
<a href="schema.html">documents/schema</a>
</li>
<li>
<a href="bussable.html">mixins/bussable</a>
</li>
<li>
<a href="signalable.html">mixins/signalable</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="row-fluid">
<div class="span3">
<div id="toc"></div>
</div>
<div class="span9">
<div id="main">
<h1 class="page-title">Module: documents/probe</h1>
<section>
<header>
<h2>
documents/probe
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Queries objects in memory using a mongo-like notation for reaching into objects and filtering for records</div>
<dl class="details">
<dt class="tag-author">Author:</dt>
<dd class="tag-author">
<ul>
<li>Terry Weiss</li>
</ul>
</dd>
<dt class="tag-license">License:</dt>
<dd class="tag-license">
<ul class="dummy">
<li>MIT</li>
</ul>
</dd>
</dl>
</div>
<h3 class="subsection-title">Requires</h3>
<ul>
<li>module:lodash</li>
</ul>
<h3 class="subsection-title">Classes</h3>
<dl>
<dt><a href="probe.queryOperators.html">queryOperators</a></dt>
<dd></dd>
<dt><a href="probe.updateOperators.html">updateOperators</a></dt>
<dd></dd>
</dl>
<h3 class="subsection-title">Members</h3>
<dl>
<dt class="name" id="delimiter">
<h4><span class="type-signature"><static> </span>delimiter<span class="type-signature"> :string</span></h4>
</dt>
<dd>
<div class="description">
The delimiter to use when splitting an expression
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">string</span>
</li>
</ul>
<dl class="details">
<dt class="tag-default">Default Value:</dt>
<dd class="tag-default">
<ul class="dummy">
<li>'.'</li>
</ul>
</dd>
</dl>
</dd>
<dt class="name" id="nestedOps">
<h4><span class="type-signature"><private, inner> </span>nestedOps<span class="type-signature"> :array.<string></span></h4>
</dt>
<dd>
<div class="description">
The list of operators that are nested within the expression object. These take the form <code>{path:{operator:operand}}</code>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">array.<string></span>
</li>
</ul>
<dl class="details">
</dl>
</dd>
<dt class="name" id="operations">
<h4><span class="type-signature"><private, inner> </span>operations<span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
The query operations that evaluate directly from an operation
</div>
<dl class="details">
</dl>
</dd>
<dt class="name" id="prefixOps">
<h4><span class="type-signature"><private, inner> </span>prefixOps<span class="type-signature"> :array.<string></span></h4>
</dt>
<dd>
<div class="description">
The list of operators that prefix the expression object. These take the form <code>{operator:{operands}}</code> or <code>{operator: [operands]}</code>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">array.<string></span>
</li>
</ul>
<dl class="details">
</dl>
</dd>
</dl>
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<h4 class="name" id="all"><span class="type-signature"><static> </span>all<span class="signature">(obj, qu)</span><span class="type-signature"> → {boolean}</span></h4>
</dt>
<dd>
<div class="description">
Returns true if all items match the query
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="any"><span class="type-signature"><static> </span>any<span class="signature">(obj, qu)</span><span class="type-signature"> → {boolean}</span></h4>
</dt>
<dd>
<div class="description">
Returns true if any of the items match the query
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="every"><span class="type-signature"><static> </span>every<span class="signature">(obj, qu)</span><span class="type-signature"> → {boolean}</span></h4>
</dt>
<dd>
<div class="description">
Returns true if all items match the query. Aliases as `all`
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="find"><span class="type-signature"><static> </span>find<span class="signature">(obj, qu)</span><span class="type-signature"> → {array}</span></h4>
</dt>
<dd>
<div class="description">
Find all records that match a query
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
The results
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">array</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="findKeys"><span class="type-signature"><static> </span>findKeys<span class="signature">(obj, qu)</span><span class="type-signature"> → {array}</span></h4>
</dt>
<dd>
<div class="description">
Find all records that match a query and returns the keys for those items. This is similar to <a href="probe.html#find">module:documents/probe.find</a> but instead of returning
records, returns the keys. If `obj` is an object it will return the hash key. If 'obj' is an array, it will return the index
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">array</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="findOne"><span class="type-signature"><static> </span>findOne<span class="signature">(obj, qu)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Returns the first record that matches the query. Aliased as `seek`.
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="findOneKey"><span class="type-signature"><static> </span>findOneKey<span class="signature">(obj, qu)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Returns the first record that matches the query and returns its key or index depending on whether `obj` is an object or array respectively.
Aliased as `seekKey`.
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="get"><span class="type-signature"><static> </span>get<span class="signature">(path, record)</span><span class="type-signature"> → {*}</span></h4>
</dt>
<dd>
<div class="description">
Reaches into an object and allows you to get at a value deeply nested in an object. This is not a query, but a
straight reach in, useful for event bindings
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>path</code></td>
<td class="type">
<span class="param-type">array</span>
</td>
<td class="description last">The split path of the element to work with</td>
</tr>
<tr>
<td class="name"><code>record</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The record to reach into</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Whatever was found in the record
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">*</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="mixin"><span class="type-signature"><static> </span>mixin<span class="signature">(obj, collection)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Binds the query and update methods to a specific object and adds the methods to that object. When called these
methods can skip the first parameter so that find(object, query) can just be called as object.find(query)
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">object</span>
|
<span class="param-type">array</span>
</td>
<td class="description last">The object or array to bind to</td>
</tr>
<tr>
<td class="name"><code>collection</code></td>
<td class="type">
<span class="param-type">object</span>
|
<span class="param-type">array</span>
</td>
<td class="description last">If the collection is not the same as <code>this</code> but is a property, or even
a whole other object, you specify that here. Otherwise the <code>obj</code> is assumed to be the same as the collecion</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
</dd>
<dt>
<h4 class="name" id="proxy"><span class="type-signature"><static> </span>proxy<span class="signature">(obj)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Binds the query and update methods to a new object. When called these
methods can skip the first parameter so that find(object, query) can just be called as find(query)
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">object</span>
|
<span class="param-type">array</span>
</td>
<td class="description last">The object or array to bind to</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
An object with method bindings in place
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="remove"><span class="type-signature"><static> </span>remove<span class="signature">(obj, qu)</span><span class="type-signature"> → {object|array}</span></h4>
</dt>
<dd>
<div class="description">
Remove all items in the object/array that match the query
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
The array or object as appropriate without the records.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
|
<span class="param-type">array</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="set"><span class="type-signature"><static> </span>set<span class="signature">(path, record, setter, newValue)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
This will write the value into a record at the path, creating intervening objects if they don't exist. This does not work as filtered
update and is meant to be used on a single record. It is a nice way of setting a property at an arbitrary depth at will.
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>path</code></td>
<td class="type">
<span class="param-type">array</span>
</td>
<td class="description last">The split path of the element to work with</td>
</tr>
<tr>
<td class="name"><code>record</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The record to reach into</td>
</tr>
<tr>
<td class="name"><code>setter</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">The set operation. See <a href="probe.updateOperators.html">module:documents/probe.updateOperators</a> for the operators you can use.</td>
</tr>
<tr>
<td class="name"><code>newValue</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The value to write to the, or if the operator is $pull, the query of items to look for</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
</dd>
<dt>
<h4 class="name" id="some"><span class="type-signature"><static> </span>some<span class="signature">(obj, qu)</span><span class="type-signature"> → {boolean}</span></h4>
</dt>
<dd>
<div class="description">
Returns true if any of the items match the query. Aliases as `any`
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="unique"><span class="type-signature"><static> </span>unique<span class="signature">(obj, qu)</span><span class="type-signature"> → {array}</span></h4>
</dt>
<dd>
<div class="description">
Returns the set of unique records that match a query
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query to execute. See <a href="probe.queryOperators.html">module:documents/probe.queryOperators</a> for the operators you can use.</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">array</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="update"><span class="type-signature"><static> </span>update<span class="signature">(obj, qu, setDocument)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Updates all records in obj that match the query. See <a href="probe.updateOperators.html">module:documents/probe.updateOperators</a> for the operators that are supported.
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">object</span>
|
<span class="param-type">array</span>
</td>
<td class="description last">The object to update</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The query which will be used to identify the records to updated</td>
</tr>
<tr>
<td class="name"><code>setDocument</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The update operator. See <a href="probe.updateOperators.html">module:documents/probe.updateOperators</a></td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
</dd>
<dt>
<h4 class="name" id="execQuery"><span class="type-signature"><private, inner> </span>execQuery<span class="signature">(obj, qu, shortCircuit, stopOnFirst)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Executes a query by traversing a document and evaluating each record
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Argument</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">array</span>
|
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">The object to query</td>
</tr>
<tr>
<td class="name"><code>qu</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="attributes">
</td>
<td class="description last">The query to execute</td>
</tr>
<tr>
<td class="name"><code>shortCircuit</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="attributes">
<nullable><br>
</td>
<td class="description last">When true, the condition that matches the query stops evaluation for that record, otherwise all conditions have to be met</td>
</tr>
<tr>
<td class="name"><code>stopOnFirst</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="attributes">
<nullable><br>
</td>
<td class="description last">When true all evaluation stops after the first record is found to match the conditons</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
</dd>
<dt>
<h4 class="name" id="parseQueryExpression"><span class="type-signature"><private, inner> </span>parseQueryExpression<span class="signature">(obj)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Parses a query request and builds an object that can used to process a query target
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>obj</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The expression object</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
All components of the expression in a kind of execution tree
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="processExpressionObject"><span class="type-signature"><private, inner> </span>processExpressionObject<span class="signature">(val, key)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Interrogates a single query expression object and calls the appropriate handler for its contents
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>val</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The expression</td>
</tr>
<tr>
<td class="name"><code>key</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The prefix</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
A formatted operation definition
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="processNestedOperator"><span class="type-signature"><private, inner> </span>processNestedOperator<span class="signature">(path, operand)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Processes a nested operator by picking the operator out of the expression object. Returns a formatted object that can be used for querying
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>path</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">The path to element to work with</td>
</tr>
<tr>
<td class="name"><code>operand</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The operands to use for the query</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
A formatted operation definition
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="processPrefixOperator"><span class="type-signature"><private, inner> </span>processPrefixOperator<span class="signature">(operation, operand)</span><span class="type-signature"> → {object}</span></h4>
</dt>
<dd>
<div class="description">
Processes a prefixed operator and then passes control to the nested operator method to pick out the contained values
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>operation</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">The operation prefix</td>
</tr>
<tr>
<td class="name"><code>operand</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">The operands to use for the query</td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<h5>Returns:</h5>
<div class="param-desc">
A formatted operation definition
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">object</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="pushin"><span class="type-signature"><private, inner> </span>pushin<span class="signature">(path, record, setter, newValue)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
This will write the value into a record at the path, creating intervening objects if they don't exist
</div>
<h5>Parameters:</h5>
<div class="params-table-container">
<table class="params table ta