liquid 4.0.0.rc3 → 5.0.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 (123) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +93 -2
  3. data/README.md +8 -0
  4. data/lib/liquid.rb +18 -5
  5. data/lib/liquid/block.rb +47 -20
  6. data/lib/liquid/block_body.rb +190 -76
  7. data/lib/liquid/condition.rb +69 -29
  8. data/lib/liquid/context.rb +122 -76
  9. data/lib/liquid/document.rb +47 -9
  10. data/lib/liquid/drop.rb +4 -2
  11. data/lib/liquid/errors.rb +20 -25
  12. data/lib/liquid/expression.rb +30 -31
  13. data/lib/liquid/extensions.rb +8 -0
  14. data/lib/liquid/file_system.rb +6 -4
  15. data/lib/liquid/forloop_drop.rb +11 -4
  16. data/lib/liquid/i18n.rb +5 -3
  17. data/lib/liquid/interrupts.rb +3 -1
  18. data/lib/liquid/lexer.rb +35 -26
  19. data/lib/liquid/locales/en.yml +4 -2
  20. data/lib/liquid/parse_context.rb +17 -4
  21. data/lib/liquid/parse_tree_visitor.rb +42 -0
  22. data/lib/liquid/parser.rb +30 -18
  23. data/lib/liquid/parser_switching.rb +17 -3
  24. data/lib/liquid/partial_cache.rb +24 -0
  25. data/lib/liquid/profiler.rb +67 -86
  26. data/lib/liquid/profiler/hooks.rb +26 -14
  27. data/lib/liquid/range_lookup.rb +5 -3
  28. data/lib/liquid/register.rb +6 -0
  29. data/lib/liquid/resource_limits.rb +47 -8
  30. data/lib/liquid/standardfilters.rb +171 -57
  31. data/lib/liquid/static_registers.rb +44 -0
  32. data/lib/liquid/strainer_factory.rb +36 -0
  33. data/lib/liquid/strainer_template.rb +53 -0
  34. data/lib/liquid/tablerowloop_drop.rb +6 -4
  35. data/lib/liquid/tag.rb +28 -6
  36. data/lib/liquid/tag/disableable.rb +22 -0
  37. data/lib/liquid/tag/disabler.rb +21 -0
  38. data/lib/liquid/tags/assign.rb +32 -10
  39. data/lib/liquid/tags/break.rb +8 -3
  40. data/lib/liquid/tags/capture.rb +11 -8
  41. data/lib/liquid/tags/case.rb +41 -27
  42. data/lib/liquid/tags/comment.rb +5 -3
  43. data/lib/liquid/tags/continue.rb +8 -3
  44. data/lib/liquid/tags/cycle.rb +35 -16
  45. data/lib/liquid/tags/decrement.rb +6 -3
  46. data/lib/liquid/tags/echo.rb +26 -0
  47. data/lib/liquid/tags/for.rb +79 -47
  48. data/lib/liquid/tags/if.rb +53 -30
  49. data/lib/liquid/tags/ifchanged.rb +11 -10
  50. data/lib/liquid/tags/include.rb +42 -44
  51. data/lib/liquid/tags/increment.rb +7 -3
  52. data/lib/liquid/tags/raw.rb +14 -11
  53. data/lib/liquid/tags/render.rb +84 -0
  54. data/lib/liquid/tags/table_row.rb +32 -20
  55. data/lib/liquid/tags/unless.rb +15 -15
  56. data/lib/liquid/template.rb +60 -71
  57. data/lib/liquid/template_factory.rb +9 -0
  58. data/lib/liquid/tokenizer.rb +17 -9
  59. data/lib/liquid/usage.rb +8 -0
  60. data/lib/liquid/utils.rb +6 -4
  61. data/lib/liquid/variable.rb +55 -38
  62. data/lib/liquid/variable_lookup.rb +14 -6
  63. data/lib/liquid/version.rb +3 -1
  64. data/test/integration/assign_test.rb +74 -5
  65. data/test/integration/blank_test.rb +11 -8
  66. data/test/integration/block_test.rb +58 -0
  67. data/test/integration/capture_test.rb +18 -10
  68. data/test/integration/context_test.rb +608 -5
  69. data/test/integration/document_test.rb +4 -2
  70. data/test/integration/drop_test.rb +67 -83
  71. data/test/integration/error_handling_test.rb +90 -60
  72. data/test/integration/expression_test.rb +46 -0
  73. data/test/integration/filter_test.rb +53 -42
  74. data/test/integration/hash_ordering_test.rb +5 -3
  75. data/test/integration/output_test.rb +26 -24
  76. data/test/integration/parsing_quirks_test.rb +24 -8
  77. data/test/integration/{render_profiling_test.rb → profiler_test.rb} +84 -25
  78. data/test/integration/security_test.rb +41 -18
  79. data/test/integration/standard_filter_test.rb +523 -205
  80. data/test/integration/tag/disableable_test.rb +59 -0
  81. data/test/integration/tag_test.rb +45 -0
  82. data/test/integration/tags/break_tag_test.rb +4 -2
  83. data/test/integration/tags/continue_tag_test.rb +4 -2
  84. data/test/integration/tags/echo_test.rb +13 -0
  85. data/test/integration/tags/for_tag_test.rb +109 -53
  86. data/test/integration/tags/if_else_tag_test.rb +5 -3
  87. data/test/integration/tags/include_tag_test.rb +83 -52
  88. data/test/integration/tags/increment_tag_test.rb +4 -2
  89. data/test/integration/tags/liquid_tag_test.rb +116 -0
  90. data/test/integration/tags/raw_tag_test.rb +14 -11
  91. data/test/integration/tags/render_tag_test.rb +213 -0
  92. data/test/integration/tags/standard_tag_test.rb +38 -31
  93. data/test/integration/tags/statements_test.rb +23 -21
  94. data/test/integration/tags/table_row_test.rb +2 -0
  95. data/test/integration/tags/unless_else_tag_test.rb +4 -2
  96. data/test/integration/template_test.rb +128 -121
  97. data/test/integration/trim_mode_test.rb +82 -44
  98. data/test/integration/variable_test.rb +46 -31
  99. data/test/test_helper.rb +75 -23
  100. data/test/unit/block_unit_test.rb +19 -24
  101. data/test/unit/condition_unit_test.rb +82 -72
  102. data/test/unit/file_system_unit_test.rb +6 -4
  103. data/test/unit/i18n_unit_test.rb +7 -5
  104. data/test/unit/lexer_unit_test.rb +12 -10
  105. data/test/unit/parse_tree_visitor_test.rb +247 -0
  106. data/test/unit/parser_unit_test.rb +37 -35
  107. data/test/unit/partial_cache_unit_test.rb +128 -0
  108. data/test/unit/regexp_unit_test.rb +17 -15
  109. data/test/unit/static_registers_unit_test.rb +156 -0
  110. data/test/unit/strainer_factory_unit_test.rb +100 -0
  111. data/test/unit/strainer_template_unit_test.rb +82 -0
  112. data/test/unit/tag_unit_test.rb +5 -3
  113. data/test/unit/tags/case_tag_unit_test.rb +3 -1
  114. data/test/unit/tags/for_tag_unit_test.rb +4 -2
  115. data/test/unit/tags/if_tag_unit_test.rb +3 -1
  116. data/test/unit/template_factory_unit_test.rb +12 -0
  117. data/test/unit/template_unit_test.rb +19 -10
  118. data/test/unit/tokenizer_unit_test.rb +19 -17
  119. data/test/unit/variable_unit_test.rb +51 -49
  120. metadata +83 -50
  121. data/lib/liquid/strainer.rb +0 -65
  122. data/test/unit/context_unit_test.rb +0 -483
  123. data/test/unit/strainer_unit_test.rb +0 -136
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TagUnitTest < Minitest::Test
@@ -5,8 +7,8 @@ class TagUnitTest < Minitest::Test
5
7
 
