document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/94\">Rack::Get middleware, for simple Sinatra-like routing<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># Simplest example:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   use Rack::Get, &#39;/ping_monitor&#39; do<\/span>\n<span class=\"c1\">#     &#39;pong&#39;<\/span>\n<span class=\"c1\">#   end<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># Rack::Response object is yielded as second argument to block:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   use Rack::Get, &#39;/json&#39; do |env, response|<\/span>\n<span class=\"c1\">#     response[&#39;Content-Type&#39;] = &#39;application/json&#39;<\/span>\n<span class=\"c1\">#     %({&quot;foo&quot;: &quot;bar&quot;})<\/span>\n<span class=\"c1\">#   end<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># Example with regular expression -- match data object is yielded as third argument to block<\/span>\n<span class=\"c1\"># <\/span>\n<span class=\"c1\">#   use Rack::Get, %r{^/(john|paul|george|ringo)} do |env, response, match|<\/span>\n<span class=\"c1\">#     &quot;Hello, #{match[1]}&quot;<\/span>\n<span class=\"c1\">#   end<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># A false/nil return from block will not return a response; control will continue down the<\/span>\n<span class=\"c1\"># Rack stack:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   use Rack::Get, &#39;/api_key&#39; do |env|<\/span>\n<span class=\"c1\">#     &#39;12345&#39; if env[&#39;myapp.user&#39;].authorized?<\/span>\n<span class=\"c1\">#   end<\/span>\n<span class=\"k\">module<\/span> <span class=\"nn\">Rack<\/span>\n  <span class=\"k\">class<\/span> <span class=\"nc\">Get<\/span>\n    <span class=\"k\">def<\/span> <span class=\"nf\">initialize<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">block<\/span><span class=\"p\">)<\/span>\n      <span class=\"vi\">@app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">app<\/span>\n      <span class=\"vi\">@path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">path<\/span>\n      <span class=\"vi\">@block<\/span> <span class=\"o\">=<\/span> <span class=\"n\">block<\/span>\n    <span class=\"k\">end<\/span>\n\n    <span class=\"k\">def<\/span> <span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n      <span class=\"n\">path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;PATH_INFO&#39;<\/span><span class=\"o\">].<\/span><span class=\"n\">to_s<\/span>\n      <span class=\"k\">if<\/span> <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;REQUEST_METHOD&#39;<\/span><span class=\"o\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;GET&#39;<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">((<\/span><span class=\"vi\">@path<\/span><span class=\"o\">.<\/span><span class=\"n\">is_a?<\/span><span class=\"p\">(<\/span><span class=\"no\">Regexp<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">match<\/span> <span class=\"o\">=<\/span> <span class=\"vi\">@path<\/span><span class=\"o\">.<\/span><span class=\"n\">match<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">))<\/span> <span class=\"o\">||<\/span> <span class=\"vi\">@path<\/span> <span class=\"o\">==<\/span> <span class=\"n\">path<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Response<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span>\n        <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span> <span class=\"o\">=<\/span> <span class=\"vi\">@block<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">,<\/span> <span class=\"n\">response<\/span><span class=\"p\">,<\/span> <span class=\"n\">match<\/span><span class=\"p\">)<\/span>\n        <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">body<\/span> <span class=\"p\">?<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">finish<\/span> <span class=\"p\">:<\/span> <span class=\"vi\">@app<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n      <span class=\"k\">else<\/span>\n        <span class=\"vi\">@app<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n      <span class=\"k\">end<\/span>\n    <span class=\"k\">end<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/gbuesing\">gbuesing<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/94.txt\">view raw<\/a></div>');
document.write('</div></div>');
