I actually think this is <i>less</i> magical than most approaches, since there's no pre-compilation or "with" scoping magic. Sinatra's hello world is awesome, until you realize that a lot of the cool stuff is scoping magic that you have to throw out when your app has to play nicely with others.<p>My original approach for (fab) was like jQuery:<p><pre><code>  fab()
    .find( path )
      .bind( method, handler )
      .find( subpath )
        .bind( method, handler )
      .end()
    .end()
  .end()
</code></pre>
but I realized that I could simplify things by getting rid of methods entirely, and reserving methods for HTTP methods and status codes.<p>As for people not realizing they can define functions outside of the DSL, I'm hoping that the extensibility of middleware will mitigate that, just as the ecosystem of plugins did for jQuery.