Frederick Cheung wrote:
> On 9 Oct 2008, at 10:15, David Trasbo wrote:
>
>> I don't see other possibilities.
> accumulate the replacements you need and do them at the end (last one
> first)
>>> your locals are things like bar=foo (and i imagine the values are
>>> blank)
>>
>> Unfortunately that is not true. When I comment out the "content[from,
>> to] = render..." line and put "puts debug arguments" on the line
>> before
>> so it looks like this:
>>
> given how :locals is handled it seems highly likely
>> foo: bars
>> bar: foos
>>
> It would be a lot simpler to just stick a breakpoint in there (or
> output arguments.inspect)
I'm quite close to the solution now, my method now looks like this:
def dropify(content)
s = StringScanner.new(content)
drops = {}
i = 0
while s.scan_until /\{/
drop = {}
drop[:from] = s.pointer - 1
drop[:arguments] = {}
drop[:partial] = s.scan /\w+/
s.skip /\s+/
while argument = s.scan( /\w+:\w+/)
name, value = argument.split(/:/)
drop[:arguments][name.to_sym] = value
s.skip /\s+/
end
drop[:to] = s.pointer+1
s.skip_until /\}/
i = i+1
drops[i] = drop
end
puts drops.inspect
drops.each do |drop|
#content[drop[:from], drop[:to]] = "...Partial content..."
end
content
end
The difference is, that I now have a hash called "drops" with properties
for all my partials to render in there. For each partial I create a
temporary hash called "drop" that I apply to "drops" in the end.
Then I loop over each drop and replace the {some_partial foo:bar} stuff
with a partial (like you wanted: after the StringScanner has finished).
As you can see, I'm doing a drops.inspect, and it outputs this:
{1=>{:to=>42, :partial=>"contact_form", :arguments=>{:hello=>"you",
:bar=>"foos", :foo=>"bars"}, :from=>0}, 2=>{:to=>88,
:partial=>"contact_form", :arguments=>{:hi=>"you", :its=>"a_good_day"},
:from=>43}}
It looks right but when I uncomment one of the last lines
(content[drop[:from], drop[:to]] = "...) I get this error:
Symbol as array index
But I'm not using an array!.. Am I missing something?
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---