tongo

tongo is a ruby template engine based in Radius and Liquid. I couldn't have done it without the help of Temple, in my opinion, one of the most interesting projects I've ever seen. Right now the implementation is pretty naïve, I haven't done any kind of optimizations and there are probably bugs sneaking around.

Here comes what you were looking for, an example:

Given a context like this one:

class CustomContext < Tongo::Context
  tag :shout do
    'ARGH!'
  end

  tag :whisper do
    'shhh'
  end

  tag :upcase do |content|
    content.upcase
  end

  tag :loop do |attrs,content|
    number = (attrs['times'] || 1).to_i
    result = ''
    number.times { result << content }
    result
  end
end

When you use it to handle this template:

<h1 class="highlight">Header</h1>
<ul>
  <tng:loop times="3">
    <li>Hello World</li>
  </tng:loop>
</ul>
<tng:shout />
<strong><tng:shout /></strong>
<em>%{whisper | upcase}, %{shout}</em>

You should get this result:

<h1 class="highlight">Header</h1>
<ul>

    <li>Hello World</li>

    <li>Hello World</li>

    <li>Hello World</li>

</ul>
ARGH!
<strong>ARGH!</strong>
<em>SHHH, ARGH!</em>

So basically, it supports markup tags like , that can be empty or nested, and text tags like %| filter.

Contributing to tongo

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright (c) 2011 Rodrigo Alvarez. See LICENSE.txt for further details.