Skip to content

Commit

Permalink
fixed where array bug, added docs for conditions
Browse files Browse the repository at this point in the history
  • Loading branch information
kieran committed Jun 25, 2011
1 parent 3ab715b commit 38958d8
Show file tree
Hide file tree
Showing 7 changed files with 164 additions and 71 deletions.
43 changes: 37 additions & 6 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Barista is a simple URL router for nodejs.
Barista is a simple URL router for NodeJS.

Getting Barista
===============
Expand All @@ -18,23 +18,54 @@ var Router = require('barista').Router;
var router = new Router;
```

Adding routes
-------------

### Adding routes
### A simple example

```javascript
// a basic example
router.match( '/products', 'GET' )
.to( 'products.index' )
```

### Rails-esque variable names

// Rails-style variables
```javascript
router.match( '/products/:id', 'GET' )
.to( 'products.show' )

// optional parts
router.match( '/profiles/:username', 'GET' )
.to( 'users.show' )

router.match( '/products/:id(.:format)', 'GET' )
.to( 'products.show' )
```

// convenience methods
### Match conditions

```javascript
router.match( '/:beverage/near/:zipcode', 'GET' )
.to( 'beverage.byZipCode' )
.where({
// an array of options
beverage: [ 'coffee', 'tea', 'beer', 'warm_sake' ],
// a regex pattern
zipcode: /^\d{5}(-\d{4})?$/
})

router.match( '/:beverage/near/:location', 'GET' )
.to( 'beverage.byLocation' )
.where({
// could be a postal code
// OR a zip code
// OR the word 'me' (geolocation FTW)
location: [ /^\d{5}(-\d{4})?$/, /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/, 'me' ]
})
```

### Convenience methods

```javascript
router.get( '/products/:id(.:format)' )
.to( 'products.show' )

Expand Down
2 changes: 1 addition & 1 deletion docs/helpers.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<span class="kd">var</span> <span class="nx">args</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">)</span>

<span class="k">for</span> <span class="p">(</span> <span class="nx">i</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">args</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">)</span> <span class="p">{</span>

<span class="k">for</span> <span class="p">(</span> <span class="kd">var</span> <span class="nx">prop</span> <span class="k">in</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">kindof</span><span class="p">(</span><span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">prop</span><span class="p">])</span> <span class="o">==</span> <span class="s1">&#39;object&#39;</span> <span class="p">)</span> <span class="p">{</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>deep copy</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">args</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="nx">prop</span><span class="p">]</span> <span class="o">=</span> <span class="nx">mixin</span><span class="p">(</span> <span class="p">{},</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">prop</span><span class="p">]</span> <span class="p">)</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</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>shallow copy</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">args</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="nx">prop</span><span class="p">]</span> <span class="o">=</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">prop</span><span class="p">]</span>
Expand Down
17 changes: 12 additions & 5 deletions docs/key.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,14 @@
if it matches the key conditions</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">this</span><span class="p">.</span><span class="nx">url</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span> <span class="nx">string</span> <span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">string</span><span class="p">))</span> <span class="p">{</span>
<span class="cm">/*</span>
<span class="cm"> -- no longer needed </span>
<span class="cm"> -- no longer needed</span>
<span class="cm"> snake_caseify the controller, if there is one</span>
<span class="cm"> if (self.name == &#39;controller&#39;) return snakeize(string)</span>
<span class="cm"> */</span>
<span class="k">return</span> <span class="nx">string</span>
<span class="p">}</span>
<span class="k">return</span> <span class="kc">false</span> <span class="c1">// doesn&#39;t match, let it go</span>
<span class="p">};</span>
</pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <h2>key.where( conditions )</h2>
<span class="p">};</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">&#182;</a> </div> <h2>key.where( conditions )</h2>

<p>adds conditions that the key must match</p>

Expand All @@ -51,8 +50,16 @@
<span class="kd">var</span> <span class="nx">condition</span> <span class="o">=</span> <span class="nx">conditions</span><span class="p">[</span><span class="nx">self</span><span class="p">.</span><span class="nx">name</span><span class="p">]</span>

<span class="k">if</span> <span class="p">(</span><span class="nx">condition</span> <span class="k">instanceof</span> <span class="nb">RegExp</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">regex</span> <span class="o">=</span> <span class="nx">condition</span> <span class="c1">// e.g. /\d+/</span>

<span class="k">if</span> <span class="p">(</span><span class="nx">condition</span> <span class="k">instanceof</span> <span class="nb">String</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">regex</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">condition</span><span class="p">)</span> <span class="c1">// e.g. &quot;/\d+/&quot;</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <p>an array of allowed values, e.g. ['stop','play','pause']</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">condition</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">regex</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="o">+</span><span class="nx">condition</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;|&#39;</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="p">(</span><span class="nx">condition</span> <span class="k">instanceof</span> <span class="nb">String</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">regex</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">condition</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^\//</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">).</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\/[gis]?$/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">))</span> <span class="c1">// e.g. &quot;\d+&quot;</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">&#182;</a> </div> <p>an array of allowed values, e.g. ['stop','play','pause']</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="nx">condition</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">condition</span> <span class="o">=</span> <span class="nx">condition</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">cond</span><span class="p">){</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">cond</span> <span class="k">instanceof</span> <span class="nb">RegExp</span><span class="p">)</span> <span class="k">return</span> <span class="nx">cond</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span>
<span class="k">return</span> <span class="nx">cond</span>
<span class="p">}).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">cond</span><span class="p">){</span>
<span class="k">return</span> <span class="nx">cond</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^\//</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">).</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\/[gis]?$/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="p">})</span>
<span class="nx">self</span><span class="p">.</span><span class="nx">regex</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">condition</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;|&#39;</span><span class="p">))</span>
<span class="p">}</span>

<span class="k">return</span> <span class="nx">self</span>
<span class="p">}</span>
Expand Down
Loading

0 comments on commit 38958d8

Please sign in to comment.