liquid 3.0.6 → 4.0.3

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 (103) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +154 -58
  3. data/{MIT-LICENSE → LICENSE} +0 -0
  4. data/README.md +33 -0
  5. data/lib/liquid/block.rb +42 -125
  6. data/lib/liquid/block_body.rb +99 -79
  7. data/lib/liquid/condition.rb +52 -32
  8. data/lib/liquid/context.rb +57 -51
  9. data/lib/liquid/document.rb +19 -9
  10. data/lib/liquid/drop.rb +17 -16
  11. data/lib/liquid/errors.rb +20 -24
  12. data/lib/liquid/expression.rb +26 -10
  13. data/lib/liquid/extensions.rb +19 -7
  14. data/lib/liquid/file_system.rb +11 -11
  15. data/lib/liquid/forloop_drop.rb +42 -0
  16. data/lib/liquid/i18n.rb +6 -6
  17. data/lib/liquid/interrupts.rb +1 -2
  18. data/lib/liquid/lexer.rb +12 -8
  19. data/lib/liquid/locales/en.yml +6 -2
  20. data/lib/liquid/parse_context.rb +38 -0
  21. data/lib/liquid/parse_tree_visitor.rb +42 -0
  22. data/lib/liquid/parser_switching.rb +4 -4
  23. data/lib/liquid/profiler/hooks.rb +7 -7
  24. data/lib/liquid/profiler.rb +18 -19
  25. data/lib/liquid/range_lookup.rb +16 -1
  26. data/lib/liquid/resource_limits.rb +23 -0
  27. data/lib/liquid/standardfilters.rb +207 -61
  28. data/lib/liquid/strainer.rb +15 -8
  29. data/lib/liquid/tablerowloop_drop.rb +62 -0
  30. data/lib/liquid/tag.rb +9 -8
  31. data/lib/liquid/tags/assign.rb +25 -4
  32. data/lib/liquid/tags/break.rb +0 -3
  33. data/lib/liquid/tags/capture.rb +1 -1
  34. data/lib/liquid/tags/case.rb +27 -12
  35. data/lib/liquid/tags/comment.rb +2 -2
  36. data/lib/liquid/tags/cycle.rb +16 -8
  37. data/lib/liquid/tags/decrement.rb +1 -4
  38. data/lib/liquid/tags/for.rb +103 -75
  39. data/lib/liquid/tags/if.rb +60 -44
  40. data/lib/liquid/tags/ifchanged.rb +0 -2
  41. data/lib/liquid/tags/include.rb +71 -51
  42. data/lib/liquid/tags/raw.rb +32 -4
  43. data/lib/liquid/tags/table_row.rb +21 -31
  44. data/lib/liquid/tags/unless.rb +3 -4
  45. data/lib/liquid/template.rb +42 -54
  46. data/lib/liquid/tokenizer.rb +31 -0
  47. data/lib/liquid/truffle.rb +5 -0
  48. data/lib/liquid/utils.rb +52 -8
  49. data/lib/liquid/variable.rb +59 -46
  50. data/lib/liquid/variable_lookup.rb +14 -6
  51. data/lib/liquid/version.rb +2 -1
  52. data/lib/liquid.rb +10 -7
  53. data/test/integration/assign_test.rb +8 -8
  54. data/test/integration/blank_test.rb +14 -14
  55. data/test/integration/block_test.rb +12 -0
  56. data/test/integration/context_test.rb +2 -2
  57. data/test/integration/document_test.rb +19 -0
  58. data/test/integration/drop_test.rb +42 -40
  59. data/test/integration/error_handling_test.rb +96 -43
  60. data/test/integration/filter_test.rb +60 -20
  61. data/test/integration/hash_ordering_test.rb +9 -9
  62. data/test/integration/output_test.rb +26 -27
  63. data/test/integration/parse_tree_visitor_test.rb +247 -0
  64. data/test/integration/parsing_quirks_test.rb +19 -13
  65. data/test/integration/render_profiling_test.rb +20 -20
  66. data/test/integration/security_test.rb +23 -7
  67. data/test/integration/standard_filter_test.rb +426 -46
  68. data/test/integration/tags/break_tag_test.rb +1 -2
  69. data/test/integration/tags/continue_tag_test.rb +0 -1
  70. data/test/integration/tags/for_tag_test.rb +135 -100
  71. data/test/integration/tags/if_else_tag_test.rb +75 -77
  72. data/test/integration/tags/include_tag_test.rb +50 -31
  73. data/test/integration/tags/increment_tag_test.rb +10 -11
  74. data/test/integration/tags/raw_tag_test.rb +7 -1
  75. data/test/integration/tags/standard_tag_test.rb +121 -122
  76. data/test/integration/tags/statements_test.rb +3 -5
  77. data/test/integration/tags/table_row_test.rb +20 -19
  78. data/test/integration/tags/unless_else_tag_test.rb +6 -6
  79. data/test/integration/template_test.rb +199 -49
  80. data/test/integration/trim_mode_test.rb +529 -0
  81. data/test/integration/variable_test.rb +27 -13
  82. data/test/test_helper.rb +33 -6
  83. data/test/truffle/truffle_test.rb +9 -0
  84. data/test/unit/block_unit_test.rb +8 -5
  85. data/test/unit/condition_unit_test.rb +94 -77
  86. data/test/unit/context_unit_test.rb +69 -72
  87. data/test/unit/file_system_unit_test.rb +3 -3
  88. data/test/unit/i18n_unit_test.rb +2 -2
  89. data/test/unit/lexer_unit_test.rb +12 -9
  90. data/test/unit/parser_unit_test.rb +2 -2
  91. data/test/unit/regexp_unit_test.rb +1 -1
  92. data/test/unit/strainer_unit_test.rb +96 -1
  93. data/test/unit/tag_unit_test.rb +7 -2
  94. data/test/unit/tags/case_tag_unit_test.rb +1 -1
  95. data/test/unit/tags/for_tag_unit_test.rb +2 -2
  96. data/test/unit/tags/if_tag_unit_test.rb +1 -1
  97. data/test/unit/template_unit_test.rb +14 -5
  98. data/test/unit/tokenizer_unit_test.rb +24 -7
  99. data/test/unit/variable_unit_test.rb +60 -43
  100. metadata +62 -50
  101. data/lib/liquid/module_ex.rb +0 -62
  102. data/lib/liquid/token.rb +0 -18
  103. data/test/unit/module_ex_unit_test.rb +0 -87
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: 3.0.6
4
+ version: 4.0.3
5
5
  platform: ruby
