liquid 5.0.1 → 5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98bb40e18a2bb905a917743968edb79732f903b3beb1f51ab9551e1aaee3f91a
4
- data.tar.gz: 264b8ccd158a79f2b43a0308a055d38b018b0f4132f316007f3589e778f5d9dd
3
+ metadata.gz: d033978c659ebc86ff6ae3a36adaa1a90b8f69580e0cd033eb9c2c669ff6d66d
4
+ data.tar.gz: 5c440b450df6ac2c673b0a23091d97e497ccb8207a443b0b6011f2b1a9b6529b
5
5
  SHA512:
6
- metadata.gz: 19b30524fc6b7828de10e3eecc4e28b5595436144eacedad06c36d6472b740d01e971d315f7aa911ebad80dac5c075b75649c0b506f588e50ff8c977f08ed365
7
- data.tar.gz: 53726f629d8a76ebcc4e134bc12abe981df9526fb5baa4d9312b68bc967e691af329bfcabadad86af65b8149034bd94479a2f98a93a9056a090fd28ba2901597
6
+ metadata.gz: 114697a0375800b4f67d7c216f9c56f823bb4468203632d45bda92bc597e0677acd0c4151c60f92fc121c2cd1b8d0d1c18d2482f1265acb62dbf190f12773d5c
7
+ data.tar.gz: 3c013aef59a531829e202b73c4ce33d63ad5f58d763b7f2c610a3ff96fdab13fe2fdcf7e9401b63e09bb136fb1518ad69300b41114ebc1f076565c7d2953de78
data/History.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Liquid Change Log
2
2
 
