Yeah, this is indeed a bug. I've pushed a fix, which'll be released in
2.2.9, which I'll probably put out this weekend.

On Wed, Oct 14, 2009 at 10:13 AM, David Blondeau
<[email protected]>wrote:

> Nathan,
>
> I understand having nested capture and capture_haml is not the best and we
> usually try not to do it.
>
> We have some custom generic view helpers for our application that generate
> in place editing of data section (one data section has a link to edit that
> section. That section is replaced (hide/show) on click by a form).
> To generate those, we need to capture the result of the rails form_for and
> remote_form_for helper methods. The content of that being defined in the
> Haml template, we need to capture_haml it...
>
> Something reading like that:
>
> = editable_data(person, ...) do |panel|
>   - panel.show_data_table do |table|
>     = table.row(:first_name)
>     = table.row(:last_name)
>     ...
>
>   - panel.edit(...) do |form|
>     = form.errors
>     %table
>       %tbody
>         = form.row(:first_name)
>         = form.row(:last_name)
>         ...
>
> Still, 2.0 works fine with those nested capture and capture_haml. It would
> be nice if we can get 2.2 to do it as well.
>
> Any idea why _erbout and _hamlout.buffer are out of sync in the example I
> gave in the original post?
> Would it be OK to use _hamlout.buffer in place of _erbout in push_script?
>
> Thanks,
> David
>
>
> On Wed, Oct 14, 2009 at 9:07 AM, Nathan Weizenbaum <[email protected]>wrote:
>
>> Why are you mixing #capture and #capture_haml? That seems like a recipe
>> for trouble, and indeed seems to be what's causing this particular issue.
>>
>>
>> On Tue, Oct 13, 2009 at 8:34 PM, David <[email protected]> wrote:
>>
>>>
>>> Hi,
>>>
>>> We are upgrading the Haml library (from 2.0.7 to 2.2.8) used for our
>>> Rails (2.2.3) application
>>> We are seeing an issue where the result of a script ( = helper_method
>>> (...) ) is appended to the wrong buffer in a specific case.
>>>
>>> Here is a simple example that reproduces the issue (the actual logic
>>> is actually spread over several helper methods like form helpers and
>>> other view helpers):
>>>
>>> In ApplicationHelper
>>> def nested_captures
>>>  capture do
>>>    capture_haml do
>>>      haml_concat "start"
>>>      haml_concat(capture_haml {
>>>        haml_concat "yeah"
>>>        yield(self)
>>>      })
>>>      haml_concat "end"
>>>    end
>>>  end
>>> end
>>>
>>>
>>> And in the Haml template:
>>> .section
>>>  .message
>>>    = nested_captures do |template|
>>>      foo
>>>      = succeed(",") do
>>>        bar
>>>
>>> With 2.2.8, we are getting:
>>> <div class='section'>
>>>  <div class='message'>
>>>       bar,    start
>>>              yeah
>>>       foo
>>>
>>>
>>>              end
>>>  </div>
>>> </div>
>>>
>>> Looking at precompiler.rb, at the end of push_script:
>>> push_and_tabulate([:loud, "_erbout << #{no_format ? "#
>>> {output_temp}.to_s;" : out}",
>>>  !(opts[:in_tag] || opts[:nuke_inner_whitespace] || @options
>>> [:ugly])])
>>>
>>> If we replace _erbout by _hamlout.buffer (like it was in 2.0.7)
>>> push_and_tabulate([:loud, "__hamlout.buffer << #{no_format ? "#
>>> {output_temp}.to_s;" : out}",
>>>  !(opts[:in_tag] || opts[:nuke_inner_whitespace] || @options
>>> [:ugly])])
>>>
>>> then we get the expected result
>>> <div class='section'>
>>>  <div class='message'>
>>>
>>>        start
>>>        yeah
>>>    foo
>>>    bar,
>>>
>>>        end
>>>  </div>
>>> </div>
>>>
>>> This seems to indicate that _erbout is not set correctly for the =
>>> succeed... .
>>> Not sure why _erbout != _hamlout.buffer at that point but thought I
>>> would ask if someone can shed some light on the issue before we dig
>>> further.
>>>
>>> Thanks,
>>> David
>>>
>>>
>>>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Haml" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/haml?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to