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/85\">A very simple Rack-mount example with multiple Rack apps<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># To run this example:<\/span>\n<span class=\"c1\">#   1. put this code in a config.ru file<\/span>\n<span class=\"c1\">#   2. run &quot;shotgun&quot; on the command line (http://github.com/rtomayko/shotgun)<\/span>\n<span class=\"c1\">#   3. go to http://localhost:9393/<\/span>\n\n<span class=\"nb\">require<\/span> <span class=\"s1\">&#39;rack/mount&#39;<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">MoonApp<\/span>\n  <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">case<\/span> <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;rack.routing_args&#39;<\/span><span class=\"o\">][<\/span><span class=\"ss\">:action<\/span><span class=\"o\">]<\/span>\n    <span class=\"k\">when<\/span> <span class=\"s1\">&#39;moon&#39;<\/span>\n      <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"sx\">%(Moon | &lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:noir<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Noir&lt;/a&gt; | &lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:boosh<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Boosh&lt;/a&gt;&lt;h1&gt;Howard Moon&#39;s Homepage&lt;/h1&gt;)<\/span>\n      <span class=\"o\">[<\/span><span class=\"mi\">200<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"s1\">&#39;Content-Type&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;text/html&#39;<\/span><span class=\"p\">},<\/span> <span class=\"o\">[<\/span><span class=\"n\">html<\/span><span class=\"o\">]]<\/span>\n    <span class=\"k\">when<\/span> <span class=\"s1\">&#39;boosh&#39;<\/span>\n      <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;moon.message&#39;<\/span><span class=\"o\">]<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&quot;Hello from Moon&quot;<\/span>\n      <span class=\"c1\"># Rack-mount will look for other matches when 417 is returned<\/span>\n      <span class=\"o\">[<\/span><span class=\"mi\">417<\/span><span class=\"p\">,<\/span> <span class=\"p\">{},<\/span> <span class=\"o\">[]]<\/span>\n    <span class=\"k\">end<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">NoirApp<\/span>\n  <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"k\">case<\/span> <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;rack.routing_args&#39;<\/span><span class=\"o\">][<\/span><span class=\"ss\">:action<\/span><span class=\"o\">]<\/span>\n    <span class=\"k\">when<\/span> <span class=\"s1\">&#39;noir&#39;<\/span>\n      <span class=\"sx\">%(&lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:moon<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Moon&lt;/a&gt; | Noir | &lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:boosh<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Boosh&lt;/a&gt;&lt;h1&gt;Vince Noir&#39;s Homepage&lt;/h1&gt;)<\/span>\n    <span class=\"k\">when<\/span> <span class=\"s1\">&#39;boosh&#39;<\/span>\n      <span class=\"sx\">%(&lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:moon<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Moon&lt;/a&gt; | &lt;a href=&quot;<\/span><span class=\"si\">#{<\/span><span class=\"no\">Routes<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"p\">(<\/span><span class=\"ss\">:noir<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sx\">&quot;&gt;Noir&lt;/a&gt; | Boosh&lt;h1&gt;Boosh Homepage&lt;/h1&gt;&lt;p&gt;<\/span><span class=\"si\">#{<\/span><span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;moon.message&#39;<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"sx\">&lt;/p&gt;)<\/span>\n    <span class=\"k\">end<\/span>\n    <span class=\"o\">[<\/span><span class=\"mi\">200<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"s1\">&#39;Content-Type&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;text/html&#39;<\/span><span class=\"p\">},<\/span> <span class=\"o\">[<\/span><span class=\"n\">html<\/span><span class=\"o\">]]<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"no\">Routes<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Mount<\/span><span class=\"o\">::<\/span><span class=\"no\">RouteSet<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">set<\/span><span class=\"o\">|<\/span>\n  <span class=\"n\">set<\/span><span class=\"o\">.<\/span><span class=\"n\">add_route<\/span> <span class=\"no\">MoonApp<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:path_info<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;/moon&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:action<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;moon&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"ss\">:moon<\/span>\n  <span class=\"n\">set<\/span><span class=\"o\">.<\/span><span class=\"n\">add_route<\/span> <span class=\"no\">NoirApp<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:path_info<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;/noir&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:action<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;noir&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"ss\">:noir<\/span>\n  <span class=\"n\">set<\/span><span class=\"o\">.<\/span><span class=\"n\">add_route<\/span> <span class=\"no\">MoonApp<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:path_info<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;/&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:action<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;boosh&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"ss\">:boosh<\/span>\n  <span class=\"n\">set<\/span><span class=\"o\">.<\/span><span class=\"n\">add_route<\/span> <span class=\"no\">NoirApp<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:path_info<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;/&#39;<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"ss\">:action<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">&#39;boosh&#39;<\/span> <span class=\"p\">}<\/span>\n<span class=\"k\">end<\/span>\n\n<span class=\"n\">run<\/span> <span class=\"no\">Routes<\/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/85.txt\">view raw<\/a></div>');
document.write('</div></div>');
