added tag to increment a variable each time it is referenced

This commit is contained in:
Michael Richardson
2010-08-31 16:17:12 -04:00
parent 0526348cae
commit ca2fa587cf
2 changed files with 53 additions and 0 deletions

37
lib/liquid/tags/inc.rb Normal file
View File

@@ -0,0 +1,37 @@
#require 'rubygems'
#require 'ruby-debug'
module Liquid
# inc is used in a place where one needs to insert a counter
# into a template, and needs the counter to survive across
# multiple instantiations of the template.
#
# if the variable does not exist, it is created with value 0.
# Hello: {% inc variable %}
#
# gives you:
#
# Hello: 0
# Hello: 1
# Hello: 2
#
class Inc < Tag
def initialize(tag_name, markup, tokens)
@variable = markup.strip
super
end
def render(context)
value = context.registers[@variable] ||= 0
context.registers[@variable] = value + 1
value.to_s
end
private
end
Template.register_tag('inc', Inc)
end

16
test/inc_tag_test.rb Normal file
View File

@@ -0,0 +1,16 @@
require File.dirname(__FILE__) + '/helper'
class IncTagTest < Test::Unit::TestCase
include Liquid
def test_inc
assert_template_result('0','{%inc port %}')
assert_template_result('0 1','{%inc port %} {%inc port%}')
assert_template_result('0 0 1 2 1',
'{%inc port %} {%inc starboard%} ' +
'{%inc port %} {%inc port%} ' +
'{%inc starboard %}')
end
end