429 lines
83 KiB
HTML
429 lines
83 KiB
HTML
<!DOCTYPE html> <html> <head> <title>backend.couchdb.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="backend.couchdb.html"> backend.couchdb.js </a> <a class="source" href="backend.csv.html"> backend.csv.js </a> <a class="source" href="backend.dataproxy.html"> backend.dataproxy.js </a> <a class="source" href="backend.elasticsearch.html"> backend.elasticsearch.js </a> <a class="source" href="backend.gdocs.html"> backend.gdocs.js </a> <a class="source" href="backend.memory.html"> backend.memory.js </a> <a class="source" href="backend.solr.html"> backend.solr.js </a> <a class="source" href="data.transform.html"> data.transform.js </a> <a class="source" href="model.html"> model.js </a> <a class="source" href="view.graph.html"> view.graph.js </a> <a class="source" href="view.grid.html"> view.grid.js </a> <a class="source" href="view.map.html"> view.map.js </a> <a class="source" href="view.multiview.html"> view.multiview.js </a> <a class="source" href="view.slickgrid.html"> view.slickgrid.js </a> <a class="source" href="view.timeline.html"> view.timeline.js </a> <a class="source" href="view.transform.html"> view.transform.js </a> <a class="source" href="widget.facetviewer.html"> widget.facetviewer.js </a> <a class="source" href="widget.fields.html"> widget.fields.js </a> <a class="source" href="widget.filtereditor.html"> widget.filtereditor.js </a> <a class="source" href="widget.pager.html"> widget.pager.js </a> <a class="source" href="widget.queryeditor.html"> widget.queryeditor.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> backend.couchdb.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span class="k">this</span><span class="p">.</span><span class="nx">recline</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">recline</span> <span class="o">||</span> <span class="p">{};</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">recline</span><span class="p">.</span><span class="nx">Backend</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">recline</span><span class="p">.</span><span class="nx">Backend</span> <span class="o">||</span> <span class="p">{};</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">recline</span><span class="p">.</span><span class="nx">Backend</span><span class="p">.</span><span class="nx">CouchDB</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">recline</span><span class="p">.</span><span class="nx">Backend</span><span class="p">.</span><span class="nx">CouchDB</span> <span class="o">||</span> <span class="p">{};</span>
|
|
|
|
<span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">my</span><span class="p">.</span><span class="nx">__type__</span> <span class="o">=</span> <span class="s1">'couchdb'</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <h2>CouchDB Wrapper</h2>
|
|
|
|
<p>Connecting to [CouchDB] (http://www.couchdb.apache.org/) endpoints.
|
|
@param {String} endpoint: url for CouchDB database, e.g. for Couchdb running
|
|
on localhost:5984 with database // ckan-std it would be:</p>
|
|
|
|
<pre>http://localhost:5984/ckan-std</pre>
|
|
|
|
<p>TODO Add user/password arguments for couchdb authentication support.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
|
<span class="nx">self</span><span class="p">.</span><span class="nx">endpoint</span> <span class="o">=</span> <span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="nx">self</span><span class="p">.</span><span class="nx">view_url</span> <span class="o">=</span> <span class="p">(</span><span class="nx">view_url</span><span class="p">)</span> <span class="o">?</span> <span class="nx">view_url</span> <span class="o">:</span> <span class="nx">db_url</span><span class="o">+</span><span class="s1">'/'</span><span class="o">+</span><span class="s1">'_all_docs'</span><span class="p">;</span>
|
|
<span class="nx">self</span><span class="p">.</span><span class="nx">options</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
|
<span class="p">},</span>
|
|
<span class="nx">options</span><span class="p">);</span>
|
|
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_makeRequest</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">,</span> <span class="nx">headers</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">extras</span> <span class="o">=</span> <span class="p">{};</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">headers</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">extras</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="nx">beforeSend</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">headers</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">req</span><span class="p">.</span><span class="nx">setRequestHeader</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="p">}</span>
|
|
<span class="p">};</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">data</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">extras</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">(</span><span class="nx">data</span><span class="p">);</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <h3>mapping</h3>
|
|
|
|
<p>Get mapping for this database.
|
|
Assume all docs in the view have the same schema so
|
|
limit query to single result.</p>
|
|
|
|
<p>@return promise compatible deferred object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">mapping</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">schemaUrl</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">view_url</span> <span class="o">+</span> <span class="s1">'?limit=1&include_docs=true'</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">schemaUrl</span><span class="p">,</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">dataType</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">jqxhr</span><span class="p">;</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <h3>get</h3>
|
|
|
|
<p>Get record corresponding to specified id</p>
|
|
|
|
<p>@return promise compatible deferred object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">get</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">_id</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">base</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">endpoint</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">_id</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">base</span><span class="p">,</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
|
<span class="p">});</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <h3>upsert</h3>
|
|
|
|
<p>create / update a record to CouchDB backend</p>
|
|
|
|
<p>@param {Object} doc an object to insert to the index.
|
|
@return deferred supporting promise API</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">upsert</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">doc</span><span class="p">);</span>
|
|
<span class="nx">url</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">endpoint</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">doc</span><span class="p">.</span><span class="nx">_id</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">url</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">_id</span><span class="p">;</span>
|
|
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>use a PUT, not a POST to update the document:
|
|
http://wiki.apache.org/couchdb/HTTP<em>Document</em>API#POST</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span>
|
|
<span class="nx">type</span><span class="o">:</span> <span class="s1">'PUT'</span><span class="p">,</span>
|
|
<span class="nx">data</span><span class="o">:</span> <span class="nx">data</span><span class="p">,</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span><span class="p">,</span>
|
|
<span class="nx">contentType</span><span class="o">:</span> <span class="s1">'application/json'</span>
|
|
<span class="p">});</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <h3>delete</h3>
|
|
|
|
<p>Delete a record from the CouchDB backend.</p>
|
|
|
|
<p>@param {Object} id id of object to delete
|
|
@return deferred supporting promise API</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="k">delete</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">_id</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">url</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">endpoint</span><span class="p">;</span>
|
|
<span class="nx">url</span> <span class="o">+=</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="nx">_id</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span>
|
|
<span class="nx">type</span><span class="o">:</span> <span class="s1">'DELETE'</span><span class="p">,</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="s1">'json'</span>
|
|
<span class="p">});</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <h3>_normalizeQuery</h3>
|
|
|
|
<p>Convert the query object from Elastic Search format to a
|
|
Couchdb View API compatible format.
|
|
See: http://wiki.apache.org/couchdb/HTTP<em>view</em>API</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">_normalizeQuery</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">out</span> <span class="o">=</span> <span class="nx">queryObj</span> <span class="o">&&</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span> <span class="o">?</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">()</span> <span class="o">:</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({},</span> <span class="nx">queryObj</span><span class="p">);</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">sort</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">query</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">filters</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">fields</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">facets</span><span class="p">;</span>
|
|
<span class="nx">out</span><span class="p">[</span><span class="s1">'skip'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">out</span><span class="p">.</span><span class="nx">from</span> <span class="o">||</span> <span class="mi">0</span><span class="p">;</span>
|
|
<span class="nx">out</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">out</span><span class="p">.</span><span class="nx">size</span> <span class="o">||</span> <span class="mi">100</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">from</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">out</span><span class="p">.</span><span class="nx">size</span><span class="p">;</span>
|
|
<span class="nx">out</span><span class="p">[</span><span class="s1">'include_docs'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">out</span><span class="p">;</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <h3>query</h3>
|
|
|
|
<p>@param {Object} recline.Query instance.
|
|
@param {Object} additional couchdb view query options.
|
|
@return deferred supporting promise API</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">query</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">query_object</span><span class="p">,</span> <span class="nx">query_options</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">norm_q</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_normalizeQuery</span><span class="p">(</span><span class="nx">query_object</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">q</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">query_options</span><span class="p">,</span> <span class="nx">norm_q</span><span class="p">);</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_makeRequest</span><span class="p">({</span>
|
|
<span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span>
|
|
<span class="nx">data</span><span class="o">:</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">q</span><span class="p">),</span>
|
|
<span class="nx">dataType</span><span class="o">:</span> <span class="nx">self</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">dataType</span><span class="p">,</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">jqxhr</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <h2>CouchDB Backend</h2>
|
|
|
|
<p>Backbone connector for a CouchDB backend.</p>
|
|
|
|
<p>Usage:</p>
|
|
|
|
<p>var backend = new recline.Backend.CouchDB();
|
|
var dataset = new recline.Model.Dataset({
|
|
db<em>url: '/couchdb/mydb',
|
|
view</em>url: '/couchdb/mydb/<em>design/design1/</em>views/view1',
|
|
query<em>options: {
|
|
'key': 'some</em>document_key'
|
|
}
|
|
});
|
|
backend.fetch(dataset.toJSON());
|
|
backend.query(query, dataset.toJSON()).done(function () { ... });</p>
|
|
|
|
<p>Alternatively:
|
|
var dataset = new recline.Model.Dataset({ ... }, 'couchdb');
|
|
dataset.fetch();
|
|
var results = dataset.query(query_obj);</p>
|
|
|
|
<p>Additionally, the Dataset instance may define three methods:
|
|
function record<em>update (record, document) { ... }
|
|
function record</em>delete (record, document) { ... }
|
|
function record<em>create (record, document) { ... }
|
|
Where <code>record</code> is the JSON representation of the Record/Document instance
|
|
and <code>document</code> is the JSON document stored in couchdb.
|
|
When _all</em>docs view is used (default), a record is the same as a document
|
|
so these methods need not be defined.
|
|
They are most useful when using a custom view that performs a map-reduce
|
|
operation on each document to yield a record. Hence, when the record is
|
|
created, updated or deleted, an inverse operation must be performed on the original
|
|
document.</p>
|
|
|
|
<p>@param {string} url of couchdb database.
|
|
@param {string} (optional) url of couchdb view. default:<code>db_url</code>/<em>all</em>docs
|
|
@param {Object} (optional) query options accepted by couchdb views.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">couchOptions</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <h3>fetch</h3>
|
|
|
|
<p>@param {object} dataset json object with the db<em>url, view</em>url, and query_options args.
|
|
@return promise object that resolves to the document mapping.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">fetch</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">db_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">view_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">cdb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>if 'doc' attribute is present, return schema of that
|
|
else return schema of 'value' attribute which contains
|
|
the map-reduced document.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">cdb</span><span class="p">.</span><span class="nx">mapping</span><span class="p">().</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">row</span> <span class="o">=</span> <span class="nx">result</span><span class="p">.</span><span class="nx">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">keys</span> <span class="o">=</span> <span class="p">[];</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">view_url</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="s2">"_all_docs"</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">keys</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">row</span><span class="p">[</span><span class="s1">'doc'</span><span class="p">]);</span>
|
|
<span class="nx">keys</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">keys</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">k</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">k</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">!==</span> <span class="s1">'_'</span> <span class="p">});</span>
|
|
<span class="p">}</span>
|
|
<span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">keys</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">row</span><span class="p">[</span><span class="s1">'value'</span><span class="p">]);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">fieldData</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">keys</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">k</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="p">{</span> <span class="s1">'id'</span> <span class="o">:</span> <span class="nx">k</span> <span class="p">};</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">({</span>
|
|
<span class="nx">fields</span><span class="o">:</span> <span class="nx">fieldData</span>
|
|
<span class="p">});</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="nx">fail</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">arguments</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <h3>save</h3>
|
|
|
|
<p>Iterate through all the changes and save them to the server.
|
|
N.B. This method is asynchronous and attempts to do multiple
|
|
operation concurrently. This can be problematic when more than
|
|
one operation is requested on the same document (as in the case
|
|
of bulk column transforms).</p>
|
|
|
|
<p>@param {object} lists of create, update, delete.
|
|
@param {object} dataset json object.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">my</span><span class="p">.</span><span class="nx">save</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">changes</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">total</span> <span class="o">=</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">creates</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">updates</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">deletes</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">results</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'done'</span><span class="o">:</span> <span class="p">[],</span> <span class="s1">'fail'</span><span class="o">:</span> <span class="p">[]</span> <span class="p">};</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">decr_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="nx">total</span> <span class="o">-=</span> <span class="mi">1</span><span class="p">;</span> <span class="p">}</span>
|
|
<span class="kd">var</span> <span class="nx">resolve_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="nx">total</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">results</span><span class="p">);</span> <span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">creates</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">creates</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">succ_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">done</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'create'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">new_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="s1">''</span><span class="p">});</span> <span class="p">}</span>
|
|
<span class="kd">var</span> <span class="nx">fail_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">fail</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'create'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">new_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="nx">msg</span><span class="p">});</span> <span class="p">}</span>
|
|
|
|
<span class="nx">_createDocument</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">).</span><span class="nx">then</span><span class="p">([</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">succ_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">],</span> <span class="p">[</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">fail_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">]);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">updates</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">updates</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">succ_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">done</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'update'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">new_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="s1">''</span><span class="p">});</span> <span class="p">}</span>
|
|
<span class="kd">var</span> <span class="nx">fail_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">fail</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'update'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">new_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="nx">msg</span><span class="p">});</span> <span class="p">}</span>
|
|
|
|
<span class="nx">_updateDocument</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">).</span><span class="nx">then</span><span class="p">([</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">succ_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">],</span> <span class="p">[</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">fail_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">]);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">deletes</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">old_doc</span> <span class="o">=</span> <span class="nx">changes</span><span class="p">.</span><span class="nx">deletes</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">succ_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">done</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'delete'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">old_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="s1">''</span><span class="p">});</span> <span class="p">}</span>
|
|
<span class="kd">var</span> <span class="nx">fail_cb</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span><span class="nx">results</span><span class="p">.</span><span class="nx">fail</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="s1">'op'</span><span class="o">:</span> <span class="s1">'delete'</span><span class="p">,</span> <span class="s1">'record'</span><span class="o">:</span> <span class="nx">old_doc</span><span class="p">,</span> <span class="s1">'reason'</span><span class="o">:</span> <span class="nx">msg</span><span class="p">});</span> <span class="p">}</span>
|
|
|
|
<span class="nx">_deleteDocument</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">).</span><span class="nx">then</span><span class="p">([</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">succ_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">],</span> <span class="p">[</span><span class="nx">decr_cb</span><span class="p">,</span> <span class="nx">fail_cb</span><span class="p">,</span> <span class="nx">resolve_cb</span><span class="p">]);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <h3>query</h3>
|
|
|
|
<p>fetch the data from the couchdb view and filter it.
|
|
@param {Object} recline.Dataset instance
|
|
@param {Object} recline.Query instance.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">my</span><span class="p">.</span><span class="nx">query</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">db_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">view_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">query_options</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">query_options</span><span class="p">;</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">cdb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">cdb_q</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">_normalizeQuery</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">,</span> <span class="nx">query_options</span><span class="p">);</span>
|
|
|
|
<span class="nx">cdb</span><span class="p">.</span><span class="nx">query</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">,</span> <span class="nx">query_options</span><span class="p">).</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">records</span><span class="p">){</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">query_result</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">hits</span><span class="o">:</span> <span class="p">[],</span> <span class="nx">total</span><span class="o">:</span> <span class="mi">0</span> <span class="p">};</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">records</span><span class="p">.</span><span class="nx">rows</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">record</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">doc</span> <span class="o">=</span> <span class="p">{};</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">record</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="s1">'doc'</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="nx">doc</span> <span class="o">=</span> <span class="nx">record</span><span class="p">[</span><span class="s1">'doc'</span><span class="p">];</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>couchdb uses _id to identify documents, Backbone models use id.
|
|
we add this fix so backbone.Model works correctly.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">];</span>
|
|
<span class="p">}</span>
|
|
<span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">doc</span> <span class="o">=</span> <span class="nx">record</span><span class="p">[</span><span class="s1">'value'</span><span class="p">];</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">¶</a> </div> <p>using dunder to create compound id. need something more robust.
|
|
couchdb uses _id to identify documents, Backbone models use id.
|
|
we add this fix so backbone.Model works correctly.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">record</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span> <span class="o">+</span> <span class="s1">'__'</span> <span class="o">+</span> <span class="nx">record</span><span class="p">[</span><span class="s1">'key'</span><span class="p">];</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">total</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">doc</span><span class="p">);</span>
|
|
<span class="p">});</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">¶</a> </div> <p>the following block is borrowed verbatim from recline.backend.Memory
|
|
search (with filtering, faceting, and sorting) should be factored
|
|
out into a separate library.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span> <span class="o">=</span> <span class="nx">_applyFilters</span><span class="p">(</span><span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">);</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span> <span class="o">=</span> <span class="nx">_applyFreeTextQuery</span><span class="p">(</span><span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>not complete sorting!</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">sort</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">sortObj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">fieldName</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">sortObj</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">sortBy</span><span class="p">(</span><span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">_out</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">[</span><span class="nx">fieldName</span><span class="p">];</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="nx">sortObj</span><span class="p">[</span><span class="nx">fieldName</span><span class="p">].</span><span class="nx">order</span> <span class="o">==</span> <span class="s1">'asc'</span><span class="p">)</span> <span class="o">?</span> <span class="nx">_out</span> <span class="o">:</span> <span class="o">-</span><span class="mi">1</span><span class="o">*</span><span class="nx">_out</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">total</span> <span class="o">=</span> <span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">facets</span> <span class="o">=</span> <span class="nx">_computeFacets</span><span class="p">(</span><span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">);</span>
|
|
<span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span> <span class="o">=</span> <span class="nx">query_result</span><span class="p">.</span><span class="nx">hits</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="nx">cdb_q</span><span class="p">.</span><span class="nx">skip</span><span class="p">,</span> <span class="nx">cdb_q</span><span class="p">.</span><span class="nx">skip</span> <span class="o">+</span> <span class="nx">cdb_q</span><span class="p">.</span><span class="nx">limit</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">query_result</span><span class="p">);</span>
|
|
|
|
<span class="p">});</span>
|
|
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>in place filtering</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">_applyFilters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">results</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">filters</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">filter</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">results</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">results</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">fieldId</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">filter</span><span class="p">.</span><span class="nx">term</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="nx">doc</span><span class="p">[</span><span class="nx">fieldId</span><span class="p">]</span> <span class="o">==</span> <span class="nx">filter</span><span class="p">.</span><span class="nx">term</span><span class="p">[</span><span class="nx">fieldId</span><span class="p">]);</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">results</span><span class="p">;</span>
|
|
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>we OR across fields but AND across terms in query string</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">_applyFreeTextQuery</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">results</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">q</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">terms</span> <span class="o">=</span> <span class="nx">queryObj</span><span class="p">.</span><span class="nx">q</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">);</span>
|
|
<span class="nx">results</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">results</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">rawdoc</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">matches</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">terms</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">term</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">rawdoc</span><span class="p">),</span> <span class="kd">function</span><span class="p">(</span><span class="nx">field</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">rawdoc</span><span class="p">[</span><span class="nx">field</span><span class="p">];</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">value</span> <span class="o">!==</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> <span class="p">}</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">¶</a> </div> <p>TODO regexes?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">foundmatch</span> <span class="o">=</span> <span class="nx">foundmatch</span> <span class="o">||</span> <span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="nx">term</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>TODO: early out (once we are true should break to spare unnecessary testing)
|
|
if (foundmatch) return true;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
|
<span class="nx">matches</span> <span class="o">=</span> <span class="nx">matches</span> <span class="o">&&</span> <span class="nx">foundmatch</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>TODO: early out (once false should break to spare unnecessary testing)
|
|
if (!matches) return false;</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">matches</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">results</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">_computeFacets</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">records</span><span class="p">,</span> <span class="nx">queryObj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">facetResults</span> <span class="o">=</span> <span class="p">{};</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">facets</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">facetResults</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">facets</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">query</span><span class="p">,</span> <span class="nx">facetId</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>TODO: remove dependency on recline.Model</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">facetResults</span><span class="p">[</span><span class="nx">facetId</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">recline</span><span class="p">.</span><span class="nx">Model</span><span class="p">.</span><span class="nx">Facet</span><span class="p">({</span><span class="nx">id</span><span class="o">:</span> <span class="nx">facetId</span><span class="p">}).</span><span class="nx">toJSON</span><span class="p">();</span>
|
|
<span class="nx">facetResults</span><span class="p">[</span><span class="nx">facetId</span><span class="p">].</span><span class="nx">termsall</span> <span class="o">=</span> <span class="p">{};</span>
|
|
<span class="p">});</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>faceting</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">records</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">doc</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">facets</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">query</span><span class="p">,</span> <span class="nx">facetId</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">fieldId</span> <span class="o">=</span> <span class="nx">query</span><span class="p">.</span><span class="nx">terms</span><span class="p">.</span><span class="nx">field</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">val</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">[</span><span class="nx">fieldId</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">tmp</span> <span class="o">=</span> <span class="nx">facetResults</span><span class="p">[</span><span class="nx">facetId</span><span class="p">];</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">tmp</span><span class="p">.</span><span class="nx">termsall</span><span class="p">[</span><span class="nx">val</span><span class="p">]</span> <span class="o">=</span> <span class="nx">tmp</span><span class="p">.</span><span class="nx">termsall</span><span class="p">[</span><span class="nx">val</span><span class="p">]</span> <span class="o">?</span> <span class="nx">tmp</span><span class="p">.</span><span class="nx">termsall</span><span class="p">[</span><span class="nx">val</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">:</span> <span class="mi">1</span><span class="p">;</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">tmp</span><span class="p">.</span><span class="nx">missing</span> <span class="o">=</span> <span class="nx">tmp</span><span class="p">.</span><span class="nx">missing</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">queryObj</span><span class="p">.</span><span class="nx">facets</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">query</span><span class="p">,</span> <span class="nx">facetId</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">tmp</span> <span class="o">=</span> <span class="nx">facetResults</span><span class="p">[</span><span class="nx">facetId</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">terms</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">tmp</span><span class="p">.</span><span class="nx">termsall</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">count</span><span class="p">,</span> <span class="nx">term</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="p">{</span> <span class="nx">term</span><span class="o">:</span> <span class="nx">term</span><span class="p">,</span> <span class="nx">count</span><span class="o">:</span> <span class="nx">count</span> <span class="p">};</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">tmp</span><span class="p">.</span><span class="nx">terms</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">sortBy</span><span class="p">(</span><span class="nx">terms</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <p>want descending order</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="o">-</span><span class="nx">item</span><span class="p">.</span><span class="nx">count</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
<span class="nx">tmp</span><span class="p">.</span><span class="nx">terms</span> <span class="o">=</span> <span class="nx">tmp</span><span class="p">.</span><span class="nx">terms</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">facetResults</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">_createDocument</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">db_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">view_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">_id</span> <span class="o">=</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">cdb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">);</span>
|
|
|
|
<span class="k">delete</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">view_url</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="s1">'_all_docs'</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">_id</span> <span class="o">=</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">].</span><span class="nx">split</span><span class="p">(</span><span class="s1">'__'</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="nx">jqxhr</span><span class="p">.</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">){</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">dataset</span><span class="p">.</span><span class="nx">record_create</span><span class="p">)</span>
|
|
<span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">record_create</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">old_doc</span><span class="p">);</span>
|
|
<span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">,</span> <span class="nx">new_doc</span><span class="p">);</span>
|
|
<span class="nx">new_doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_id</span><span class="p">;</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">cdb</span><span class="p">.</span><span class="nx">upsert</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">));</span>
|
|
<span class="p">}).</span><span class="nx">fail</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">){</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">_updateDocument</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">db_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">view_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">_id</span> <span class="o">=</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">cdb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">);</span>
|
|
|
|
<span class="k">delete</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">view_url</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="s1">'_all_docs'</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">_id</span> <span class="o">=</span> <span class="nx">new_doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">].</span><span class="nx">split</span><span class="p">(</span><span class="s1">'__'</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="nx">jqxhr</span><span class="p">.</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">){</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">dataset</span><span class="p">.</span><span class="nx">record_update</span><span class="p">)</span>
|
|
<span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">record_update</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">,</span> <span class="nx">old_doc</span><span class="p">);</span>
|
|
<span class="nx">new_doc</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">,</span> <span class="nx">new_doc</span><span class="p">);</span>
|
|
<span class="nx">new_doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_id</span><span class="p">;</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">cdb</span><span class="p">.</span><span class="nx">upsert</span><span class="p">(</span><span class="nx">new_doc</span><span class="p">));</span>
|
|
<span class="p">}).</span><span class="nx">fail</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">){</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">_deleteDocument</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">del_doc</span><span class="p">,</span> <span class="nx">dataset</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">$</span><span class="p">.</span><span class="nx">Deferred</span><span class="p">();</span>
|
|
<span class="kd">var</span> <span class="nx">db_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">db_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">view_url</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">view_url</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">_id</span> <span class="o">=</span> <span class="nx">del_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">cdb</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">my</span><span class="p">.</span><span class="nx">CouchDBWrapper</span><span class="p">(</span><span class="nx">db_url</span><span class="p">,</span> <span class="nx">view_url</span><span class="p">);</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">view_url</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="s1">'_all_docs'</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nx">cdb</span><span class="p">.</span><span class="k">delete</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
<span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">_id</span> <span class="o">=</span> <span class="nx">model</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'_id'</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">'__'</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">jqxhr</span> <span class="o">=</span> <span class="nx">cdb</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">_id</span><span class="p">);</span>
|
|
|
|
<span class="nx">jqxhr</span><span class="p">.</span><span class="nx">done</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">){</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">dataset</span><span class="p">.</span><span class="nx">record_delete</span><span class="p">)</span>
|
|
<span class="nx">old_doc</span> <span class="o">=</span> <span class="nx">dataset</span><span class="p">.</span><span class="nx">record_delete</span><span class="p">(</span><span class="nx">del_doc</span><span class="p">,</span> <span class="nx">old_doc</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">isNull</span><span class="p">(</span><span class="nx">del_doc</span><span class="p">))</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">cdb</span><span class="p">.</span><span class="k">delete</span><span class="p">(</span><span class="nx">_id</span><span class="p">));</span> <span class="c1">// XXX is this the right thing to do?</span>
|
|
<span class="k">else</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <p>couchdb uses _id to identify documents, Backbone models use id.
|
|
we should remove it before sending it to the server.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">old_doc</span><span class="p">[</span><span class="s1">'_id'</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_id</span><span class="p">;</span>
|
|
<span class="k">delete</span> <span class="nx">old_doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">];</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">cdb</span><span class="p">.</span><span class="nx">upsert</span><span class="p">(</span><span class="nx">old_doc</span><span class="p">));</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}).</span><span class="nx">fail</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">){</span>
|
|
<span class="nx">dfd</span><span class="p">.</span><span class="nx">reject</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">();</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}(</span><span class="nx">jQuery</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">recline</span><span class="p">.</span><span class="nx">Backend</span><span class="p">.</span><span class="nx">CouchDB</span><span class="p">));</span>
|
|
|
|
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> |