<?xml version="1.0" encoding="UTF-8"?>
<commits type="array">
  <commit>
    <parents type="array">
      <parent>
        <id>98572b4d0d406c7f1e7a1d9100887c4b2fb07f9e</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/0ea4f6455827818ac9e7b5331026ef4805ced437</url>
    <id>0ea4f6455827818ac9e7b5331026ef4805ced437</id>
    <committed-date>2008-04-09T20:30:42-07:00</committed-date>
    <authored-date>2008-04-09T20:30:42-07:00</authored-date>
    <message>RESTful testing

To be used in one of two ways:

  post_it '/', :foo =&gt; 'bar', :env =&gt; { :agent =&gt; 'Mac Intel' }

  or

  post_it '/', '&lt;myxml&gt;&lt;/myxml&gt;', :agent =&gt; 'Mac Intel'

to receive this in your EventContext

  For query params:

  post '/' do
    params.inspect
  end

  For XML/JSON/etc.. :

  post '/' do
    request.body.string
  end</message>
    <tree>396992f2c6122b237b1a8c8a944b45ef4572b5f3</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>74bfd99011e819ed46eec4287343c899140f3560</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/98572b4d0d406c7f1e7a1d9100887c4b2fb07f9e</url>
    <id>98572b4d0d406c7f1e7a1d9100887c4b2fb07f9e</id>
    <committed-date>2008-04-08T16:40:46-07:00</committed-date>
    <authored-date>2008-04-08T16:40:21-07:00</authored-date>
    <message>Symbol params back in thanks to Jeremy Evans</message>
    <tree>47cbab2365734f894bb70b73bb998a0778012050</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>4efbbefe2f78c64e596b1449f1bca5ce2d7822b0</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/74bfd99011e819ed46eec4287343c899140f3560</url>
    <id>74bfd99011e819ed46eec4287343c899140f3560</id>
    <committed-date>2008-04-07T19:02:50-07:00</committed-date>
    <authored-date>2008-04-07T14:59:22-07:00</authored-date>
    <message>new rubyforge page</message>
    <tree>99eadea8b093d3c0e8bf4813040f52ed0bc33079</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d71fe8303dccad05c3e212a463cdd3f6e87e6105</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/4efbbefe2f78c64e596b1449f1bca5ce2d7822b0</url>
    <id>4efbbefe2f78c64e596b1449f1bca5ce2d7822b0</id>
    <committed-date>2008-04-06T19:23:36-07:00</committed-date>
    <authored-date>2008-04-06T19:23:36-07:00</authored-date>
    <message>don't need these</message>
    <tree>95ae297b1d13e374bdf0a0c57a4922532102b0e1</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>370bda3e533e0e698875973a5d88bbe01048f234</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/d71fe8303dccad05c3e212a463cdd3f6e87e6105</url>
    <id>d71fe8303dccad05c3e212a463cdd3f6e87e6105</id>
    <committed-date>2008-04-01T18:20:52-07:00</committed-date>
    <authored-date>2008-04-01T18:20:52-07:00</authored-date>
    <message>filter on host</message>
    <tree>e7a81999d5b8ae88154f4be69953e999f2a3f951</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0eca3f46c74bfc88fb97484fc6f1744f1cfbe79a</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/370bda3e533e0e698875973a5d88bbe01048f234</url>
    <id>370bda3e533e0e698875973a5d88bbe01048f234</id>
    <committed-date>2008-04-01T16:45:10-07:00</committed-date>
    <authored-date>2008-04-01T16:45:10-07:00</authored-date>
    <message>FIX:  options need to be reloaded when custom options are given</message>
    <tree>5a2aa4e68a1b12c349f966ddc6f68b9a24b7e0c7</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>be5f5270ec642be3e17e7b739dc4c3e06464fff4</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/0eca3f46c74bfc88fb97484fc6f1744f1cfbe79a</url>
    <id>0eca3f46c74bfc88fb97484fc6f1744f1cfbe79a</id>
    <committed-date>2008-04-01T14:20:26-07:00</committed-date>
    <authored-date>2008-04-01T13:38:36-07:00</authored-date>
    <message>raise errors from error

