# Template language similar to examples

**URL:** <https://www.ruby-forum.com/t/template-language-similar-to-examples/99891>\
**Category:** Ruby\
**Created:** [February 1, 2006, 9:31pm UTC](https://www.ruby-forum.com/t/template-language-similar-to-examples/99891 "2006-02-01T21:31:51Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![elriba](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/9f8e36/32.png) [@elriba](https://www.ruby-forum.com/u/elriba)\
**Post date:** [February 1, 2006, 9:31pm UTC](https://www.ruby-forum.com/t/template-language-similar-to-examples/99891/1 "2006-02-01T21:31:51Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![elriba](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/9f8e36/32.png) [@elriba](https://www.ruby-forum.com/u/elriba)\
**Post date:** [February 1, 2006, 10:30pm UTC](https://www.ruby-forum.com/t/template-language-similar-to-examples/99891/2 "2006-02-01T22:30:13Z")

</div>

(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 R. 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
```