6
6
  authors:
7
- - Tobias Luetke
7
+ - Tobias Lütke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-24 00:00:00.000000000 Z
11
+ date: 2019-03-12 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: '11.3'
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: '11.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -48,7 +48,7 @@ extra_rdoc_files:
48
48
  - README.md
49
49
  files:
50
50
  - History.md
51
- - MIT-LICENSE
51
+ - LICENSE
52
52
  - README.md
53
53
  - lib/liquid.rb
54
54
  - lib/liquid/block.rb
@@ -61,18 +61,22 @@ files:
61
61
  - lib/liquid/expression.rb
62
62
  - lib/liquid/extensions.rb
63
63
  - lib/liquid/file_system.rb
64
+ - lib/liquid/forloop_drop.rb
64
65
  - lib/liquid/i18n.rb
65
66
  - lib/liquid/interrupts.rb
66
67
  - lib/liquid/lexer.rb
67
68
  - lib/liquid/locales/en.yml
68
- - lib/liquid/module_ex.rb
69
+ - lib/liquid/parse_context.rb
70
+ - lib/liquid/parse_tree_visitor.rb
69
71
  - lib/liquid/parser.rb
70
72
  - lib/liquid/parser_switching.rb
71
73
  - lib/liquid/profiler.rb
72
74
  - lib/liquid/profiler/hooks.rb
73
75
  - lib/liquid/range_lookup.rb
76
+ - lib/liquid/resource_limits.rb
74
77
  - lib/liquid/standardfilters.rb
75
78
  - lib/liquid/strainer.rb
79
+ - lib/liquid/tablerowloop_drop.rb
76
80
  - lib/liquid/tag.rb
77
81
  - lib/liquid/tags/assign.rb
78
82
  - lib/liquid/tags/break.rb
@@ -91,7 +95,8 @@ files:
91
95
  - lib/liquid/tags/table_row.rb
92
96
  - lib/liquid/tags/unless.rb
93
97
  - lib/liquid/template.rb
