UNPKG

angoose

Version:

Angoose is a Remote Method Invocation module that comes with built-in mongoose/angular support. Now you can call server side module in browser just like you're in the server side!

193 lines (142 loc) 7.31 kB
<!DOCTYPE html> <html> <head> <title>Model.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul id="jump_to"> <li> <a class="large" href="javascript:void(0);">Jump To &hellip;</a> <a class="small" href="javascript:void(0);">+</a> <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="Context.html"> Context.js </a> <a class="source" href="Model.html"> Model.js </a> <a class="source" href="Principal.html"> Principal.js </a> <a class="source" href="Remotable.html"> Remotable.js </a> <a class="source" href="Schema.html"> Schema.js </a> <a class="source" href="Service.html"> Service.js </a> <a class="source" href="angoose.html"> angoose.js </a> </div> </li> </ul> <ul class="sections"> <li id="title"> <div class="annotation"> <h1>Model.js</h1> </div> </li> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">&#182;</a> </div> </div> <div class="content"><div class='highlight'><pre><span class="keyword">var</span> logger = require(<span class="string">"log4js"</span>).getLogger(<span class="string">"angoose"</span>); <span class="keyword">var</span> _ =require(<span class="string">"underscore"</span>); <span class="keyword">var</span> Remotable = require(<span class="string">"./Remotable"</span>)</pre></div></div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">&#182;</a> </div> <h2 id="angoose-model">angoose.MODEL</h2> <p>Model is one of two main artifacts in Angoose. Model classes define the data schema as well as CRUD operations and other related functions. </p> <p>Angoose Model is built on top of Mongoose model and adds a few capabilities to allow the remote invocation. To create a Model class, simply define a regular Mongoose model schema and export the Mongoose model class like below: </p> <pre><code> var mongoose = require(&#39;mongoose&#39;); var SampleSchema = mongoose.Schema({ email: {type: String, required: true}, firstname: {type: String, required:true }, lastname: {type: String, required:true }, }) module.exports = mongoose.model(&#39;SampleUser&#39;, SampleSchema);</code></pre> <p>Requirements for creating models:</p> <ul> <li>Model/schema file must be located under one of the <code>modelDir</code> directories.</li> <li>Each file defines one model</li> <li><code>module.exports</code> must be set to the return value of <code>mongoose.model(&#39;name&#39;, schema)</code> call.</li> </ul> </div> <div class="content"><div class='highlight'><pre><span class="keyword">var</span> Model = Remotable.extend({}, {baseClass: <span class="string">'Model'</span>}); Model.getSchema = <span class="function"><span class="keyword">function</span><span class="params">()</span>{</span> <span class="keyword">return</span> <span class="keyword">this</span>.schema; }</pre></div></div> </li> <li id="section-3"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-3">&#182;</a> </div> <h3 id="api-references">API References</h3> <p><strong> getData(doc, path) </strong></p> <p>This static method allow you to get the data by path, i.e., </p> <pre><code> var userObj = SampleUser.findOne(); /** psuedo code */ SampleUser.getData(userObj, &#39;address.city&#39;); </code></pre> </div> <div class="content"><div class='highlight'><pre>Model.getData = getData;</pre></div></div> </li> <li id="section-4"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-4">&#182;</a> </div> <p><em>* setData(doc, path, value) </em>/</p> <p>This static method allow you to set the data by path, i.e., </p> <pre><code> var userObj = SampleUser.findOne(); /** psuedo code */ SampleUser.setData(userObj, &#39;address.city&#39;, &#39;San Francisco&#39;); </code></pre> </div> <div class="content"><div class='highlight'><pre>Model.setData = setData; module.exports = Model; <span class="function"><span class="keyword">function</span> <span class="title">getData</span><span class="params">(doc, path)</span>{</span> <span class="keyword">if</span>(!path || !doc) <span class="keyword">return</span> <span class="literal">undefined</span>; <span class="keyword">var</span> pieces = path.split(<span class="string">'.'</span>); <span class="keyword">var</span> obj = doc; <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>, l = pieces.length; i &lt; l; i++) { obj = <span class="literal">undefined</span> === obj || <span class="literal">null</span> === obj ? <span class="literal">undefined</span> : obj[pieces[i]]; } <span class="keyword">return</span> obj; } <span class="function"><span class="keyword">function</span> <span class="title">setData</span><span class="params">(doc, path, val)</span>{</span> <span class="keyword">if</span>(!path || !doc ) <span class="keyword">return</span>; <span class="keyword">var</span> pieces = path.split(<span class="string">'.'</span>); <span class="keyword">var</span> obj = doc; <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>, len = pieces.length; i &lt; len; i++) { <span class="keyword">if</span>(i+<span class="number">1</span> == len ) <span class="comment">// last one</span> { obj[ pieces[i]] = val; <span class="keyword">return</span>; } obj[pieces[i]] = obj[pieces[i]] || {}; obj = obj[pieces[i]] || {}; } }</pre></div></div> </li> </ul> </div> </body> </html>