temple 0.10.2 → 0.10.4
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 +3 -1
- data/CHANGES +9 -0
- data/Rakefile +0 -13
- data/lib/temple/filters/dynamic_merger.rb +69 -0
- data/lib/temple/filters/encoding.rb +1 -1
- data/lib/temple/version.rb +1 -1
- data/lib/temple.rb +1 -0
- data/temple.gemspec +1 -2
- metadata +4 -32
- 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 -179
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eedd92f18dc086c241e1163c104e1929477068901992a5b56a36783ddbe2b71
|
4
|
+
data.tar.gz: 87ad60cdfa2a9fbca8c2e499e3dd0ca4b54143cc4e04bbfc07f810bc085a2fdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 169be5abf462523cc50b21b8b1f5ad16e32dd24d8864a7a0d7c69599224d7f62f5ac939cb3da4db733b173653ac0ee227dfc2dbf8d5d236cc8b507af56dce8bd
|
7
|
+
data.tar.gz: d34651062a8d38fbfeaa22a6f92df88b9cddaf821b7fecb506a4e7f9cbee9ce5fa06c42e5f8d1dee56e5987a2d390583a1188c7577ad90354737f49d4e435404
|
data/.github/workflows/test.yml
CHANGED
data/CHANGES
CHANGED
data/Rakefile
CHANGED
@@ -3,16 +3,3 @@ require 'rspec/core/rake_task'
|
|
3
3
|
|
4
4
|
RSpec::Core::RakeTask.new(:spec)
|
5
5
|
task default: :spec
|
6
|
-
|
7
|
-
begin
|
8
|
-
require 'rcov/rcovtask'
|
9
|
-
Rcov::RcovTask.new do |t|
|
10
|
-
t.libs << 'lib' << 'test'
|
11
|
-
t.pattern = 'test/**/test_*.rb'
|
12
|
-
t.verbose = false
|
13
|
-
end
|
14
|
-
rescue LoadError
|
15
|
-
task :rcov do
|
16
|
-
abort "RCov is not available. In order to run rcov, you must: gem install rcov"
|
17
|
-
end
|
18
|
-
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Temple
|
3
|
+
module Filters
|
4
|
+
# Compile [:multi, [:static, 'foo'], [:dynamic, 'bar']] to [:dynamic, '"foo#{bar}"']
|
5
|
+
class DynamicMerger < Filter
|
6
|
+
def on_multi(*exps)
|
7
|
+
exps = exps.dup
|
8
|
+
result = [:multi]
|
9
|
+
buffer = []
|
10
|
+
|
11
|
+
until exps.empty?
|
12
|
+
type, arg = exps.first
|
13
|
+
if type == :dynamic && arg.count("\n") == 0
|
14
|
+
buffer << exps.shift
|
15
|
+
elsif type == :static && exps.size > (count = arg.count("\n")) &&
|
16
|
+
exps[1, count].all? { |e| e == [:newline] }
|
17
|
+
(1 + count).times { buffer << exps.shift }
|
18
|
+
elsif type == :newline && exps.size > (count = count_newline(exps)) &&
|
19
|
+
exps[count].first == :static && count == exps[count].last.count("\n")
|
20
|
+
(count + 1).times { buffer << exps.shift }
|
21
|
+
else
|
22
|
+
result.concat(merge_dynamic(buffer))
|
23
|
+
buffer = []
|
24
|
+
result << compile(exps.shift)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
result.concat(merge_dynamic(buffer))
|
28
|
+
|
29
|
+
result.size == 2 ? result[1] : result
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def merge_dynamic(exps)
|
35
|
+
# Merge exps only when they have both :static and :dynamic
|
36
|
+
unless exps.any? { |type,| type == :static } && exps.any? { |type,| type == :dynamic }
|
37
|
+
return exps
|
38
|
+
end
|
39
|
+
|
40
|
+
strlit_body = String.new
|
41
|
+
exps.each do |type, arg|
|
42
|
+
case type
|
43
|
+
when :static
|
44
|
+
strlit_body << arg.dump.sub!(/\A"/, '').sub!(/"\z/, '').gsub('\n', "\n")
|
45
|
+
when :dynamic
|
46
|
+
strlit_body << "\#{#{arg}}"
|
47
|
+
when :newline
|
48
|
+
# newline is added by `gsub('\n', "\n")`
|
49
|
+
else
|
50
|
+
raise "unexpected type #{type.inspect} is given to #merge_dynamic"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
[[:dynamic, "%Q\0#{strlit_body}\0"]]
|
54
|
+
end
|
55
|
+
|
56
|
+
def count_newline(exps)
|
57
|
+
count = 0
|
58
|
+
exps.each do |exp|
|
59
|
+
if exp == [:newline]
|
60
|
+
count += 1
|
61
|
+
else
|
62
|
+
return count
|
63
|
+
end
|
64
|
+
end
|
65
|
+
return count
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -10,7 +10,7 @@ module Temple
|
|
10
10
|
def call(s)
|
11
11
|
if options[:encoding] && s.respond_to?(:encoding)
|
12
12
|
old_enc = s.encoding
|
13
|
-
s = s
|
13
|
+
s = +s
|
14
14
|
s.force_encoding(options[:encoding])
|
15
15
|
# Fall back to old encoding if new encoding is invalid
|
16
16
|
unless s.valid_encoding?
|
data/lib/temple/version.rb
CHANGED
data/lib/temple.rb
CHANGED
@@ -50,6 +50,7 @@ module Temple
|
|
50
50
|
autoload :StaticMerger, 'temple/filters/static_merger'
|
51
51
|
autoload :StringSplitter, 'temple/filters/string_splitter'
|
52
52
|
autoload :DynamicInliner, 'temple/filters/dynamic_inliner'
|
53
|
+
autoload :DynamicMerger, 'temple/filters/dynamic_merger'
|
53
54
|
autoload :Escapable, 'temple/filters/escapable'
|
54
55
|
autoload :Eraser, 'temple/filters/eraser'
|
55
56
|
autoload :Validator, 'temple/filters/validator'
|
data/temple.gemspec
CHANGED
@@ -12,8 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = 'Template compilation framework in Ruby'
|
13
13
|
|
14
14
|
s.require_paths = %w(lib)
|
15
|
-
s.files = `git ls-files`.split("\
|
16
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
|
17
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
17
|
s.license = 'MIT'
|
19
18
|
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnus Holm
|
8
8
|
- Daniel Mendler
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2025-07-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: tilt
|
@@ -67,7 +66,6 @@ dependencies:
|
|
67
66
|
- - ">="
|
68
67
|
- !ruby/object:Gem::Version
|
69
68
|
version: '0'
|
70
|
-
description:
|
71
69
|
email:
|
72
70
|
- judofyr@gmail.com
|
73
71
|
- mail@daniel-mendler.de
|
@@ -96,6 +94,7 @@ files:
|
|
96
94
|
- lib/temple/filters/code_merger.rb
|
97
95
|
- lib/temple/filters/control_flow.rb
|
98
96
|
- lib/temple/filters/dynamic_inliner.rb
|
97
|
+
- lib/temple/filters/dynamic_merger.rb
|
99
98
|
- lib/temple/filters/encoding.rb
|
100
99
|
- lib/temple/filters/eraser.rb
|
101
100
|
- lib/temple/filters/escapable.rb
|
@@ -133,37 +132,11 @@ files:
|
|
133
132
|
- lib/temple/templates/tilt.rb
|
134
133
|
- lib/temple/utils.rb
|
135
134
|
- 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
135
|
- temple.gemspec
|
162
136
|
homepage: https://github.com/judofyr/temple
|
163
137
|
licenses:
|
164
138
|
- MIT
|
165
139
|
metadata: {}
|
166
|
-
post_install_message:
|
167
140
|
rdoc_options: []
|
168
141
|
require_paths:
|
169
142
|
- lib
|
@@ -178,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
151
|
- !ruby/object:Gem::Version
|
179
152
|
version: '0'
|
180
153
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
182
|
-
signing_key:
|
154
|
+
rubygems_version: 3.6.7
|
183
155
|
specification_version: 4
|
184
156
|
summary: Template compilation framework in Ruby
|
185
157
|
test_files: []
|
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
|