<p><b>This entry may be outdated. For the latest updates on openrasta, see <ahref="http://www.openrasta.com">www.openrasta.com</a>.</b></p>
<p>Already a month since the last updates, and I’ve been churning quite a bit of code. Most of it has been to finish extending the support for multipart types, which was blocking a couple of scenarios (html file upload and silverlight bidirectional http being the two main ones).</p><h4>Infrastructure</h4><ul><li>OpenRastaHandler is now a handler factory. </li><li>Added a logging infrastructure and some initial instrumentation of the code. </li><li>All the ambient data is now cleanly separated and requires an IContextStore (Think HttpContext.Current.Items) </li></ul><h4>IO</h4><ul><li>I thought I’d push the sub-stream implementation to later, but it is now done. Only one stream of a request exists, and when using a multipart encoding, a sub-stream will be created that lets you read within a multipart boundary transparently. This enables quite amazing scenarios. </li><li>StreamWriter is a bad boy, it closes a stream automatically when disposed. Added a DeterministicStreamWriter that lets you control the behavior of the stream on close. </li></ul><h4>Dependency Injection</h4><ul><li>Not much there, code has been expanded a bit to resolve properties too. </li></ul><h4>Html Forms</h4><ul><li>Support is now complete and stable. </li></ul><h4>Multipart support</h4><ul><li>This baby took much longer than I thought, but it has incredible powers. Multiparts as used in html forms are now fully supported, including files etc. </li><li>Codecs are recursive. That means each part in a multipart can itself be parsed by another codec. Think passing around form data, xml and binary all in one go, without coding involved. </li><li>Quoted-printable and base64 encodings in form names are also supported. </li></ul><h4>Complex-type construction</h4><ul><li>The default type construction algorithm used for both mutlipart/form-data and aplication/x-www-url-formencoded now supports both type strings and variable names. That means that for <em>OperationResult Post(Customer c)</em>, you can now use c.FirstName or Customer.FirstName as the field-name, as well as using only the property name (aka firstname). </li><li><em><strike>TODO</strike>:</em> Sadly some of the code is still not shared between those two codecs, this is the next refactoring. Need to find a clean model to extract all this stuff into. Expect to see a lot of this code extracted in parameter binders, and an extension for codecs providing key/value pairs.  [Update: Done]</li></ul><h4>Markup</h4><ul><li>There’s new code for markup generation. The infrastructure is all based on chained extension methods for configuration, giving a nice fluent-like taste (except for the form tag, but can’t do anything about that). </li></ul><h4>Misc</h4><ul><li>Code coverage is slowly reaching 80%, but there’s still a lot of tests to write around error conditions. </li><li>There are some namespaces at 100%, which helped fix a bunch of errors in the internal dependency resolver. </li><li>More renames (MediaType has taken over from Content-Type nearly everywhere) and namespace reshuffling. </li></ul><p>The code is getting more and more stable. Now I just need more testers and more people using OpenRasta. That, and a logo. And tutorials. And screencasts. Etc.</p>