liquid 2.6.3 → 5.4.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.
Files changed (100) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +272 -26
  3. data/README.md +67 -3
  4. data/lib/liquid/block.rb +62 -94
  5. data/lib/liquid/block_body.rb +255 -0
  6. data/lib/liquid/condition.rb +96 -38
  7. data/lib/liquid/context.rb +172 -154
  8. data/lib/liquid/document.rb +57 -9
  9. data/lib/liquid/drop.rb +33 -14
  10. data/lib/liquid/errors.rb +56 -10
  11. data/lib/liquid/expression.rb +45 -0
  12. data/lib/liquid/extensions.rb +21 -7
  13. data/lib/liquid/file_system.rb +27 -14
  14. data/lib/liquid/forloop_drop.rb +92 -0
  15. data/lib/liquid/i18n.rb +41 -0
  16. data/lib/liquid/interrupts.rb +3 -2
  17. data/lib/liquid/lexer.rb +62 -0
  18. data/lib/liquid/locales/en.yml +29 -0
  19. data/lib/liquid/parse_context.rb +54 -0
  20. data/lib/liquid/parse_tree_visitor.rb +42 -0
  21. data/lib/liquid/parser.rb +102 -0
  22. data/lib/liquid/parser_switching.rb +45 -0
  23. data/lib/liquid/partial_cache.rb +24 -0
  24. data/lib/liquid/profiler/hooks.rb +35 -0
  25. data/lib/liquid/profiler.rb +139 -0
  26. data/lib/liquid/range_lookup.rb +47 -0
  27. data/lib/liquid/registers.rb +51 -0
  28. data/lib/liquid/resource_limits.rb +62 -0
  29. data/lib/liquid/standardfilters.rb +789 -118
  30. data/lib/liquid/strainer_factory.rb +41 -0
  31. data/lib/liquid/strainer_template.rb +62 -0
  32. data/lib/liquid/tablerowloop_drop.rb +121 -0
  33. data/lib/liquid/tag/disableable.rb +22 -0
  34. data/lib/liquid/tag/disabler.rb +21 -0
  35. data/lib/liquid/tag.rb +49 -10
  36. data/lib/liquid/tags/assign.rb +61 -19
  37. data/lib/liquid/tags/break.rb +14 -4
  38. data/lib/liquid/tags/capture.rb +29 -21
  39. data/lib/liquid/tags/case.rb +80 -31
  40. data/lib/liquid/tags/comment.rb +24 -2
  41. data/lib/liquid/tags/continue.rb +14 -13
  42. data/lib/liquid/tags/cycle.rb +50 -32
  43. data/lib/liquid/tags/decrement.rb +24 -26
  44. data/lib/liquid/tags/echo.rb +41 -0
  45. data/lib/liquid/tags/for.rb +164 -100
  46. data/lib/liquid/tags/if.rb +105 -44
  47. data/lib/liquid/tags/ifchanged.rb +10 -11
  48. data/lib/liquid/tags/include.rb +85 -65
  49. data/lib/liquid/tags/increment.rb +24 -22
  50. data/lib/liquid/tags/inline_comment.rb +43 -0
  51. data/lib/liquid/tags/raw.rb +50 -11
  52. data/lib/liquid/tags/render.rb +109 -0
  53. data/lib/liquid/tags/table_row.rb +88 -0
  54. data/lib/liquid/tags/unless.rb +37 -21
  55. data/lib/liquid/template.rb +124 -46
  56. data/lib/liquid/template_factory.rb +9 -0
  57. data/lib/liquid/tokenizer.rb +39 -0
  58. data/lib/liquid/usage.rb +8 -0
  59. data/lib/liquid/utils.rb +68 -5
  60. data/lib/liquid/variable.rb +128 -32
  61. data/lib/liquid/variable_lookup.rb +96 -0
  62. data/lib/liquid/version.rb +3 -1
  63. data/lib/liquid.rb +36 -13
  64. metadata +69 -77
  65. data/lib/extras/liquid_view.rb +0 -51
  66. data/lib/liquid/htmltags.rb +0 -73
  67. data/lib/liquid/module_ex.rb +0 -62
  68. data/lib/liquid/strainer.rb +0 -53
  69. data/test/liquid/assign_test.rb +0 -21
  70. data/test/liquid/block_test.rb +0 -58
  71. data/test/liquid/capture_test.rb +0 -40
  72. data/test/liquid/condition_test.rb +0 -127
  73. data/test/liquid/context_test.rb +0 -478
  74. data/test/liquid/drop_test.rb +0 -180
  75. data/test/liquid/error_handling_test.rb +0 -81
  76. data/test/liquid/file_system_test.rb +0 -29
  77. data/test/liquid/filter_test.rb +0 -125
  78. data/test/liquid/hash_ordering_test.rb +0 -25
  79. data/test/liquid/module_ex_test.rb +0 -87
  80. data/test/liquid/output_test.rb +0 -116
  81. data/test/liquid/parsing_quirks_test.rb +0 -52
  82. data/test/liquid/regexp_test.rb +0 -44
  83. data/test/liquid/security_test.rb +0 -64
  84. data/test/liquid/standard_filter_test.rb +0 -263
  85. data/test/liquid/strainer_test.rb +0 -52
  86. data/test/liquid/tags/break_tag_test.rb +0 -16
  87. data/test/liquid/tags/continue_tag_test.rb +0 -16
  88. data/test/liquid/tags/for_tag_test.rb +0 -297
  89. data/test/liquid/tags/html_tag_test.rb +0 -63
  90. data/test/liquid/tags/if_else_tag_test.rb +0 -166
  91. data/test/liquid/tags/include_tag_test.rb +0 -166
  92. data/test/liquid/tags/increment_tag_test.rb +0 -24
  93. data/test/liquid/tags/raw_tag_test.rb +0 -24
  94. data/test/liquid/tags/standard_tag_test.rb +0 -295
  95. data/test/liquid/tags/statements_test.rb +0 -134
  96. data/test/liquid/tags/unless_else_tag_test.rb +0 -26
  97. data/test/liquid/template_test.rb +0 -146
  98. data/test/liquid/variable_test.rb +0 -186
  99. data/test/test_helper.rb +0 -29
  100. /data/{MIT-LICENSE → LICENSE} +0 -0
