<?xml version="1.0" encoding="UTF-8"?>
<ticket>
  <assigned-user-id type="integer">17123</assigned-user-id>
  <attachments-count type="integer">1</attachments-count>
  <closed type="boolean">true</closed>
  <created-at type="datetime">2009-01-13T18:05:48-08:00</created-at>
  <creator-id type="integer">17123</creator-id>
  <milestone-due-on type="datetime">2009-01-18T00:00:00-08:00</milestone-due-on>
  <milestone-id type="integer">27290</milestone-id>
  <number type="integer">70</number>
  <permalink>nestedrecursive-params</permalink>
  <priority type="integer">1</priority>
  <project-id type="integer">9779</project-id>
  <raw-data type="binary" nil="true" encoding="base64"></raw-data>
  <state>resolved</state>
  <tag>http params patch</tag>
  <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
  <updated-at type="datetime">2009-01-16T08:31:06-08:00</updated-at>
  <user-id type="integer">17123</user-id>
  <user-name>Ryan Tomayko</user-name>
  <creator-name>Ryan Tomayko</creator-name>
  <assigned-user-name>Ryan Tomayko</assigned-user-name>
  <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
  <milestone-title>0.9.0 Hoboken</milestone-title>
  <original-body>There's been many requests for nested/recursive params support a la Rails. e.g., when the query string or form post includes keys with subscripts, they are parsed into a series of Hash/Array structures:

@@@
foo[bar]=bling&amp;foo[baz]=bop
@@@

yields:

@@@
{ :foo =&gt; { :bar =&gt; 'bling', :baz =&gt; 'bop' } }
@@@

This is very likely to go into Rack core at some point but it would be worth adding to Sinatra in the meantime as a convenience.</original-body>
  <latest-body>There's been many requests for nested/recursive params support a la Rails. e.g., when the query string or form post includes keys with subscripts, they are parsed into a series of Hash/Array structures:

@@@
foo[bar]=bling&amp;foo[baz]=bop
@@@

yields:

@@@
{ :foo =&gt; { :bar =&gt; 'bling', :baz =&gt; 'bop' } }
@@@

This is very likely to go into Rack core at some point but it would be worth adding to Sinatra in the meantime as a convenience.</latest-body>
  <original-body-html>&lt;div&gt;&lt;p&gt;There's been many requests for nested/recursive params support a
la Rails. e.g., when the query string or form post includes keys
with subscripts, they are parsed into a series of Hash/Array
structures:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
foo[bar]=bling&amp;amp;foo[baz]=bop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;yields:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
{ :foo =&amp;gt; { :bar =&amp;gt; 'bling', :baz =&amp;gt; 'bop' } }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is very likely to go into Rack core at some point but it
would be worth adding to Sinatra in the meantime as a
convenience.&lt;/p&gt;&lt;/div&gt;</original-body-html>
  <versions type="array">
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">0</attachments-count>
      <body>There's been many requests for nested/recursive params support a la Rails. e.g., when the query string or form post includes keys with subscripts, they are parsed into a series of Hash/Array structures:

@@@
foo[bar]=bling&amp;foo[baz]=bop
@@@

yields:

@@@
{ :foo =&gt; { :bar =&gt; 'bling', :baz =&gt; 'bop' } }
@@@

This is very likely to go into Rack core at some point but it would be worth adding to Sinatra in the meantime as a convenience.</body>
      <body-html>&lt;div&gt;&lt;p&gt;There's been many requests for nested/recursive params support a
la Rails. e.g., when the query string or form post includes keys
with subscripts, they are parsed into a series of Hash/Array
structures:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
foo[bar]=bling&amp;amp;foo[baz]=bop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;yields:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
{ :foo =&amp;gt; { :bar =&amp;gt; 'bling', :baz =&amp;gt; 'bop' } }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is very likely to go into Rack core at some point but it
would be worth adding to Sinatra in the meantime as a
convenience.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-13T18:05:49-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- {}

</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params</tag>
      <title>Nested/Recursive Params</title>
      <updated-at type="datetime">2009-01-13T18:05:49-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">0</attachments-count>
      <body>The following thread includes an example implementation:

http://groups.google.com/group/sinatrarb/browse_thread/thread/9077403d7f150277/4d1085e1f0b0cc7b

This has also been discussed heavily on the Rack list with lots of performance tips:

http://groups.google.com/group/rack-devel/browse_thread/thread/1a9b8dc431bff499/3b0f8ccec6a6f918</body>
      <body-html>&lt;div&gt;&lt;p&gt;The following thread includes an example implementation:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/sinatrarb/browse_thread/thread/9077403d7f150277/4d1085e1f0b0cc7b&quot;&gt;
http://groups.google.com/group/s...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This has also been discussed heavily on the Rack list with lots
of performance tips:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/rack-devel/browse_thread/thread/1a9b8dc431bff499/3b0f8ccec6a6f918&quot;&gt;
http://groups.google.com/group/r...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-13T18:07:56-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- {}

</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params</tag>
      <title>Nested/Recursive Params</title>
      <updated-at type="datetime">2009-01-13T18:08:00-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">0</attachments-count>
      <body></body>
      <body-html></body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-13T18:08:37-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:title: Nested/Recursive Params
</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params</tag>
      <title>Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-13T18:08:41-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">0</attachments-count>
      <body>Oops. I don't want to take this on for 0.9.0. If someone else wants to get a branch and start getting something stable together we might be able to move it up.</body>
      <body-html>&lt;div&gt;&lt;p&gt;Oops. I don't want to take this on for 0.9.0. If someone else
