drnic-liquid 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +44 -0
- data/History.txt +44 -0
- data/MIT-LICENSE +20 -0
- data/Manifest.txt +34 -0
- data/README.rdoc +44 -0
- data/Rakefile +30 -0
- data/example/server/example_servlet.rb +37 -0
- data/example/server/liquid_servlet.rb +28 -0
- data/example/server/server.rb +12 -0
- data/example/server/templates/index.liquid +6 -0
- data/example/server/templates/products.liquid +45 -0
- data/init.rb +8 -0
- data/lib/extras/liquid_view.rb +51 -0
- data/lib/liquid.rb +70 -0
- data/lib/liquid/block.rb +102 -0
- data/lib/liquid/condition.rb +120 -0
- data/lib/liquid/context.rb +221 -0
- data/lib/liquid/document.rb +17 -0
- data/lib/liquid/drop.rb +51 -0
- data/lib/liquid/errors.rb +11 -0
- data/lib/liquid/extensions.rb +56 -0
- data/lib/liquid/file_system.rb +62 -0
- data/lib/liquid/htmltags.rb +74 -0
- data/lib/liquid/module_ex.rb +62 -0
- data/lib/liquid/standardfilters.rb +209 -0
- data/lib/liquid/strainer.rb +51 -0
- data/lib/liquid/tag.rb +26 -0
- data/lib/liquid/tags/assign.rb +33 -0
- data/lib/liquid/tags/capture.rb +35 -0
- data/lib/liquid/tags/case.rb +83 -0
- data/lib/liquid/tags/comment.rb +9 -0
- data/lib/liquid/tags/cycle.rb +59 -0
- data/lib/liquid/tags/for.rb +136 -0
- data/lib/liquid/tags/if.rb +79 -0
- data/lib/liquid/tags/ifchanged.rb +20 -0
- data/lib/liquid/tags/include.rb +55 -0
- data/lib/liquid/tags/unless.rb +33 -0
- data/lib/liquid/template.rb +147 -0
- data/lib/liquid/variable.rb +49 -0
- data/liquid.gemspec +40 -0
- data/performance/shopify.rb +92 -0
- data/performance/shopify/comment_form.rb +33 -0
- data/performance/shopify/database.rb +45 -0
- data/performance/shopify/json_filter.rb +7 -0
- data/performance/shopify/liquid.rb +18 -0
- data/performance/shopify/money_filter.rb +18 -0
- data/performance/shopify/paginate.rb +93 -0
- data/performance/shopify/shop_filter.rb +98 -0
- data/performance/shopify/tag_filter.rb +25 -0
- data/performance/shopify/vision.database.yml +945 -0
- data/performance/shopify/weight_filter.rb +11 -0
- data/performance/tests/dropify/article.liquid +74 -0
- data/performance/tests/dropify/blog.liquid +33 -0
- data/performance/tests/dropify/cart.liquid +66 -0
- data/performance/tests/dropify/collection.liquid +22 -0
- data/performance/tests/dropify/index.liquid +47 -0
- data/performance/tests/dropify/page.liquid +8 -0
- data/performance/tests/dropify/product.liquid +68 -0
- data/performance/tests/dropify/theme.liquid +105 -0
- data/performance/tests/ripen/article.liquid +74 -0
- data/performance/tests/ripen/blog.liquid +13 -0
- data/performance/tests/ripen/cart.liquid +54 -0
- data/performance/tests/ripen/collection.liquid +29 -0
- data/performance/tests/ripen/index.liquid +32 -0
- data/performance/tests/ripen/page.liquid +4 -0
- data/performance/tests/ripen/product.liquid +75 -0
- data/performance/tests/ripen/theme.liquid +85 -0
- data/performance/tests/tribble/404.liquid +56 -0
- data/performance/tests/tribble/article.liquid +98 -0
- data/performance/tests/tribble/blog.liquid +41 -0
- data/performance/tests/tribble/cart.liquid +134 -0
- data/performance/tests/tribble/collection.liquid +70 -0
- data/performance/tests/tribble/index.liquid +94 -0
- data/performance/tests/tribble/page.liquid +56 -0
- data/performance/tests/tribble/product.liquid +116 -0
- data/performance/tests/tribble/search.liquid +51 -0
- data/performance/tests/tribble/theme.liquid +90 -0
- data/performance/tests/vogue/article.liquid +66 -0
- data/performance/tests/vogue/blog.liquid +32 -0
- data/performance/tests/vogue/cart.liquid +58 -0
- data/performance/tests/vogue/collection.liquid +19 -0
- data/performance/tests/vogue/index.liquid +22 -0
- data/performance/tests/vogue/page.liquid +3 -0
- data/performance/tests/vogue/product.liquid +62 -0
- data/performance/tests/vogue/theme.liquid +122 -0
- data/test/assign_test.rb +11 -0
- data/test/block_test.rb +58 -0
- data/test/condition_test.rb +109 -0
- data/test/context_test.rb +482 -0
- data/test/drop_test.rb +162 -0
- data/test/error_handling_test.rb +89 -0
- data/test/extra/breakpoint.rb +547 -0
- data/test/extra/caller.rb +80 -0
- data/test/file_system_test.rb +30 -0
- data/test/filter_test.rb +95 -0
- data/test/helper.rb +20 -0
- data/test/html_tag_test.rb +31 -0
- data/test/if_else_test.rb +131 -0
- data/test/include_tag_test.rb +115 -0
- data/test/module_ex_test.rb +89 -0
- data/test/output_test.rb +121 -0
- data/test/parsing_quirks_test.rb +41 -0
- data/test/regexp_test.rb +45 -0
- data/test/security_test.rb +41 -0
- data/test/standard_filter_test.rb +161 -0
- data/test/standard_tag_test.rb +400 -0
- data/test/statements_test.rb +137 -0
- data/test/strainer_test.rb +21 -0
- data/test/template_test.rb +26 -0
- data/test/test_helper.rb +20 -0
- data/test/unless_else_test.rb +27 -0
- data/test/variable_test.rb +172 -0
- metadata +187 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require File.dirname(__FILE__) + '/helper'
|
|
3
|
+
|
|
4
|
+
class StrainerTest < Test::Unit::TestCase
|
|
5
|
+
include Liquid
|
|
6
|
+
|
|
7
|
+
def test_strainer
|
|
8
|
+
strainer = Strainer.create(nil)
|
|
9
|
+
assert_equal false, strainer.respond_to?('__test__')
|
|
10
|
+
assert_equal false, strainer.respond_to?('test')
|
|
11
|
+
assert_equal false, strainer.respond_to?('instance_eval')
|
|
12
|
+
assert_equal false, strainer.respond_to?('__send__')
|
|
13
|
+
assert_equal true, strainer.respond_to?('size') # from the standard lib
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_should_respond_to_two_parameters
|
|
17
|
+
strainer = Strainer.create(nil)
|
|
18
|
+
assert_equal true, strainer.respond_to?('size', false)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
|
2
|
+
|
|
3
|
+
class TemplateTest < Test::Unit::TestCase
|
|
4
|
+
include Liquid
|
|
5
|
+
|
|
6
|
+
def test_tokenize_strings
|
|
7
|
+
assert_equal [' '], Template.new.send(:tokenize, ' ')
|
|
8
|
+
assert_equal ['hello world'], Template.new.send(:tokenize, 'hello world')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_tokenize_variables
|
|
12
|
+
assert_equal ['{{funk}}'], Template.new.send(:tokenize, '{{funk}}')
|
|
13
|
+
assert_equal [' ', '{{funk}}', ' '], Template.new.send(:tokenize, ' {{funk}} ')
|
|
14
|
+
assert_equal [' ', '{{funk}}', ' ', '{{so}}', ' ', '{{brother}}', ' '], Template.new.send(:tokenize, ' {{funk}} {{so}} {{brother}} ')
|
|
15
|
+
assert_equal [' ', '{{ funk }}', ' '], Template.new.send(:tokenize, ' {{ funk }} ')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_tokenize_blocks
|
|
19
|
+
assert_equal ['{%comment%}'], Template.new.send(:tokenize, '{%comment%}')
|
|
20
|
+
assert_equal [' ', '{%comment%}', ' '], Template.new.send(:tokenize, ' {%comment%} ')
|
|
21
|
+
|
|
22
|
+
assert_equal [' ', '{%comment%}', ' ', '{%end%}', ' '], Template.new.send(:tokenize, ' {%comment%} {%end%} ')
|
|
23
|
+
assert_equal [' ', '{% comment %}', ' ', '{% end %}', ' '], Template.new.send(:tokenize, " {% comment %} {% end %} ")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__)+ '/extra')
|
|
3
|
+
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
require 'test/unit/assertions'
|
|
6
|
+
require 'caller'
|
|
7
|
+
require 'breakpoint'
|
|
8
|
+
require File.dirname(__FILE__) + '/../lib/liquid'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
module Test
|
|
12
|
+
module Unit
|
|
13
|
+
module Assertions
|
|
14
|
+
include Liquid
|
|
15
|
+
def assert_template_result(expected, template, assigns={}, message=nil)
|
|
16
|
+
assert_equal expected, Template.parse(template).render(assigns)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
|
2
|
+
|
|
3
|
+
class UnlessElseTest < Test::Unit::TestCase
|
|
4
|
+
include Liquid
|
|
5
|
+
|
|
6
|
+
def test_unless
|
|
7
|
+
assert_template_result(' ',' {% unless true %} this text should not go into the output {% end %} ')
|
|
8
|
+
assert_template_result(' this text should go into the output ',
|
|
9
|
+
' {% unless false %} this text should go into the output {% end %} ')
|
|
10
|
+
assert_template_result(' you rock ?','{% unless true %} you suck {% end %} {% unless false %} you rock {% end %}?')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_unless_else
|
|
14
|
+
assert_template_result(' YES ','{% unless true %} NO {% else %} YES {% end %}')
|
|
15
|
+
assert_template_result(' YES ','{% unless false %} YES {% else %} NO {% end %}')
|
|
16
|
+
assert_template_result(' YES ','{% unless "foo" %} NO {% else %} YES {% end %}')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_unless_in_loop
|
|
20
|
+
assert_template_result '23', '{% for i in choices %}{% unless i %}{{ forloop.index }}{% end %}{% end %}', 'choices' => [1, nil, false]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_unless_else_in_loop
|
|
24
|
+
assert_template_result ' TRUE 2 3 ', '{% for i in choices %}{% unless i %} {{ forloop.index }} {% else %} TRUE {% end %}{% end %}', 'choices' => [1, nil, false]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require File.dirname(__FILE__) + '/helper'
|
|
3
|
+
|
|
4
|
+
class VariableTest < Test::Unit::TestCase
|
|
5
|
+
include Liquid
|
|
6
|
+
|
|
7
|
+
def test_variable
|
|
8
|
+
var = Variable.new('hello')
|
|
9
|
+
assert_equal 'hello', var.name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_filters
|
|
13
|
+
var = Variable.new('hello | textileze')
|
|
14
|
+
assert_equal 'hello', var.name
|
|
15
|
+
assert_equal [[:textileze,[]]], var.filters
|
|
16
|
+
|
|
17
|
+
var = Variable.new('hello | textileze | paragraph')
|
|
18
|
+
assert_equal 'hello', var.name
|
|
19
|
+
assert_equal [[:textileze,[]], [:paragraph,[]]], var.filters
|
|
20
|
+
|
|
21
|
+
var = Variable.new(%! hello | strftime: '%Y'!)
|
|
22
|
+
assert_equal 'hello', var.name
|
|
23
|
+
assert_equal [[:strftime,["'%Y'"]]], var.filters
|
|
24
|
+
|
|
25
|
+
var = Variable.new(%! 'typo' | link_to: 'Typo', true !)
|
|
26
|
+
assert_equal %!'typo'!, var.name
|
|
27
|
+
assert_equal [[:link_to,["'Typo'", "true"]]], var.filters
|
|
28
|
+
|
|
29
|
+
var = Variable.new(%! 'typo' | link_to: 'Typo', false !)
|
|
30
|
+
assert_equal %!'typo'!, var.name
|
|
31
|
+
assert_equal [[:link_to,["'Typo'", "false"]]], var.filters
|
|
32
|
+
|
|
33
|
+
var = Variable.new(%! 'foo' | repeat: 3 !)
|
|
34
|
+
assert_equal %!'foo'!, var.name
|
|
35
|
+
assert_equal [[:repeat,["3"]]], var.filters
|
|
36
|
+
|
|
37
|
+
var = Variable.new(%! 'foo' | repeat: 3, 3 !)
|
|
38
|
+
assert_equal %!'foo'!, var.name
|
|
39
|
+
assert_equal [[:repeat,["3","3"]]], var.filters
|
|
40
|
+
|
|
41
|
+
var = Variable.new(%! 'foo' | repeat: 3, 3, 3 !)
|
|
42
|
+
assert_equal %!'foo'!, var.name
|
|
43
|
+
assert_equal [[:repeat,["3","3","3"]]], var.filters
|
|
44
|
+
|
|
45
|
+
var = Variable.new(%! hello | strftime: '%Y, okay?'!)
|
|
46
|
+
assert_equal 'hello', var.name
|
|
47
|
+
assert_equal [[:strftime,["'%Y, okay?'"]]], var.filters
|
|
48
|
+
|
|
49
|
+
var = Variable.new(%! hello | things: "%Y, okay?", 'the other one'!)
|
|
50
|
+
assert_equal 'hello', var.name
|
|
51
|
+
assert_equal [[:things,["\"%Y, okay?\"","'the other one'"]]], var.filters
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_filter_with_date_parameter
|
|
55
|
+
|
|
56
|
+
var = Variable.new(%! '2006-06-06' | date: "%m/%d/%Y"!)
|
|
57
|
+
assert_equal "'2006-06-06'", var.name
|
|
58
|
+
assert_equal [[:date,["\"%m/%d/%Y\""]]], var.filters
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_filters_without_whitespace
|
|
63
|
+
var = Variable.new('hello | textileze | paragraph')
|
|
64
|
+
assert_equal 'hello', var.name
|
|
65
|
+
assert_equal [[:textileze,[]], [:paragraph,[]]], var.filters
|
|
66
|
+
|
|
67
|
+
var = Variable.new('hello|textileze|paragraph')
|
|
68
|
+
assert_equal 'hello', var.name
|
|
69
|
+
assert_equal [[:textileze,[]], [:paragraph,[]]], var.filters
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_symbol
|
|
73
|
+
var = Variable.new("http://disney.com/logo.gif | image: 'med' ")
|
|
74
|
+
assert_equal 'http://disney.com/logo.gif', var.name
|
|
75
|
+
assert_equal [[:image,["'med'"]]], var.filters
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_string_single_quoted
|
|
79
|
+
var = Variable.new(%| "hello" |)
|
|
80
|
+
assert_equal '"hello"', var.name
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_string_double_quoted
|
|
84
|
+
var = Variable.new(%| 'hello' |)
|
|
85
|
+
assert_equal "'hello'", var.name
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_integer
|
|
89
|
+
var = Variable.new(%| 1000 |)
|
|
90
|
+
assert_equal "1000", var.name
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_float
|
|
94
|
+
var = Variable.new(%| 1000.01 |)
|
|
95
|
+
assert_equal "1000.01", var.name
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_string_with_special_chars
|
|
99
|
+
var = Variable.new(%| 'hello! $!@.;"ddasd" ' |)
|
|
100
|
+
assert_equal %|'hello! $!@.;"ddasd" '|, var.name
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_string_dot
|
|
104
|
+
var = Variable.new(%| test.test |)
|
|
105
|
+
assert_equal 'test.test', var.name
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class VariableResolutionTest < Test::Unit::TestCase
|
|
111
|
+
include Liquid
|
|
112
|
+
|
|
113
|
+
def test_simple_variable
|
|
114
|
+
template = Template.parse(%|{{test}}|)
|
|
115
|
+
assert_equal 'worked', template.render('test' => 'worked')
|
|
116
|
+
assert_equal 'worked wonderfully', template.render('test' => 'worked wonderfully')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_simple_with_whitespaces
|
|
120
|
+
template = Template.parse(%| {{ test }} |)
|
|
121
|
+
assert_equal ' worked ', template.render('test' => 'worked')
|
|
122
|
+
assert_equal ' worked wonderfully ', template.render('test' => 'worked wonderfully')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_ignore_unknown
|
|
126
|
+
template = Template.parse(%|{{ test }}|)
|
|
127
|
+
assert_equal '', template.render
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def test_hash_scoping
|
|
131
|
+
template = Template.parse(%|{{ test.test }}|)
|
|
132
|
+
assert_equal 'worked', template.render('test' => {'test' => 'worked'})
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_preset_assigns
|
|
136
|
+
template = Template.parse(%|{{ test }}|)
|
|
137
|
+
template.assigns['test'] = 'worked'
|
|
138
|
+
assert_equal 'worked', template.render
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_reuse_parsed_template
|
|
142
|
+
template = Template.parse(%|{{ greeting }} {{ name }}|)
|
|
143
|
+
template.assigns['greeting'] = 'Goodbye'
|
|
144
|
+
assert_equal 'Hello Tobi', template.render('greeting' => 'Hello', 'name' => 'Tobi')
|
|
145
|
+
assert_equal 'Hello ', template.render('greeting' => 'Hello', 'unknown' => 'Tobi')
|
|
146
|
+
assert_equal 'Hello Brian', template.render('greeting' => 'Hello', 'name' => 'Brian')
|
|
147
|
+
assert_equal 'Goodbye Brian', template.render('name' => 'Brian')
|
|
148
|
+
assert_equal({'greeting'=>'Goodbye'}, template.assigns)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_assigns_not_polluted_from_template
|
|
152
|
+
template = Template.parse(%|{{ test }}{% assign test = 'bar' %}{{ test }}|)
|
|
153
|
+
template.assigns['test'] = 'baz'
|
|
154
|
+
assert_equal 'bazbar', template.render
|
|
155
|
+
assert_equal 'bazbar', template.render
|
|
156
|
+
assert_equal 'foobar', template.render('test' => 'foo')
|
|
157
|
+
assert_equal 'bazbar', template.render
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_hash_with_default_proc
|
|
161
|
+
template = Template.parse(%|Hello {{ test }}|)
|
|
162
|
+
assigns = Hash.new { |h,k| raise "Unknown variable '#{k}'" }
|
|
163
|
+
assigns['test'] = 'Tobi'
|
|
164
|
+
assert_equal 'Hello Tobi', template.render!(assigns)
|
|
165
|
+
assigns.delete('test')
|
|
166
|
+
e = assert_raises(RuntimeError) {
|
|
167
|
+
template.render!(assigns)
|
|
168
|
+
}
|
|
169
|
+
assert_equal "Unknown variable 'test'", e.message
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: drnic-liquid
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 2.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Tobias Luetke
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-08-31 00:00:00 +10:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: hoe
|
|
17
|
+
type: :development
|
|
18
|
+
version_requirement:
|
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
20
|
+
requirements:
|
|
21
|
+
- - ">="
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: 2.3.3
|
|
24
|
+
version:
|
|
25
|
+
description: |-
|
|
26
|
+
A secure non evaling end user template engine with aesthetic markup.
|
|
27
|
+
|
|
28
|
+
Liquid is a template engine which I wrote for very specific requirements.
|
|
29
|
+
|
|
30
|
+
* It has to have beautiful and simple markup.
|
|
31
|
+
Template engines which don't produce good looking markup are no fun to use.
|
|
32
|
+
* It needs to be non evaling and secure. Liquid templates are made so that users can edit them. You don't want to run code on your server which your users wrote.
|
|
33
|
+
* It has to be stateless. Compile and render steps have to be seperate so that the expensive parsing and compiling can be done once and later on you can
|
|
34
|
+
just render it passing in a hash with local variables and objects.
|
|
35
|
+
email:
|
|
36
|
+
- tobi@leetsoft.com
|
|
37
|
+
executables: []
|
|
38
|
+
|
|
39
|
+
extensions: []
|
|
40
|
+
|
|
41
|
+
extra_rdoc_files:
|
|
42
|
+
- History.txt
|
|
43
|
+
- Manifest.txt
|
|
44
|
+
files:
|
|
45
|
+
- CHANGELOG
|
|
46
|
+
- History.txt
|
|
47
|
+
- MIT-LICENSE
|
|
48
|
+
- Manifest.txt
|
|
49
|
+
- README.rdoc
|
|
50
|
+
- Rakefile
|
|
51
|
+
- example/server/example_servlet.rb
|
|
52
|
+
- example/server/liquid_servlet.rb
|
|
53
|
+
- example/server/server.rb
|
|
54
|
+
- example/server/templates/index.liquid
|
|
55
|
+
- example/server/templates/products.liquid
|
|
56
|
+
- init.rb
|
|
57
|
+
- lib/extras/liquid_view.rb
|
|
58
|
+
- lib/liquid.rb
|
|
59
|
+
- lib/liquid/block.rb
|
|
60
|
+
- lib/liquid/condition.rb
|
|
61
|
+
- lib/liquid/context.rb
|
|
62
|
+
- lib/liquid/document.rb
|
|
63
|
+
- lib/liquid/drop.rb
|
|
64
|
+
- lib/liquid/errors.rb
|
|
65
|
+
- lib/liquid/extensions.rb
|
|
66
|
+
- lib/liquid/file_system.rb
|
|
67
|
+
- lib/liquid/htmltags.rb
|
|
68
|
+
- lib/liquid/module_ex.rb
|
|
69
|
+
- lib/liquid/standardfilters.rb
|
|
70
|
+
- lib/liquid/strainer.rb
|
|
71
|
+
- lib/liquid/tag.rb
|
|
72
|
+
- lib/liquid/tags/assign.rb
|
|
73
|
+
- lib/liquid/tags/capture.rb
|
|
74
|
+
- lib/liquid/tags/case.rb
|
|
75
|
+
- lib/liquid/tags/comment.rb
|
|
76
|
+
- lib/liquid/tags/cycle.rb
|
|
77
|
+
- lib/liquid/tags/for.rb
|
|
78
|
+
- lib/liquid/tags/if.rb
|
|
79
|
+
- lib/liquid/tags/ifchanged.rb
|
|
80
|
+
- lib/liquid/tags/include.rb
|
|
81
|
+
- lib/liquid/tags/unless.rb
|
|
82
|
+
- lib/liquid/template.rb
|
|
83
|
+
- lib/liquid/variable.rb
|
|
84
|
+
- liquid.gemspec
|
|
85
|
+
- performance/shopify.rb
|
|
86
|
+
- performance/shopify/comment_form.rb
|
|
87
|
+
- performance/shopify/database.rb
|
|
88
|
+
- performance/shopify/json_filter.rb
|
|
89
|
+
- performance/shopify/liquid.rb
|
|
90
|
+
- performance/shopify/money_filter.rb
|
|
91
|
+
- performance/shopify/paginate.rb
|
|
92
|
+
- performance/shopify/shop_filter.rb
|
|
93
|
+
- performance/shopify/tag_filter.rb
|
|
94
|
+
- performance/shopify/vision.database.yml
|
|
95
|
+
- performance/shopify/weight_filter.rb
|
|
96
|
+
- performance/tests/dropify/article.liquid
|
|
97
|
+
- performance/tests/dropify/blog.liquid
|
|
98
|
+
- performance/tests/dropify/cart.liquid
|
|
99
|
+
- performance/tests/dropify/collection.liquid
|
|
100
|
+
- performance/tests/dropify/index.liquid
|
|
101
|
+
- performance/tests/dropify/page.liquid
|
|
102
|
+
- performance/tests/dropify/product.liquid
|
|
103
|
+
- performance/tests/dropify/theme.liquid
|
|
104
|
+
- performance/tests/ripen/article.liquid
|
|
105
|
+
- performance/tests/ripen/blog.liquid
|
|
106
|
+
- performance/tests/ripen/cart.liquid
|
|
107
|
+
- performance/tests/ripen/collection.liquid
|
|
108
|
+
- performance/tests/ripen/index.liquid
|
|
109
|
+
- performance/tests/ripen/page.liquid
|
|
110
|
+
- performance/tests/ripen/product.liquid
|
|
111
|
+
- performance/tests/ripen/theme.liquid
|
|
112
|
+
- performance/tests/tribble/404.liquid
|
|
113
|
+
- performance/tests/tribble/article.liquid
|
|
114
|
+
- performance/tests/tribble/blog.liquid
|
|
115
|
+
- performance/tests/tribble/cart.liquid
|
|
116
|
+
- performance/tests/tribble/collection.liquid
|
|
117
|
+
- performance/tests/tribble/index.liquid
|
|
118
|
+
- performance/tests/tribble/page.liquid
|
|
119
|
+
- performance/tests/tribble/product.liquid
|
|
120
|
+
- performance/tests/tribble/search.liquid
|
|
121
|
+
- performance/tests/tribble/theme.liquid
|
|
122
|
+
- performance/tests/vogue/article.liquid
|
|
123
|
+
- performance/tests/vogue/blog.liquid
|
|
124
|
+
- performance/tests/vogue/cart.liquid
|
|
125
|
+
- performance/tests/vogue/collection.liquid
|
|
126
|
+
- performance/tests/vogue/index.liquid
|
|
127
|
+
- performance/tests/vogue/page.liquid
|
|
128
|
+
- performance/tests/vogue/product.liquid
|
|
129
|
+
- performance/tests/vogue/theme.liquid
|
|
130
|
+
- test/assign_test.rb
|
|
131
|
+
- test/block_test.rb
|
|
132
|
+
- test/condition_test.rb
|
|
133
|
+
- test/context_test.rb
|
|
134
|
+
- test/drop_test.rb
|
|
135
|
+
- test/error_handling_test.rb
|
|
136
|
+
- test/extra/breakpoint.rb
|
|
137
|
+
- test/extra/caller.rb
|
|
138
|
+
- test/file_system_test.rb
|
|
139
|
+
- test/filter_test.rb
|
|
140
|
+
- test/helper.rb
|
|
141
|
+
- test/html_tag_test.rb
|
|
142
|
+
- test/if_else_test.rb
|
|
143
|
+
- test/include_tag_test.rb
|
|
144
|
+
- test/module_ex_test.rb
|
|
145
|
+
- test/output_test.rb
|
|
146
|
+
- test/parsing_quirks_test.rb
|
|
147
|
+
- test/regexp_test.rb
|
|
148
|
+
- test/security_test.rb
|
|
149
|
+
- test/standard_filter_test.rb
|
|
150
|
+
- test/standard_tag_test.rb
|
|
151
|
+
- test/statements_test.rb
|
|
152
|
+
- test/strainer_test.rb
|
|
153
|
+
- test/template_test.rb
|
|
154
|
+
- test/test_helper.rb
|
|
155
|
+
- test/unless_else_test.rb
|
|
156
|
+
- test/variable_test.rb
|
|
157
|
+
has_rdoc: true
|
|
158
|
+
homepage: http://www.liquidmarkup.org
|
|
159
|
+
licenses: []
|
|
160
|
+
|
|
161
|
+
post_install_message:
|
|
162
|
+
rdoc_options:
|
|
163
|
+
- --main
|
|
164
|
+
- README.rdoc
|
|
165
|
+
require_paths:
|
|
166
|
+
- lib
|
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: "0"
|
|
172
|
+
version:
|
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
|
+
requirements:
|
|
175
|
+
- - ">="
|
|
176
|
+
- !ruby/object:Gem::Version
|
|
177
|
+
version: "0"
|
|
178
|
+
version:
|
|
179
|
+
requirements: []
|
|
180
|
+
|
|
181
|
+
rubyforge_project: liquid
|
|
182
|
+
rubygems_version: 1.3.5
|
|
183
|
+
signing_key:
|
|
184
|
+
specification_version: 3
|
|
185
|
+
summary: A secure non evaling end user template engine with aesthetic markup
|
|
186
|
+
test_files:
|
|
187
|
+
- test/test_helper.rb
|