Project

rebus

0.0
The project is in a healthy, maintained state
Rebus template language compiler based on Ruby dynamic evaluation. Minimalistic and customizable.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 0.1.0
 Project Readme

rebus - Ruby stencil compiler

Rebus template language compiler based on Ruby dynamic evaluation. Minimalistic and customizable.

For example this document was rendered from readme.md.rbs template.

Installation

gem install rebus

Basics

Rules are:

  • input is interpreted line by line
  • there are 3 different line types recognized by the following prefixes:
    • # - a comment line skipped during compilation
    • $ - a code line evaluated during compilation
    • any other - a string line with possible interpolated code (see Ruby string interpolation rules)

Sample (stealed and translated from ERB documentation):

Template(Rebus - HTML):

<html>
  <head><title>Ruby Toys -- #@name</title></head>
  <body>

    <h1>#@name (#@code)</h1>
    <p>#@desc</p>

    <ul>
      $ @features.each do |f|
      <li><b>#{f}</b></li>
      $ end
    </ul>

    <p>
      $ if @cost < 10
      <b>Only #@cost!!!</b>
      $ else
      Call for a price, today!
      $ end
    </p>

  </body>
</html>

Source code(Ruby):

require 'rebus'
require 'modeling' # to keep sample code concise

class Product
  model :code, :name, :desc, :cost do
    @features = [ ]
  end

  def add_feature( feature )
    @features << feature
  end
end

toy = Product.new( "TZ-1002",
  "Rubysapien",
  "Geek's Best Friend!  Responds to Ruby commands...",
  999.95 )
toy.add_feature("Listens for verbal commands in the Ruby language!")
toy.add_feature("Ignores Perl, Java, and all C variants.")
toy.add_feature("Karate-Chop Action!!!")
toy.add_feature("Matz signature on left leg.")
toy.add_feature("Gem studded eyes... Rubies, of course!")

puts Rebus.compile_file "a0.rbs", toy

Output(HTML):

<html>
  <head><title>Ruby Toys -- Rubysapien</title></head>
  <body>

    <h1>Rubysapien (TZ-1002)</h1>
    <p>Geek's Best Friend!  Responds to Ruby commands...</p>

    <ul>
        <li><b>Listens for verbal commands in the Ruby language!</b></li>
        <li><b>Ignores Perl, Java, and all C variants.</b></li>
        <li><b>Karate-Chop Action!!!</b></li>
        <li><b>Matz signature on left leg.</b></li>
        <li><b>Gem studded eyes... Rubies, of course!</b></li>
    </ul>

    <p>
         Call for a price, today!
    </p>

  </body>
</html>

Usage

Wiki

Authors