liquid 3.0.6 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +149 -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 +98 -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 +42 -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.2
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-08 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