This allows us to test custom errors easier</message>
    <tree>9d3a38e3b7020cf001bb54b8ebde8797d1c70eb0</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>1bcd28fa1340283ae8a4c884a40831b87281f362</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/be5f5270ec642be3e17e7b739dc4c3e06464fff4</url>
    <id>be5f5270ec642be3e17e7b739dc4c3e06464fff4</id>
    <committed-date>2008-03-31T18:48:59-07:00</committed-date>
    <authored-date>2008-03-31T18:48:06-07:00</authored-date>
    <message>bringing back the string.

Symbols are not garbage collected and I don't want to use the large (but cool) HashWithIndifferentAccess.  I could use OpenStruct ala camping but that seems unnecessary.

Long live the string.</message>
    <tree>33a1259cb751fa0eeb1f9f1f7b610010611bda9a</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>ed0638480dc5d17d78ea20cf1a9cbe130975f6c1</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/1bcd28fa1340283ae8a4c884a40831b87281f362</url>
    <id>1bcd28fa1340283ae8a4c884a40831b87281f362</id>
    <committed-date>2008-03-31T18:48:59-07:00</committed-date>
    <authored-date>2008-03-31T18:03:49-07:00</authored-date>
    <message>merge in env to test methods</message>
    <tree>890b03fdbd44f2b223ffb63386b33066851d02e8</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>83cba9cf07417b470e77b7de6928f58d10a65363</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/ed0638480dc5d17d78ea20cf1a9cbe130975f6c1</url>
    <id>ed0638480dc5d17d78ea20cf1a9cbe130975f6c1</id>
    <committed-date>2008-03-31T18:48:59-07:00</committed-date>
    <authored-date>2008-03-28T14:38:40-07:00</authored-date>
    <message>explain'n</message>
    <tree>06647744150985f0ed5e64635cbefa129a03e36f</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5e8571246e1d3832d38c32e77de940df7598bb2b</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/83cba9cf07417b470e77b7de6928f58d10a65363</url>
    <id>83cba9cf07417b470e77b7de6928f58d10a65363</id>
    <committed-date>2008-03-29T17:02:42-07:00</committed-date>
    <authored-date>2008-03-29T16:59:45-07:00</authored-date>
    <message>updated README with helpful tidbits</message>
    <tree>04e9da9a2c188bf62eb11216737d2f76365cb353</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>e0c7f978f49f974b216141b2f9e2e41a83813ae3</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/5e8571246e1d3832d38c32e77de940df7598bb2b</url>
    <id>5e8571246e1d3832d38c32e77de940df7598bb2b</id>
    <committed-date>2008-03-28T14:33:26-07:00</committed-date>
    <authored-date>2008-03-28T14:33:26-07:00</authored-date>
    <message>tests for use_in_file_templates! and a little refactoring</message>
    <tree>563e60ae20d15a70c17e5ff548b09b3a84aa1f83</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>d874133b94c7b3bc94be806f5ff8c204631f4106</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/e0c7f978f49f974b216141b2f9e2e41a83813ae3</url>
    <id>e0c7f978f49f974b216141b2f9e2e41a83813ae3</id>
    <committed-date>2008-03-27T01:10:39-07:00</committed-date>
    <authored-date>2008-03-27T01:10:39-07:00</authored-date>
    <message>easy access to options</message>
    <tree>49df3eddf25632c75884183f26a8fe70b34cb1c8</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>6bda16b9c1164a3a2f98759e9cd2139323b1ed94</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/d874133b94c7b3bc94be806f5ff8c204631f4106</url>
    <id>d874133b94c7b3bc94be806f5ff8c204631f4106</id>
    <committed-date>2008-03-26T23:59:58-07:00</committed-date>
    <authored-date>2008-03-26T23:45:32-07:00</authored-date>
    <message>inline templates!</message>
    <tree>3ee18827a4649736f406e65360c919a3e8494af8</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>3d92391a33eebf51e75a5decd44e5dfa1196f40f</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/6bda16b9c1164a3a2f98759e9cd2139323b1ed94</url>
    <id>6bda16b9c1164a3a2f98759e9cd2139323b1ed94</id>
    <committed-date>2008-03-26T23:53:31-07:00</committed-date>
    <authored-date>2008-03-26T23:09:55-07:00</authored-date>
    <message>added `template` to DSL</message>
    <tree>655e335572e4de1ce0303246efb97a3753db4e52</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>047edc6a9208c7836d3223718fd3564296d69d26</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/3d92391a33eebf51e75a5decd44e5dfa1196f40f</url>
    <id>3d92391a33eebf51e75a5decd44e5dfa1196f40f</id>
    <committed-date>2008-03-26T23:31:27-07:00</committed-date>
    <authored-date>2008-03-22T16:22:47-07:00</authored-date>
    <message>pass locals to haml</message>
    <tree>a02e504a3692e3e96cb5cfe876f7fbd719bf4f42</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>bacfa20d9fa68d3a22c862992827bc97d0af50e9</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/047edc6a9208c7836d3223718fd3564296d69d26</url>
    <id>047edc6a9208c7836d3223718fd3564296d69d26</id>
    <committed-date>2008-03-26T19:02:42-07:00</committed-date>
    <authored-date>2008-03-26T19:02:28-07:00</authored-date>
    <message>update README with Static help</message>
    <tree>f762cacaf90d8742b27b9bdc2f7b88364305db7d</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>9a5d69a87f8a7ec131da3198d2e1320333681856</id>
      </parent>
    </parents>
    <author>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/bacfa20d9fa68d3a22c862992827bc97d0af50e9</url>
    <id>bacfa20d9fa68d3a22c862992827bc97d0af50e9</id>
    <committed-date>2008-03-26T12:51:13-07:00</committed-date>
    <authored-date>2008-03-26T09:54:14-07:00</authored-date>
    <message>Make Static omit Content-Disposition header when serving files.

