Ross Bamford
2/1/2006 9:29:00 PM
(Apologies if this is a dupe, messages that cross the gateway seem to
have messed up headers - replies don't go to the list?)
On Thu, 2006-02-02 at 05:32 +0900, Edgard Riba wrote:
> #!This is a comment
> #DECLARE(%myProperty) #!Here I declare a property (variable) for
> #!use within the template
> #DECLARE(%myCollection),MULTI #!This would be an array collection
> #SET(%mySymbol,1) #!assign a value of 1
> #ADD(%myCollection,'A') #!add something to the collection
> #ADD(%myCollection,'B') #!add something to the collection
> #ADD(%myCollection,'C') #!add something to the collection
>
> #!The code that goes below goes straight into the output,
> #!except that it takes into account how the #IF is evaluated.
> class myTestClass
> def initialize
> #IF(%mySymbol = 1)
> @msg = 'Test1'
> #ELSE
> @msg = 'Test2'
> #ENDIF
> #INSERT(%myTemplateProcedure,%myCollection)
> end
> end
>
> #GROUP(%myTemplateProcedure,%pCollection)
> #!For this example, the code below generates:
> #! @msgA = 'A'
> #! @msgB = 'B'
> #! @msgC = 'C'
> #!Not very useful, but serves as an example of the things I'm looking
> for.
> #FOR(%myCollection)
> @msg%myCollection = '%myCollection'
> #ENDFOR
>
>
> The output would be:
>
> class myTestClass
> def initialize
> @msg = 'Test1'
> @msgA = 'A'
> @msgB = 'B'
> @msgC = 'C'
> end
> end
>
> Are any of you guys familiar with a library that will do something
> similar to the above?
Wow. Couldn't you just use ERB?
require 'erb'
my_symbol = 1
my_collection = ['A', 'B', 'C']
my_template_proc = lambda do |coll|
coll.map { |a| "@msg#{a}" }.join(', ') + " = #{coll.inspect}"
end
e = ERB.new <<-EOF
class MyTestClass
def initialize
<% if my_symbol %>
@msg = 'Test1'
<% else %>
@msg = 'Test2'
<% end %>
<%= my_template_proc.call(my_collection) %>
end
end
EOF
puts e.result
--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk