mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
added tag to increment a variable each time it is referenced
This commit is contained in:
37
lib/liquid/tags/inc.rb
Normal file
37
lib/liquid/tags/inc.rb
Normal 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
16
test/inc_tag_test.rb
Normal 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
|
||||
Reference in New Issue
Block a user