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
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 …</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">¶</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">¶</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('mongoose');
var SampleSchema = mongoose.Schema({
email: {type: String, required: true},
firstname: {type: String, required:true },
lastname: {type: String, required:true },
})
module.exports = mongoose.model('SampleUser', 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('name', 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">¶</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, 'address.city'); </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">¶</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, 'address.city', 'San Francisco'); </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 < 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 < 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>