3
+ ## 5.1.0 / 2021-09-09
4
+
5
+ ### Features
6
+ * Add `base64_encode`, `base64_decode`, `base64_url_safe_encode`, and `base64_url_safe_decode` filters (#1450) [Daniel Insley]
7
+ * Introduce `to_liquid_value` in `Liquid::Drop` (#1441) [Michael Go]
8
+
9
+ ### Fixes
10
+ * Fix support for using a String subclass for the liquid source (#1421) [Dylan Thacker-Smith]
11
+ * Add `ParseTreeVisitor` to `RangeLookup` (#1470) [CP Clermont]
12
+ * Translate `RangeError` to `Liquid::Error` for `truncatewords` with large int (#1431) [Dylan Thacker-Smith]
13
+
3
14
  ## 5.0.1 / 2021-03-24
4
15
 
5
16
  ### Fixes
@@ -8,7 +8,7 @@ module Liquid
8
8
  # c = Condition.new(1, '==', 1)
9
9
  # c.evaluate #=> true
10
10
  #
11
- class Condition #:nodoc:
11
+ class Condition # :nodoc:
12
12
  @@operators = {
13
13
  '==' => ->(cond, left, right) { cond.send(:equal_variables, left, right) },
14
14
  '!=' => ->(cond, left, right) { !cond.send(:equal_variables, left, right) },
@@ -134,8 +134,8 @@ module Liquid
134
134
  # return this as the result.
135
135
  return context.evaluate(left) if op.nil?
136
136
 
137
- left = context.evaluate(left)
138
- right = context.evaluate(right)
137
+ left = Liquid::Utils.to_liquid_value(context.evaluate(left))
138
+ right = Liquid::Utils.to_liquid_value(context.evaluate(right))
139
139
 
140
140
  operation = self.class.operators[op] || raise(Liquid::ArgumentError, "Unknown operator #{op}")
141
141
 
@@ -124,7 +124,7 @@ module Liquid
124
124
  # context['var'] = 'hi'
125
125
  # end
126
126
  #
127
- # context['var] #=> nil
127
+ # context['var'] #=> nil
128
128
  def stack(new_scope = {})
129
129
  push(new_scope)
130
130
  yield
@@ -12,6 +12,8 @@ module Liquid
12
12
  end
13
13
  end
14
14
 
15
+ attr_reader :start_obj, :end_obj
16
+
15
17
  def initialize(start_obj, end_obj)
16
18
  @start_obj = start_obj
17
19
  @end_obj = end_obj
@@ -35,5 +37,11 @@ module Liquid
35
37
  Utils.to_integer(input)
36
38
  end
37
39
  end
40
+
41
+ class ParseTreeVisitor < Liquid::ParseTreeVisitor
42
+ def children
43
+ [@node.start_obj, @node.end_obj]
44
+ end
45
+ end
38
46
  end
39
47
  end
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cgi'
4
+ require 'base64'
4
5
  require 'bigdecimal'
5
6
 
6
7
  module Liquid
7
8
  module StandardFilters
9
+ MAX_INT = (1 << 31) - 1
8
10
  HTML_ESCAPE = {
9
11
  '&' => '&amp;',
10
12
  '>' => '&gt;',
@@ -62,6 +64,26 @@ module Liquid
62
64
  result
63
65
  end
64
66
 
67
+ def base64_encode(input)
68
+ Base64.strict_encode64(input.to_s)
69
+ end
70
+
71
+ def base64_decode(input)
72
+ Base64.strict_decode64(input.to_s)
73
+ rescue ::ArgumentError
74
+ raise Liquid::ArgumentError, "invalid base64 provided to base64_decode"
75
+ end
76
+
77
+ def base64_url_safe_encode(input)
78
+ Base64.urlsafe_encode64(input.to_s)
79
+ end
80
+
81
+ def base64_url_safe_decode(input)
82
+ Base64.urlsafe_decode64(input.to_s)
83
+ rescue ::ArgumentError
84
+ raise Liquid::ArgumentError, "invalid base64 provided to base64_url_safe_decode"
85
+ end
86
+
65
87
  def slice(input, offset, length = nil)
66
88
  offset = Utils.to_integer(offset)
67
89
  length = length ? Utils.to_integer(length) : 1
@@ -93,7 +115,13 @@ module Liquid
93
115
  words = Utils.to_integer(words)
94
116
  words = 1 if words <= 0
95
117
 
96
- wordlist = input.split(" ", words + 1)
118
+ wordlist = begin
119
+ input.split(" ", words + 1)
120
+ rescue RangeError
121
+ raise if words + 1 < MAX_INT
122
+ # e.g. integer #{words} too big to convert to `int'
123
+ raise Liquid::ArgumentError, "integer #{words} too big for truncatewords"
124
+ end
97
125
  return input if wordlist.length <= words
98
126
 
99
127
  wordlist.pop
@@ -440,7 +468,7 @@ module Liquid
440
468
  #
441
469
  def default(input, default_value = '', options = {})
442
470
  options = {} unless options.is_a?(Hash)
443
- false_check = options['allow_false'] ? input.nil? : !input
471
+ false_check = options['allow_false'] ? input.nil? : !Liquid::Utils.to_liquid_value(input)
444
472
  false_check || (input.respond_to?(:empty?) && input.empty?) ? default_value : input
445
473
  end
446
474
 
@@ -52,7 +52,14 @@ module Liquid
52
52
  @blocks.each do |block|
53
53
  if block.else?
54
54
  block.attachment.render_to_output_buffer(context, output) if execute_else_block
55
- elsif block.evaluate(context)
55
+ next
56
+ end
57
+
58
+ result = Liquid::Utils.to_liquid_value(
59
+ block.evaluate(context)
60
+ )
61
+
62
+ if result
56
63
  execute_else_block = false
57
64
  block.attachment.render_to_output_buffer(context, output)
58
65
  end
@@ -50,7 +50,11 @@ module Liquid
50
50
 
51
51
  def render_to_output_buffer(context, output)
52
52
  @blocks.each do |block|
53
- if block.evaluate(context)
53
+ result = Liquid::Utils.to_liquid_value(
54
+ block.evaluate(context)
55
+ )
56
+
57
+ if result
54
58
  return block.attachment.render_to_output_buffer(context, output)
55
59
  end
56
60
  end
@@ -11,13 +11,21 @@ module Liquid
11
11
  def render_to_output_buffer(context, output)
12
12
  # First condition is interpreted backwards ( if not )
13
13
  first_block = @blocks.first
14
- unless first_block.evaluate(context)
14
+ result = Liquid::Utils.to_liquid_value(
15
+ first_block.evaluate(context)
16
+ )
17
+
18
+ unless result
15
19
  return first_block.attachment.render_to_output_buffer(context, output)
16
20
  end
17
21
 
18
22
  # After the first condition unless works just like if
19
23
  @blocks[1..-1].each do |block|
20
- if block.evaluate(context)
24
+ result = Liquid::Utils.to_liquid_value(
25
+ block.evaluate(context)
26
+ )
27
+
28
+ if result
21
29
  return block.attachment.render_to_output_buffer(context, output)
22
30
  end
23
31
  end
@@ -5,7 +5,7 @@ module Liquid
5
5
  attr_reader :line_number, :for_liquid_tag
6
6
 
7
7
  def initialize(source, line_numbers = false, line_number: nil, for_liquid_tag: false)
8
- @source = source
8
+ @source = source.to_s.to_str
9
9
  @line_number = line_number || (line_numbers ? 1 : nil)
10
10
  @for_liquid_tag = for_liquid_tag
11
11
  @tokens = tokenize
@@ -24,7 +24,7 @@ module Liquid
24
24
  private
25
25
 
26
26
  def tokenize
27
- return [] if @source.to_s.empty?
27
+ return [] if @source.empty?
28
28
 
29
29
  return @source.split("\n") if @for_liquid_tag
30
30
 
data/lib/liquid/utils.rb CHANGED
@@ -81,5 +81,13 @@ module Liquid
81
81
  rescue ::ArgumentError
82
82
  nil
83
83
  end
84
+
85
+ def self.to_liquid_value(obj)
86
+ # Enable "obj" to represent itself as a primitive value like integer, string, or boolean
87
+ return obj.to_liquid_value if obj.respond_to?(:to_liquid_value)
88
+
89
+ # Otherwise return the object itself
90
+ obj
91
+ end
84
92
  end
85
93
  end
@@ -40,6 +40,9 @@ module Liquid
40
40
  @lookups.each_index do |i|
41
41
  key = context.evaluate(@lookups[i])
42
42
 
43
+ # Cast "key" to its liquid value to enable it to act as a primitive value
44
+ key = Liquid::Utils.to_liquid_value(key)
45
+
43
46
  # If object is a hash- or array-like object we look for the
44
47
  # presence of the key and if its available we return it
45
48
  if object.respond_to?(:[]) &&
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Liquid
5
- VERSION = "5.0.1"
5
+ VERSION = "5.1.0"
6
6
  end
@@ -145,6 +145,40 @@ class StandardFiltersTest < Minitest::Test
145
145
  assert_equal('&lt;strong&gt;Hulk&lt;/strong&gt;', @filters.escape_once('&lt;strong&gt;Hulk</strong>'))
146
146
  end
147
147
 
148
+ def test_base64_encode
149
+ assert_equal('b25lIHR3byB0aHJlZQ==', @filters.base64_encode('one two three'))
150
+ assert_equal('', @filters.base64_encode(nil))
151
+ end
152
+
153
+ def test_base64_decode
154
+ assert_equal('one two three', @filters.base64_decode('b25lIHR3byB0aHJlZQ=='))
155
+
156
+ exception = assert_raises(Liquid::ArgumentError) do
157
+ @filters.base64_decode("invalidbase64")
158
+ end
159
+
160
+ assert_equal('Liquid error: invalid base64 provided to base64_decode', exception.message)
161
+ end
162
+
163
+ def test_base64_url_safe_encode
164
+ assert_equal(
165
+ 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTIzNDU2Nzg5MCAhQCMkJV4mKigpLT1fKy8_Ljo7W117fVx8',
166
+ @filters.base64_url_safe_encode('abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 !@#$%^&*()-=_+/?.:;[]{}\|')
167
+ )
168
+ assert_equal('', @filters.base64_url_safe_encode(nil))
169
+ end
170
+
171
+ def test_base64_url_safe_decode
172
+ assert_equal(
173
+ 'abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 !@#$%^&*()-=_+/?.:;[]{}\|',
174
+ @filters.base64_url_safe_decode('YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTIzNDU2Nzg5MCAhQCMkJV4mKigpLT1fKy8_Ljo7W117fVx8')
175
+ )
176
+ exception = assert_raises(Liquid::ArgumentError) do
177
+ @filters.base64_url_safe_decode("invalidbase64")
178
+ end
179
+ assert_equal('Liquid error: invalid base64 provided to base64_url_safe_decode', exception.message)
180
+ end
181
+
148
182
  def test_url_encode
149
183
  assert_equal('foo%2B1%40example.com', @filters.url_encode('foo+1@example.com'))
150
184
  assert_equal('1', @filters.url_encode(1))
@@ -178,6 +212,10 @@ class StandardFiltersTest < Minitest::Test
178
212
  assert_equal('one two three...', @filters.truncatewords("one two\tthree\nfour", 3))
179
213
  assert_equal('one two...', @filters.truncatewords("one two three four", 2))
180
214
  assert_equal('one...', @filters.truncatewords("one two three four", 0))
215
+ exception = assert_raises(Liquid::ArgumentError) do
216
+ @filters.truncatewords("one two three four", 1 << 31)
217
+ end
218
+ assert_equal("Liquid error: integer #{1 << 31} too big for truncatewords", exception.message)
181
219
  end
182
220
 
183
221
  def test_strip_html
@@ -690,6 +728,8 @@ class StandardFiltersTest < Minitest::Test
690
728
  assert_equal("bar", @filters.default([], "bar"))
691
729
  assert_equal("bar", @filters.default({}, "bar"))
692
730
  assert_template_result('bar', "{{ false | default: 'bar' }}")
731
+ assert_template_result('bar', "{{ drop | default: 'bar' }}", 'drop' => BooleanDrop.new(false))
732
+ assert_template_result('Yay', "{{ drop | default: 'bar' }}", 'drop' => BooleanDrop.new(true))
693
733
  end
694
734
 
695
735
  def test_default_handle_false
@@ -700,6 +740,8 @@ class StandardFiltersTest < Minitest::Test
700
740
  assert_equal("bar", @filters.default([], "bar", "allow_false" => true))
701
741
  assert_equal("bar", @filters.default({}, "bar", "allow_false" => true))
702
742
  assert_template_result('false', "{{ false | default: 'bar', allow_false: true }}")
743
+ assert_template_result('Nay', "{{ drop | default: 'bar', allow_false: true }}", 'drop' => BooleanDrop.new(false))
744
+ assert_template_result('Yay', "{{ drop | default: 'bar', allow_false: true }}", 'drop' => BooleanDrop.new(true))
703
745
  end
704
746
 
705
747
  def test_cannot_access_private_methods
@@ -323,4 +323,18 @@ class TemplateTest < Minitest::Test
323
323
  result = t.render('x' => 1, 'y' => 5)
324
324
  assert_equal('12345', result)
325
325
  end
326
+
327
+ def test_source_string_subclass
328
+ string_subclass = Class.new(String) do
329
+ # E.g. ActiveSupport::SafeBuffer does this, so don't just rely on to_s to return a String
330
+ def to_s
331
+ self
332
+ end
333
+ end
334
+ source = string_subclass.new("{% assign x = 2 -%} x= {{- x }}")
335
+ assert_instance_of(string_subclass, source)
336
+ output = Template.parse(source).render!
337
+ assert_equal("x=2", output)
338
+ assert_instance_of(String, output)
339
+ end
326
340
  end
@@ -15,6 +15,33 @@ class VariableTest < Minitest::Test
15
15
  assert_template_result('foobar', '{{ foo }}', 'foo' => ThingWithToLiquid.new)
16
16
  end
17
17
 
18
+ def test_variable_lookup_calls_to_liquid_value
19
+ assert_template_result('1', '{{ foo }}', 'foo' => IntegerDrop.new('1'))
20
+ assert_template_result('2', '{{ list[foo] }}', 'foo' => IntegerDrop.new('1'), 'list' => [1, 2, 3])
21
+ assert_template_result('one', '{{ list[foo] }}', 'foo' => IntegerDrop.new('1'), 'list' => { 1 => 'one' })
22
+ assert_template_result('Yay', '{{ foo }}', 'foo' => BooleanDrop.new(true))
23
+ assert_template_result('YAY', '{{ foo | upcase }}', 'foo' => BooleanDrop.new(true))
24
+ end
25
+
26
+ def test_if_tag_calls_to_liquid_value
27
+ assert_template_result('one', '{% if foo == 1 %}one{% endif %}', 'foo' => IntegerDrop.new('1'))
28
+ assert_template_result('one', '{% if 0 < foo %}one{% endif %}', 'foo' => IntegerDrop.new('1'))
29
+ assert_template_result('one', '{% if foo > 0 %}one{% endif %}', 'foo' => IntegerDrop.new('1'))
30
+ assert_template_result('true', '{% if foo == true %}true{% endif %}', 'foo' => BooleanDrop.new(true))
31
+ assert_template_result('true', '{% if foo %}true{% endif %}', 'foo' => BooleanDrop.new(true))
32
+
33
+ assert_template_result('', '{% if foo %}true{% endif %}', 'foo' => BooleanDrop.new(false))
34
+ assert_template_result('', '{% if foo == true %}True{% endif %}', 'foo' => BooleanDrop.new(false))
35
+ end
36
+
37
+ def test_unless_tag_calls_to_liquid_value
38
+ assert_template_result('', '{% unless foo %}true{% endunless %}', 'foo' => BooleanDrop.new(true))
39
+ end
40
+
41
+ def test_case_tag_calls_to_liquid_value
42
+ assert_template_result('One', '{% case foo %}{% when 1 %}One{% endcase %}', 'foo' => IntegerDrop.new('1'))
43
+ end
44
+
18
45
  def test_simple_with_whitespaces
19
46
  template = Template.parse(%( {{ test }} ))
20
47
  assert_equal(' worked ', template.render!('test' => 'worked'))
@@ -104,4 +131,8 @@ class VariableTest < Minitest::Test
104
131
  def test_dynamic_find_var
105
132
  assert_template_result('bar', '{{ [key] }}', 'key' => 'foo', 'foo' => 'bar')
106
133
  end
134
+
135
+ def test_raw_value_variable
136
+ assert_template_result('bar', '{{ [key] }}', 'key' => 'foo', 'foo' => 'bar')
137
+ end
107
138
  end
data/test/test_helper.rb CHANGED
@@ -119,6 +119,44 @@ class ThingWithToLiquid
119
119
  end
120
120
  end
121
121
 
122
+ class IntegerDrop < Liquid::Drop
123
+ def initialize(value)
124
+ super()
125
+ @value = value.to_i
126
+ end
127
+
128
+ def ==(other)
129
+ @value == other
130
+ end
131
+
132
+ def to_s
133
+ @value.to_s
134
+ end
135
+
136
+ def to_liquid_value
137
+ @value
138
+ end
139
+ end
140
+
141
+ class BooleanDrop < Liquid::Drop
142
+ def initialize(value)
143
+ super()
144
+ @value = value
145
+ end
146
+
147
+ def ==(other)
148
+ @value == other
149
+ end
150
+
151
+ def to_liquid_value
152
+ @value
153
+ end
154
+
155
+ def to_s
156
+ @value ? "Yay" : "Nay"
157
+ end
158
+ end
159
+
122
160
  class ErrorDrop < Liquid::Drop
123
161
  def standard_error
124
162
  raise Liquid::StandardError, 'standard error'
@@ -159,6 +159,13 @@ class ParseTreeVisitorTest < Minitest::Test
159
159
  )
160
160
  end
161
161
 
162
+ def test_for_range
163
+ assert_equal(
164
+ ["test"],
165
+ visit(%({% for x in (1..test) %}{% endfor %}))
166
+ )
167
+ end
168
+
162
169
  def test_tablerow_in
163
170
  assert_equal(
164
171
  ["test"],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquid
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Lütke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-24 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -187,65 +187,65 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
187
  - !ruby/object:Gem::Version
188
188
  version: 1.3.7
189
189
  requirements: []
190
- rubygems_version: 3.0.3
190
+ rubygems_version: 3.2.20
191
191
  signing_key:
192
192
  specification_version: 4
193
193
  summary: A secure, non-evaling end user template engine with aesthetic markup.
194
194
  test_files:
195
+ - test/test_helper.rb
195
196
  - test/fixtures/en_locale.yml
196
- - test/unit/condition_unit_test.rb
197
- - test/unit/variable_unit_test.rb
198
- - test/unit/template_unit_test.rb
199
- - test/unit/strainer_template_unit_test.rb
200
- - test/unit/file_system_unit_test.rb
201
- - test/unit/static_registers_unit_test.rb
202
- - test/unit/tags/for_tag_unit_test.rb
203
- - test/unit/tags/if_tag_unit_test.rb
204
- - test/unit/tags/case_tag_unit_test.rb
205
197
  - test/unit/strainer_factory_unit_test.rb
206
- - test/unit/parse_tree_visitor_test.rb
207
- - test/unit/lexer_unit_test.rb
208
- - test/unit/block_unit_test.rb
209
198
  - test/unit/regexp_unit_test.rb
199
+ - test/unit/static_registers_unit_test.rb
200
+ - test/unit/template_unit_test.rb
210
201
  - test/unit/partial_cache_unit_test.rb
202
+ - test/unit/block_unit_test.rb
203
+ - test/unit/parse_tree_visitor_test.rb
211
204
  - test/unit/parser_unit_test.rb
212
- - test/unit/tag_unit_test.rb
213
205
  - test/unit/i18n_unit_test.rb
206
+ - test/unit/file_system_unit_test.rb
207
+ - test/unit/tags/case_tag_unit_test.rb
208
+ - test/unit/tags/if_tag_unit_test.rb
209
+ - test/unit/tags/for_tag_unit_test.rb
214
210
  - test/unit/tokenizer_unit_test.rb
215
211
  - test/unit/template_factory_unit_test.rb
216
- - test/test_helper.rb
217
- - test/integration/blank_test.rb
218
- - test/integration/standard_filter_test.rb
212
+ - test/unit/lexer_unit_test.rb
213
+ - test/unit/condition_unit_test.rb
214
+ - test/unit/tag_unit_test.rb
215
+ - test/unit/strainer_template_unit_test.rb
216
+ - test/unit/variable_unit_test.rb
217
+ - test/integration/error_handling_test.rb
218
+ - test/integration/tag_test.rb
219
+ - test/integration/filter_test.rb
220
+ - test/integration/context_test.rb
221
+ - test/integration/block_test.rb
222
+ - test/integration/template_test.rb
223
+ - test/integration/profiler_test.rb
219
224
  - test/integration/parsing_quirks_test.rb
220
225
  - test/integration/tag/disableable_test.rb
221
- - test/integration/context_test.rb
222
- - test/integration/error_handling_test.rb
226
+ - test/integration/trim_mode_test.rb
227
+ - test/integration/expression_test.rb
228
+ - test/integration/output_test.rb
223
229
  - test/integration/security_test.rb
224
- - test/integration/capture_test.rb
225
- - test/integration/assign_test.rb
230
+ - test/integration/drop_test.rb
226
231
  - test/integration/tags/increment_tag_test.rb
227
- - test/integration/tags/break_tag_test.rb
232
+ - test/integration/tags/raw_tag_test.rb
228
233
  - test/integration/tags/if_else_tag_test.rb
229
- - test/integration/tags/liquid_tag_test.rb
230
- - test/integration/tags/for_tag_test.rb
231
- - test/integration/tags/unless_else_tag_test.rb
232
234
  - test/integration/tags/include_tag_test.rb
233
- - test/integration/tags/echo_test.rb
234
235
  - test/integration/tags/statements_test.rb
236
+ - test/integration/tags/break_tag_test.rb
235
237
  - test/integration/tags/render_tag_test.rb
236
- - test/integration/tags/raw_tag_test.rb
237
238
  - test/integration/tags/continue_tag_test.rb
238
239
  - test/integration/tags/table_row_test.rb
240
+ - test/integration/tags/unless_else_tag_test.rb
241
+ - test/integration/tags/echo_test.rb
239
242
  - test/integration/tags/standard_tag_test.rb
240
- - test/integration/variable_test.rb
241
- - test/integration/template_test.rb
242
- - test/integration/block_test.rb
243
- - test/integration/profiler_test.rb
244
- - test/integration/drop_test.rb
245
- - test/integration/expression_test.rb
246
- - test/integration/filter_test.rb
243
+ - test/integration/tags/liquid_tag_test.rb
244
+ - test/integration/tags/for_tag_test.rb
245
+ - test/integration/standard_filter_test.rb
246
+ - test/integration/blank_test.rb
247
247
  - test/integration/document_test.rb
248
- - test/integration/trim_mode_test.rb
249
- - test/integration/output_test.rb
248
+ - test/integration/variable_test.rb
250
249
  - test/integration/hash_ordering_test.rb
251
- - test/integration/tag_test.rb
250
+ - test/integration/assign_test.rb
251
+ - test/integration/capture_test.rb