6
8
  def test_tag
7
9
  tag = Tag.parse('tag', "", Tokenizer.new(""), ParseContext.new)
8
- assert_equal 'liquid::tag', tag.name
9
- assert_equal '', tag.render(Context.new)
10
+ assert_equal('liquid::tag', tag.name)
11
+ assert_equal('', tag.render(Context.new))
10
12
  end
11
13
 
12
14
  def test_return_raw_text_of_tag
@@ -16,6 +18,6 @@ class TagUnitTest < Minitest::Test
16
18
 
17
19
  def test_tag_name_should_return_name_of_the_tag
18
20
  tag = Tag.parse("some_tag", "", Tokenizer.new(""), ParseContext.new)
19
- assert_equal 'some_tag', tag.tag_name
21
+ assert_equal('some_tag', tag.tag_name)
20
22
  end
21
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class CaseTagUnitTest < Minitest::Test
@@ -5,6 +7,6 @@ class CaseTagUnitTest < Minitest::Test
5
7
 
6
8
  def test_case_nodelist
7
9
  template = Liquid::Template.parse('{% case var %}{% when true %}WHEN{% else %}ELSE{% endcase %}')
8
- assert_equal ['WHEN', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten
10
+ assert_equal(['WHEN', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten)
9
11
  end
10
12
  end
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ForTagUnitTest < Minitest::Test
4
6
  def test_for_nodelist
5
7
  template = Liquid::Template.parse('{% for item in items %}FOR{% endfor %}')
6
- assert_equal ['FOR'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten
8
+ assert_equal(['FOR'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten)
7
9
  end
8
10
 
9
11
  def test_for_else_nodelist
10
12
  template = Liquid::Template.parse('{% for item in items %}FOR{% else %}ELSE{% endfor %}')
11
- assert_equal ['FOR', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten
13
+ assert_equal(['FOR', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten)
12
14
  end
13
15
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class IfTagUnitTest < Minitest::Test
4
6
  def test_if_nodelist
5
7
  template = Liquid::Template.parse('{% if true %}IF{% else %}ELSE{% endif %}')
6
- assert_equal ['IF', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten
8
+ assert_equal(['IF', 'ELSE'], template.root.nodelist[0].nodelist.map(&:nodelist).flatten)
7
9
  end
8
10
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class TemplateFactoryUnitTest < Minitest::Test
6
+ include Liquid
7
+
8
+ def test_for_returns_liquid_template_instance
9
+ template = TemplateFactory.new.for("anything")
10
+ assert_instance_of(Liquid::Template, template)
11
+ end
12
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TemplateUnitTest < Minitest::Test
@@ -6,7 +8,7 @@ class TemplateUnitTest < Minitest::Test
6
8
  def test_sets_default_localization_in_document
7
9
  t = Template.new
8
10
  t.parse('{%comment%}{%endcomment%}')
9
- assert_instance_of I18n, t.root.nodelist[0].options[:locale]
11
+ assert_instance_of(I18n, t.root.nodelist[0].options[:locale])
10
12
  end
11
13
 
12
14
  def test_sets_default_localization_in_context_with_quick_initialization
@@ -14,13 +16,13 @@ class TemplateUnitTest < Minitest::Test
14
16
  t.parse('{%comment%}{%endcomment%}', locale: I18n.new(fixture("en_locale.yml")))
15
17
 
16
18
  locale = t.root.nodelist[0].options[:locale]
17
- assert_instance_of I18n, locale
18
- assert_equal fixture("en_locale.yml"), locale.path
19
+ assert_instance_of(I18n, locale)
20
+ assert_equal(fixture("en_locale.yml"), locale.path)
19
21
  end
20
22
 
21
23
  def test_with_cache_classes_tags_returns_the_same_class
22
24
  original_cache_setting = Liquid.cache_classes
23
- Liquid.cache_classes = true
25
+ Liquid.cache_classes = true
24
26
 
25
27
  original_klass = Class.new
26
28
  Object.send(:const_set, :CustomTag, original_klass)
@@ -31,7 +33,7 @@ class TemplateUnitTest < Minitest::Test
31
33
  new_klass = Class.new
32
34
  Object.send(:const_set, :CustomTag, new_klass)
33
35
 
34
- assert Template.tags['custom'].equal?(original_klass)
36
+ assert(Template.tags['custom'].equal?(original_klass))
35
37
  ensure
36
38
  Object.send(:remove_const, :CustomTag)
37
39
  Template.tags.delete('custom')
@@ -40,7 +42,7 @@ class TemplateUnitTest < Minitest::Test
40
42
 
41
43
  def test_without_cache_classes_tags_reloads_the_class
42
44
  original_cache_setting = Liquid.cache_classes
43
- Liquid.cache_classes = false
45
+ Liquid.cache_classes = false
44
46
 
45
47
  original_klass = Class.new
46
48
  Object.send(:const_set, :CustomTag, original_klass)
@@ -51,7 +53,7 @@ class TemplateUnitTest < Minitest::Test
51
53
  new_klass = Class.new
52
54
  Object.send(:const_set, :CustomTag, new_klass)
53
55
 
54
- assert Template.tags['custom'].equal?(new_klass)
56
+ assert(Template.tags['custom'].equal?(new_klass))
55
57
  ensure
56
58
  Object.send(:remove_const, :CustomTag)
57
59
  Template.tags.delete('custom')
@@ -62,17 +64,24 @@ class TemplateUnitTest < Minitest::Test
62
64
 
63
65
  def test_tags_delete
64
66
  Template.register_tag('fake', FakeTag)
65
- assert_equal FakeTag, Template.tags['fake']
67
+ assert_equal(FakeTag, Template.tags['fake'])
66
68
 
67
69
  Template.tags.delete('fake')
68
- assert_nil Template.tags['fake']
70
+ assert_nil(Template.tags['fake'])
69
71
  end
70
72
 
71
73
  def test_tags_can_be_looped_over
72
74
  Template.register_tag('fake', FakeTag)
73
75
  result = Template.tags.map { |name, klass| [name, klass] }
74
- assert result.include?(["fake", "TemplateUnitTest::FakeTag"])
76
+ assert(result.include?(["fake", "TemplateUnitTest::FakeTag"]))
75
77
  ensure
76
78
  Template.tags.delete('fake')
77
79
  end
80
+
81
+ class TemplateSubclass < Liquid::Template
82
+ end
83
+
84
+ def test_template_inheritance
85
+ assert_equal("foo", TemplateSubclass.parse("foo").render)
86
+ end
78
87
  end
@@ -1,46 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TokenizerTest < Minitest::Test
4
6
  def test_tokenize_strings
5
- assert_equal [' '], tokenize(' ')
6
- assert_equal ['hello world'], tokenize('hello world')
7
+ assert_equal([' '], tokenize(' '))
8
+ assert_equal(['hello world'], tokenize('hello world'))
7
9
  end
8
10
 
9
11
  def test_tokenize_variables
10
- assert_equal ['{{funk}}'], tokenize('{{funk}}')
11
- assert_equal [' ', '{{funk}}', ' '], tokenize(' {{funk}} ')
12
- assert_equal [' ', '{{funk}}', ' ', '{{so}}', ' ', '{{brother}}', ' '], tokenize(' {{funk}} {{so}} {{brother}} ')
13
- assert_equal [' ', '{{ funk }}', ' '], tokenize(' {{ funk }} ')
12
+ assert_equal(['{{funk}}'], tokenize('{{funk}}'))
13
+ assert_equal([' ', '{{funk}}', ' '], tokenize(' {{funk}} '))
14
+ assert_equal([' ', '{{funk}}', ' ', '{{so}}', ' ', '{{brother}}', ' '], tokenize(' {{funk}} {{so}} {{brother}} '))
15
+ assert_equal([' ', '{{ funk }}', ' '], tokenize(' {{ funk }} '))
14
16
  end
15
17
 
16
18
  def test_tokenize_blocks
17
- assert_equal ['{%comment%}'], tokenize('{%comment%}')
18
- assert_equal [' ', '{%comment%}', ' '], tokenize(' {%comment%} ')
19
+ assert_equal(['{%comment%}'], tokenize('{%comment%}'))
20
+ assert_equal([' ', '{%comment%}', ' '], tokenize(' {%comment%} '))
19
21
 
20
- assert_equal [' ', '{%comment%}', ' ', '{%endcomment%}', ' '], tokenize(' {%comment%} {%endcomment%} ')
21
- assert_equal [' ', '{% comment %}', ' ', '{% endcomment %}', ' '], tokenize(" {% comment %} {% endcomment %} ")
22
+ assert_equal([' ', '{%comment%}', ' ', '{%endcomment%}', ' '], tokenize(' {%comment%} {%endcomment%} '))
23
+ assert_equal([' ', '{% comment %}', ' ', '{% endcomment %}', ' '], tokenize(" {% comment %} {% endcomment %} "))
22
24
  end
23
25
 
24
26
  def test_calculate_line_numbers_per_token_with_profiling
25
- assert_equal [1], tokenize_line_numbers("{{funk}}")
26
- assert_equal [1, 1, 1], tokenize_line_numbers(" {{funk}} ")
27
- assert_equal [1, 2, 2], tokenize_line_numbers("\n{{funk}}\n")
28
- assert_equal [1, 1, 3], tokenize_line_numbers(" {{\n funk \n}} ")
27
+ assert_equal([1], tokenize_line_numbers("{{funk}}"))
28
+ assert_equal([1, 1, 1], tokenize_line_numbers(" {{funk}} "))
29
+ assert_equal([1, 2, 2], tokenize_line_numbers("\n{{funk}}\n"))
30
+ assert_equal([1, 1, 3], tokenize_line_numbers(" {{\n funk \n}} "))
29
31
  end
30
32
 
31
33
  private
32
34
 
33
35
  def tokenize(source)
34
36
  tokenizer = Liquid::Tokenizer.new(source)
35
- tokens = []
36
- while t = tokenizer.shift
37
+ tokens = []
38
+ while (t = tokenizer.shift)
37
39
  tokens << t
38
40
  end
39
41
  tokens
40
42
  end
41
43
 
42
44
  def tokenize_line_numbers(source)
43
- tokenizer = Liquid::Tokenizer.new(source, true)
45
+ tokenizer = Liquid::Tokenizer.new(source, true)
44
46
  line_numbers = []
45
47
  loop do
46
48
  line_number = tokenizer.line_number
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class VariableUnitTest < Minitest::Test
@@ -5,108 +7,108 @@ class VariableUnitTest < Minitest::Test
5
7
 
6
8
  def test_variable
7
9
  var = create_variable('hello')
8
- assert_equal VariableLookup.new('hello'), var.name
10
+ assert_equal(VariableLookup.new('hello'), var.name)
9
11
  end
10
12
 
11
13
  def test_filters
12
14
  var = create_variable('hello | textileze')
13
- assert_equal VariableLookup.new('hello'), var.name
14
- assert_equal [['textileze', []]], var.filters
15
+ assert_equal(VariableLookup.new('hello'), var.name)
16
+ assert_equal([['textileze', []]], var.filters)
15
17
 
16
18
  var = create_variable('hello | textileze | paragraph')
17
- assert_equal VariableLookup.new('hello'), var.name
18
- assert_equal [['textileze', []], ['paragraph', []]], var.filters
19
+ assert_equal(VariableLookup.new('hello'), var.name)
20
+ assert_equal([['textileze', []], ['paragraph', []]], var.filters)
19
21
 
20
22
  var = create_variable(%( hello | strftime: '%Y'))
21
- assert_equal VariableLookup.new('hello'), var.name
22
- assert_equal [['strftime', ['%Y']]], var.filters
23
+ assert_equal(VariableLookup.new('hello'), var.name)
24
+ assert_equal([['strftime', ['%Y']]], var.filters)
23
25
 
24
26
  var = create_variable(%( 'typo' | link_to: 'Typo', true ))
25
- assert_equal 'typo', var.name
26
- assert_equal [['link_to', ['Typo', true]]], var.filters
27
+ assert_equal('typo', var.name)
28
+ assert_equal([['link_to', ['Typo', true]]], var.filters)
27
29
 
28
30
  var = create_variable(%( 'typo' | link_to: 'Typo', false ))
29
- assert_equal 'typo', var.name
30
- assert_equal [['link_to', ['Typo', false]]], var.filters
31
+ assert_equal('typo', var.name)
32
+ assert_equal([['link_to', ['Typo', false]]], var.filters)
31
33
 
32
34
  var = create_variable(%( 'foo' | repeat: 3 ))
33
- assert_equal 'foo', var.name
34
- assert_equal [['repeat', [3]]], var.filters
35
+ assert_equal('foo', var.name)
36
+ assert_equal([['repeat', [3]]], var.filters)
35
37
 
36
38
  var = create_variable(%( 'foo' | repeat: 3, 3 ))
37
- assert_equal 'foo', var.name
38
- assert_equal [['repeat', [3, 3]]], var.filters
39
+ assert_equal('foo', var.name)
40
+ assert_equal([['repeat', [3, 3]]], var.filters)
39
41
 
40
42
  var = create_variable(%( 'foo' | repeat: 3, 3, 3 ))
41
- assert_equal 'foo', var.name
42
- assert_equal [['repeat', [3, 3, 3]]], var.filters
43
+ assert_equal('foo', var.name)
44
+ assert_equal([['repeat', [3, 3, 3]]], var.filters)
43
45
 
44
46
  var = create_variable(%( hello | strftime: '%Y, okay?'))
45
- assert_equal VariableLookup.new('hello'), var.name
46
- assert_equal [['strftime', ['%Y, okay?']]], var.filters
47
+ assert_equal(VariableLookup.new('hello'), var.name)
48
+ assert_equal([['strftime', ['%Y, okay?']]], var.filters)
47
49
 
48
50
  var = create_variable(%( hello | things: "%Y, okay?", 'the other one'))
49
- assert_equal VariableLookup.new('hello'), var.name
50
- assert_equal [['things', ['%Y, okay?', 'the other one']]], var.filters
51
+ assert_equal(VariableLookup.new('hello'), var.name)
52
+ assert_equal([['things', ['%Y, okay?', 'the other one']]], var.filters)
51
53
  end
52
54
 
53
55
  def test_filter_with_date_parameter
54
56
  var = create_variable(%( '2006-06-06' | date: "%m/%d/%Y"))
55
- assert_equal '2006-06-06', var.name
56
- assert_equal [['date', ['%m/%d/%Y']]], var.filters
57
+ assert_equal('2006-06-06', var.name)
58
+ assert_equal([['date', ['%m/%d/%Y']]], var.filters)
57
59
  end
58
60
 
59
61
  def test_filters_without_whitespace
60
62
  var = create_variable('hello | textileze | paragraph')
61
- assert_equal VariableLookup.new('hello'), var.name
62
- assert_equal [['textileze', []], ['paragraph', []]], var.filters
63
+ assert_equal(VariableLookup.new('hello'), var.name)
64
+ assert_equal([['textileze', []], ['paragraph', []]], var.filters)
63
65
 
64
66
  var = create_variable('hello|textileze|paragraph')
65
- assert_equal VariableLookup.new('hello'), var.name
66
- assert_equal [['textileze', []], ['paragraph', []]], var.filters
67
+ assert_equal(VariableLookup.new('hello'), var.name)
68
+ assert_equal([['textileze', []], ['paragraph', []]], var.filters)
67
69
 
68
70
  var = create_variable("hello|replace:'foo','bar'|textileze")
69
- assert_equal VariableLookup.new('hello'), var.name
70
- assert_equal [['replace', ['foo', 'bar']], ['textileze', []]], var.filters
71
+ assert_equal(VariableLookup.new('hello'), var.name)
72
+ assert_equal([['replace', ['foo', 'bar']], ['textileze', []]], var.filters)
71
73
  end
72
74
 
73
75
  def test_symbol
74
76
  var = create_variable("http://disney.com/logo.gif | image: 'med' ", error_mode: :lax)
75
- assert_equal VariableLookup.new('http://disney.com/logo.gif'), var.name
76
- assert_equal [['image', ['med']]], var.filters
77
+ assert_equal(VariableLookup.new('http://disney.com/logo.gif'), var.name)
78
+ assert_equal([['image', ['med']]], var.filters)
77
79
  end
78
80
 
79
81
  def test_string_to_filter
80
82
  var = create_variable("'http://disney.com/logo.gif' | image: 'med' ")
81
- assert_equal 'http://disney.com/logo.gif', var.name
82
- assert_equal [['image', ['med']]], var.filters
83
+ assert_equal('http://disney.com/logo.gif', var.name)
84
+ assert_equal([['image', ['med']]], var.filters)
83
85
  end
84
86
 
85
87
  def test_string_single_quoted
86
88
  var = create_variable(%( "hello" ))
87
- assert_equal 'hello', var.name
89
+ assert_equal('hello', var.name)
88
90
  end
89
91
 
90
92
  def test_string_double_quoted
91
93
  var = create_variable(%( 'hello' ))
92
- assert_equal 'hello', var.name
94
+ assert_equal('hello', var.name)
93
95
  end
94
96
 
95
97
  def test_integer
96
98
  var = create_variable(%( 1000 ))
97
- assert_equal 1000, var.name
99
+ assert_equal(1000, var.name)
98
100
  end
99
101
 
100
102
  def test_float
101
103
  var = create_variable(%( 1000.01 ))
102
- assert_equal 1000.01, var.name
104
+ assert_equal(1000.01, var.name)
103
105
  end
104
106
 
105
107
  def test_dashes
106
- assert_equal VariableLookup.new('foo-bar'), create_variable('foo-bar').name
107
- assert_equal VariableLookup.new('foo-bar-2'), create_variable('foo-bar-2').name
108
+ assert_equal(VariableLookup.new('foo-bar'), create_variable('foo-bar').name)
109
+ assert_equal(VariableLookup.new('foo-bar-2'), create_variable('foo-bar-2').name)
108
110
 
109
- with_error_mode :strict do
111
+ with_error_mode(:strict) do
110
112
  assert_raises(Liquid::SyntaxError) { create_variable('foo - bar') }
111
113
  assert_raises(Liquid::SyntaxError) { create_variable('-foo') }
112
114
  assert_raises(Liquid::SyntaxError) { create_variable('2foo') }
@@ -115,24 +117,24 @@ class VariableUnitTest < Minitest::Test
115
117
 
116
118
  def test_string_with_special_chars
117
119
  var = create_variable(%( 'hello! $!@.;"ddasd" ' ))
118
- assert_equal 'hello! $!@.;"ddasd" ', var.name
120
+ assert_equal('hello! $!@.;"ddasd" ', var.name)
119
121
  end
120
122
 
121
123
  def test_string_dot
122
124
  var = create_variable(%( test.test ))
123
- assert_equal VariableLookup.new('test.test'), var.name
125
+ assert_equal(VariableLookup.new('test.test'), var.name)
124
126
  end
125
127
 
126
128
  def test_filter_with_keyword_arguments
127
129
  var = create_variable(%( hello | things: greeting: "world", farewell: 'goodbye'))
128
- assert_equal VariableLookup.new('hello'), var.name
129
- assert_equal [['things', [], { 'greeting' => 'world', 'farewell' => 'goodbye' }]], var.filters
130
+ assert_equal(VariableLookup.new('hello'), var.name)
131
+ assert_equal([['things', [], { 'greeting' => 'world', 'farewell' => 'goodbye' }]], var.filters)
130
132
  end
131
133
 
132
134
  def test_lax_filter_argument_parsing
133
135
  var = create_variable(%( number_of_comments | pluralize: 'comment': 'comments' ), error_mode: :lax)
134
- assert_equal VariableLookup.new('number_of_comments'), var.name
135
- assert_equal [['pluralize', ['comment', 'comments']]], var.filters
136
+ assert_equal(VariableLookup.new('number_of_comments'), var.name)
137
+ assert_equal([['pluralize', ['comment', 'comments']]], var.filters)
136
138
  end
137
139
 
138
140
  def test_strict_filter_argument_parsing
@@ -145,13 +147,13 @@ class VariableUnitTest < Minitest::Test
145
147
 
146
148
  def test_output_raw_source_of_variable
147
149
  var = create_variable(%( name_of_variable | upcase ))
148
- assert_equal " name_of_variable | upcase ", var.raw
150
+ assert_equal(" name_of_variable | upcase ", var.raw)
149
151
  end
150
152
 
151
153
  def test_variable_lookup_interface
152
154
  lookup = VariableLookup.new('a.b.c')
153
- assert_equal 'a', lookup.name
154
- assert_equal ['b', 'c'], lookup.lookups
155
+ assert_equal('a', lookup.name)
156
+ assert_equal(['b', 'c'], lookup.lookups)
155
157
  end
156
158
 
157
159
  private
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquid
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.rc3
4
+ version: 5.0.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: 2016-09-13 00:00:00.000000000 Z
11
+ date: 2021-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '13.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '13.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,16 +67,23 @@ files:
67
67
  - lib/liquid/lexer.rb
68
68
  - lib/liquid/locales/en.yml
69
69
  - lib/liquid/parse_context.rb
70
+ - lib/liquid/parse_tree_visitor.rb
70
71
  - lib/liquid/parser.rb
71
72
  - lib/liquid/parser_switching.rb
73
+ - lib/liquid/partial_cache.rb
72
74
  - lib/liquid/profiler.rb
73
75
  - lib/liquid/profiler/hooks.rb
74
76
  - lib/liquid/range_lookup.rb
77
+ - lib/liquid/register.rb
75
78
  - lib/liquid/resource_limits.rb
76
79
  - lib/liquid/standardfilters.rb
77
- - lib/liquid/strainer.rb
80
+ - lib/liquid/static_registers.rb
81
+ - lib/liquid/strainer_factory.rb
82
+ - lib/liquid/strainer_template.rb
78
83
  - lib/liquid/tablerowloop_drop.rb
79
84
  - lib/liquid/tag.rb
85
+ - lib/liquid/tag/disableable.rb
86
+ - lib/liquid/tag/disabler.rb
80
87
  - lib/liquid/tags/assign.rb
81
88
  - lib/liquid/tags/break.rb
82
89
  - lib/liquid/tags/capture.rb
@@ -85,16 +92,20 @@ files:
85
92
  - lib/liquid/tags/continue.rb
86
93
  - lib/liquid/tags/cycle.rb
87
94
  - lib/liquid/tags/decrement.rb
95
+ - lib/liquid/tags/echo.rb
88
96
  - lib/liquid/tags/for.rb
89
97
  - lib/liquid/tags/if.rb
90
98
  - lib/liquid/tags/ifchanged.rb
91
99
  - lib/liquid/tags/include.rb
92
100
  - lib/liquid/tags/increment.rb
93
101
  - lib/liquid/tags/raw.rb
102
+ - lib/liquid/tags/render.rb
94
103
  - lib/liquid/tags/table_row.rb
95
104
  - lib/liquid/tags/unless.rb
96
105
  - lib/liquid/template.rb
106
+ - lib/liquid/template_factory.rb
97
107
  - lib/liquid/tokenizer.rb
108
+ - lib/liquid/usage.rb
98
109
  - lib/liquid/utils.rb
99
110
  - lib/liquid/variable.rb
100
111
  - lib/liquid/variable_lookup.rb
@@ -102,25 +113,32 @@ files:
102
113
  - test/fixtures/en_locale.yml
103
114
  - test/integration/assign_test.rb
104
115
  - test/integration/blank_test.rb
116
+ - test/integration/block_test.rb
105
117
  - test/integration/capture_test.rb
106
118
  - test/integration/context_test.rb
107
119
  - test/integration/document_test.rb
108
120
  - test/integration/drop_test.rb
109
121
  - test/integration/error_handling_test.rb
122
+ - test/integration/expression_test.rb
110
123
  - test/integration/filter_test.rb
111
124
  - test/integration/hash_ordering_test.rb
112
125
  - test/integration/output_test.rb
113
126
  - test/integration/parsing_quirks_test.rb
114
- - test/integration/render_profiling_test.rb
127
+ - test/integration/profiler_test.rb
115
128
  - test/integration/security_test.rb
116
129
  - test/integration/standard_filter_test.rb
130
+ - test/integration/tag/disableable_test.rb
131
+ - test/integration/tag_test.rb
117
132
  - test/integration/tags/break_tag_test.rb
118
133
  - test/integration/tags/continue_tag_test.rb
134
+ - test/integration/tags/echo_test.rb
119
135
  - test/integration/tags/for_tag_test.rb
120
136
  - test/integration/tags/if_else_tag_test.rb
121
137
  - test/integration/tags/include_tag_test.rb
122
138
  - test/integration/tags/increment_tag_test.rb
139
+ - test/integration/tags/liquid_tag_test.rb
123
140
  - test/integration/tags/raw_tag_test.rb
141
+ - test/integration/tags/render_tag_test.rb
124
142
  - test/integration/tags/standard_tag_test.rb
125
143
  - test/integration/tags/statements_test.rb
126
144
  - test/integration/tags/table_row_test.rb
@@ -131,24 +149,29 @@ files:
131
149
  - test/test_helper.rb
132
150
  - test/unit/block_unit_test.rb
133
151
  - test/unit/condition_unit_test.rb
134
- - test/unit/context_unit_test.rb
135
152
  - test/unit/file_system_unit_test.rb
136
153
  - test/unit/i18n_unit_test.rb
137
154
  - test/unit/lexer_unit_test.rb
155
+ - test/unit/parse_tree_visitor_test.rb
138
156
  - test/unit/parser_unit_test.rb
157
+ - test/unit/partial_cache_unit_test.rb
139
158
  - test/unit/regexp_unit_test.rb
140
- - test/unit/strainer_unit_test.rb
159
+ - test/unit/static_registers_unit_test.rb
160
+ - test/unit/strainer_factory_unit_test.rb
161
+ - test/unit/strainer_template_unit_test.rb
141
162
  - test/unit/tag_unit_test.rb
142
163
  - test/unit/tags/case_tag_unit_test.rb
143
164
  - test/unit/tags/for_tag_unit_test.rb
144
165
  - test/unit/tags/if_tag_unit_test.rb
166
+ - test/unit/template_factory_unit_test.rb
145
167
  - test/unit/template_unit_test.rb
146
168
  - test/unit/tokenizer_unit_test.rb
147
169
  - test/unit/variable_unit_test.rb
148
170
  homepage: http://www.liquidmarkup.org
149
171
  licenses:
150
172
  - MIT
151
- metadata: {}
173
+ metadata:
174
+ allowed_push_host: https://rubygems.org
152
175
  post_install_message:
153
176
  rdoc_options: []
154
177
  require_paths:
@@ -157,62 +180,72 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
180
  requirements:
158
181
  - - ">="
159
182
  - !ruby/object:Gem::Version
160
- version: '0'
183
+ version: 2.5.0
161
184
  required_rubygems_version: !ruby/object:Gem::Requirement
162
185
  requirements:
163
186
  - - ">="
164
187
  - !ruby/object:Gem::Version
165
188
  version: 1.3.7
166
189
  requirements: []
167
- rubyforge_project:
168
- rubygems_version: 2.4.5
190
+ rubygems_version: 3.0.3
169
191
  signing_key:
170
192
  specification_version: 4
171
193
  summary: A secure, non-evaling end user template engine with aesthetic markup.
172
194
  test_files:
173
- - test/fixtures/en_locale.yml
174
- - test/integration/assign_test.rb
195
+ - test/unit/lexer_unit_test.rb
196
+ - test/unit/condition_unit_test.rb
197
+ - test/unit/template_factory_unit_test.rb
198
+ - test/unit/tag_unit_test.rb
199
+ - test/unit/tokenizer_unit_test.rb
200
+ - test/unit/regexp_unit_test.rb
201
+ - test/unit/file_system_unit_test.rb
202
+ - test/unit/block_unit_test.rb
203
+ - test/unit/strainer_factory_unit_test.rb
204
+ - test/unit/i18n_unit_test.rb
205
+ - test/unit/variable_unit_test.rb
206
+ - test/unit/static_registers_unit_test.rb
207
+ - test/unit/strainer_template_unit_test.rb
208
+ - test/unit/template_unit_test.rb
209
+ - test/unit/partial_cache_unit_test.rb
210
+ - test/unit/parse_tree_visitor_test.rb
211
+ - test/unit/tags/if_tag_unit_test.rb
212
+ - test/unit/tags/case_tag_unit_test.rb
213
+ - test/unit/tags/for_tag_unit_test.rb
214
+ - test/unit/parser_unit_test.rb
215
+ - test/test_helper.rb
216
+ - test/integration/expression_test.rb
217
+ - test/integration/parsing_quirks_test.rb
218
+ - test/integration/security_test.rb
219
+ - test/integration/template_test.rb
220
+ - test/integration/filter_test.rb
221
+ - test/integration/drop_test.rb
175
222
  - test/integration/blank_test.rb
176
223
  - test/integration/capture_test.rb
177
224
  - test/integration/context_test.rb
178
225
  - test/integration/document_test.rb
179
- - test/integration/drop_test.rb
180
- - test/integration/error_handling_test.rb
181
- - test/integration/filter_test.rb
182
- - test/integration/hash_ordering_test.rb
183
- - test/integration/output_test.rb
184
- - test/integration/parsing_quirks_test.rb
185
- - test/integration/render_profiling_test.rb
186
- - test/integration/security_test.rb
226
+ - test/integration/block_test.rb
227
+ - test/integration/tag_test.rb
228
+ - test/integration/tag/disableable_test.rb
187
229
  - test/integration/standard_filter_test.rb
188
- - test/integration/tags/break_tag_test.rb
189
- - test/integration/tags/continue_tag_test.rb
190
- - test/integration/tags/for_tag_test.rb
191
- - test/integration/tags/if_else_tag_test.rb
192
- - test/integration/tags/include_tag_test.rb
193
- - test/integration/tags/increment_tag_test.rb
230
+ - test/integration/output_test.rb
231
+ - test/integration/assign_test.rb
232
+ - test/integration/profiler_test.rb
233
+ - test/integration/trim_mode_test.rb
234
+ - test/integration/error_handling_test.rb
235
+ - test/integration/tags/echo_test.rb
194
236
  - test/integration/tags/raw_tag_test.rb
195
- - test/integration/tags/standard_tag_test.rb
196
237
  - test/integration/tags/statements_test.rb
238
+ - test/integration/tags/for_tag_test.rb
239
+ - test/integration/tags/standard_tag_test.rb
240
+ - test/integration/tags/render_tag_test.rb
197
241
  - test/integration/tags/table_row_test.rb
242
+ - test/integration/tags/break_tag_test.rb
243
+ - test/integration/tags/if_else_tag_test.rb
198
244
  - test/integration/tags/unless_else_tag_test.rb
199
- - test/integration/template_test.rb
200
- - test/integration/trim_mode_test.rb
245
+ - test/integration/tags/continue_tag_test.rb
246
+ - test/integration/tags/include_tag_test.rb
247
+ - test/integration/tags/liquid_tag_test.rb
248
+ - test/integration/tags/increment_tag_test.rb
249
+ - test/integration/hash_ordering_test.rb
201
250
  - test/integration/variable_test.rb
202
- - test/test_helper.rb
203
- - test/unit/block_unit_test.rb
204
- - test/unit/condition_unit_test.rb
205
- - test/unit/context_unit_test.rb
206
- - test/unit/file_system_unit_test.rb
207
- - test/unit/i18n_unit_test.rb
208
- - test/unit/lexer_unit_test.rb
209
- - test/unit/parser_unit_test.rb
210
- - test/unit/regexp_unit_test.rb
211
- - test/unit/strainer_unit_test.rb
212
- - test/unit/tag_unit_test.rb
213
- - test/unit/tags/case_tag_unit_test.rb
214
- - test/unit/tags/for_tag_unit_test.rb
215
- - test/unit/tags/if_tag_unit_test.rb
216
- - test/unit/template_unit_test.rb
217
- - test/unit/tokenizer_unit_test.rb
218
- - test/unit/variable_unit_test.rb
251
+ - test/fixtures/en_locale.yml