94
- - lib/liquid/token.rb
98
+ - lib/liquid/tokenizer.rb
99
+ - lib/liquid/truffle.rb
95
100
  - lib/liquid/utils.rb
96
101
  - lib/liquid/variable.rb
97
102
  - lib/liquid/variable_lookup.rb
@@ -99,13 +104,16 @@ files:
99
104
  - test/fixtures/en_locale.yml
100
105
  - test/integration/assign_test.rb
101
106
  - test/integration/blank_test.rb
107
+ - test/integration/block_test.rb
102
108
  - test/integration/capture_test.rb
103
109
  - test/integration/context_test.rb
110
+ - test/integration/document_test.rb
104
111
  - test/integration/drop_test.rb
105
112
  - test/integration/error_handling_test.rb
106
113
  - test/integration/filter_test.rb
107
114
  - test/integration/hash_ordering_test.rb
108
115
  - test/integration/output_test.rb
116
+ - test/integration/parse_tree_visitor_test.rb
109
117
  - test/integration/parsing_quirks_test.rb
110
118
  - test/integration/render_profiling_test.rb
111
119
  - test/integration/security_test.rb
@@ -122,15 +130,16 @@ files:
122
130
  - test/integration/tags/table_row_test.rb
123
131
  - test/integration/tags/unless_else_tag_test.rb
124
132
  - test/integration/template_test.rb
133
+ - test/integration/trim_mode_test.rb
125
134
  - test/integration/variable_test.rb
126
135
  - test/test_helper.rb
136
+ - test/truffle/truffle_test.rb
127
137
  - test/unit/block_unit_test.rb
128
138
  - test/unit/condition_unit_test.rb
129
139
  - test/unit/context_unit_test.rb
130
140
  - test/unit/file_system_unit_test.rb
131
141
  - test/unit/i18n_unit_test.rb
132
142
  - test/unit/lexer_unit_test.rb
133
- - test/unit/module_ex_unit_test.rb
134
143
  - test/unit/parser_unit_test.rb
135
144
  - test/unit/regexp_unit_test.rb
136
145
  - test/unit/strainer_unit_test.rb
@@ -153,61 +162,64 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
162
  requirements:
154
163
  - - ">="
155
164
  - !ruby/object:Gem::Version
156
- version: '0'
165
+ version: 2.1.0
157
166
  required_rubygems_version: !ruby/object:Gem::Requirement
158
167
  requirements:
159
168
  - - ">="
160
169
  - !ruby/object:Gem::Version
161
170
  version: 1.3.7
162
171
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.2.1
172
+ rubygems_version: 3.0.2
165
173
  signing_key:
166
174
  specification_version: 4
167
175
  summary: A secure, non-evaling end user template engine with aesthetic markup.
168
176
  test_files:
169
- - test/fixtures/en_locale.yml
170
- - test/integration/assign_test.rb
177
+ - test/unit/lexer_unit_test.rb
178
+ - test/unit/block_unit_test.rb
179
+ - test/unit/variable_unit_test.rb
180
+ - test/unit/parser_unit_test.rb
181
+ - test/unit/tags/if_tag_unit_test.rb
182
+ - test/unit/tags/case_tag_unit_test.rb
183
+ - test/unit/tags/for_tag_unit_test.rb
184
+ - test/unit/context_unit_test.rb
185
+ - test/unit/tokenizer_unit_test.rb
186
+ - test/unit/tag_unit_test.rb
187
+ - test/unit/i18n_unit_test.rb
188
+ - test/unit/template_unit_test.rb
189
+ - test/unit/condition_unit_test.rb
190
+ - test/unit/file_system_unit_test.rb
191
+ - test/unit/regexp_unit_test.rb
192
+ - test/unit/strainer_unit_test.rb
193
+ - test/integration/output_test.rb
194
+ - test/integration/hash_ordering_test.rb
195
+ - test/integration/variable_test.rb
171
196
  - test/integration/blank_test.rb
172
- - test/integration/capture_test.rb
197
+ - test/integration/parse_tree_visitor_test.rb
198
+ - test/integration/assign_test.rb
199
+ - test/integration/trim_mode_test.rb
173
200
  - test/integration/context_test.rb
