On 9 Oct 2008, at 11:16, David Trasbo wrote:
>
> 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?
Yes :-)
here drop is an array (the first element is the key, the second is the
value)
Typically one using each with a hash, one does
some_hash.each do |key, value|
...
end
lastly, why is drops a hash at all and not an array ?
Fred
>
> --
> 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
-~----------~----~----~----~------~----~------~--~---