Forum: Ruby Template language similar to examples...

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Cdc02dd1028e0e665e480ffcca068435?d=identicon&s=25 Edgard Riba (elriba)
on 2006-02-01 21:31
Hi,

I would like to process a text file which contains property-tokens which
are replaced appropiately by the template processing library.
Property-tokens can be single value, or can be collection of values.

The format I would like to use is something like this (the specific
characters used to signal might be different):

#!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?

Thanks,
Edgard
A9b6a93b860020caf9d2d1d58c32478f?d=identicon&s=25 Ross Bamford (Guest)
on 2006-02-01 22:30
(Received via mailing list)
(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:

> #!except that it takes into account how the #IF is evaluated.
>
>
> 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
This topic is locked and can not be replied to.