temple 0.8.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 +5 -5
- data/.github/workflows/test.yml +37 -0
- data/.gitignore +1 -0
- data/CHANGES +43 -1
- data/Gemfile +0 -1
- data/README.md +1 -1
- data/Rakefile +4 -24
- data/lib/temple/engine.rb +1 -0
- data/lib/temple/erb/engine.rb +3 -0
- data/lib/temple/erb/parser.rb +2 -1
- 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 +22 -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 +2 -1
- 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 +13 -1
- data/lib/temple/filters/validator.rb +1 -0
- data/lib/temple/generator.rb +5 -2
- 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 +4 -4
- 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 +4 -2
- 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 +7 -2
- data/lib/temple/templates/tilt.rb +2 -9
- data/lib/temple/templates.rb +1 -0
- data/lib/temple/utils.rb +5 -15
- data/lib/temple/version.rb +2 -1
- data/lib/temple.rb +3 -0
- data/temple.gemspec +4 -6
- metadata +10 -63
- data/.travis.yml +0 -30
- data/test/filters/test_code_merger.rb +0 -38
- data/test/filters/test_control_flow.rb +0 -90
- data/test/filters/test_dynamic_inliner.rb +0 -95
- data/test/filters/test_eraser.rb +0 -55
- data/test/filters/test_escapable.rb +0 -49
- data/test/filters/test_multi_flattener.rb +0 -33
- data/test/filters/test_static_analyzer.rb +0 -37
- data/test/filters/test_static_merger.rb +0 -41
- data/test/filters/test_string_splitter.rb +0 -25
- data/test/helper.rb +0 -30
- data/test/html/test_attribute_merger.rb +0 -76
- data/test/html/test_attribute_remover.rb +0 -43
- data/test/html/test_attribute_sorter.rb +0 -48
- data/test/html/test_fast.rb +0 -97
- data/test/html/test_pretty.rb +0 -55
- data/test/mixins/test_dispatcher.rb +0 -70
- data/test/mixins/test_grammar_dsl.rb +0 -86
- data/test/test_engine.rb +0 -189
- data/test/test_erb.rb +0 -61
- 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_static_analyzer.rb +0 -39
- data/test/test_utils.rb +0 -39
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Temple
|
2
3
|
module Templates
|
3
4
|
class Rails
|
@@ -5,6 +6,10 @@ module Temple
|
|
5
6
|
|
6
7
|
def call(template, source = nil)
|
7
8
|
opts = {}.update(self.class.options).update(file: template.identifier)
|
9
|
+
if ActionView::Base.try(:annotate_rendered_view_with_filenames) && template.format == :html
|
10
|
+
opts[:preamble] = "<!-- BEGIN #{template.short_identifier} -->\n"
|
11
|
+
opts[:postamble] = "<!-- END #{template.short_identifier} -->\n"
|
12
|
+
end
|
8
13
|
self.class.compile((source || template.source), opts)
|
9
14
|
end
|
10
15
|
|
@@ -14,8 +19,8 @@ module Temple
|
|
14
19
|
|
15
20
|
def self.register_as(*names)
|
16
21
|
raise 'Rails is not loaded - Temple::Templates::Rails cannot be used' unless defined?(::ActionView)
|
17
|
-
if ::ActiveSupport::VERSION::MAJOR <
|
18
|
-
raise "Temple supports only Rails
|
22
|
+
if ::ActiveSupport::VERSION::MAJOR < 5
|
23
|
+
raise "Temple supports only Rails 5 and greater, your Rails version is #{::ActiveSupport::VERSION::STRING}"
|
19
24
|
end
|
20
25
|
names.each do |name|
|
21
26
|
::ActionView::Template.register_template_handler name.to_sym, new
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'tilt'
|
2
3
|
|
3
4
|
module Temple
|
@@ -7,14 +8,6 @@ module Temple
|
|
7
8
|
|
8
9
|
define_options mime_type: 'text/html'
|
9
10
|
|
10
|
-
def self.default_mime_type
|
11
|
-
options[:mime_type]
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.default_mime_type=(mime_type)
|
15
|
-
options[:mime_type] = mime_type
|
16
|
-
end
|
17
|
-
|
18
11
|
# Prepare Temple template
|
19
12
|
#
|
20
13
|
# Called immediately after template data is loaded.
|
@@ -22,7 +15,7 @@ module Temple
|
|
22
15
|
# @return [void]
|
23
16
|
def prepare
|
24
17
|
opts = {}.update(self.class.options).update(options).update(file: eval_file)
|
25
|
-
opts.delete(:mime_type)
|
18
|
+
metadata[:mime_type] = opts.delete(:mime_type)
|
26
19
|
if opts.include?(:outvar)
|
27
20
|
opts[:buffer] = opts.delete(:outvar)
|
28
21
|
opts[:save_buffer] = true
|
data/lib/temple/templates.rb
CHANGED
data/lib/temple/utils.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
begin
|
2
|
-
require '
|
3
|
+
require 'cgi/escape'
|
3
4
|
rescue LoadError
|
4
|
-
begin
|
5
|
-
require 'cgi/escape'
|
6
|
-
rescue LoadError
|
7
|
-
end
|
8
5
|
end
|
9
6
|
|
10
7
|
module Temple
|
@@ -18,18 +15,11 @@ module Temple
|
|
18
15
|
# @param html [String] The string to escape
|
19
16
|
# @return [String] The escaped string
|
20
17
|
def escape_html_safe(html)
|
21
|
-
|
18
|
+
s = html.to_s
|
19
|
+
s.html_safe? || html.html_safe? ? s : escape_html(s)
|
22
20
|
end
|
23
21
|
|
24
|
-
if defined?(
|
25
|
-
# Returns an escaped copy of `html`.
|
26
|
-
#
|
27
|
-
# @param html [String] The string to escape
|
28
|
-
# @return [String] The escaped string
|
29
|
-
def escape_html(html)
|
30
|
-
EscapeUtils.escape_html(html.to_s, false)
|
31
|
-
end
|
32
|
-
elsif defined?(CGI.escapeHTML)
|
22
|
+
if defined?(CGI.escapeHTML)
|
33
23
|
# Returns an escaped copy of `html`.
|
34
24
|
#
|
35
25
|
# @param html [String] The string to escape
|
data/lib/temple/version.rb
CHANGED
data/lib/temple.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'temple/version'
|
2
3
|
|
3
4
|
module Temple
|
@@ -41,6 +42,7 @@ module Temple
|
|
41
42
|
end
|
42
43
|
|
43
44
|
module Filters
|
45
|
+
autoload :Ambles, 'temple/filters/ambles'
|
44
46
|
autoload :CodeMerger, 'temple/filters/code_merger'
|
45
47
|
autoload :ControlFlow, 'temple/filters/control_flow'
|
46
48
|
autoload :MultiFlattener, 'temple/filters/multi_flattener'
|
@@ -48,6 +50,7 @@ module Temple
|
|
48
50
|
autoload :StaticMerger, 'temple/filters/static_merger'
|
49
51
|
autoload :StringSplitter, 'temple/filters/string_splitter'
|
50
52
|
autoload :DynamicInliner, 'temple/filters/dynamic_inliner'
|
53
|
+
autoload :DynamicMerger, 'temple/filters/dynamic_merger'
|
51
54
|
autoload :Escapable, 'temple/filters/escapable'
|
52
55
|
autoload :Eraser, 'temple/filters/eraser'
|
53
56
|
autoload :Validator, 'temple/filters/validator'
|
data/temple.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
require File.dirname(__FILE__) + '/lib/temple/version'
|
3
2
|
require 'date'
|
4
3
|
|
@@ -13,17 +12,16 @@ Gem::Specification.new do |s|
|
|
13
12
|
s.summary = 'Template compilation framework in Ruby'
|
14
13
|
|
15
14
|
s.require_paths = %w(lib)
|
16
|
-
s.files = `git ls-files`.split("\
|
17
|
-
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)/}) }
|
18
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
17
|
s.license = 'MIT'
|
20
18
|
|
21
|
-
s.required_ruby_version = '>=
|
19
|
+
s.required_ruby_version = '>= 2.5.0'
|
22
20
|
|
23
21
|
# Tilt is only development dependency because most parts of Temple
|
24
22
|
# can be used without it.
|
25
23
|
s.add_development_dependency('tilt')
|
26
|
-
s.add_development_dependency('
|
24
|
+
s.add_development_dependency('rspec')
|
27
25
|
s.add_development_dependency('rake')
|
28
|
-
s.add_development_dependency('
|
26
|
+
s.add_development_dependency('erubi')
|
29
27
|
end
|
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.
|
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
|
@@ -26,7 +25,7 @@ dependencies:
|
|
26
25
|
- !ruby/object:Gem::Version
|
27
26
|
version: '0'
|
28
27
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
28
|
+
name: rspec
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
31
30
|
requirements:
|
32
31
|
- - ">="
|
@@ -54,7 +53,7 @@ dependencies:
|
|
54
53
|
- !ruby/object:Gem::Version
|
55
54
|
version: '0'
|
56
55
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
56
|
+
name: erubi
|
58
57
|
requirement: !ruby/object:Gem::Requirement
|
59
58
|
requirements:
|
60
59
|
- - ">="
|
@@ -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
|
@@ -75,8 +73,8 @@ executables: []
|
|
75
73
|
extensions: []
|
76
74
|
extra_rdoc_files: []
|
77
75
|
files:
|
76
|
+
- ".github/workflows/test.yml"
|
78
77
|
- ".gitignore"
|
79
|
-
- ".travis.yml"
|
80
78
|
- ".yardopts"
|
81
79
|
- CHANGES
|
82
80
|
- EXPRESSIONS.md
|
@@ -92,9 +90,11 @@ files:
|
|
92
90
|
- lib/temple/erb/trimming.rb
|
93
91
|
- lib/temple/exceptions.rb
|
94
92
|
- lib/temple/filter.rb
|
93
|
+
- lib/temple/filters/ambles.rb
|
95
94
|
- lib/temple/filters/code_merger.rb
|
96
95
|
- lib/temple/filters/control_flow.rb
|
97
96
|
- lib/temple/filters/dynamic_inliner.rb
|
97
|
+
- lib/temple/filters/dynamic_merger.rb
|
98
98
|
- lib/temple/filters/encoding.rb
|
99
99
|
- lib/temple/filters/eraser.rb
|
100
100
|
- lib/temple/filters/escapable.rb
|
@@ -133,36 +133,10 @@ files:
|
|
133
133
|
- lib/temple/utils.rb
|
134
134
|
- lib/temple/version.rb
|
135
135
|
- temple.gemspec
|
136
|
-
- test/filters/test_code_merger.rb
|
137
|
-
- test/filters/test_control_flow.rb
|
138
|
-
- test/filters/test_dynamic_inliner.rb
|
139
|
-
- test/filters/test_eraser.rb
|
140
|
-
- test/filters/test_escapable.rb
|
141
|
-
- test/filters/test_multi_flattener.rb
|
142
|
-
- test/filters/test_static_analyzer.rb
|
143
|
-
- test/filters/test_static_merger.rb
|
144
|
-
- test/filters/test_string_splitter.rb
|
145
|
-
- test/helper.rb
|
146
|
-
- test/html/test_attribute_merger.rb
|
147
|
-
- test/html/test_attribute_remover.rb
|
148
|
-
- test/html/test_attribute_sorter.rb
|
149
|
-
- test/html/test_fast.rb
|
150
|
-
- test/html/test_pretty.rb
|
151
|
-
- test/mixins/test_dispatcher.rb
|
152
|
-
- test/mixins/test_grammar_dsl.rb
|
153
|
-
- test/test_engine.rb
|
154
|
-
- test/test_erb.rb
|
155
|
-
- test/test_filter.rb
|
156
|
-
- test/test_generator.rb
|
157
|
-
- test/test_grammar.rb
|
158
|
-
- test/test_map.rb
|
159
|
-
- test/test_static_analyzer.rb
|
160
|
-
- test/test_utils.rb
|
161
136
|
homepage: https://github.com/judofyr/temple
|
162
137
|
licenses:
|
163
138
|
- MIT
|
164
139
|
metadata: {}
|
165
|
-
post_install_message:
|
166
140
|
rdoc_options: []
|
167
141
|
require_paths:
|
168
142
|
- lib
|
@@ -170,41 +144,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
170
144
|
requirements:
|
171
145
|
- - ">="
|
172
146
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
147
|
+
version: 2.5.0
|
174
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
149
|
requirements:
|
176
150
|
- - ">="
|
177
151
|
- !ruby/object:Gem::Version
|
178
152
|
version: '0'
|
179
153
|
requirements: []
|
180
|
-
|
181
|
-
rubygems_version: 2.6.11
|
182
|
-
signing_key:
|
154
|
+
rubygems_version: 3.6.7
|
183
155
|
specification_version: 4
|
184
156
|
summary: Template compilation framework in Ruby
|
185
|
-
test_files:
|
186
|
-
- test/filters/test_code_merger.rb
|
187
|
-
- test/filters/test_control_flow.rb
|
188
|
-
- test/filters/test_dynamic_inliner.rb
|
189
|
-
- test/filters/test_eraser.rb
|
190
|
-
- test/filters/test_escapable.rb
|
191
|
-
- test/filters/test_multi_flattener.rb
|
192
|
-
- test/filters/test_static_analyzer.rb
|
193
|
-
- test/filters/test_static_merger.rb
|
194
|
-
- test/filters/test_string_splitter.rb
|
195
|
-
- test/helper.rb
|
196
|
-
- test/html/test_attribute_merger.rb
|
197
|
-
- test/html/test_attribute_remover.rb
|
198
|
-
- test/html/test_attribute_sorter.rb
|
199
|
-
- test/html/test_fast.rb
|
200
|
-
- test/html/test_pretty.rb
|
201
|
-
- test/mixins/test_dispatcher.rb
|
202
|
-
- test/mixins/test_grammar_dsl.rb
|
203
|
-
- test/test_engine.rb
|
204
|
-
- test/test_erb.rb
|
205
|
-
- test/test_filter.rb
|
206
|
-
- test/test_generator.rb
|
207
|
-
- test/test_grammar.rb
|
208
|
-
- test/test_map.rb
|
209
|
-
- test/test_static_analyzer.rb
|
210
|
-
- test/test_utils.rb
|
157
|
+
test_files: []
|
data/.travis.yml
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
dist: trusty
|
3
|
-
|
4
|
-
cache: bundler
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 1.9.3
|
8
|
-
- 2.0.0
|
9
|
-
- 2.1.10
|
10
|
-
- 2.2.6
|
11
|
-
- 2.3.3
|
12
|
-
- ruby-head
|
13
|
-
- jruby-19mode
|
14
|
-
- rbx-3
|
15
|
-
|
16
|
-
sudo: false
|
17
|
-
|
18
|
-
env:
|
19
|
-
- ESCAPE_UTILS=1
|
20
|
-
- ""
|
21
|
-
|
22
|
-
matrix:
|
23
|
-
allow_failures:
|
24
|
-
- rvm: ruby-head
|
25
|
-
- rvm: rbx-3
|
26
|
-
exclude:
|
27
|
-
- rvm: jruby-19mode
|
28
|
-
env: ESCAPE_UTILS=1
|
29
|
-
- rvm: rbx-3
|
30
|
-
env: ESCAPE_UTILS=1
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require '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
|
-
@filter.call([:multi,
|
10
|
-
[:code, "a"],
|
11
|
-
[:code, "b"],
|
12
|
-
[:code, "c"]
|
13
|
-
]).should.equal [:code, "a; b; c"]
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should merge serveral codes around static' do
|
17
|
-
@filter.call([:multi,
|
18
|
-
[:code, "a"],
|
19
|
-
[:code, "b"],
|
20
|
-
[:static, "123"],
|
21
|
-
[:code, "a"],
|
22
|
-
[:code, "b"]
|
23
|
-
]).should.equal [: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
|
-
@filter.call([:multi,
|
32
|
-
[:code, "a"],
|
33
|
-
[:code, "b"],
|
34
|
-
[:newline],
|
35
|
-
[:code, "c"]
|
36
|
-
]).should.equal [:code, "a; b\nc"]
|
37
|
-
end
|
38
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require '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
|
-
@filter.call([:block, 'loop do',
|
10
|
-
[:static, 'Hello']
|
11
|
-
]).should.equal [:multi,
|
12
|
-
[:code, 'loop do'],
|
13
|
-
[:static, 'Hello'],
|
14
|
-
[:code, 'end']]
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should process if' do
|
18
|
-
@filter.call([:if, 'condition',
|
19
|
-
[:static, 'Hello']
|
20
|
-
]).should.equal [:multi,
|
21
|
-
[:code, 'if condition'],
|
22
|
-
[:static, 'Hello'],
|
23
|
-
[:code, 'end']
|
24
|
-
]
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should process if with else' do
|
28
|
-
@filter.call([:if, 'condition',
|
29
|
-
[:static, 'True'],
|
30
|
-
[:static, 'False']
|
31
|
-
]).should.equal [: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
|
-
@filter.call([:if, 'condition1',
|
42
|
-
[:static, '1'],
|
43
|
-
[:if, 'condition2',
|
44
|
-
[:static, '2'],
|
45
|
-
[:static, '3']]
|
46
|
-
]).should.equal [: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
|
-
@filter.call([:cond,
|
59
|
-
['cond1', [:exp1]],
|
60
|
-
['cond2', [:exp2]],
|
61
|
-
[:else, [:exp3]],
|
62
|
-
]).should.equal [: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
|
-
@filter.call([:case, 'var',
|
76
|
-
['Array', [:exp1]],
|
77
|
-
['String', [:exp2]],
|
78
|
-
[:else, [:exp3]],
|
79
|
-
]).should.equal [: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 '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
|
-
@filter.call([:multi,
|
10
|
-
[:static, "Hello "],
|
11
|
-
[:static, "World\n "],
|
12
|
-
[:static, "Have a nice day"]
|
13
|
-
]).should.equal [:dynamic, '"Hello World\n Have a nice day"']
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should compile several dynamics into dynamic' do
|
17
|
-
@filter.call([:multi,
|
18
|
-
[:dynamic, "@hello"],
|
19
|
-
[:dynamic, "@world"],
|
20
|
-
[:dynamic, "@yeah"]
|
21
|
-
]).should.equal [:dynamic, '"#{@hello}#{@world}#{@yeah}"']
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should compile static and dynamic into dynamic' do
|
25
|
-
@filter.call([:multi,
|
26
|
-
[:static, "Hello"],
|
27
|
-
[:dynamic, "@world"],
|
28
|
-
[:dynamic, "@yeah"],
|
29
|
-
[:static, "Nice"]
|
30
|
-
]).should.equal [:dynamic, '"Hello#{@world}#{@yeah}Nice"']
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should merge statics and dynamics around a code' do
|
34
|
-
exp = @filter.call([:multi,
|
35
|
-
[:static, "Hello "],
|
36
|
-
[:dynamic, "@world"],
|
37
|
-
[:code, "Oh yeah"],
|
38
|
-
[:dynamic, "@yeah"],
|
39
|
-
[:static, "Once more"]
|
40
|
-
]).should.equal [: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
|
-
@filter.call([:multi, [:code, 'foo']]).should.equal [:code, 'foo']
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should keep single statics intact' do
|
52
|
-
@filter.call([:multi, [:static, 'foo']]).should.equal [:static, 'foo']
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should keep single dynamic intact' do
|
56
|
-
@filter.call([:multi, [:dynamic, 'foo']]).should.equal [:dynamic, 'foo']
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should inline inside multi' do
|
60
|
-
@filter.call([:multi,
|
61
|
-
[:static, "Hello "],
|
62
|
-
[:dynamic, "@world"],
|
63
|
-
[:multi,
|
64
|
-
[:static, "Hello "],
|
65
|
-
[:dynamic, "@world"]],
|
66
|
-
[:static, "Hello "],
|
67
|
-
[:dynamic, "@world"]
|
68
|
-
]).should.equal [: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 = @filter.call([:multi,
|
77
|
-
[:static, "Hello \n"],
|
78
|
-
[:newline],
|
79
|
-
[:dynamic, "@world"],
|
80
|
-
[:newline]
|
81
|
-
]).should.equal [:dynamic, ['"Hello \n"', '"#{@world}"', '""'].join("\\\n")]
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'should compile static followed by newline' do
|
85
|
-
@filter.call([:multi,
|
86
|
-
[:static, "Hello \n"],
|
87
|
-
[:newline],
|
88
|
-
[:code, "world"]
|
89
|
-
]).should.equal [:multi,
|
90
|
-
[:static, "Hello \n"],
|
91
|
-
[:newline],
|
92
|
-
[:code, "world"]
|
93
|
-
]
|
94
|
-
end
|
95
|
-
end
|
data/test/filters/test_eraser.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
describe Temple::Filters::Eraser do
|
4
|
-
it 'should respect keep' do
|
5
|
-
eraser = Temple::Filters::Eraser.new(keep: [:a])
|
6
|
-
eraser.call([:multi,
|
7
|
-
[:a],
|
8
|
-
[:b],
|
9
|
-
[:c]
|
10
|
-
]).should.equal [: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
|
-
eraser.call([:multi,
|
20
|
-
[:a],
|
21
|
-
[:b],
|
22
|
-
[:c]
|
23
|
-
]).should.equal [: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
|
-
eraser.call([:multi,
|
33
|
-
[:a],
|
34
|
-
[:b],
|
35
|
-
[:c]
|
36
|
-
]).should.equal [: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
|
-
eraser.call([:multi,
|
46
|
-
[:a, :a],
|
47
|
-
[:a, :b],
|
48
|
-
[:b]
|
49
|
-
]).should.equal [:multi,
|
50
|
-
[:a, :a],
|
51
|
-
[:multi],
|
52
|
-
[:b]
|
53
|
-
]
|
54
|
-
end
|
55
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require '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
|
-
@filter.call([:escape, true,
|
10
|
-
[:multi,
|
11
|
-
[:static, "a < b"],
|
12
|
-
[:dynamic, "ruby_method"]]
|
13
|
-
]).should.equal [: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
|
-
@filter.call(exp).should.equal exp
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should keep statics intact' do
|
25
|
-
exp = [:multi, [:static, '<']]
|
26
|
-
@filter.call(exp).should.equal exp
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should keep dynamic intact' do
|
30
|
-
exp = [:multi, [:dynamic, 'foo']]
|
31
|
-
@filter.call(exp).should.equal 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
|
-
filter.call([:escape, true,
|
38
|
-
[:static, Temple::HTML::SafeString.new("a < b")]
|
39
|
-
]).should.equal [: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
|
-
filter.call([:escape, true,
|
46
|
-
[:static, "~~ Temple sucks ~~"]
|
47
|
-
]).should.equal [:static, "~~ Temple rocks ~~"]
|
48
|
-
end
|
49
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require '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
|
-
@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
|
-
]).should.equal [: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
|
-
@filter.call([:multi, [:code, 'foo']]).should.equal [:code, 'foo']
|
32
|
-
end
|
33
|
-
end
|