temple 0.9.0 → 0.9.1
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 -8
- data/.gitignore +1 -0
- data/CHANGES +5 -0
- data/README.md +1 -1
- data/Rakefile +3 -11
- data/lib/temple/erb/parser.rb +1 -1
- data/lib/temple/generator.rb +11 -5
- data/lib/temple/version.rb +1 -1
- data/spec/engine_spec.rb +189 -0
- data/{test/test_erb.rb → spec/erb_spec.rb} +11 -11
- data/spec/filter_spec.rb +29 -0
- data/{test/filters/test_code_merger.rb → spec/filters/code_merger_spec.rb} +7 -7
- data/{test/filters/test_control_flow.rb → spec/filters/control_flow_spec.rb} +13 -13
- data/{test/filters/test_dynamic_inliner.rb → spec/filters/dynamic_inliner_spec.rb} +18 -18
- data/{test/filters/test_eraser.rb → spec/filters/eraser_spec.rb} +9 -9
- data/{test/filters/test_escapable.rb → spec/filters/escapable_spec.rb} +10 -10
- data/{test/filters/test_multi_flattener.rb → spec/filters/multi_flattener_spec.rb} +4 -4
- data/{test/filters/test_static_analyzer.rb → spec/filters/static_analyzer_spec.rb} +6 -8
- data/{test/filters/test_static_merger.rb → spec/filters/static_merger_spec.rb} +7 -7
- data/{test/filters/test_string_splitter.rb → spec/filters/string_splitter_spec.rb} +4 -5
- data/spec/generator_spec.rb +167 -0
- data/spec/grammar_spec.rb +47 -0
- data/{test/html/test_attribute_merger.rb → spec/html/attribute_merger_spec.rb} +11 -11
- data/{test/html/test_attribute_remover.rb → spec/html/attribute_remover_spec.rb} +7 -7
- data/{test/html/test_attribute_sorter.rb → spec/html/attribute_sorter_spec.rb} +7 -7
- data/{test/html/test_fast.rb → spec/html/fast_spec.rb} +23 -23
- data/{test/html/test_pretty.rb → spec/html/pretty_spec.rb} +7 -7
- data/spec/map_spec.rb +39 -0
- data/{test/mixins/test_dispatcher.rb → spec/mixins/dispatcher_spec.rb} +12 -12
- data/{test/mixins/test_grammar_dsl.rb → spec/mixins/grammar_dsl_spec.rb} +19 -19
- data/{test/helper.rb → spec/spec_helper.rb} +3 -4
- data/{test/test_static_analyzer.rb → spec/static_analyzer_spec.rb} +6 -6
- data/spec/utils_spec.rb +39 -0
- data/temple.gemspec +1 -1
- metadata +28 -28
- data/test/test_engine.rb +0 -189
- data/test/test_filter.rb +0 -29
- data/test/test_generator.rb +0 -158
- data/test/test_grammar.rb +0 -47
- data/test/test_map.rb +0 -39
- data/test/test_utils.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec5bd4c914592e35029369b132ae55d5ae56771b73d5c8710d3b6cbaf8c1409d
|
4
|
+
data.tar.gz: 379717f7a2b6580cfe6e3732dcb8da6ff76f6adf2ec725cfc32eacd988f8471a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 938451e922d130af494c37d73612b35c53e05a94143d1cabff3e725b4512fbc4a04e1bf7acc27be0e8b37ebc7b00a2d9859e4f073c0941aeada7a1ed396889db
|
7
|
+
data.tar.gz: f2925b82e2fb217f63d0afa4890c71f7ff6e209ee7775e33b9fb4a3885dce9bd638e46b8280f58f3f5002b020fd3e07792c560c3e44ed4b182dbfcefa2c66978
|
data/.github/workflows/test.yml
CHANGED
@@ -30,11 +30,5 @@ jobs:
|
|
30
30
|
uses: ruby/setup-ruby@v1
|
31
31
|
with:
|
32
32
|
ruby-version: ${{ matrix.ruby }}
|
33
|
-
|
34
|
-
|
35
|
-
path: vendor/bundle
|
36
|
-
key: ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
37
|
-
restore-keys: ${{ runner.os }}-gems-
|
38
|
-
- name: bundle install
|
39
|
-
run: bundle config path vendor/bundle && bundle install -j$(nproc) --retry 3
|
40
|
-
- run: bundle exec rake test
|
33
|
+
bundler-cache: true
|
34
|
+
- run: bundle exec rake spec
|
data/.gitignore
CHANGED
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Temple
|
2
2
|
======
|
3
3
|
|
4
|
-
[](https://github.com/judofyr/temple/actions/workflows/test.yml) [](https://codeclimate.com/github/judofyr/temple) [](https://rubygems.org/gems/temple) [](http://rubydoc.info/gems/temple/frames)
|
5
5
|
|
6
6
|
Temple is an abstraction and a framework for compiling templates to pure Ruby.
|
7
7
|
It's all about making it easier to experiment, implement and optimize template
|
data/Rakefile
CHANGED
@@ -1,16 +1,8 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
|
-
require '
|
2
|
+
require 'rspec/core/rake_task'
|
3
3
|
|
4
|
-
|
5
|
-
task :
|
6
|
-
sh "bacon -Ilib -Itest --automatic --quiet"
|
7
|
-
end
|
8
|
-
|
9
|
-
#Rake::TestTask.new(:test) do |t|
|
10
|
-
# t.libs << 'lib' << 'test'
|
11
|
-
# t.pattern = 'test/**/test_*.rb'
|
12
|
-
# t.verbose = false
|
13
|
-
#end
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
task default: :spec
|
14
6
|
|
15
7
|
begin
|
16
8
|
require 'rcov/rcovtask'
|
data/lib/temple/erb/parser.rb
CHANGED
data/lib/temple/generator.rb
CHANGED
@@ -10,7 +10,7 @@ module Temple
|
|
10
10
|
include Mixins::Options
|
11
11
|
|
12
12
|
define_options :save_buffer,
|
13
|
-
capture_generator: self,
|
13
|
+
capture_generator: :self,
|
14
14
|
buffer: '_buf',
|
15
15
|
freeze_static: RUBY_VERSION >= '2.1'
|
16
16
|
|
@@ -54,7 +54,7 @@ module Temple
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def on_capture(name, exp)
|
57
|
-
capture_generator.new(buffer: name).call(exp)
|
57
|
+
capture_generator.new(**options, buffer: name).call(exp)
|
58
58
|
end
|
59
59
|
|
60
60
|
def on_static(text)
|
@@ -76,9 +76,15 @@ module Temple
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def capture_generator
|
79
|
-
@capture_generator ||=
|
80
|
-
|
81
|
-
|
79
|
+
@capture_generator ||=
|
80
|
+
case options[:capture_generator]
|
81
|
+
when :self
|
82
|
+
self.class
|
83
|
+
when Class
|
84
|
+
options[:capture_generator]
|
85
|
+
else
|
86
|
+
Generators.const_get(options[:capture_generator])
|
87
|
+
end
|
82
88
|
end
|
83
89
|
|
84
90
|
def concat(str)
|
data/lib/temple/version.rb
CHANGED
data/spec/engine_spec.rb
ADDED
@@ -0,0 +1,189 @@
|
|
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
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
require 'tilt/erubi'
|
3
3
|
|
4
4
|
describe Temple::ERB::Engine do
|
@@ -11,7 +11,7 @@ describe Temple::ERB::Engine do
|
|
11
11
|
<% end %>
|
12
12
|
}
|
13
13
|
|
14
|
-
erb(src).
|
14
|
+
expect(erb(src)).to eq(erubi(src))
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should recognize comments' do
|
@@ -20,7 +20,7 @@ hello
|
|
20
20
|
<%# comment -- ignored -- useful in testing %>
|
21
21
|
world}
|
22
22
|
|
23
|
-
erb(src).
|
23
|
+
expect(erb(src)).to eq(erubi(src))
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should recognize <%% and %%>' do
|
@@ -31,19 +31,19 @@ world}
|
|
31
31
|
<% end %>
|
32
32
|
}
|
33
33
|
|
34
|
-
erb(src).
|
34
|
+
expect(erb(src)).to eq("\n<%\n %>\n")
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'should escape automatically' do
|
38
|
-
src = '
|
38
|
+
src = '<%== "<" %>'
|
39
39
|
ans = '<'
|
40
|
-
erb(src).
|
40
|
+
expect(erb(src)).to eq(ans)
|
41
41
|
end
|
42
42
|
|
43
|
-
it 'should support
|
44
|
-
src = '
|
43
|
+
it 'should support = to disable automatic escape' do
|
44
|
+
src = '<%= "<" %>'
|
45
45
|
ans = '<'
|
46
|
-
erb(src).
|
46
|
+
expect(erb(src)).to eq(ans)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should support trim mode' do
|
@@ -55,7 +55,7 @@ world}
|
|
55
55
|
<% end %>
|
56
56
|
}
|
57
57
|
|
58
|
-
erb(src, trim: true).
|
59
|
-
erb(src, trim: false).
|
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
60
|
end
|
61
61
|
end
|
data/spec/filter_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
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,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::Filters::CodeMerger do
|
4
4
|
before do
|
@@ -6,21 +6,21 @@ describe Temple::Filters::CodeMerger do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should merge serveral codes' do
|
9
|
-
@filter.call([:multi,
|
9
|
+
expect(@filter.call([:multi,
|
10
10
|
[:code, "a"],
|
11
11
|
[:code, "b"],
|
12
12
|
[:code, "c"]
|
13
|
-
]).
|
13
|
+
])).to eq [:code, "a; b; c"]
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should merge serveral codes around static' do
|
17
|
-
@filter.call([:multi,
|
17
|
+
expect(@filter.call([:multi,
|
18
18
|
[:code, "a"],
|
19
19
|
[:code, "b"],
|
20
20
|
[:static, "123"],
|
21
21
|
[:code, "a"],
|
22
22
|
[:code, "b"]
|
23
|
-
]).
|
23
|
+
])).to eq [:multi,
|
24
24
|
[:code, "a; b"],
|
25
25
|
[:static, "123"],
|
26
26
|
[:code, "a; b"]
|
@@ -28,11 +28,11 @@ describe Temple::Filters::CodeMerger do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should merge serveral codes with newlines' do
|
31
|
-
@filter.call([:multi,
|
31
|
+
expect(@filter.call([:multi,
|
32
32
|
[:code, "a"],
|
33
33
|
[:code, "b"],
|
34
34
|
[:newline],
|
35
35
|
[:code, "c"]
|
36
|
-
]).
|
36
|
+
])).to eq [:code, "a; b\nc"]
|
37
37
|
end
|
38
38
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::Filters::ControlFlow do
|
4
4
|
before do
|
@@ -6,18 +6,18 @@ describe Temple::Filters::ControlFlow do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should process blocks' do
|
9
|
-
@filter.call([:block, 'loop do',
|
9
|
+
expect(@filter.call([:block, 'loop do',
|
10
10
|
[:static, 'Hello']
|
11
|
-
]).
|
11
|
+
])).to eq [:multi,
|
12
12
|
[:code, 'loop do'],
|
13
13
|
[:static, 'Hello'],
|
14
14
|
[:code, 'end']]
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should process if' do
|
18
|
-
@filter.call([:if, 'condition',
|
18
|
+
expect(@filter.call([:if, 'condition',
|
19
19
|
[:static, 'Hello']
|
20
|
-
]).
|
20
|
+
])).to eq [:multi,
|
21
21
|
[:code, 'if condition'],
|
22
22
|
[:static, 'Hello'],
|
23
23
|
[:code, 'end']
|
@@ -25,10 +25,10 @@ describe Temple::Filters::ControlFlow do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should process if with else' do
|
28
|
-
@filter.call([:if, 'condition',
|
28
|
+
expect(@filter.call([:if, 'condition',
|
29
29
|
[:static, 'True'],
|
30
30
|
[:static, 'False']
|
31
|
-
]).
|
31
|
+
])).to eq [:multi,
|
32
32
|
[:code, 'if condition'],
|
33
33
|
[:static, 'True'],
|
34
34
|
[:code, 'else'],
|
@@ -38,12 +38,12 @@ describe Temple::Filters::ControlFlow do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should create elsif' do
|
41
|
-
@filter.call([:if, 'condition1',
|
41
|
+
expect(@filter.call([:if, 'condition1',
|
42
42
|
[:static, '1'],
|
43
43
|
[:if, 'condition2',
|
44
44
|
[:static, '2'],
|
45
45
|
[:static, '3']]
|
46
|
-
]).
|
46
|
+
])).to eq [:multi,
|
47
47
|
[:code, 'if condition1'],
|
48
48
|
[:static, '1'],
|
49
49
|
[:code, 'elsif condition2'],
|
@@ -55,11 +55,11 @@ describe Temple::Filters::ControlFlow do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'should process cond' do
|
58
|
-
@filter.call([:cond,
|
58
|
+
expect(@filter.call([:cond,
|
59
59
|
['cond1', [:exp1]],
|
60
60
|
['cond2', [:exp2]],
|
61
61
|
[:else, [:exp3]],
|
62
|
-
]).
|
62
|
+
])).to eq [:multi,
|
63
63
|
[:code, 'case'],
|
64
64
|
[:code, 'when cond1'],
|
65
65
|
[:exp1],
|
@@ -72,11 +72,11 @@ describe Temple::Filters::ControlFlow do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'should process case' do
|
75
|
-
@filter.call([:case, 'var',
|
75
|
+
expect(@filter.call([:case, 'var',
|
76
76
|
['Array', [:exp1]],
|
77
77
|
['String', [:exp2]],
|
78
78
|
[:else, [:exp3]],
|
79
|
-
]).
|
79
|
+
])).to eq [:multi,
|
80
80
|
[:code, 'case (var)'],
|
81
81
|
[:code, 'when Array'],
|
82
82
|
[:exp1],
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::Filters::DynamicInliner do
|
4
4
|
before do
|
@@ -6,38 +6,38 @@ describe Temple::Filters::DynamicInliner do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should compile several statics into dynamic' do
|
9
|
-
@filter.call([:multi,
|
9
|
+
expect(@filter.call([:multi,
|
10
10
|
[:static, "Hello "],
|
11
11
|
[:static, "World\n "],
|
12
12
|
[:static, "Have a nice day"]
|
13
|
-
]).
|
13
|
+
])).to eq [:dynamic, '"Hello World\n Have a nice day"']
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should compile several dynamics into dynamic' do
|
17
|
-
@filter.call([:multi,
|
17
|
+
expect(@filter.call([:multi,
|
18
18
|
[:dynamic, "@hello"],
|
19
19
|
[:dynamic, "@world"],
|
20
20
|
[:dynamic, "@yeah"]
|
21
|
-
]).
|
21
|
+
])).to eq [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should compile static and dynamic into dynamic' do
|
25
|
-
@filter.call([:multi,
|
25
|
+
expect(@filter.call([:multi,
|
26
26
|
[:static, "Hello"],
|
27
27
|
[:dynamic, "@world"],
|
28
28
|
[:dynamic, "@yeah"],
|
29
29
|
[:static, "Nice"]
|
30
|
-
]).
|
30
|
+
])).to eq [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should merge statics and dynamics around a code' do
|
34
|
-
|
34
|
+
expect(@filter.call([:multi,
|
35
35
|
[:static, "Hello "],
|
36
36
|
[:dynamic, "@world"],
|
37
37
|
[:code, "Oh yeah"],
|
38
38
|
[:dynamic, "@yeah"],
|
39
39
|
[:static, "Once more"]
|
40
|
-
]).
|
40
|
+
])).to eq [:multi,
|
41
41
|
[:dynamic, '"Hello #{@world}"'],
|
42
42
|
[:code, "Oh yeah"],
|
43
43
|
[:dynamic, '"#{@yeah}Once more"']
|
@@ -45,19 +45,19 @@ describe Temple::Filters::DynamicInliner do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'should keep codes intact' do
|
48
|
-
@filter.call([:multi, [:code, 'foo']]).
|
48
|
+
expect(@filter.call([:multi, [:code, 'foo']])).to eq([:code, 'foo'])
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should keep single statics intact' do
|
52
|
-
@filter.call([:multi, [:static, 'foo']]).
|
52
|
+
expect(@filter.call([:multi, [:static, 'foo']])).to eq([:static, 'foo'])
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should keep single dynamic intact' do
|
56
|
-
@filter.call([:multi, [:dynamic, 'foo']]).
|
56
|
+
expect(@filter.call([:multi, [:dynamic, 'foo']])).to eq([:dynamic, 'foo'])
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'should inline inside multi' do
|
60
|
-
@filter.call([:multi,
|
60
|
+
expect(@filter.call([:multi,
|
61
61
|
[:static, "Hello "],
|
62
62
|
[:dynamic, "@world"],
|
63
63
|
[:multi,
|
@@ -65,7 +65,7 @@ describe Temple::Filters::DynamicInliner do
|
|
65
65
|
[:dynamic, "@world"]],
|
66
66
|
[:static, "Hello "],
|
67
67
|
[:dynamic, "@world"]
|
68
|
-
]).
|
68
|
+
])).to eq [:multi,
|
69
69
|
[:dynamic, '"Hello #{@world}"'],
|
70
70
|
[:dynamic, '"Hello #{@world}"'],
|
71
71
|
[:dynamic, '"Hello #{@world}"']
|
@@ -73,20 +73,20 @@ describe Temple::Filters::DynamicInliner do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'should merge across newlines' do
|
76
|
-
exp = @filter.call([:multi,
|
76
|
+
exp = expect(@filter.call([:multi,
|
77
77
|
[:static, "Hello \n"],
|
78
78
|
[:newline],
|
79
79
|
[:dynamic, "@world"],
|
80
80
|
[:newline]
|
81
|
-
]).
|
81
|
+
])).to eq [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'should compile static followed by newline' do
|
85
|
-
@filter.call([:multi,
|
85
|
+
expect(@filter.call([:multi,
|
86
86
|
[:static, "Hello \n"],
|
87
87
|
[:newline],
|
88
88
|
[:code, "world"]
|
89
|
-
]).
|
89
|
+
])).to eq [:multi,
|
90
90
|
[:static, "Hello \n"],
|
91
91
|
[:newline],
|
92
92
|
[:code, "world"]
|