temple 0.9.1 → 0.10.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|