Skip to content

kbd/blue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 

Repository files navigation

Blue

Blue is a minimal in design, but full-featured template language for Ruby.

Features

  • template inheritance (the only template language in Ruby I'm aware of that does)
  • blocks
  • filters
  • functions
  • super convenient variable substitution
  • has a loader that caches pre-generated templates

Currently version 0.9. It's nearly fully functional and seems stable but it still needs a few small features, needs to be battle tested more, and I need to learn how to make it a gem. Other todos before release include Tilt support, a nice interface for Sinatra, and partials/includes.

Also, I'm pretty new to Ruby so please feel free to offer style suggestions.

Basic Usage

require 'blue'
loader = Blue::TemplateLoader.new './templates'
namespace = {:entries => Weblog.entries, :breadcrumbs => breadcrumbs}
loader.get(:weblog).render(namespace)

Template Language

There are only a few constructs. Here's an example template, I'll include more documentation later.

@extends base

@block content

% prevday = nil
% entries.each do |entry|
    % day = entry.creation_dt.strftime('%B %d, %Y')
    % if day != prevday
        <h2>
            <a title="permanent link for $day" href="$entry.dateuri">$entry.creation_dt|datefmt('%A, %B %d, %Y')</a>
        </h2>
    %end
    <h3><a href="$entry.url">$entry.title</a></h3>
    
    $printEntry(entry)
    % prevday = day
% end

<p>There were ${entries.length} entries, and you can print a dollar sign like ${'$'}.
Though of course a dollar sign won't be misinterpreted if it appears by itself $ or
as part of something that doesn't look like a variable reference (i.e. like money $3.50)</p>
@end

@def printEntry(entry)
	<div id="id$entry.id">
        <h3><a href="$entry.permalink">$entry.title</a></h3>
        @filter off
        $entry.rawhtml
        @filter
    </div>
@end

As you can see, a line starting with '%' just escapes out to Ruby code, and anything in a ${...} is a Ruby expression. Variable substitution is done by starting something that looks like a variable reference or function call with a dollar sign. Blue tries to be somewhat smart about what "looks like" a variable substitution but it's not foolproof. You can define functions, use filters, template inheritance, and so on.

License

MIT licensed

About

Blue template language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages