UNPKG

dormouse

Version:

Javascript API for Dormouse

130 lines (118 loc) 18.3 kB
<!DOCTYPE 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 &hellip; <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">&#182;</a> </div> </td> <td class="code"> <div class="highlight"><pre><span class="nv">path = </span><span class="nx">require</span> <span class="s1">&#39;path&#39;</span> <span class="nv">_ = </span><span class="nx">require</span> <span class="s1">&#39;underscore&#39;</span> <span class="nv">http = </span><span class="nx">require</span> <span class="s1">&#39;http-browserify&#39;</span> <span class="nv">libutils = </span><span class="nx">require</span> <span class="s1">&#39;./libutils&#39;</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">&#182;</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">&#182;</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) -&gt;</span> <span class="k">if</span> <span class="k">typeof</span> <span class="nx">options</span> <span class="o">is</span> <span class="s1">&#39;function&#39;</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">&#39;GET&#39;</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) -&gt;</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">&#182;</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) -&gt;</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">&#39;POST&#39;</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">&#39;Content-Type&#39;</span><span class="o">:</span> <span class="s1">&#39;application/json&#39;</span> <span class="s1">&#39;Content-Length&#39;</span><span class="o">:</span> <span class="nx">raw_length</span> <span class="p">,</span> <span class="nf">(res) -&gt;</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">&#182;</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) -&gt;</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">&#39;PUT&#39;</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">&#39;Content-Type&#39;</span><span class="o">:</span> <span class="s1">&#39;application/json&#39;</span> <span class="s1">&#39;Content-Length&#39;</span><span class="o">:</span> <span class="nx">raw_length</span> <span class="p">,</span> <span class="nf">(res) -&gt;</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">&#182;</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) -&gt;</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">&#39;DELETE&#39;</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) -&gt;</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">&#39;dormou.se&#39;</span> <span class="nv">port = </span><span class="mi">80</span> <span class="vi">@server: </span><span class="nf">(setter) -&gt;</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">&#39;dormou.se&#39;</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">&#39;Improperly formatted url passed to Dormouse.server(...)&#39;</span> <span class="s2">&quot;http://#{host}:#{port}/&quot;</span> <span class="vi">@host: </span><span class="nf">(setter) -&gt;</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) -&gt;</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">&#39;&#39;</span> <span class="vi">@api_key: </span><span class="nf">(setter) -&gt;</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">&#39;You cannot make API calls without an api_key. Set it using Dormouse.api_key(...)&#39;</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">&#182;</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) -&gt;</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) -&gt;</span> <span class="nv">data = </span><span class="s1">&#39;&#39;</span> <span class="nx">res</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="nf">(buf) -&gt;</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">&#39;end&#39;</span><span class="p">,</span> <span class="nf">() -&gt;</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">&#39;error&#39;</span><span class="p">,</span> <span class="nf">(err) -&gt;</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s1">&#39;HTTP error&#39;</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) -&gt;</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">&#39;Response JSON parsing error&#39;</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">&#39;Request failed&#39;</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>