forked from Shopify/liquid
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- added support for literals [closes Shopify#6] Code beautifier - indented some files
- Loading branch information
DBA
authored and
Tobias Lütke
committed
Aug 24, 2010
1 parent
4819eb1
commit c00a650
Showing
7 changed files
with
95 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,9 @@ | ||
module Liquid | ||
class Comment < Block | ||
class Comment < Block | ||
def render(context) | ||
'' | ||
end | ||
end | ||
end | ||
Template.register_tag('comment', Comment) | ||
end | ||
|
||
Template.register_tag('comment', Comment) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
module Liquid | ||
|
||
class Literal < Block | ||
|
||
# Class methods | ||
|
||
# Converts a shorthand Liquid literal into its long representation. | ||
# | ||
# Currently the Template parser only knows how to handle the long version. | ||
# So, it always checks if it is in the presence of a literal, in which case it gets converted through this method. | ||
# | ||
# Example: | ||
# Liquid::Literal "{{{ hello world }}}" #=> "{% literal %} hello world {% endliteral %}" | ||
def self.from_shorthand(literal) | ||
literal =~ LiteralShorthand ? "{% literal %}#{$1}{% endliteral %}" : literal | ||
end | ||
|
||
# Public instance methods | ||
|
||
def parse(tokens) # :nodoc: | ||
@nodelist ||= [] | ||
@nodelist.clear | ||
|
||
while token = tokens.shift | ||
if token =~ FullToken && block_delimiter == $1 | ||
end_tag | ||
return | ||
else | ||
@nodelist << token | ||
end | ||
end | ||
|
||
# Make sure that its ok to end parsing in the current block. | ||
# Effectively this method will throw and exception unless the current block is | ||
# of type Document | ||
assert_missing_delimitation! | ||
end # parse | ||
|
||
end | ||
|
||
Template.register_tag('literal', Literal) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
require 'test_helper' | ||
|
||
class LiteralTagTest < Test::Unit::TestCase | ||
include Liquid | ||
|
||
def test_empty_literal | ||
assert_template_result '', '{% literal %}{% endliteral %}' | ||
assert_template_result '', '{{{}}}' | ||
end | ||
|
||
def test_simple_literal_value | ||
assert_template_result 'howdy', | ||
'{% literal %}howdy{% endliteral %}' | ||
end | ||
|
||
def test_literals_ignore_liquid_markup | ||
expected = %({% if 'gnomeslab' contain 'liquid' %}yes{ % endif %}) | ||
template = %({% literal %}#{expected}{% endliteral %}) | ||
|
||
assert_template_result expected, template | ||
end | ||
|
||
def test_shorthand_syntax | ||
expected = %({% if 'gnomeslab' contain 'liquid' %}yes{ % endif %}) | ||
template = %({{{#{expected}}}}) | ||
|
||
assert_template_result expected, template | ||
end | ||
|
||
# Class methods | ||
def test_from_shorthand | ||
assert_equal '{% literal %}gnomeslab{% endliteral %}', Liquid::Literal.from_shorthand('{{{gnomeslab}}}') | ||
end | ||
|
||
def test_from_shorthand_ignores_improper_syntax | ||
text = "{% if 'hi' == 'hi' %}hi{% endif %}" | ||
assert_equal text, Liquid::Literal.from_shorthand(text) | ||
end | ||
end # AssignTest |