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
data/spec/map_spec.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::ImmutableMap do
|
4
|
-
it 'has read accessor' do
|
5
|
-
hash = Temple::ImmutableMap.new({a: 1},{b: 2, a: 3})
|
6
|
-
expect(hash[:a]).to eq(1)
|
7
|
-
expect(hash[:b]).to eq(2)
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'has include?' do
|
11
|
-
hash = Temple::ImmutableMap.new({a: 1},{b: 2, a: 3})
|
12
|
-
expect(hash).to include(:a)
|
13
|
-
expect(hash).to include(:b)
|
14
|
-
expect(hash).not_to include(:c)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'has values' do
|
18
|
-
expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).values.sort).to eq([1,2])
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'has keys' do
|
22
|
-
expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).keys).to eq([:a,:b])
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'has to_a' do
|
26
|
-
expect(Temple::ImmutableMap.new({a: 1},{b: 2, a: 3}).to_a).to eq([[:a, 1], [:b, 2]])
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe Temple::MutableMap do
|
31
|
-
it 'has write accessor' do
|
32
|
-
parent = {a: 1}
|
33
|
-
hash = Temple::MutableMap.new(parent)
|
34
|
-
expect(hash[:a]).to eq(1)
|
35
|
-
hash[:a] = 2
|
36
|
-
expect(hash[:a]).to eq(2)
|
37
|
-
expect(parent[:a]).to eq(1)
|
38
|
-
end
|
39
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class FilterWithDispatcherMixin
|
4
|
-
include Temple::Mixins::Dispatcher
|
5
|
-
|
6
|
-
def on_test(arg)
|
7
|
-
[:on_test, arg]
|
8
|
-
end
|
9
|
-
|
10
|
-
def on_test_check(arg)
|
11
|
-
[:on_check, arg]
|
12
|
-
end
|
13
|
-
|
14
|
-
def on_second_test(arg)
|
15
|
-
[:on_second_test, arg]
|
16
|
-
end
|
17
|
-
|
18
|
-
def on_a_b(*arg)
|
19
|
-
[:on_ab, *arg]
|
20
|
-
end
|
21
|
-
|
22
|
-
def on_a_b_test(arg)
|
23
|
-
[:on_ab_test, arg]
|
24
|
-
end
|
25
|
-
|
26
|
-
def on_a_b_c_d_test(arg)
|
27
|
-
[:on_abcd_test, arg]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class FilterWithDispatcherMixinAndOn < FilterWithDispatcherMixin
|
32
|
-
def on(*args)
|
33
|
-
[:on_zero, *args]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe Temple::Mixins::Dispatcher do
|
38
|
-
before do
|
39
|
-
@filter = FilterWithDispatcherMixin.new
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should return unhandled expressions' do
|
43
|
-
expect(@filter.call([:unhandled])).to eq([:unhandled])
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should dispatch first level' do
|
47
|
-
expect(@filter.call([:test, 42])).to eq([:on_test, 42])
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'should dispatch second level' do
|
51
|
-
expect(@filter.call([:second, :test, 42])).to eq([:on_second_test, 42])
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should dispatch second level if prefixed' do
|
55
|
-
expect(@filter.call([:test, :check, 42])).to eq([:on_check, 42])
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'should dispatch parent level' do
|
59
|
-
expect(@filter.call([:a, 42])).to eq [:a, 42]
|
60
|
-
expect(@filter.call([:a, :b, 42])).to eq [:on_ab, 42]
|
61
|
-
expect(@filter.call([:a, :b, :test, 42])).to eq [:on_ab_test, 42]
|
62
|
-
expect(@filter.call([:a, :b, :c, 42])).to eq [:on_ab, :c, 42]
|
63
|
-
expect(@filter.call([:a, :b, :c, :d, 42])).to eq [:on_ab, :c, :d, 42]
|
64
|
-
expect(@filter.call([:a, :b, :c, :d, :test, 42])).to eq [:on_abcd_test, 42]
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should dispatch zero level' do
|
68
|
-
expect(FilterWithDispatcherMixinAndOn.new.call([:foo,42])).to eq [:on_zero, :foo, 42]
|
69
|
-
end
|
70
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module BasicGrammar
|
4
|
-
extend Temple::Mixins::GrammarDSL
|
5
|
-
|
6
|
-
Expression <<
|
7
|
-
Symbol |
|
8
|
-
Answer |
|
9
|
-
[:zero_or_more, 'Expression*'] |
|
10
|
-
[:one_or_more, 'Expression+'] |
|
11
|
-
[:zero_or_one, 'Expression?'] |
|
12
|
-
[:bool, Bool] |
|
13
|
-
nil
|
14
|
-
|
15
|
-
Bool <<
|
16
|
-
true | false
|
17
|
-
|
18
|
-
Answer <<
|
19
|
-
Value(42)
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
module ExtendedGrammar
|
24
|
-
extend BasicGrammar
|
25
|
-
|
26
|
-
Expression << [:extended, Expression]
|
27
|
-
end
|
28
|
-
|
29
|
-
describe Temple::Mixins::GrammarDSL do
|
30
|
-
it 'should support class types' do
|
31
|
-
expect(BasicGrammar).to be_match(:symbol)
|
32
|
-
expect(BasicGrammar).not_to be_match([:symbol])
|
33
|
-
expect(BasicGrammar).not_to be_match('string')
|
34
|
-
expect(BasicGrammar).not_to be_match(['string'])
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should support value types' do
|
38
|
-
expect(BasicGrammar).to be_match(42)
|
39
|
-
expect(BasicGrammar).not_to be_match(43)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should support nesting' do
|
43
|
-
expect(BasicGrammar).to be_match([:zero_or_more, [:zero_or_more]])
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should support *' do
|
47
|
-
expect(BasicGrammar).to be_match([:zero_or_more])
|
48
|
-
expect(BasicGrammar).to be_match([:zero_or_more, nil, 42])
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should support +' do
|
52
|
-
expect(BasicGrammar).not_to be_match([:one_or_more])
|
53
|
-
expect(BasicGrammar).to be_match( [:one_or_more, 42])
|
54
|
-
expect(BasicGrammar).to be_match( [:one_or_more, 42, nil])
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should support ?' do
|
58
|
-
expect(BasicGrammar).not_to be_match([:zero_or_one, nil, 42])
|
59
|
-
expect(BasicGrammar).to be_match( [:zero_or_one])
|
60
|
-
expect(BasicGrammar).to be_match( [:zero_or_one, 42])
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should support extended grammars' do
|
64
|
-
expect(ExtendedGrammar).to be_match([:extended, [:extended, 42]])
|
65
|
-
expect(BasicGrammar).not_to be_match([:zero_or_more, [:extended, nil]])
|
66
|
-
expect(BasicGrammar).not_to be_match([:extended, [:extended, 42]])
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'should have validate!' do
|
70
|
-
grammar_validate BasicGrammar,
|
71
|
-
[:zero_or_more, [:zero_or_more, [:unknown]]],
|
72
|
-
"BasicGrammar::Expression did not match\n[:unknown]\n"
|
73
|
-
|
74
|
-
grammar_validate BasicGrammar,
|
75
|
-
[:zero_or_more, [:one_or_more]],
|
76
|
-
"BasicGrammar::Expression did not match\n[:one_or_more]\n"
|
77
|
-
|
78
|
-
grammar_validate BasicGrammar,
|
79
|
-
[:zero_or_more, 123, [:unknown]],
|
80
|
-
"BasicGrammar::Expression did not match\n123\n"
|
81
|
-
|
82
|
-
grammar_validate BasicGrammar,
|
83
|
-
[:bool, 123],
|
84
|
-
"BasicGrammar::Bool did not match\n123\n"
|
85
|
-
end
|
86
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'temple'
|
2
|
-
|
3
|
-
module TestHelper
|
4
|
-
def with_html_safe
|
5
|
-
require 'temple/html/safe'
|
6
|
-
String.send(:define_method, :html_safe?) { false }
|
7
|
-
String.send(:define_method, :html_safe) { Temple::HTML::SafeString.new(self) }
|
8
|
-
yield
|
9
|
-
ensure
|
10
|
-
String.send(:undef_method, :html_safe?) if String.method_defined?(:html_safe?)
|
11
|
-
String.send(:undef_method, :html_safe) if String.method_defined?(:html_safe)
|
12
|
-
end
|
13
|
-
|
14
|
-
def grammar_validate(grammar, exp, message)
|
15
|
-
expect { grammar.validate!(exp) }.to raise_error(Temple::InvalidExpression, message)
|
16
|
-
end
|
17
|
-
|
18
|
-
def erb(src, options = {})
|
19
|
-
Temple::ERB::Template.new(options) { src }.render
|
20
|
-
end
|
21
|
-
|
22
|
-
def erubi(src, options = {})
|
23
|
-
Tilt::ErubiTemplate.new(options) { src }.render
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
RSpec.configure do |config|
|
28
|
-
config.include TestHelper
|
29
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Temple::StaticAnalyzer do
|
4
|
-
describe '.available?' do
|
5
|
-
it 'should return true if its dependency is available' do
|
6
|
-
expect(Temple::StaticAnalyzer.available?).to eq(defined?(Ripper) && Ripper.respond_to?(:lex))
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
if Temple::StaticAnalyzer.available?
|
11
|
-
describe '.static?' do
|
12
|
-
it 'should return true if given Ruby expression is static' do
|
13
|
-
['true', 'false', '"hello world"', "[1, { 2 => 3 }]", "[\n1,\n]"].each do |exp|
|
14
|
-
expect(Temple::StaticAnalyzer.static?(exp)).to eq(true)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should return false if given Ruby expression is dynamic' do
|
19
|
-
['1 + 2', 'variable', 'method_call(a)', 'CONSTANT'].each do |exp|
|
20
|
-
expect(Temple::StaticAnalyzer.static?(exp)).to eq(false)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.syntax_error?' do
|
26
|
-
it 'should return false if given Ruby expression is valid' do
|
27
|
-
['Foo.bar.baz { |c| c.d! }', '{ foo: bar }'].each do |exp|
|
28
|
-
expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(false)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should return true if given Ruby expression is invalid' do
|
33
|
-
['Foo.bar.baz { |c| c.d! ', ' foo: bar '].each do |exp|
|
34
|
-
expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(true)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/spec/utils_spec.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class UniqueTest
|
4
|
-
include Temple::Utils
|
5
|
-
end
|
6
|
-
|
7
|
-
describe Temple::Utils do
|
8
|
-
it 'has empty_exp?' do
|
9
|
-
expect(Temple::Utils.empty_exp?([:multi])).to eq(true)
|
10
|
-
expect(Temple::Utils.empty_exp?([:multi, [:multi]])).to eq(true)
|
11
|
-
expect(Temple::Utils.empty_exp?([:multi, [:multi, [:newline]], [:newline]])).to eq(true)
|
12
|
-
expect(Temple::Utils.empty_exp?([:multi])).to eq(true)
|
13
|
-
expect(Temple::Utils.empty_exp?([:multi, [:multi, [:static, 'text']]])).to eq(false)
|
14
|
-
expect(Temple::Utils.empty_exp?([:multi, [:newline], [:multi, [:dynamic, 'text']]])).to eq(false)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'has unique_name' do
|
18
|
-
u = UniqueTest.new
|
19
|
-
expect(u.unique_name).to eq('_uniquetest1')
|
20
|
-
expect(u.unique_name).to eq('_uniquetest2')
|
21
|
-
expect(UniqueTest.new.unique_name).to eq('_uniquetest1')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has escape_html' do
|
25
|
-
expect(Temple::Utils.escape_html('<')).to eq('<')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'should escape unsafe html strings' do
|
29
|
-
with_html_safe do
|
30
|
-
expect(Temple::Utils.escape_html_safe('<')).to eq('<')
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'should not escape safe html strings' do
|
35
|
-
with_html_safe do
|
36
|
-
expect(Temple::Utils.escape_html_safe('<'.html_safe)).to eq('<')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|