send_file_headers! now accepts nil for :disposition. When nil, omit both
the Content-Disposition and Content-Transfer-Encoding headers.

Modified Static to specify a nil :disposition. I believe this is more
in line with how most web servers serve static directories by default. User
agents are free to choose whether the entity should be displayed inline or
treated as an attachment.

Note that, although files served by the Static handler omit the
Content-Disposition header by default, explicit calls to send_file and
send_data in events default to :disposition =&gt; 'attachment'.</message>
    <tree>cc91db07f873aba2c78e5f234c307d09d623d9c5</tree>
    <committer>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>1776a80d2c0e489a38d18afb58c3cc48cefacbf4</id>
      </parent>
    </parents>
    <author>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/9a5d69a87f8a7ec131da3198d2e1320333681856</url>
    <id>9a5d69a87f8a7ec131da3198d2e1320333681856</id>
    <committed-date>2008-03-26T07:51:08-07:00</committed-date>
    <authored-date>2008-03-26T07:51:08-07:00</authored-date>
    <message>If-Modified-Since support for Static / Streaming

Adds support for RFC 2616 conditional requests based on the resources
last modification time. If the request includes an If-Modified-Since
header and the file's last modification time matches the value exactly,
a &quot;304 Not Modified&quot; response is sent (with an empty response body)
instead of the default 200 response with entire response body.

