nodulator
Version:
Complete NodeJS Framework for Restfull APIs
487 lines (333 loc) • 16.5 kB
HTML
<html>
<head>
<title>Wrappers.ls</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_wrapper">
<div id="jump_page">
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="ClientDB.html">
ClientDB.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Bus.html">
Bus.ls
</a>
<a class="source" href="Cache.html">
Cache.ls
</a>
<a class="source" href="ChangeWatcher.html">
ChangeWatcher.ls
</a>
<a class="source" href="Debug.html">
Debug.ls
</a>
<a class="source" href="Wrappers.html">
Wrappers.ls
</a>
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Schema.html">
Schema.ls
</a>
<a class="source" href="NModule.html">
NModule.ls
</a>
<a class="source" href="AccountResource.html">
AccountResource.ls
</a>
<a class="source" href="User.html">
User.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Nodulator-Angular.html">
Nodulator-Angular.ls
</a>
<a class="source" href="TaskDirective.html">
TaskDirective.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="TaskService.html">
TaskService.ls
</a>
<a class="source" href="main.html">
main.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Task.html">
Task.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="DOM.html">
DOM.ls
</a>
<a class="source" href="View.html">
View.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="Mongo.html">
Mongo.ls
</a>
<a class="source" href="Mysql.html">
Mysql.ls
</a>
<a class="source" href="SqlMem.html">
SqlMem.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Request.html">
Request.ls
</a>
<a class="source" href="Route.html">
Route.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
</div>
</div>
</li>
</ul>
<ul class="sections">
<li id="title">
<div class="annotation">
<h1>Wrappers.ls</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>ChangeWatcher = <span class="hljs-built_in">require</span> <span class="hljs-string">'./ChangeWatcher'</span>
Q = <span class="hljs-built_in">require</span> <span class="hljs-string">'q'</span>
async = <span class="hljs-built_in">require</span> <span class="hljs-string">'async'</span>
polyparams = <span class="hljs-built_in">require</span> \polyparams
watchers = []
cache = <span class="hljs-literal">null</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Wrappers</span></span>
@_FindDone = <span class="hljs-function">-></span> it |> find-index <span class="hljs-keyword">is</span>-type \Function
@_WrapPromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -></span>
d = <span class="hljs-literal">null</span>
_FindDone = @_FindDone
resource = @
(...args) ->
idx = _FindDone args
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> idx?
d = Q.defer!
args.push (err, data) ->
<span class="hljs-keyword">return</span> d.reject err <span class="hljs-keyword">if</span> err?
d.resolve data
ret = cb.apply @, args
<span class="hljs-keyword">if</span> d? <span class="hljs-keyword">and</span> @_PrepareResource? <span class="hljs-keyword">and</span> @Init?
@Init!
<span class="hljs-keyword">new</span> @resource d</pre></div></div>
</li>
<li id="section-2">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-2">¶</a>
</div>
<p>else if @_promise? and d?
@_promise.then d.promise
@</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> d? <span class="hljs-comment">#and @_promise?</span>
@_promise = d.promise
@
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> d? <span class="hljs-keyword">and</span> ret?.state? <span class="hljs-keyword">and</span> @_type?
@_promise = ret
@
<span class="hljs-keyword">else</span>
ret
@_WrapResolvePromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -></span>
findDone = @_FindDone
(...args) ->
doneIdx = findDone args
oldDone = args[doneIdx] <span class="hljs-keyword">if</span> doneIdx?
<span class="hljs-keyword">if</span> @_promise? <span class="hljs-keyword">and</span> doneIdx?
@
.Then ->
it._promise = <span class="hljs-literal">null</span>
cb.apply it, args
.Catch oldDone
<span class="hljs-keyword">else</span>
cb.apply @, args
@_WrapResolveArgPromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -></span>
findDone = @_FindDone
(...args) ->
doneIdx = findDone args
oldDone = args[doneIdx]
async.map args, <span class="hljs-function"><span class="hljs-params">(arg, done)</span> -></span>
<span class="hljs-keyword">if</span> arg?._promise?
arg
.Then -> done <span class="hljs-literal">null</span> it
.Catch done
<span class="hljs-keyword">else</span>
done <span class="hljs-literal">null</span> arg
, (err, results) ~>
<span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> oldDone? <span class="hljs-keyword">and</span> err?
cb.apply @, results
@
@_WrapWatchArgs = <span class="hljs-function"><span class="hljs-params">(cb)</span> -></span>
resource = @
(...args) ->
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @N.Watch.active
<span class="hljs-keyword">return</span> cb.apply @, args
watcher = ChangeWatcher.Watch cb, args, @, @N
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> watcher
cb.apply @, args
<span class="hljs-keyword">else</span>
resource._watchers.push watcher
watcher
@_WrapWatch = <span class="hljs-function"><span class="hljs-params">(cb)</span> -></span>
(...args) ->
first = <span class="hljs-literal">true</span>
@N.Watch ~>
<span class="hljs-keyword">if</span> first
first := <span class="hljs-literal">false</span>
cb.apply @, args
@_WrapDebugError = <span class="hljs-function"><span class="hljs-params">(debug, cb)</span> -></span>
resource = @
(...args) ->
doneIdx = resource._FindDone args
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> doneIdx?
<span class="hljs-keyword">return</span> cb.apply @, args
oldDone = args[doneIdx]
args[doneIdx] = <span class="hljs-function"><span class="hljs-params">(err, data)</span> -></span>
<span class="hljs-keyword">if</span> err?
debug JSON.stringify err</pre></div></div>
</li>
<li id="section-3">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-3">¶</a>
</div>
<p>Debug.UnDepth!</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">return</span> oldDone err, data
oldDone err, data
cb.apply @, args
@_WrapParams = <span class="hljs-function"><span class="hljs-params">(...types)</span> -></span>
(...args) ->
_cb = polyparams.apply @, types
_cb.apply @, args
@_WrapCache = <span class="hljs-function"><span class="hljs-params">(name, cb)</span> -></span>
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> cache?
cache = <span class="hljs-built_in">require</span>(\./Cache)(@N.config)
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @N.config?.cache
<span class="hljs-keyword">return</span> (...args) ->
cb.apply @, args
fullName = name
(...args) ->
Resource = @
name = @name + fullName
doneIdx = @_FindDone args
_oldDone = args[doneIdx]
first = <span class="hljs-literal">true</span>
<span class="hljs-function"> <span class="hljs-title">oldDone</span> = <span class="hljs-params">(err, res)</span> -></span>
<span class="hljs-keyword">if</span> first
first := <span class="hljs-literal">false</span>
_oldDone err, res
<span class="hljs-keyword">else</span>
<span class="hljs-number">0</span>
<span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array args[<span class="hljs-number">0</span>] <span class="hljs-keyword">or</span> <span class="hljs-keyword">is</span>-type \Object args[<span class="hljs-number">0</span>]
name += JSON.stringify args[<span class="hljs-number">0</span>]
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Number args[<span class="hljs-number">0</span>]
name += args[<span class="hljs-number">0</span>]
<span class="hljs-keyword">else</span>
name += <span class="hljs-string">'{}'</span>
cache.Get name, (err, cached) ~>
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> err? <span class="hljs-keyword">and</span> cached?
cached = JSON.parse cached
<span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array cached
cached = cached |> map -> Resource.Hydrate it
<span class="hljs-keyword">else</span>
cached = Resource.Hydrate cached
<span class="hljs-keyword">return</span> oldDone <span class="hljs-literal">null</span>, cached
<span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> err?
args[doneIdx] = (err, res) ~>
<span class="hljs-keyword">if</span> err?
<span class="hljs-keyword">return</span> oldDone err
<span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array res
toStore = res
<span class="hljs-keyword">else</span>
toStore = obj-to-pairs res |> filter (<span class="hljs-number">.0</span><span class="hljs-number">.0</span> <span class="hljs-keyword">isnt</span> \_) |> pairs-to-obj
cache.Set name, JSON.stringify(toStore), (err, status) ~>
<span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> err?
oldDone <span class="hljs-literal">null</span>, res
watchers.push @N.Watch ~>
cb.apply @, args
@Reset = <span class="hljs-function">-></span>
watchers |> each (.Stop!)
watchers := []
<span class="hljs-built_in">module</span>.exports = Wrappers</pre></div></div>
</li>
<li id="section-4">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-4">¶</a>
</div>
<p>@N.Wrappers = Wrappers</p>
</div>
</li>
</ul>
</div>
</body>
</html>