174
- - test/integration/drop_test.rb
175
- - test/integration/error_handling_test.rb
176
- - test/integration/filter_test.rb
177
- - test/integration/hash_ordering_test.rb
178
- - test/integration/output_test.rb
179
- - test/integration/parsing_quirks_test.rb
180
- - test/integration/render_profiling_test.rb
181
- - test/integration/security_test.rb
182
- - test/integration/standard_filter_test.rb
183
- - test/integration/tags/break_tag_test.rb
184
- - test/integration/tags/continue_tag_test.rb
201
+ - test/integration/capture_test.rb
202
+ - test/integration/tags/increment_tag_test.rb
185
203
  - test/integration/tags/for_tag_test.rb
186
- - test/integration/tags/if_else_tag_test.rb
204
+ - test/integration/tags/standard_tag_test.rb
205
+ - test/integration/tags/table_row_test.rb
187
206
  - test/integration/tags/include_tag_test.rb
188
- - test/integration/tags/increment_tag_test.rb
189
207
  - test/integration/tags/raw_tag_test.rb
190
- - test/integration/tags/standard_tag_test.rb
191
208
  - test/integration/tags/statements_test.rb
192
- - test/integration/tags/table_row_test.rb
209
+ - test/integration/tags/if_else_tag_test.rb
193
210
  - test/integration/tags/unless_else_tag_test.rb
211
+ - test/integration/tags/continue_tag_test.rb
212
+ - test/integration/tags/break_tag_test.rb
213
+ - test/integration/block_test.rb
214
+ - test/integration/standard_filter_test.rb
215
+ - test/integration/drop_test.rb
216
+ - test/integration/error_handling_test.rb
194
217
  - test/integration/template_test.rb
195
- - test/integration/variable_test.rb
218
+ - test/integration/document_test.rb
219
+ - test/integration/security_test.rb
220
+ - test/integration/render_profiling_test.rb
221
+ - test/integration/parsing_quirks_test.rb
222
+ - test/integration/filter_test.rb
223
+ - test/truffle/truffle_test.rb
224
+ - test/fixtures/en_locale.yml
196
225
  - test/test_helper.rb