The meat of the implementation is in Streaming#send_file_headers! so
Static and anything else that results in a call to send_file_headers!
gets automatic if-modified-since support.</message>
    <tree>913258b22d20cb92f15551e5694514348c7b3870</tree>
    <committer>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>0b485a96a3dca775e9011e19698af11b58b43e8b</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/1776a80d2c0e489a38d18afb58c3cc48cefacbf4</url>
    <id>1776a80d2c0e489a38d18afb58c3cc48cefacbf4</id>
    <committed-date>2008-03-24T18:28:24-07:00</committed-date>
    <authored-date>2008-03-24T18:28:24-07:00</authored-date>
    <message>Added Version and Docs</message>
    <tree>06dea6c1562c69c156c43764e94e1ed4d8155f85</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>1f204991c34fa36f0a678c10019ba065579bd081</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/0b485a96a3dca775e9011e19698af11b58b43e8b</url>
    <id>0b485a96a3dca775e9011e19698af11b58b43e8b</id>
    <committed-date>2008-03-24T18:05:23-07:00</committed-date>
    <authored-date>2008-03-24T18:04:51-07:00</authored-date>
    <message>capture agent captures in params</message>
    <tree>ca419209d5033813c436b27ba0faeaa44e2addbf</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>df800b5c26771efd3a85f5d59443bdceeb4c6c57</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/1f204991c34fa36f0a678c10019ba065579bd081</url>
    <id>1f204991c34fa36f0a678c10019ba065579bd081</id>
    <committed-date>2008-03-24T17:35:42-07:00</committed-date>
    <authored-date>2008-03-24T17:35:42-07:00</authored-date>
    <message>getting mare advanced with to_result</message>
    <tree>1a68c88ac33752578cfeecf0daabdaa753ffab96</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>898b36eab4cbd0384d23000ee738c9d451558ce0</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/df800b5c26771efd3a85f5d59443bdceeb4c6c57</url>
    <id>df800b5c26771efd3a85f5d59443bdceeb4c6c57</id>
    <committed-date>2008-03-24T17:20:58-07:00</committed-date>
    <authored-date>2008-03-24T17:20:58-07:00</authored-date>
    <message>Docs are started</message>
    <tree>1fc29ae22ea37605714e4c08f4df65f79e84929e</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake@songbirdnest.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>5f3eac03441b52d0faef54d1bf23897e6b4cb789</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/898b36eab4cbd0384d23000ee738c9d451558ce0</url>
    <id>898b36eab4cbd0384d23000ee738c9d451558ce0</id>
    <committed-date>2008-03-15T17:20:37-07:00</committed-date>
    <authored-date>2008-03-15T17:20:37-07:00</authored-date>
    <message>allow user to prevent layout render</message>
    <tree>6963b693973bf2461fc44ddec13fe9306bdd50d8</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>713b66a3b0c2fb2e2c76702478599250369b3a43</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/5f3eac03441b52d0faef54d1bf23897e6b4cb789</url>
    <id>5f3eac03441b52d0faef54d1bf23897e6b4cb789</id>
    <committed-date>2008-03-15T13:07:38-07:00</committed-date>
    <authored-date>2008-03-15T13:07:38-07:00</authored-date>
    <message>Better errors</message>
    <tree>de20bcfd8345f8b86dd51bb9e7103fa225014bea</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>09ac17579e2fcaf0898e00f2aaaf269a7148f457</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/713b66a3b0c2fb2e2c76702478599250369b3a43</url>
    <id>713b66a3b0c2fb2e2c76702478599250369b3a43</id>
    <committed-date>2008-03-15T13:02:19-07:00</committed-date>
    <authored-date>2008-03-15T13:02:19-07:00</authored-date>
    <message>friendly helper</message>
    <tree>cd1d7247842e563213dc3a17095ec95a6169005a</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>b47ffd392af9ead973297deee170b0d6225a42a3</id>
      </parent>
    </parents>
    <author>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/09ac17579e2fcaf0898e00f2aaaf269a7148f457</url>
    <id>09ac17579e2fcaf0898e00f2aaaf269a7148f457</id>
    <committed-date>2008-03-15T12:43:29-07:00</committed-date>
    <authored-date>2008-03-15T12:43:29-07:00</authored-date>
    <message>Mutex</message>
    <tree>987c8c5aeea6a05feda6492e3133b965e33923e7</tree>
    <committer>
      <name>Blake Mizerany</name>
      <email>blake.mizerany@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>b18102be44392e698e46de5a16d561c0b830e6b8</id>
      </parent>
    </parents>
    <author>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/b47ffd392af9ead973297deee170b0d6225a42a3</url>
    <id>b47ffd392af9ead973297deee170b0d6225a42a3</id>
    <committed-date>2008-03-12T14:00:49-07:00</committed-date>
    <authored-date>2008-03-10T00:31:19-07:00</authored-date>
    <message>HEAD support and Static as GET/HEAD only event.