wants to get a branch and start getting something stable together
we might be able to move it up.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-13T18:26:59-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:milestone: 27290
</diffable-attributes>
      <milestone-id type="integer">27725</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params</tag>
      <title>Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-13T18:27:00-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.1</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">0</attachments-count>
      <body>Here's a stab at it, using manveru's implementation from rack's ML.</body>
      <body-html>&lt;div&gt;&lt;p&gt;Here's a stab at it, using manveru's implementation from rack's
ML.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-14T06:48:07-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:tag: http params
</diffable-attributes>
      <milestone-id type="integer">27725</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params patch</tag>
      <title>Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-14T06:48:09-08:00</updated-at>
      <user-id type="integer">278</user-id>
      <user-name>ronin-278 (at lighthouseapp)</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.1</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body></body>
      <body-html></body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-14T06:57:40-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:title: Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)
</diffable-attributes>
      <milestone-id type="integer">27725</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-14T06:57:44-08:00</updated-at>
      <user-id type="integer">278</user-id>
      <user-name>ronin-278 (at lighthouseapp)</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.1</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body>MMmm. I like this patch. Moving to 0.9.0. Anyone else care to review / comment?</body>
      <body-html>&lt;div&gt;&lt;p&gt;MMmm. I like this patch. Moving to 0.9.0. Anyone else care to
review / comment?&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-14T07:44:49-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:milestone: 27725
</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-14T07:44:52-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body>Looks OK to me. +1 for applying/inclusion.</body>
      <body-html>&lt;div&gt;&lt;p&gt;Looks OK to me. +1 for applying/inclusion.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-14T11:42:07-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- {}

</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-14T11:42:12-08:00</updated-at>
      <user-id type="integer">15365</user-id>
      <user-name>Markus Prinz</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body>Okay, I had to make some slight tweaks but this is pretty true to foca's original patch:

http://github.com/rtomayko/sinatra/commit/nestedparams

Differences from foca's patch:

1. Performs param nesting once at the beginning of the request instead of on each matching route.

2. Added a testcase for deeply nested params.

I feel pretty good about it. Let's see if we can get some feedback on it today and then maybe we'll merge as gravy on 0.9.0.</body>
      <body-html>&lt;div&gt;&lt;p&gt;Okay, I had to make some slight tweaks but this is pretty true
to foca's original patch:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com/rtomayko/sinatra/commit/nestedparams&quot;&gt;http://github.com/rtomayko/sinat...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Differences from foca's patch:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Performs param nesting once at the beginning of the request
instead of on each matching route.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Added a testcase for deeply nested params.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I feel pretty good about it. Let's see if we can get some
feedback on it today and then maybe we'll merge as gravy on
0.9.0.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-15T04:37:46-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- {}

</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>new</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-15T04:37:50-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body></body>
      <body-html></body-html>
      <closed type="boolean">false</closed>
      <created-at type="datetime">2009-01-15T04:37:54-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:state: new
</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>open</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-15T04:37:55-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
    <version type="Ticket::Version">
      <assigned-user-id type="integer">17123</assigned-user-id>
      <attachments-count type="integer">1</attachments-count>
      <body>Nest params is in for 0.9.0. Thanks foca.</body>
      <body-html>&lt;div&gt;&lt;p&gt;Nest params is in for 0.9.0. Thanks foca.&lt;/p&gt;&lt;/div&gt;</body-html>
      <closed type="boolean">true</closed>
      <created-at type="datetime">2009-01-16T08:31:05-08:00</created-at>
      <creator-id type="integer">17123</creator-id>
      <diffable-attributes type="yaml">--- 
:state: open
</diffable-attributes>
      <milestone-id type="integer">27290</milestone-id>
      <number type="integer">70</number>
      <permalink>nestedrecursive-params</permalink>
      <priority type="integer">0</priority>
      <project-id type="integer">9779</project-id>
      <state>resolved</state>
      <tag>http params patch</tag>
      <title>[PATCH] Nested/Recursive Params (e.g., &quot;post[title]=Hello&quot;)</title>
      <updated-at type="datetime">2009-01-16T08:31:06-08:00</updated-at>
      <user-id type="integer">17123</user-id>
      <user-name>Ryan Tomayko</user-name>
      <creator-name>Ryan Tomayko</creator-name>
      <assigned-user-name>Ryan Tomayko</assigned-user-name>
      <url>http://sinatra.lighthouseapp.com/projects/9779/tickets/70</url>
      <milestone-title>0.9.0 Hoboken</milestone-title>
    </version>
  </versions>
  <attachments type="array">
    <attachment type="Attachment">
      <code>c077b082a1ec035cabf71787ca92004e09d1715d</code>
      <content-type>text/plain</content-type>
      <created-at type="datetime">2009-01-14T06:48:07-08:00</created-at>
      <filename>0001-Allow-nested-hash-parameters.patch</filename>
      <height type="integer" nil="true"></height>
      <id type="integer">78304</id>
      <size type="integer">2816</size>
      <uploader-id type="integer">278</uploader-id>
      <width type="integer" nil="true"></width>
      <url>http://sinatra.lighthouseapp.com/attachments/78304/0001-Allow-nested-hash-parameters.patch</url>
    </attachment>
  </attachments>
</ticket>
