dormouse
Version:
Javascript API for Dormouse
130 lines (118 loc) • 18.3 kB
HTML
<html> <head> <title>connection.coffee</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="assembler.html"> assembler.coffee </a> <a class="source" href="connection.html"> connection.coffee </a> <a class="source" href="libutils.html"> libutils.coffee </a> <a class="source" href="mixin.html"> mixin.coffee </a> <a class="source" href="projects.html"> projects.coffee </a> <a class="source" href="query.html"> query.coffee </a> <a class="source" href="tasks.html"> tasks.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> connection.coffee </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="nv">path = </span><span class="nx">require</span> <span class="s1">'path'</span>
<span class="nv">_ = </span><span class="nx">require</span> <span class="s1">'underscore'</span>
<span class="nv">http = </span><span class="nx">require</span> <span class="s1">'http-browserify'</span>
<span class="nv">libutils = </span><span class="nx">require</span> <span class="s1">'./libutils'</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <h3>Connection for us all</h3>
<p>Used as a base class that provides simple <code>.get()</code> and <code>.post()</code> access
to the relevant http methods</p>
<p>Inspiration from Ruby's <code>httparty</code></p> </td> <td class="code"> <div class="highlight"><pre><span class="k">class</span> <span class="nx">Connection</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Assumption that it is getting JSON
@param options serialized in GET params</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@get: </span><span class="nf">(get_path, options, callback) -></span>
<span class="k">if</span> <span class="k">typeof</span> <span class="nx">options</span> <span class="o">is</span> <span class="s1">'function'</span>
<span class="nv">callback = </span><span class="nx">options</span>
<span class="nv">options = </span><span class="p">{}</span>
<span class="nv">get_path = </span><span class="nx">libutils</span><span class="p">.</span><span class="nx">formatUrl</span>
<span class="nv">path: </span><span class="nx">get_path</span>
<span class="nv">query: </span><span class="nx">appendAPIKey</span> <span class="nx">options</span>
<span class="nv">req = </span><span class="nx">http</span><span class="p">.</span><span class="nx">request</span>
<span class="nv">method: </span><span class="s1">'GET'</span>
<span class="nv">host: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">host</span><span class="p">()</span>
<span class="nv">port: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">port</span><span class="p">()</span>
<span class="nv">path: </span><span class="nx">get_path</span>
<span class="p">,</span> <span class="nf">(res) -></span>
<span class="nx">handleResponse</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">callback</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">end</span><span class="p">()</span> <span class="c1"># sends the request</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>@param options appended to URL
@param body dumped in POST body</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@post: </span><span class="nf">(post_path, options, body, callback) -></span>
<span class="nv">post_path = </span><span class="nx">libutils</span><span class="p">.</span><span class="nx">formatUrl</span>
<span class="nv">path: </span><span class="nx">post_path</span>
<span class="nv">query: </span><span class="nx">appendAPIKey</span> <span class="nx">options</span>
<span class="nv">raw_body = </span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span> <span class="nx">body</span>
<span class="nv">raw_length = </span><span class="k">if</span> <span class="nx">Buffer</span><span class="o">?</span> <span class="k">then</span> <span class="nx">Buffer</span><span class="p">.</span><span class="nx">byteLength</span><span class="p">(</span><span class="nx">raw_body</span><span class="p">)</span> <span class="k">else</span> <span class="nx">raw_body</span><span class="p">.</span><span class="nx">length</span>
<span class="nv">req = </span><span class="nx">http</span><span class="p">.</span><span class="nx">request</span>
<span class="nv">method: </span><span class="s1">'POST'</span>
<span class="nv">host: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">host</span><span class="p">()</span>
<span class="nv">port: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">port</span><span class="p">()</span>
<span class="nv">path: </span><span class="nx">post_path</span>
<span class="nv">headers:</span>
<span class="s1">'Content-Type'</span><span class="o">:</span> <span class="s1">'application/json'</span>
<span class="s1">'Content-Length'</span><span class="o">:</span> <span class="nx">raw_length</span>
<span class="p">,</span> <span class="nf">(res) -></span>
<span class="nx">handleResponse</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">callback</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">end</span> <span class="nx">raw_body</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>@param options appended to URL
@param body dumped in body</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@put: </span><span class="nf">(put_path, options, body, callback) -></span>
<span class="nv">put_path = </span><span class="nx">libutils</span><span class="p">.</span><span class="nx">formatUrl</span>
<span class="nv">path: </span><span class="nx">put_path</span>
<span class="nv">query: </span><span class="nx">appendAPIKey</span> <span class="nx">options</span>
<span class="nv">raw_body = </span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span> <span class="nx">body</span>
<span class="nv">raw_length = </span><span class="k">if</span> <span class="nx">Buffer</span><span class="o">?</span> <span class="k">then</span> <span class="nx">Buffer</span><span class="p">.</span><span class="nx">byteLength</span><span class="p">(</span><span class="nx">raw_body</span><span class="p">)</span> <span class="k">else</span> <span class="nx">raw_body</span><span class="p">.</span><span class="nx">length</span>
<span class="nv">req = </span><span class="nx">http</span><span class="p">.</span><span class="nx">request</span>
<span class="nv">method: </span><span class="s1">'PUT'</span>
<span class="nv">host: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">host</span><span class="p">()</span>
<span class="nv">port: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">port</span><span class="p">()</span>
<span class="nv">path: </span><span class="nx">put_path</span>
<span class="nv">headers:</span>
<span class="s1">'Content-Type'</span><span class="o">:</span> <span class="s1">'application/json'</span>
<span class="s1">'Content-Length'</span><span class="o">:</span> <span class="nx">raw_length</span>
<span class="p">,</span> <span class="nf">(res) -></span>
<span class="nx">handleResponse</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">callback</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">end</span> <span class="nx">raw_body</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>@param options is optional</p> </td> <td class="code"> <div class="highlight"><pre> <span class="vi">@delete: </span><span class="nf">(delete_path, options, callback) -></span>
<span class="nv">delete_path = </span><span class="nx">libutils</span><span class="p">.</span><span class="nx">formatUrl</span>
<span class="nv">path: </span><span class="nx">delete_path</span>
<span class="nv">query: </span><span class="nx">appendAPIKey</span> <span class="nx">options</span>
<span class="nv">req = </span><span class="nx">http</span><span class="p">.</span><span class="nx">request</span>
<span class="nv">method: </span><span class="s1">'DELETE'</span>
<span class="nv">host: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">host</span><span class="p">()</span>
<span class="nv">port: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">port</span><span class="p">()</span>
<span class="nv">path: </span><span class="nx">delete_path</span>
<span class="p">,</span> <span class="nf">(res) -></span>
<span class="nx">handleResponse</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">callback</span>
<span class="nx">req</span><span class="p">.</span><span class="nx">end</span><span class="p">()</span>
<span class="nv">host = </span><span class="s1">'dormou.se'</span>
<span class="nv">port = </span><span class="mi">80</span>
<span class="vi">@server: </span><span class="nf">(setter) -></span>
<span class="k">if</span> <span class="nx">setter</span>
<span class="nv">matched = </span><span class="nx">setter</span><span class="p">.</span><span class="nx">match</span> <span class="sr">/^((https?):\/\/)?([A-Za-z0-9\.]+)(:(\d+))?\/?$/</span>
<span class="k">if</span> <span class="nx">matched</span>
<span class="nv">host = </span><span class="nx">matched</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">||</span> <span class="s1">'dormou.se'</span>
<span class="nv">port = </span><span class="nx">matched</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">||</span> <span class="mi">80</span>
<span class="k">else</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">'Improperly formatted url passed to Dormouse.server(...)'</span>
<span class="s2">"http://#{host}:#{port}/"</span>
<span class="vi">@host: </span><span class="nf">(setter) -></span>
<span class="k">if</span> <span class="nx">setter</span>
<span class="nv">host = </span><span class="nx">setter</span>
<span class="nx">host</span>
<span class="vi">@port: </span><span class="nf">(setter) -></span>
<span class="k">if</span> <span class="nx">setter</span>
<span class="nv">port = </span><span class="nx">setter</span>
<span class="nx">port</span>
<span class="nv">api_key = </span><span class="s1">''</span>
<span class="vi">@api_key: </span><span class="nf">(setter) -></span>
<span class="k">if</span> <span class="nx">setter</span>
<span class="nv">api_key = </span><span class="nx">setter</span>
<span class="nx">unless</span> <span class="nx">api_key</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">'You cannot make API calls without an api_key. Set it using Dormouse.api_key(...)'</span>
<span class="nx">api_key</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <h3>Private methods</h3>
<p>No one can access these from the outside</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">appendAPIKey = </span><span class="nf">(options) -></span>
<span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">options</span><span class="p">,</span> <span class="nv">api_key: </span><span class="nx">Connection</span><span class="p">.</span><span class="nx">api_key</span><span class="p">()</span>
<span class="nv">handleResponse = </span><span class="nf">(res, callback) -></span>
<span class="nv">data = </span><span class="s1">''</span>
<span class="nx">res</span><span class="p">.</span><span class="kc">on</span> <span class="s1">'data'</span><span class="p">,</span> <span class="nf">(buf) -></span>
<span class="nx">data</span> <span class="o">+=</span> <span class="nx">buf</span>
<span class="nx">res</span><span class="p">.</span><span class="kc">on</span> <span class="s1">'end'</span><span class="p">,</span> <span class="nf">() -></span>
<span class="nx">parseResponse</span> <span class="nx">res</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span> <span class="nx">callback</span> <span class="k">if</span> <span class="nx">callback</span>
<span class="nx">res</span><span class="p">.</span><span class="kc">on</span> <span class="s1">'error'</span><span class="p">,</span> <span class="nf">(err) -></span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s1">'HTTP error'</span><span class="p">,</span> <span class="nx">res</span><span class="p">.</span><span class="nx">statusCode</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span> <span class="nx">err</span>
<span class="nv">parseResponse = </span><span class="nf">(res, raw_response, callback) -></span>
<span class="nv">raw_response = </span><span class="nx">raw_response</span><span class="p">.</span><span class="nx">trim</span><span class="p">()</span>
<span class="k">if</span> <span class="nx">res</span><span class="p">.</span><span class="nx">statusCode</span> <span class="o">is</span> <span class="mi">200</span> <span class="c1"># STATUS: OK</span>
<span class="k">if</span> <span class="nx">raw_response</span>
<span class="k">try</span>
<span class="nx">callback</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span> <span class="nx">raw_response</span>
<span class="k">catch</span> <span class="nx">err</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">error</span> <span class="s1">'Response JSON parsing error'</span><span class="p">,</span> <span class="nx">err</span> <span class="k">if</span> <span class="nx">console</span>
<span class="k">else</span>
<span class="nx">callback</span> <span class="kc">null</span><span class="p">,</span> <span class="nv">success: </span><span class="kc">true</span>
<span class="k">else</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">info</span> <span class="s1">'Request failed'</span><span class="p">,</span> <span class="nx">raw_response</span> <span class="k">if</span> <span class="nx">console</span>
<span class="nx">callback</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="nx">raw_response</span><span class="p">),</span> <span class="kc">null</span>
<span class="nv">exports.Connection = </span><span class="nx">Connection</span>
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>