@@ -1,186 +0,0 @@
1
- require 'test_helper'
2
-
3
- class VariableTest < Test::Unit::TestCase
4
- include Liquid
5
-
6
- def test_variable
7
- var = Variable.new('hello')
8
- assert_equal 'hello', var.name
9
- end
10
-
11
- def test_filters
12
- var = Variable.new('hello | textileze')
13
- assert_equal 'hello', var.name
14
- assert_equal [["textileze",[]]], var.filters
15
-
16
- var = Variable.new('hello | textileze | paragraph')
17
- assert_equal 'hello', var.name
18
- assert_equal [["textileze",[]], ["paragraph",[]]], var.filters
19
-
20
- var = Variable.new(%! hello | strftime: '%Y'!)
21
- assert_equal 'hello', var.name
22
- assert_equal [["strftime",["'%Y'"]]], var.filters
23
-
24
- var = Variable.new(%! 'typo' | link_to: 'Typo', true !)
25
- assert_equal %!'typo'!, var.name
26
- assert_equal [["link_to",["'Typo'", "true"]]], var.filters
27
-
28
- var = Variable.new(%! 'typo' | link_to: 'Typo', false !)
29
- assert_equal %!'typo'!, var.name
30
- assert_equal [["link_to",["'Typo'", "false"]]], var.filters
31
-
32
- var = Variable.new(%! 'foo' | repeat: 3 !)
33
- assert_equal %!'foo'!, var.name
34
- assert_equal [["repeat",["3"]]], var.filters
35
-
36
- var = Variable.new(%! 'foo' | repeat: 3, 3 !)
37
- assert_equal %!'foo'!, var.name
38
- assert_equal [["repeat",["3","3"]]], var.filters
39
-
40
- var = Variable.new(%! 'foo' | repeat: 3, 3, 3 !)
41
- assert_equal %!'foo'!, var.name
42
- assert_equal [["repeat",["3","3","3"]]], var.filters
43
-
44
- var = Variable.new(%! hello | strftime: '%Y, okay?'!)
45
- assert_equal 'hello', var.name
46
- assert_equal [["strftime",["'%Y, okay?'"]]], var.filters
47
-
48
- var = Variable.new(%! hello | things: "%Y, okay?", 'the other one'!)
49
- assert_equal 'hello', var.name
50
- assert_equal [["things",["\"%Y, okay?\"","'the other one'"]]], var.filters
51
- end
52
-
53
- def test_filter_with_date_parameter
54
-
55
- var = Variable.new(%! '2006-06-06' | date: "%m/%d/%Y"!)
56
- assert_equal "'2006-06-06'", var.name
57
- assert_equal [["date",["\"%m/%d/%Y\""]]], var.filters
58
-
59
- end
60
-
61
- def test_filters_without_whitespace
62
- var = Variable.new('hello | textileze | paragraph')
63
- assert_equal 'hello', var.name
64
- assert_equal [["textileze",[]], ["paragraph",[]]], var.filters
65
-
66
- var = Variable.new('hello|textileze|paragraph')
67
- assert_equal 'hello', var.name
68
- assert_equal [["textileze",[]], ["paragraph",[]]], var.filters
69
-
70
- var = Variable.new("hello|replace:'foo','bar'|textileze")
71
- assert_equal 'hello', var.name
72
- assert_equal [["replace", ["'foo'", "'bar'"]], ["textileze", []]], var.filters
73
- end
74
-
75
- def test_symbol
76
- var = Variable.new("http://disney.com/logo.gif | image: 'med' ")
77
- assert_equal 'http://disney.com/logo.gif', var.name
78
- assert_equal [["image",["'med'"]]], var.filters
79
- end
80
-
81
- def test_string_single_quoted
82
- var = Variable.new(%| "hello" |)
83
- assert_equal '"hello"', var.name
84
- end
85
-
86
- def test_string_double_quoted
87
- var = Variable.new(%| 'hello' |)
88
- assert_equal "'hello'", var.name
89
- end
90
-
91
- def test_integer
92
- var = Variable.new(%| 1000 |)
93
- assert_equal "1000", var.name
94
- end
95
-
96
- def test_float
97
- var = Variable.new(%| 1000.01 |)
98
- assert_equal "1000.01", var.name
99
- end
100
-
101
- def test_string_with_special_chars
102
- var = Variable.new(%| 'hello! $!@.;"ddasd" ' |)
103
- assert_equal %|'hello! $!@.;"ddasd" '|, var.name
104
- end
105
-
106
- def test_string_dot
107
- var = Variable.new(%| test.test |)
108
- assert_equal 'test.test', var.name
109
- end
110
-
111
- def test_filter_with_keyword_arguments
112
- var = Variable.new(%! hello | things: greeting: "world", farewell: 'goodbye'!)
113
- assert_equal 'hello', var.name
114
- assert_equal [['things',["greeting: \"world\"","farewell: 'goodbye'"]]], var.filters
115
- end
116
-
117
- def test_lax_filter_argument_parsing
118
- var = Variable.new(%! number_of_comments | pluralize: 'comment': 'comments' !)
119
- assert_equal 'number_of_comments', var.name
120
- assert_equal [['pluralize',["'comment'","'comments'"]]], var.filters
121
- end
122
- end
123
-
124
-
125
- class VariableResolutionTest < Test::Unit::TestCase
126
- include Liquid
127
-
128
- def test_simple_variable
129
- template = Template.parse(%|{{test}}|)
130
- assert_equal 'worked', template.render('test' => 'worked')
131
- assert_equal 'worked wonderfully', template.render('test' => 'worked wonderfully')
132
- end
133
-
134
- def test_simple_with_whitespaces
135
- template = Template.parse(%| {{ test }} |)
136
- assert_equal ' worked ', template.render('test' => 'worked')
137
- assert_equal ' worked wonderfully ', template.render('test' => 'worked wonderfully')
138
- end
139
-
140
- def test_ignore_unknown
141
- template = Template.parse(%|{{ test }}|)
142
- assert_equal '', template.render
143
- end
144
-
145
- def test_hash_scoping
146
- template = Template.parse(%|{{ test.test }}|)
147
- assert_equal 'worked', template.render('test' => {'test' => 'worked'})
148
- end
149
-
150
- def test_preset_assigns
151
- template = Template.parse(%|{{ test }}|)
152
- template.assigns['test'] = 'worked'
153
- assert_equal 'worked', template.render
154
- end
155
-
156
- def test_reuse_parsed_template
157
- template = Template.parse(%|{{ greeting }} {{ name }}|)
158
- template.assigns['greeting'] = 'Goodbye'
159
- assert_equal 'Hello Tobi', template.render('greeting' => 'Hello', 'name' => 'Tobi')
160
- assert_equal 'Hello ', template.render('greeting' => 'Hello', 'unknown' => 'Tobi')
161
- assert_equal 'Hello Brian', template.render('greeting' => 'Hello', 'name' => 'Brian')
162
- assert_equal 'Goodbye Brian', template.render('name' => 'Brian')
163
- assert_equal({'greeting'=>'Goodbye'}, template.assigns)
164
- end
165
-
166
- def test_assigns_not_polluted_from_template
167
- template = Template.parse(%|{{ test }}{% assign test = 'bar' %}{{ test }}|)
168
- template.assigns['test'] = 'baz'
169
- assert_equal 'bazbar', template.render
170
- assert_equal 'bazbar', template.render
171
- assert_equal 'foobar', template.render('test' => 'foo')
172
- assert_equal 'bazbar', template.render
173
- end
174
-
175
- def test_hash_with_default_proc
176
- template = Template.parse(%|Hello {{ test }}|)
177
- assigns = Hash.new { |h,k| raise "Unknown variable '#{k}'" }
178
- assigns['test'] = 'Tobi'
179
- assert_equal 'Hello Tobi', template.render!(assigns)
180
- assigns.delete('test')
181
- e = assert_raises(RuntimeError) {
182
- template.render!(assigns)
183
- }
184
- assert_equal "Unknown variable 'test'", e.message
185
- end
186
- end # VariableTest
data/test/test_helper.rb DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test/unit'
4
- require 'test/unit/assertions'
5
- begin
6
- require 'ruby-debug'
7
- rescue LoadError
8
- puts "Couldn't load ruby-debug. gem install ruby-debug if you need it."
9
- end
10
- require File.join(File.dirname(__FILE__), '..', 'lib', 'liquid')
11
-
12
-
13
- module Test
14
- module Unit
15
- module Assertions
16
- include Liquid
17
-
18
- def assert_template_result(expected, template, assigns = {}, message = nil)
19
- assert_equal expected, Template.parse(template).render(assigns)
20
- end
21
-
22
- def assert_template_result_matches(expected, template, assigns = {}, message = nil)
23
- return assert_template_result(expected, template, assigns, message) unless expected.is_a? Regexp
24
-
25
- assert_match expected, Template.parse(template).render(assigns)
26
- end
27
- end # Assertions
28
- end # Unit
29
- end # Test
File without changes