temple 0.9.1 → 0.10.3
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 -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
|