Implement HEAD by delegating to GET handlers (when no HEAD handler registered)
and removing response body. This fixes a problem where Sinatra sent a 404
response to HEAD requests due to HEAD not having any registered handlers.

While here, make Static handlers respond only to GET and HEAD requests instead
of using GET semantics for PUT/POST/DELETE. Makes it possible for Events to
register PUT/POST/DELETE handlers for static file URLs. For instance, assuming a
file exists, `public/foo.xml`, and the following event:

    put '/foo.xml' do
      File.open('public/foo.xml', 'wb') do |io|
        io.write(request.body.read)
      end
      ''
    end

    get '/foo.xml' do
      &quot;THIS NEVER HAPPENS ... as long as /foo.xml exists on disk.&quot;
    end

The built-in Static handler hits on GET and the dynamic event hits on PUT. An
important note here is that the Static handler is now registered at the head of
the events[:get] array (see Application#load_default_events! and
Application#lookup), where it was previously a special case in the lookup
method.</message>
    <tree>8502bee9db79bbd3118d0c44ff71253ebb12e5b0</tree>
    <committer>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>caf4857024572ebab33fd28f61b4f6c8b44e77c7</id>
      </parent>
    </parents>
    <author>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/b18102be44392e698e46de5a16d561c0b830e6b8</url>
    <id>b18102be44392e698e46de5a16d561c0b830e6b8</id>
    <committed-date>2008-03-12T13:29:21-07:00</committed-date>
    <authored-date>2008-03-12T07:23:09-07:00</authored-date>
    <message>Fix a few minor issues with, and document, the POST _method hack.

The original issue I ran into was that the code was not letting downcase method
names through on the _method param. So, if the post body had &quot;_method=put&quot;
instead of &quot;_method=PUT&quot;, it would be processed as a POST. While there, I fixed
a few other cases, including the following:

  * Allow for verbs other than PUT/DELETE. OPTIONS and HEAD were added but
    additional verbs can be added on an app-by-app basis by cat'ing onto the
    POST_TUNNEL_METHODS_ALLOWED array.

  * Only look for _method param in POST body, not in query string. The code
    previously used Request#params, which includes query string and post body
    parameters.

This patch includes tests that verify each of the previously described
behaviors.</message>
    <tree>630abdc99e2917d5e5d03665b44c806f0bd85cd5</tree>
    <committer>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </committer>
  </commit>
  <commit>
    <parents type="array">
      <parent>
        <id>327c6ece36471763574d5c7ccc04e64c3410a742</id>
      </parent>
    </parents>
    <author>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </author>
    <url>http://github.com/adamwiggins/sinatra/commit/caf4857024572ebab33fd28f61b4f6c8b44e77c7</url>
    <id>caf4857024572ebab33fd28f61b4f6c8b44e77c7</id>
    <committed-date>2008-03-12T06:04:05-07:00</committed-date>
    <authored-date>2008-03-08T17:40:01-08:00</authored-date>
    <message>Builder Rendering Helper (.builder templates) w/ doco and tests.</message>
    <tree>d8abd20f79772e4f5622c5f9b22d6324f6f4fd01</tree>
    <committer>
      <name>Ryan Tomayko</name>
      <email>rtomayko@gmail.com</email>
    </committer>
  </commit>
</commits>
