{"_id":"beanpoll","_rev":"106967","name":"beanpoll","description":"Routing with syntactic sugar","dist-tags":{"latest":"0.2.19"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"time":{"modified":"2021-06-03T10:38:54.000Z","created":"2011-12-29T04:36:12.744Z","0.2.19":"2013-05-31T23:14:02.414Z","0.2.18":"2013-04-01T05:38:03.543Z","0.2.17":"2012-08-23T15:35:36.031Z","0.2.16":"2012-04-10T04:21:11.633Z","0.2.15":"2012-03-15T05:29:59.630Z","0.2.14":"2012-03-01T05:14:56.819Z","0.2.13":"2012-02-24T20:05:22.331Z","0.2.12":"2012-02-15T00:30:48.248Z","0.2.11":"2012-02-09T21:07:02.518Z","0.2.10":"2012-02-07T21:16:10.028Z","0.2.9":"2012-02-04T20:36:46.220Z","0.2.8":"2012-02-03T21:27:21.476Z","0.2.7":"2012-02-03T19:32:16.460Z","0.2.6":"2012-02-02T19:21:43.593Z","0.2.4":"2012-02-01T19:47:20.669Z","0.2.3":"2012-01-29T05:25:15.877Z","0.1.17":"2012-01-18T06:52:53.947Z","0.1.16":"2012-01-18T06:43:02.021Z","0.2.1":"2011-12-30T21:54:44.280Z","0.2.0":"2011-12-29T04:36:12.744Z"},"users":{},"author":{"name":"Craig Condon"},"repository":{"type":"git","url":"http://github.com/crcn/beanpoll.js.git"},"versions":{"0.2.19":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.19","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"http://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0","comerr":"0.0.x"},"devDependencies":{"vows":"<0.7.0","outcome":"<0.2.0","disposable":"0.0.1","ebnf-diagram":"0.1.x"},"main":"./lib/index.js","readmeFilename":"README.md","_id":"beanpoll@0.2.19","dist":{"shasum":"fe7640b38903d91b5cedf216ec7e301042249bd8","size":84509,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.19.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.19.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1370042042414,"_cnpm_publish_time":1370042042414,"_hasShrinkwrap":false},"0.2.18":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.18","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"http://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0","ebnf-diagram":"0.1.x","haba":"0.0.x","comerr":"0.0.x"},"devDependencies":{"vows":"<0.7.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","readmeFilename":"README.md","_id":"beanpoll@0.2.18","dist":{"shasum":"f7174605e687b13af8054b38494fa5809f6304d3","size":124011,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.18.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.18.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1364794683543,"_cnpm_publish_time":1364794683543,"_hasShrinkwrap":false},"0.2.17":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.17","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"http://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_id":"beanpoll@0.2.17","dist":{"shasum":"1316946ab79612083ccb2c0ac8ed1a2b5b277143","size":123143,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.17.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.17.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1345736136031,"_cnpm_publish_time":1345736136031,"_hasShrinkwrap":false},"0.2.16":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.16","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","mesh":{"load":"./make.json"},"_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.16","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"e3302d53a871fa71136cbcc56369e815d6e3043a","size":122880,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.16.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.16.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1334031671633,"_cnpm_publish_time":1334031671633,"_hasShrinkwrap":false},"0.2.15":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.15","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.15","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.12","_defaultsLoaded":true,"dist":{"shasum":"b48ca871df2fd5655288ddfa52cce8b322921190","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.15.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.15.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1331789399630,"_cnpm_publish_time":1331789399630,"_hasShrinkwrap":false},"0.2.14":{"name":"beanpoll","description":"Routing with syntactic sugar","version":"0.2.14","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.14","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"1f3ddc059efe64d42dea43aad53c6406c1d21641","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.14.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.14.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1330578896819,"_cnpm_publish_time":1330578896819,"_hasShrinkwrap":false},"0.2.13":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.13","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpoll.js.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.13","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"57ca1f76030e39ae95ff7d404aa1606dc9a80496","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.13.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.13.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1330113922331,"_cnpm_publish_time":1330113922331,"_hasShrinkwrap":false},"0.2.12":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.12","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.12","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.10","_defaultsLoaded":true,"dist":{"shasum":"db3e7b1e7adce741c5b75e8562077755e6a371db","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.12.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.12.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1329265848248,"_cnpm_publish_time":1329265848248,"_hasShrinkwrap":false},"0.2.11":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.11","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.11","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"b76720ad997e0d2d7d6c2e271084ef57c95e821c","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.11.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328821622518,"_cnpm_publish_time":1328821622518,"_hasShrinkwrap":false},"0.2.10":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.10","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"disposable":"*","crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.10","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"56ef2130ac4ccf550891f97e84de9beac0058534","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.10.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328649370028,"_cnpm_publish_time":1328649370028,"_hasShrinkwrap":false},"0.2.9":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.9","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.9","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"a4d68b19cd9a7928b99e3996c5bdab773d5a666a","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.9.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328387806220,"_cnpm_publish_time":1328387806220,"_hasShrinkwrap":false},"0.2.8":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.8","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.8","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"c6eb6e023726e6a0085027c97bffbe98714abae1","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.8.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328304441476,"_cnpm_publish_time":1328304441476,"_hasShrinkwrap":false},"0.2.7":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.7","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.7","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"a281ebd76c15d6251e4b02b97873cfc0caeaa237","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.7.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328297536460,"_cnpm_publish_time":1328297536460,"_hasShrinkwrap":false},"0.2.6":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.6","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.6","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"be9b8898b90a8803f1dfa81df0d8f512ff00130d","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.6.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328210503593,"_cnpm_publish_time":1328210503593,"_hasShrinkwrap":false},"0.2.4":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.4","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0","outcome":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.4","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"d7abf608a40c2bc9d28f09445e803c6667f47867","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.4.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1328125640669,"_cnpm_publish_time":1328125640669,"_hasShrinkwrap":false},"0.2.3":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.3","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","underscore":"*","dolce":"<0.2.0"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0","outcome":"<0.2.0","disposable":"0.0.1"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.3","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"9da270fd6efb44616f71347390b29b129e9b0056","size":92160,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.3.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1327814715877,"_cnpm_publish_time":1327814715877,"_hasShrinkwrap":false},"0.1.17":{"name":"beanpoll","description":"Routing on Steroids","version":"0.1.17","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"sk":"*","vine":"*","mime":"*","gumbo":"*","cashew":"*","structr":"*","coffee-script":"*"},"devDependencies":{"ebnf-diagram":"*"},"main":"./lib/node/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.1.17","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"b42e08c9ca6c0e39edf58faca2fd23a46cd50e7c","size":112640,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.1.17.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.1.17.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1326869573947,"_cnpm_publish_time":1326869573947,"_hasShrinkwrap":false},"0.1.16":{"name":"beanpoll","description":"Routing on Steroids","version":"0.1.16","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"sk":"*","vine":"*","mime":"*","gumbo":"*","cashew":"*","structr":"*","coffee-script":"*"},"devDependencies":{"ebnf-diagram":"*"},"main":"./lib/node/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.1.16","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"b5d7c8710e5167c86fe22651018a7f9a372d4418","size":112640,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.1.16.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.1.16.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1326868982021,"_cnpm_publish_time":1326868982021,"_hasShrinkwrap":false},"0.2.1":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.1","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","outcome":"<0.2.0","underscore":"*"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.1","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"2fd64be71591202d24b424e8d43aea4ec5317d7c","size":81920,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.1.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1325282084280,"_cnpm_publish_time":1325282084280,"_hasShrinkwrap":false},"0.2.0":{"name":"beanpoll","description":"Routing on Steroids","version":"0.2.0","author":{"name":"Craig Condon"},"repository":{"type":"git","url":"git://github.com/crcn/beanpole.git"},"directories":{"lib":"./lib"},"dependencies":{"crema":"<0.2.0","outcome":"<0.2.0","underscore":"*"},"devDependencies":{"ebnf-diagram":"*","vows":"<0.7.0","haba":"<0.1.0"},"main":"./lib/index.js","_npmUser":{"name":"architectd","email":"craig.j.condon@gmail.com"},"_id":"beanpoll@0.2.0","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"bab8557bce0dba92c88bebdceafeba3ca1e6e589","size":81920,"noattachment":false,"key":"/beanpoll/-/beanpoll-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/beanpoll/download/beanpoll-0.2.0.tgz"},"maintainers":[{"name":"architectd","email":"craig.j.condon@gmail.com"},{"name":"crcn","email":"craig.j.condon@gmail.com"}],"publish_time":1325133372744,"_cnpm_publish_time":1325133372744,"_hasShrinkwrap":false}},"readme":"[![build status](https://secure.travis-ci.org/crcn/beanpoll.js.png)](http://travis-ci.org/crcn/beanpoll.js)\n## Beanpole - Routing framework      \n\n\n### Motivation\n\n- Abstract communication between parts of an application\n\t- keeps code modular\n\t- works in-app, or with other protocols: amqp, http, etc.\n\nThis:\n\n```javascript\n\nrouter.on({\n\t\n\t/**\n\t */\n\n\t'pull auth/user': function(req, res) {\n\t\t//auth here\n\t},\n\n\t/**\n\t */\n\n\t'pull auth/user -> add/photos': function(req, res) {\n\t\t//add photos here\n\t}\n})\n```\n\n\nVersus somethine like this:\n\n```javascript\n\n\nvar addPhotos = function(req, res) {\n\tauthUser(req, res, function() {\n\t\t//do stuff here\n\t});\n}\n\n```\n\n\n\n### Projects using Beanpole\n\n- [celeri](https://github.com/crcn/celeri) - CLI library\n- [bonsai](https://github.com/crcn/bonsai) - application server\n- [leche](https://github.com/crcn/leche) - Framework to build frontend / backend applications with the same code.\n- [daisy](https://github.com/crcn/daisy) - Expose beanpole to: http, websockets, amqp (rabbitmq), etc.    \n- [beandocs](https://github.com/crcn/beandocs) - Generate documentation from your beanpole route comments.\n- [beanprep](https://github.com/crcn/beanprep) - Scans beans in a given directory, and installs their dependencies. \n- [cupboard](https://github.com/crcn/beanprep) - Reverse package manager.       \n\n### Beanpole ports\n\n- [Actionscript](https://github.com/crcn/beanpole.as)  \n- [C++](https://github.com/crcn/beanpoll)     \n\n### Overview          \n\n\n![Alt ebnf diagram](http://i.imgur.com/v1wdO.png)\n                \n\nThe basic route consists of a few parts: the `type` of route, and the `channel`. Here are some examples:\n\n\trouter.on('pull hello/:name', ...);\n\t\nand\n\n\trouter.on('push hello/:name', ...);           \n\t\n\n#### Push Routes:  \n\n- Used to broadcast a message, or change (1 to many).\n- Doesn't expect a response.    \n- Multiple listeners per route.         \n\n#### Pull Routes:\n\n- Used to request data from a particular route (1 to 1).\n- Expects a response.\n- One listener per route. \n- examples:\n\t- request to http-exposed route       \n\t\n#### Collect Routes:\n\n- Used to request data from many listeners (1 to many, similar to pull).\n- Expects a response.\n\n## Error Handling\n\n\n```javascript\n\n\nfunction auth(credits, callback) {\n\t\n\tif(credits.user != 'user' || credits.pass != 'pass') return callback(new Error('invalid credits'));\n\n\tcallback(false, { user: 'user', pass: 'pass' });\n}\n\n\nrouter.on({\n\t\n\t'pull authenticate': function(req, res) {\n\t\t\n\t\t//don't bother handling errors - done by response\n\t\tauth(req.query, res.success(function(user) {\n\t\t\t\n\t\t\tres.end(user);\n\n\t\t}));\n\t}\n})\n\n\n\n//error\nvar req = router.request('authenticate').\nerror(function(err) {\n\tconsole.log(err.stack);\n}).\nsuccess(function(response) {\n\tconsole.log(response);\n}).\nquery({ user: 'user', pass: 'bad pass' }).\npull();\n```\n\n\n## Custom Routes\n\nYou can easily create custom route handlers. Take [celeri](/crcn/celeri) for example:\n\n\n\n```javascript\n\nvar beanpoll = require('beanpoll'),\nstructr = require('structr');\n\n//handles the message, response, and middleware\nvar CmdMessenger = structr({\n\t\n\t_next: function(middleware) {\n\t\t\n\t\tvar self = this;\t\n\n\t\ttry {\n\n\t\t\t//call the command handler, and wrap the LAST parameter as a next function\n\t\t\tmiddleware.listener(Structr.copy(middleware.params, data), function() {\n\t\t\t\treturn self.next();\t\n\t\t\t});\t\t\n\n\t\t} catch(e) {\n\t\t\tself.response.error(e)\n\t\t}\n\n\t}\n\n}, beanpoll.Messenger);\n\n\n//the \"Event Emitter\"\nvar CmdDirector = structr({\n\n\t_newMessenger: function(message, middleware) {\n\t\treturn new CmdMessenger(message, middleware, this);\n\t}\n\n}, beanpoll.Director);\n\n\n\nvar router = beanpoll.router();\n\n\n//use the new plugin\nrouter.use(function() {\n\treturn {\n\t\tname: 'console',\n\t\tdirector: new CmdDirector('celeri', router)\n\t}\n});\n\n//use it:\nrouter.on('console say/hello', function(data, next) {\n\t//do stuff here\n});\n\n````     \n           \nMiddleware can also be specified without using the token: `->`.An example:\n\n\n````javascript\n    \nrouter.on({               \n\t\n\t/**\n\t */\n\t\n\t'pull my/*': function()\n\t{\n\t\t//authorize user\n\t},  \n\t\n\t/**\n\t */\n\t\n\t'pull my/profile': function()\n\t{                 \n\t\t//goes through authorization first \n\t}\n});\n\n````                                                                         \n                                                                                                \nProviding a wildcard `*` tells the router that **anything** after the route must go through it.     \n\n### Managing very long routes\n\nYou may run into a route which looks like this:\n\n```javascript\nrouter.on({\n\t'pull -public -method=POST remove/cache/subscribers -> profile/validate/SAVE_ARTICLE -> groups/:group/subscribers OR groups/:group/subscribers/add': function() {\n\t\n});\n```\n\nTo fix the ugliness, breakup the route and escape any linebreaks:\n\n```javascript\nrouter.on({\n\t'pull \\\n\t-public -method=POST \\\n\tremove/cache/subscribers -> \\\n\t\tprofile/validate/SAVE_ARTICLE -> \\\n\t\t\tgroups/:group/subscribers OR \\\n\t\t\tgroups/:group/subscribers/add': function() {\n\t\t\n\t}\n})\n```\n\nYou can also split it up:\n\n```javascript\nrouter.on({\n\t'pull \\\n\tremove/cache/subscribers -> \\\n\tprofile/validate/SAVE_ARTICLE -> \\\n\t\tvalidate/group/subscribers': function() {\n\t\t\n\t}\n})\n\nrouter.on({\n\t'pull \\\n\t-public -method=POST \\\n\tvalidate/group/subscribers ->\n\t\tgroups/:group/subscribers OR \\\n\t\tgroups/:group/subscribers/add': function() {\n\t\t\n\t}\n})\n```\n\n\n### Methods            \n\n#### router.on(type[,listener])\n\nListens to the given routes\n\n- `type` - string or object. String would contain the route. Object would contain multiple routes / listeners\n- `listener` - function listening to the route given.           \n\n#### router.request(router)\n\nreturns the request builder         \n\n```javascript\n\nrouter.request('signup/user').\nquery({ username: 'blarg' }).\nheaders({ 'Content-Type': 'application/json' }).\n\n//called when the second param is present. \nsuccess(function(response) {\n\t\n}).\n\n//separated error from the response\nerror(function(err) {\n\t\n}).\n\n//called when there's a result, or error\nresponse(err, response) { \n\t\n}).\n\n//type of request: push, pull, collect, your own\npush();\n```                           \n\n#### router.push(route[, query][, headers])\n\n- `type` - the channel broadcast a message to.\n- `data` - the data to push to the given route\n- `options` - options for the given route\n\t- `meta` - tags to use to filter out listeners\n\t\n#### router.pull(route[, query][, headers][, callback])\n\nsame as push, but expects a response\n\n#### router.channels()\n                      \nreturns route expression\n\n#### request.write(chunk)\n             \nInitializes a streamed response. Great for sending files\n\n#### request.end([chunk]) \n                        \nEnds a response \n\n#### request.hasNext()\n                                                     \nReturns TRUE if there's a listener after the current one.\n\n#### request.next()\n\nMoves onto the next route.\n\n\n\n\n\n\n\n\n\n                                                                                                              \n\n","_attachments":{},"readmeFilename":"README.md"}