temple 0.9.1 → 0.10.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.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +2 -1
- data/CHANGES +21 -0
- data/Gemfile +0 -1
- data/Rakefile +0 -13
- data/lib/temple/engine.rb +1 -0
- data/lib/temple/erb/engine.rb +3 -0
- data/lib/temple/erb/parser.rb +1 -0
- data/lib/temple/erb/template.rb +1 -0
- data/lib/temple/erb/trimming.rb +1 -0
- data/lib/temple/exceptions.rb +1 -0
- data/lib/temple/filter.rb +1 -0
- data/lib/temple/filters/ambles.rb +1 -0
- data/lib/temple/filters/code_merger.rb +1 -0
- data/lib/temple/filters/control_flow.rb +1 -0
- data/lib/temple/filters/dynamic_inliner.rb +2 -1
- data/lib/temple/filters/dynamic_merger.rb +69 -0
- data/lib/temple/filters/encoding.rb +1 -0
- data/lib/temple/filters/eraser.rb +1 -0
- data/lib/temple/filters/escapable.rb +1 -0
- data/lib/temple/filters/multi_flattener.rb +1 -0
- data/lib/temple/filters/remove_bom.rb +1 -0
- data/lib/temple/filters/static_analyzer.rb +1 -0
- data/lib/temple/filters/static_merger.rb +1 -0
- data/lib/temple/filters/string_splitter.rb +2 -1
- data/lib/temple/filters/validator.rb +1 -0
- data/lib/temple/generator.rb +9 -12
- data/lib/temple/generators/array.rb +1 -0
- data/lib/temple/generators/array_buffer.rb +1 -0
- data/lib/temple/generators/erb.rb +1 -0
- data/lib/temple/generators/rails_output_buffer.rb +7 -3
- data/lib/temple/generators/string_buffer.rb +2 -1
- data/lib/temple/grammar.rb +1 -0
- data/lib/temple/html/attribute_merger.rb +1 -0
- data/lib/temple/html/attribute_remover.rb +1 -0
- data/lib/temple/html/attribute_sorter.rb +1 -0
- data/lib/temple/html/dispatcher.rb +1 -0
- data/lib/temple/html/fast.rb +1 -0
- data/lib/temple/html/filter.rb +1 -0
- data/lib/temple/html/pretty.rb +1 -0
- data/lib/temple/html/safe.rb +1 -0
- data/lib/temple/map.rb +1 -0
- data/lib/temple/mixins/dispatcher.rb +1 -0
- data/lib/temple/mixins/engine_dsl.rb +1 -0
- data/lib/temple/mixins/grammar_dsl.rb +2 -1
- data/lib/temple/mixins/options.rb +1 -0
- data/lib/temple/mixins/template.rb +1 -0
- data/lib/temple/parser.rb +1 -0
- data/lib/temple/static_analyzer.rb +1 -0
- data/lib/temple/templates/rails.rb +3 -2
- data/lib/temple/templates/tilt.rb +1 -0
- data/lib/temple/templates.rb +1 -0
- data/lib/temple/utils.rb +3 -1
- data/lib/temple/version.rb +2 -1
- data/lib/temple.rb +2 -0
- data/temple.gemspec +1 -3
- metadata +4 -28
- data/spec/engine_spec.rb +0 -189
- data/spec/erb_spec.rb +0 -61
- data/spec/filter_spec.rb +0 -29
- data/spec/filters/code_merger_spec.rb +0 -38
- data/spec/filters/control_flow_spec.rb +0 -90
- data/spec/filters/dynamic_inliner_spec.rb +0 -95
- data/spec/filters/eraser_spec.rb +0 -55
- data/spec/filters/escapable_spec.rb +0 -49
- data/spec/filters/multi_flattener_spec.rb +0 -33
- data/spec/filters/static_analyzer_spec.rb +0 -35
- data/spec/filters/static_merger_spec.rb +0 -41
- data/spec/filters/string_splitter_spec.rb +0 -50
- data/spec/generator_spec.rb +0 -167
- data/spec/grammar_spec.rb +0 -47
- data/spec/html/attribute_merger_spec.rb +0 -76
- data/spec/html/attribute_remover_spec.rb +0 -43
- data/spec/html/attribute_sorter_spec.rb +0 -48
- data/spec/html/fast_spec.rb +0 -97
- data/spec/html/pretty_spec.rb +0 -55
- data/spec/map_spec.rb +0 -39
- data/spec/mixins/dispatcher_spec.rb +0 -70
- data/spec/mixins/grammar_dsl_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -29
- data/spec/static_analyzer_spec.rb +0 -39
- data/spec/utils_spec.rb +0 -39
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnus Holm
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tilt
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/temple/filters/code_merger.rb
|
97
97
|
- lib/temple/filters/control_flow.rb
|
98
98
|
- lib/temple/filters/dynamic_inliner.rb
|
99
|
+
- lib/temple/filters/dynamic_merger.rb
|
99
100
|
- lib/temple/filters/encoding.rb
|
100
101
|
- lib/temple/filters/eraser.rb
|
101
102
|
- lib/temple/filters/escapable.rb
|
@@ -133,31 +134,6 @@ files:
|
|
133
134
|
- lib/temple/templates/tilt.rb
|
134
135
|
- lib/temple/utils.rb
|
135
136
|
- lib/temple/version.rb
|
136
|
-
- spec/engine_spec.rb
|
137
|
-
- spec/erb_spec.rb
|
138
|
-
- spec/filter_spec.rb
|
139
|
-
- spec/filters/code_merger_spec.rb
|
140
|
-
- spec/filters/control_flow_spec.rb
|
141
|
-
- spec/filters/dynamic_inliner_spec.rb
|
142
|
-
- spec/filters/eraser_spec.rb
|
143
|
-
- spec/filters/escapable_spec.rb
|
144
|
-
- spec/filters/multi_flattener_spec.rb
|
145
|
-
- spec/filters/static_analyzer_spec.rb
|
146
|
-
- spec/filters/static_merger_spec.rb
|
147
|
-
- spec/filters/string_splitter_spec.rb
|
148
|
-
- spec/generator_spec.rb
|
149
|
-
- spec/grammar_spec.rb
|
150
|
-
- spec/html/attribute_merger_spec.rb
|
151
|
-
- spec/html/attribute_remover_spec.rb
|
152
|
-
- spec/html/attribute_sorter_spec.rb
|
153
|
-
- spec/html/fast_spec.rb
|
154
|
-
- spec/html/pretty_spec.rb
|
155
|
-
- spec/map_spec.rb
|
156
|
-
- spec/mixins/dispatcher_spec.rb
|
157
|
-
- spec/mixins/grammar_dsl_spec.rb
|
158
|
-
- spec/spec_helper.rb
|
159
|
-
- spec/static_analyzer_spec.rb
|
160
|
-
- spec/utils_spec.rb
|
161
137
|
- temple.gemspec
|
162
138
|
homepage: https://github.com/judofyr/temple
|
163
139
|
licenses:
|
@@ -178,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
154
|
- !ruby/object:Gem::Version
|
179
155
|
version: '0'
|
180
156
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
157
|
+
rubygems_version: 3.4.10
|
182
158
|
signing_key:
|
183
159
|
specification_version: 4
|
184
160
|
summary: Template compilation framework in Ruby
|
data/spec/engine_spec.rb
DELETED
@@ -1,189 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
class Callable1
|
5
|
-
def call(exp)
|
6
|
-
exp
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
class Callable2
|
11
|
-
def call(exp)
|
12
|
-
exp
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class MySpecialFilter
|
17
|
-
def initialize(opts = {})
|
18
|
-
end
|
19
|
-
|
20
|
-
def call(exp)
|
21
|
-
exp
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class TestEngine < Temple::Engine
|
26
|
-
use(:Parser) do |input|
|
27
|
-
[:static, input]
|
28
|
-
end
|
29
|
-
use :MyFilter1, proc {|exp| exp }
|
30
|
-
use :MyFilter2, proc {|exp| exp }
|
31
|
-
use Temple::HTML::Pretty, pretty: true
|
32
|
-
filter :MultiFlattener
|
33
|
-
generator :ArrayBuffer
|
34
|
-
use(:BeforeBeforeLast) { MySpecialFilter }
|
35
|
-
use :BeforeLast, Callable1.new
|
36
|
-
use(:Last) { Callable2.new }
|
37
|
-
end
|
38
|
-
|
39
|
-
describe Temple::Engine do
|
40
|
-
it 'should build chain' do
|
41
|
-
expect(TestEngine.chain.size).to eq(9)
|
42
|
-
|
43
|
-
expect(TestEngine.chain[0].first).to eq(:Parser)
|
44
|
-
expect(TestEngine.chain[0].size).to eq(2)
|
45
|
-
expect(TestEngine.chain[0].last).to be_a(Proc)
|
46
|
-
|
47
|
-
expect(TestEngine.chain[1].first).to eq(:MyFilter1)
|
48
|
-
expect(TestEngine.chain[1].size).to eq(2)
|
49
|
-
expect(TestEngine.chain[1].last).to be_a(Proc)
|
50
|
-
|
51
|
-
expect(TestEngine.chain[2].first).to eq(:MyFilter2)
|
52
|
-
expect(TestEngine.chain[2].size).to eq(2)
|
53
|
-
expect(TestEngine.chain[2].last).to be_a(Proc)
|
54
|
-
|
55
|
-
expect(TestEngine.chain[3].first).to eq(:'Temple::HTML::Pretty')
|
56
|
-
expect(TestEngine.chain[3].size).to eq(2)
|
57
|
-
expect(TestEngine.chain[3].last).to be_a(Proc)
|
58
|
-
|
59
|
-
expect(TestEngine.chain[4].first).to eq(:MultiFlattener)
|
60
|
-
expect(TestEngine.chain[4].size).to eq(2)
|
61
|
-
expect(TestEngine.chain[4].last).to be_a(Proc)
|
62
|
-
|
63
|
-
expect(TestEngine.chain[5].first).to eq(:ArrayBuffer)
|
64
|
-
expect(TestEngine.chain[5].size).to eq(2)
|
65
|
-
expect(TestEngine.chain[5].last).to be_a(Proc)
|
66
|
-
|
67
|
-
expect(TestEngine.chain[6].first).to eq(:BeforeBeforeLast)
|
68
|
-
expect(TestEngine.chain[6].size).to eq(2)
|
69
|
-
expect(TestEngine.chain[6].last).to be_a(Proc)
|
70
|
-
|
71
|
-
expect(TestEngine.chain[7].first).to eq(:BeforeLast)
|
72
|
-
expect(TestEngine.chain[7].size).to eq(2)
|
73
|
-
expect(TestEngine.chain[7].last).to be_a(Proc)
|
74
|
-
|
75
|
-
expect(TestEngine.chain[8].first).to eq(:Last)
|
76
|
-
expect(TestEngine.chain[8].size).to eq(2)
|
77
|
-
expect(TestEngine.chain[8].last).to be_a(Proc)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'should instantiate chain' do
|
81
|
-
call_chain = TestEngine.new.send(:call_chain)
|
82
|
-
expect(call_chain[0]).to be_a(Method)
|
83
|
-
expect(call_chain[1]).to be_a(Method)
|
84
|
-
expect(call_chain[2]).to be_a(Method)
|
85
|
-
expect(call_chain[3]).to be_a(Temple::HTML::Pretty)
|
86
|
-
expect(call_chain[4]).to be_a(Temple::Filters::MultiFlattener)
|
87
|
-
expect(call_chain[5]).to be_a(Temple::Generators::ArrayBuffer)
|
88
|
-
expect(call_chain[6]).to be_a(MySpecialFilter)
|
89
|
-
expect(call_chain[7]).to be_a(Callable1)
|
90
|
-
expect(call_chain[8]).to be_a(Callable2)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should have #append' do
|
94
|
-
engine = TestEngine.new
|
95
|
-
call_chain = engine.send(:call_chain)
|
96
|
-
expect(call_chain.size).to eq(9)
|
97
|
-
|
98
|
-
engine.append :MyFilter3 do |exp|
|
99
|
-
exp
|
100
|
-
end
|
101
|
-
|
102
|
-
expect(TestEngine.chain.size).to eq(9)
|
103
|
-
expect(engine.chain.size).to eq(10)
|
104
|
-
expect(engine.chain[9].first).to eq(:MyFilter3)
|
105
|
-
expect(engine.chain[9].size).to eq(2)
|
106
|
-
expect(engine.chain[9].last).to be_a(Proc)
|
107
|
-
|
108
|
-
call_chain = engine.send(:call_chain)
|
109
|
-
expect(call_chain.size).to eq(10)
|
110
|
-
expect(call_chain[9]).to be_a(Method)
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'should have #prepend' do
|
114
|
-
engine = TestEngine.new
|
115
|
-
call_chain = engine.send(:call_chain)
|
116
|
-
expect(call_chain.size).to eq(9)
|
117
|
-
|
118
|
-
engine.prepend :MyFilter0 do |exp|
|
119
|
-
exp
|
120
|
-
end
|
121
|
-
|
122
|
-
expect(TestEngine.chain.size).to eq(9)
|
123
|
-
expect(engine.chain.size).to eq(10)
|
124
|
-
expect(engine.chain[0].first).to eq(:MyFilter0)
|
125
|
-
expect(engine.chain[0].size).to eq(2)
|
126
|
-
expect(engine.chain[0].last).to be_a(Proc)
|
127
|
-
expect(engine.chain[1].first).to eq(:Parser)
|
128
|
-
|
129
|
-
call_chain = engine.send(:call_chain)
|
130
|
-
expect(call_chain.size).to eq(10)
|
131
|
-
expect(call_chain[0]).to be_a(Method)
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'should have #after' do
|
135
|
-
engine = TestEngine.new
|
136
|
-
engine.after :Parser, :MyFilter0 do |exp|
|
137
|
-
exp
|
138
|
-
end
|
139
|
-
expect(TestEngine.chain.size).to eq(9)
|
140
|
-
expect(engine.chain.size).to eq(10)
|
141
|
-
expect(engine.chain[0].first).to eq(:Parser)
|
142
|
-
expect(engine.chain[1].first).to eq(:MyFilter0)
|
143
|
-
expect(engine.chain[2].first).to eq(:MyFilter1)
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'should have #before' do
|
147
|
-
engine = TestEngine.new
|
148
|
-
engine.before :MyFilter1, :MyFilter0 do |exp|
|
149
|
-
exp
|
150
|
-
end
|
151
|
-
expect(TestEngine.chain.size).to eq(9)
|
152
|
-
expect(engine.chain.size).to eq(10)
|
153
|
-
expect(engine.chain[0].first).to eq(:Parser)
|
154
|
-
expect(engine.chain[1].first).to eq(:MyFilter0)
|
155
|
-
expect(engine.chain[2].first).to eq(:MyFilter1)
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'should have #remove' do
|
159
|
-
engine = TestEngine.new
|
160
|
-
engine.remove :MyFilter1
|
161
|
-
expect(TestEngine.chain.size).to eq(9)
|
162
|
-
expect(engine.chain.size).to eq(8)
|
163
|
-
expect(engine.chain[0].first).to eq(:Parser)
|
164
|
-
expect(engine.chain[1].first).to eq(:MyFilter2)
|
165
|
-
|
166
|
-
engine = TestEngine.new
|
167
|
-
engine.remove /Last/
|
168
|
-
expect(engine.chain.size).to eq(6)
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'should have #replace' do
|
172
|
-
engine = TestEngine.new
|
173
|
-
engine.replace :Parser, :MyParser do |exp|
|
174
|
-
exp
|
175
|
-
end
|
176
|
-
expect(engine.chain.size).to eq(9)
|
177
|
-
expect(engine.chain[0].first).to eq(:MyParser)
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'should work with inheritance' do
|
181
|
-
inherited_engine = Class.new(TestEngine)
|
182
|
-
expect(inherited_engine.chain.size).to eq(9)
|
183
|
-
inherited_engine.append :MyFilter3 do |exp|
|
184
|
-
exp
|
185
|
-
end
|
186
|
-
expect(inherited_engine.chain.size).to eq(10)
|
187
|
-
expect(TestEngine.chain.size).to eq(9)
|
188
|
-
end
|
189
|
-
end
|
data/spec/erb_spec.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'tilt/erubi'
|
3
|
-
|
4
|
-
describe Temple::ERB::Engine do
|
5
|
-
it 'should compile erb' do
|
6
|
-
src = %q{
|
7
|
-
%% hi
|
8
|
-
= hello
|
9
|
-
<% 3.times do |n| %>
|
10
|
-
* <%= n %>
|
11
|
-
<% end %>
|
12
|
-
}
|
13
|
-
|
14
|
-
expect(erb(src)).to eq(erubi(src))
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should recognize comments' do
|
18
|
-
src = %q{
|
19
|
-
hello
|
20
|
-
<%# comment -- ignored -- useful in testing %>
|
21
|
-
world}
|
22
|
-
|
23
|
-
expect(erb(src)).to eq(erubi(src))
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should recognize <%% and %%>' do
|
27
|
-
src = %q{
|
28
|
-
<%%
|
29
|
-
<% if true %>
|
30
|
-
%%>
|
31
|
-
<% end %>
|
32
|
-
}
|
33
|
-
|
34
|
-
expect(erb(src)).to eq("\n<%\n %>\n")
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should escape automatically' do
|
38
|
-
src = '<%== "<" %>'
|
39
|
-
ans = '<'
|
40
|
-
expect(erb(src)).to eq(ans)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should support = to disable automatic escape' do
|
44
|
-
src = '<%= "<" %>'
|
45
|
-
ans = '<'
|
46
|
-
expect(erb(src)).to eq(ans)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'should support trim mode' do
|
50
|
-
src = %q{
|
51
|
-
%% hi
|
52
|
-
= hello
|
53
|
-
<% 3.times do |n| %>
|
54
|
-
* <%= n %>
|
55
|
-
<% end %>
|
56
|
-
}
|
57
|
-
|
58
|
-
expect(erb(src, trim: true)).to eq(erubi(src, trim: true))
|
59
|
-
expect(erb(src, trim: false)).to eq(erubi(src, trim: false))
|
60
|
-
end
|
61
|
-
end
|
data/spec/filter_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class SimpleFilter < Temple::Filter
|
4
|
-
define_options :key
|
5
|
-
|
6
|
-
def on_test(arg)
|
7
|
-
[:on_test, arg]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe Temple::Filter do
|
12
|
-
it 'should support options' do
|
13
|
-
expect(Temple::Filter).to respond_to(:default_options)
|
14
|
-
expect(Temple::Filter).to respond_to(:set_default_options)
|
15
|
-
expect(Temple::Filter).to respond_to(:define_options)
|
16
|
-
expect(Temple::Filter.new.options).to be_a(Temple::ImmutableMap)
|
17
|
-
expect(SimpleFilter.new(key: 3).options[:key]).to eq(3)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should implement call' do
|
21
|
-
expect(Temple::Filter.new.call([:exp])).to eq([:exp])
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should process expressions' do
|
25
|
-
filter = SimpleFilter.new
|
26
|
-
expect(filter.call([:unhandled])).to eq([:unhandled])
|
27
|
-
expect(filter.call([:test, 42])).to eq([:on_test, 42])
|
28
|
-
end
|
29
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::CodeMerger do
|
4
|
-
before do
|
5
|
-
@filter = Temple::Filters::CodeMerger.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should merge serveral codes' do
|
9
|
-
expect(@filter.call([:multi,
|
10
|
-
[:code, "a"],
|
11
|
-
[:code, "b"],
|
12
|
-
[:code, "c"]
|
13
|
-
])).to eq [:code, "a; b; c"]
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should merge serveral codes around static' do
|
17
|
-
expect(@filter.call([:multi,
|
18
|
-
[:code, "a"],
|
19
|
-
[:code, "b"],
|
20
|
-
[:static, "123"],
|
21
|
-
[:code, "a"],
|
22
|
-
[:code, "b"]
|
23
|
-
])).to eq [:multi,
|
24
|
-
[:code, "a; b"],
|
25
|
-
[:static, "123"],
|
26
|
-
[:code, "a; b"]
|
27
|
-
]
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should merge serveral codes with newlines' do
|
31
|
-
expect(@filter.call([:multi,
|
32
|
-
[:code, "a"],
|
33
|
-
[:code, "b"],
|
34
|
-
[:newline],
|
35
|
-
[:code, "c"]
|
36
|
-
])).to eq [:code, "a; b\nc"]
|
37
|
-
end
|
38
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::ControlFlow do
|
4
|
-
before do
|
5
|
-
@filter = Temple::Filters::ControlFlow.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should process blocks' do
|
9
|
-
expect(@filter.call([:block, 'loop do',
|
10
|
-
[:static, 'Hello']
|
11
|
-
])).to eq [:multi,
|
12
|
-
[:code, 'loop do'],
|
13
|
-
[:static, 'Hello'],
|
14
|
-
[:code, 'end']]
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should process if' do
|
18
|
-
expect(@filter.call([:if, 'condition',
|
19
|
-
[:static, 'Hello']
|
20
|
-
])).to eq [:multi,
|
21
|
-
[:code, 'if condition'],
|
22
|
-
[:static, 'Hello'],
|
23
|
-
[:code, 'end']
|
24
|
-
]
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should process if with else' do
|
28
|
-
expect(@filter.call([:if, 'condition',
|
29
|
-
[:static, 'True'],
|
30
|
-
[:static, 'False']
|
31
|
-
])).to eq [:multi,
|
32
|
-
[:code, 'if condition'],
|
33
|
-
[:static, 'True'],
|
34
|
-
[:code, 'else'],
|
35
|
-
[:static, 'False'],
|
36
|
-
[:code, 'end']
|
37
|
-
]
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should create elsif' do
|
41
|
-
expect(@filter.call([:if, 'condition1',
|
42
|
-
[:static, '1'],
|
43
|
-
[:if, 'condition2',
|
44
|
-
[:static, '2'],
|
45
|
-
[:static, '3']]
|
46
|
-
])).to eq [:multi,
|
47
|
-
[:code, 'if condition1'],
|
48
|
-
[:static, '1'],
|
49
|
-
[:code, 'elsif condition2'],
|
50
|
-
[:static, '2'],
|
51
|
-
[:code, 'else'],
|
52
|
-
[:static, '3'],
|
53
|
-
[:code, 'end']
|
54
|
-
]
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should process cond' do
|
58
|
-
expect(@filter.call([:cond,
|
59
|
-
['cond1', [:exp1]],
|
60
|
-
['cond2', [:exp2]],
|
61
|
-
[:else, [:exp3]],
|
62
|
-
])).to eq [:multi,
|
63
|
-
[:code, 'case'],
|
64
|
-
[:code, 'when cond1'],
|
65
|
-
[:exp1],
|
66
|
-
[:code, 'when cond2'],
|
67
|
-
[:exp2],
|
68
|
-
[:code, 'else'],
|
69
|
-
[:exp3],
|
70
|
-
[:code, 'end']
|
71
|
-
]
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should process case' do
|
75
|
-
expect(@filter.call([:case, 'var',
|
76
|
-
['Array', [:exp1]],
|
77
|
-
['String', [:exp2]],
|
78
|
-
[:else, [:exp3]],
|
79
|
-
])).to eq [:multi,
|
80
|
-
[:code, 'case (var)'],
|
81
|
-
[:code, 'when Array'],
|
82
|
-
[:exp1],
|
83
|
-
[:code, 'when String'],
|
84
|
-
[:exp2],
|
85
|
-
[:code, 'else'],
|
86
|
-
[:exp3],
|
87
|
-
[:code, 'end']
|
88
|
-
]
|
89
|
-
end
|
90
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::DynamicInliner do
|
4
|
-
before do
|
5
|
-
@filter = Temple::Filters::DynamicInliner.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should compile several statics into dynamic' do
|
9
|
-
expect(@filter.call([:multi,
|
10
|
-
[:static, "Hello "],
|
11
|
-
[:static, "World\n "],
|
12
|
-
[:static, "Have a nice day"]
|
13
|
-
])).to eq [:dynamic, '"Hello World\n Have a nice day"']
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should compile several dynamics into dynamic' do
|
17
|
-
expect(@filter.call([:multi,
|
18
|
-
[:dynamic, "@hello"],
|
19
|
-
[:dynamic, "@world"],
|
20
|
-
[:dynamic, "@yeah"]
|
21
|
-
])).to eq [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should compile static and dynamic into dynamic' do
|
25
|
-
expect(@filter.call([:multi,
|
26
|
-
[:static, "Hello"],
|
27
|
-
[:dynamic, "@world"],
|
28
|
-
[:dynamic, "@yeah"],
|
29
|
-
[:static, "Nice"]
|
30
|
-
])).to eq [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should merge statics and dynamics around a code' do
|
34
|
-
expect(@filter.call([:multi,
|
35
|
-
[:static, "Hello "],
|
36
|
-
[:dynamic, "@world"],
|
37
|
-
[:code, "Oh yeah"],
|
38
|
-
[:dynamic, "@yeah"],
|
39
|
-
[:static, "Once more"]
|
40
|
-
])).to eq [:multi,
|
41
|
-
[:dynamic, '"Hello #{@world}"'],
|
42
|
-
[:code, "Oh yeah"],
|
43
|
-
[:dynamic, '"#{@yeah}Once more"']
|
44
|
-
]
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should keep codes intact' do
|
48
|
-
expect(@filter.call([:multi, [:code, 'foo']])).to eq([:code, 'foo'])
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should keep single statics intact' do
|
52
|
-
expect(@filter.call([:multi, [:static, 'foo']])).to eq([:static, 'foo'])
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should keep single dynamic intact' do
|
56
|
-
expect(@filter.call([:multi, [:dynamic, 'foo']])).to eq([:dynamic, 'foo'])
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should inline inside multi' do
|
60
|
-
expect(@filter.call([:multi,
|
61
|
-
[:static, "Hello "],
|
62
|
-
[:dynamic, "@world"],
|
63
|
-
[:multi,
|
64
|
-
[:static, "Hello "],
|
65
|
-
[:dynamic, "@world"]],
|
66
|
-
[:static, "Hello "],
|
67
|
-
[:dynamic, "@world"]
|
68
|
-
])).to eq [:multi,
|
69
|
-
[:dynamic, '"Hello #{@world}"'],
|
70
|
-
[:dynamic, '"Hello #{@world}"'],
|
71
|
-
[:dynamic, '"Hello #{@world}"']
|
72
|
-
]
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should merge across newlines' do
|
76
|
-
exp = expect(@filter.call([:multi,
|
77
|
-
[:static, "Hello \n"],
|
78
|
-
[:newline],
|
79
|
-
[:dynamic, "@world"],
|
80
|
-
[:newline]
|
81
|
-
])).to eq [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'should compile static followed by newline' do
|
85
|
-
expect(@filter.call([:multi,
|
86
|
-
[:static, "Hello \n"],
|
87
|
-
[:newline],
|
88
|
-
[:code, "world"]
|
89
|
-
])).to eq [:multi,
|
90
|
-
[:static, "Hello \n"],
|
91
|
-
[:newline],
|
92
|
-
[:code, "world"]
|
93
|
-
]
|
94
|
-
end
|
95
|
-
end
|
data/spec/filters/eraser_spec.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::Eraser do
|
4
|
-
it 'should respect keep' do
|
5
|
-
eraser = Temple::Filters::Eraser.new(keep: [:a])
|
6
|
-
expect(eraser.call([:multi,
|
7
|
-
[:a],
|
8
|
-
[:b],
|
9
|
-
[:c]
|
10
|
-
])).to eq [:multi,
|
11
|
-
[:a],
|
12
|
-
[:multi],
|
13
|
-
[:multi]
|
14
|
-
]
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should respect erase' do
|
18
|
-
eraser = Temple::Filters::Eraser.new(erase: [:a])
|
19
|
-
expect(eraser.call([:multi,
|
20
|
-
[:a],
|
21
|
-
[:b],
|
22
|
-
[:c]
|
23
|
-
])).to eq [:multi,
|
24
|
-
[:multi],
|
25
|
-
[:b],
|
26
|
-
[:c]
|
27
|
-
]
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should choose erase over keep' do
|
31
|
-
eraser = Temple::Filters::Eraser.new(keep: [:a, :b], erase: [:a])
|
32
|
-
expect(eraser.call([:multi,
|
33
|
-
[:a],
|
34
|
-
[:b],
|
35
|
-
[:c]
|
36
|
-
])).to eq [:multi,
|
37
|
-
[:multi],
|
38
|
-
[:b],
|
39
|
-
[:multi]
|
40
|
-
]
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should erase nested types' do
|
44
|
-
eraser = Temple::Filters::Eraser.new(erase: [[:a, :b]])
|
45
|
-
expect(eraser.call([:multi,
|
46
|
-
[:a, :a],
|
47
|
-
[:a, :b],
|
48
|
-
[:b]
|
49
|
-
])).to eq [:multi,
|
50
|
-
[:a, :a],
|
51
|
-
[:multi],
|
52
|
-
[:b]
|
53
|
-
]
|
54
|
-
end
|
55
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::Escapable do
|
4
|
-
before do
|
5
|
-
@filter = Temple::Filters::Escapable.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should handle escape expressions' do
|
9
|
-
expect(@filter.call([:escape, true,
|
10
|
-
[:multi,
|
11
|
-
[:static, "a < b"],
|
12
|
-
[:dynamic, "ruby_method"]]
|
13
|
-
])).to eq [:multi,
|
14
|
-
[:static, "a < b"],
|
15
|
-
[:dynamic, "::Temple::Utils.escape_html((ruby_method))"],
|
16
|
-
]
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should keep codes intact' do
|
20
|
-
exp = [:multi, [:code, 'foo']]
|
21
|
-
expect(@filter.call(exp)).to eq(exp)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should keep statics intact' do
|
25
|
-
exp = [:multi, [:static, '<']]
|
26
|
-
expect(@filter.call(exp)).to eq(exp)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should keep dynamic intact' do
|
30
|
-
exp = [:multi, [:dynamic, 'foo']]
|
31
|
-
expect(@filter.call(exp)).to eq(exp)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'should have use_html_safe option' do
|
35
|
-
with_html_safe do
|
36
|
-
filter = Temple::Filters::Escapable.new(use_html_safe: true)
|
37
|
-
expect(filter.call([:escape, true,
|
38
|
-
[:static, Temple::HTML::SafeString.new("a < b")]
|
39
|
-
])).to eq [:static, "a < b"]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should support censoring' do
|
44
|
-
filter = Temple::Filters::Escapable.new(escape_code: '(%s).gsub("Temple sucks", "Temple rocks")')
|
45
|
-
expect(filter.call([:escape, true,
|
46
|
-
[:static, "~~ Temple sucks ~~"]
|
47
|
-
])).to eq [:static, "~~ Temple rocks ~~"]
|
48
|
-
end
|
49
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::MultiFlattener do
|
4
|
-
before do
|
5
|
-
@filter = Temple::Filters::MultiFlattener.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should flatten nested multi expressions' do
|
9
|
-
expect(@filter.call([:multi,
|
10
|
-
[:static, "a"],
|
11
|
-
[:multi,
|
12
|
-
[:dynamic, "aa"],
|
13
|
-
[:multi,
|
14
|
-
[:static, "aaa"],
|
15
|
-
[:static, "aab"],
|
16
|
-
],
|
17
|
-
[:dynamic, "ab"],
|
18
|
-
],
|
19
|
-
[:static, "b"],
|
20
|
-
])).to eq [:multi,
|
21
|
-
[:static, "a"],
|
22
|
-
[:dynamic, "aa"],
|
23
|
-
[:static, "aaa"],
|
24
|
-
[:static, "aab"],
|
25
|
-
[:dynamic, "ab"],
|
26
|
-
[:static, "b"],
|
27
|
-
]
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should return first element' do
|
31
|
-
expect(@filter.call([:multi, [:code, 'foo']])).to eq([:code, 'foo'])
|
32
|
-
end
|
33
|
-
end
|