197
- - test/unit/block_unit_test.rb
198
- - test/unit/condition_unit_test.rb
199
- - test/unit/context_unit_test.rb
200
- - test/unit/file_system_unit_test.rb
201
- - test/unit/i18n_unit_test.rb
202
- - test/unit/lexer_unit_test.rb
203
- - test/unit/module_ex_unit_test.rb
204
- - test/unit/parser_unit_test.rb
205
- - test/unit/regexp_unit_test.rb
206
- - test/unit/strainer_unit_test.rb
207
- - test/unit/tag_unit_test.rb
208
- - test/unit/tags/case_tag_unit_test.rb
209
- - test/unit/tags/for_tag_unit_test.rb
210
- - test/unit/tags/if_tag_unit_test.rb
211
- - test/unit/template_unit_test.rb
212
- - test/unit/tokenizer_unit_test.rb
213
- - test/unit/variable_unit_test.rb
@@ -1,62 +0,0 @@
1
- # Copyright 2007 by Domizio Demichelis
2
- # This library is free software. It may be used, redistributed and/or modified
3
- # under the same terms as Ruby itself
4
- #
5
- # This extension is used in order to expose the object of the implementing class
6
- # to liquid as it were a Drop. It also limits the liquid-callable methods of the instance
7
- # to the allowed method passed with the liquid_methods call
8
- # Example:
9
- #
10
- # class SomeClass
11
- # liquid_methods :an_allowed_method
12
- #
13
- # def an_allowed_method
14
- # 'this comes from an allowed method'
15
- # end
16
- # def unallowed_method
17
- # 'this will never be an output'
18
- # end
19
- # end
20
- #
21
- # if you want to extend the drop to other methods you can defines more methods
22
- # in the class <YourClass>::LiquidDropClass
23
- #
24
- # class SomeClass::LiquidDropClass
25
- # def another_allowed_method
26
- # 'and this from another allowed method'
27
- # end
28
- # end
29
- # end
30
- #
31
- # usage:
32
- # @something = SomeClass.new
33
- #
34
- # template:
35
- # {{something.an_allowed_method}}{{something.unallowed_method}} {{something.another_allowed_method}}
36
- #
37
- # output:
38
- # 'this comes from an allowed method and this from another allowed method'
39
- #
40
- # You can also chain associations, by adding the liquid_method call in the
41
- # association models.
42
- #
43
- class Module
44
-
45
- def liquid_methods(*allowed_methods)
46
- drop_class = eval "class #{self.to_s}::LiquidDropClass < Liquid::Drop; self; end"
47
- define_method :to_liquid do
48
- drop_class.new(self)
49
- end
50
- drop_class.class_eval do
51
- def initialize(object)
52
- @object = object
53
- end
54
- allowed_methods.each do |sym|
55
- define_method sym do
56
- @object.send sym
57
- end
58
- end
59
- end
60
- end
61
-
62
- end
data/lib/liquid/token.rb DELETED
@@ -1,18 +0,0 @@
1
- module Liquid
2
- class Token < String
3
- attr_reader :line_number
4
-
5
- def initialize(content, line_number)
6
- super(content)
7
- @line_number = line_number
8
- end
9
-
10
- def raw
11
- "<raw>"
12
- end
13
-
14
- def child(string)
15
- Token.new(string, @line_number)
16
- end
17
- end
18
- end
@@ -1,87 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestClassA
4
- liquid_methods :allowedA, :chainedB
5
- def allowedA
6
- 'allowedA'
7
- end
8
- def restrictedA
9
- 'restrictedA'
10
- end
11
- def chainedB
12
- TestClassB.new
13
- end
14
- end
15
-
16
- class TestClassB
17
- liquid_methods :allowedB, :chainedC
18
- def allowedB
19
- 'allowedB'
20
- end
21
- def chainedC
22
- TestClassC.new
23
- end
24
- end
25
-
26
- class TestClassC
27
- liquid_methods :allowedC
28
- def allowedC
29
- 'allowedC'
30
- end
31
- end
32
-
33
- class TestClassC::LiquidDropClass
34
- def another_allowedC
35
- 'another_allowedC'
36
- end
37
- end
38
-
39
- class ModuleExUnitTest < Minitest::Test
40
- include Liquid
41
-
42
- def setup
43
- @a = TestClassA.new
44
- @b = TestClassB.new
45
- @c = TestClassC.new
46
- end
47
-
48
- def test_should_create_LiquidDropClass
49
- assert TestClassA::LiquidDropClass
50
- assert TestClassB::LiquidDropClass
51
- assert TestClassC::LiquidDropClass
52
- end
53
-
54
- def test_should_respond_to_liquid
55
- assert @a.respond_to?(:to_liquid)
56
- assert @b.respond_to?(:to_liquid)
57
- assert @c.respond_to?(:to_liquid)
58
- end
59
-
60
- def test_should_return_LiquidDropClass_object
61
- assert @a.to_liquid.is_a?(TestClassA::LiquidDropClass)
62
- assert @b.to_liquid.is_a?(TestClassB::LiquidDropClass)
63
- assert @c.to_liquid.is_a?(TestClassC::LiquidDropClass)
64
- end
65
-
66
- def test_should_respond_to_liquid_methods
67
- assert @a.to_liquid.respond_to?(:allowedA)
68
- assert @a.to_liquid.respond_to?(:chainedB)
69
- assert @b.to_liquid.respond_to?(:allowedB)
70
- assert @b.to_liquid.respond_to?(:chainedC)
71
- assert @c.to_liquid.respond_to?(:allowedC)
72
- assert @c.to_liquid.respond_to?(:another_allowedC)
73
- end
74
-
75
- def test_should_not_respond_to_restricted_methods
76
- assert ! @a.to_liquid.respond_to?(:restricted)
77
- end
78
-
79
- def test_should_use_regular_objects_as_drops
80
- assert_template_result 'allowedA', "{{ a.allowedA }}", 'a'=>@a
81
- assert_template_result 'allowedB', "{{ a.chainedB.allowedB }}", 'a'=>@a
82
- assert_template_result 'allowedC', "{{ a.chainedB.chainedC.allowedC }}", 'a'=>@a
83
- assert_template_result 'another_allowedC', "{{ a.chainedB.chainedC.another_allowedC }}", 'a'=>@a
84
- assert_template_result '', "{{ a.restricted }}", 'a'=>@a
85
- assert_template_result '', "{{ a.unknown }}", 'a'=>@a
86
- end
87
- end # ModuleExTest