temple 0.9.0 → 0.10.0
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 +12 -0
- data/Gemfile +0 -1
- data/README.md +1 -1
- data/Rakefile +3 -11
- data/lib/temple/erb/engine.rb +2 -0
- data/lib/temple/erb/parser.rb +1 -1
- data/lib/temple/filters/string_splitter.rb +1 -1
- data/lib/temple/generator.rb +2 -2
- data/lib/temple/generators/rails_output_buffer.rb +6 -3
- data/lib/temple/templates/rails.rb +2 -2
- data/lib/temple/utils.rb +2 -1
- 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} +5 -6
- data/spec/generator_spec.rb +158 -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 -2
- metadata +29 -29
- 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
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::HTML::AttributeRemover do
|
4
4
|
before do
|
@@ -6,22 +6,22 @@ describe Temple::HTML::AttributeRemover do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should pass static attributes through' do
|
9
|
-
@remover.call([:html, :tag,
|
9
|
+
expect(@remover.call([:html, :tag,
|
10
10
|
'div',
|
11
11
|
[:html, :attrs, [:html, :attr, 'class', [:static, 'b']]],
|
12
12
|
[:content]
|
13
|
-
]).
|
13
|
+
])).to eq [:html, :tag, "div",
|
14
14
|
[:multi,
|
15
15
|
[:html, :attr, "class", [:static, "b"]]],
|
16
16
|
[:content]]
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should check for empty dynamic attribute if it is included in :remove_empty_attrs' do
|
20
|
-
@remover.call([:html, :tag,
|
20
|
+
expect(@remover.call([:html, :tag,
|
21
21
|
'div',
|
22
22
|
[:html, :attrs, [:html, :attr, 'class', [:dynamic, 'b']]],
|
23
23
|
[:content]
|
24
|
-
]).
|
24
|
+
])).to eq [:html, :tag, "div",
|
25
25
|
[:multi,
|
26
26
|
[:multi,
|
27
27
|
[:capture, "_temple_html_attributeremover1", [:dynamic, "b"]],
|
@@ -31,11 +31,11 @@ describe Temple::HTML::AttributeRemover do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should not check for empty dynamic attribute if it is not included in :remove_empty_attrs' do
|
34
|
-
@remover.call([:html, :tag,
|
34
|
+
expect(@remover.call([:html, :tag,
|
35
35
|
'div',
|
36
36
|
[:html, :attrs, [:html, :attr, 'name', [:dynamic, 'b']]],
|
37
37
|
[:content]
|
38
|
-
]).
|
38
|
+
])).to eq [:html, :tag, "div",
|
39
39
|
[:multi,
|
40
40
|
[:html, :attr, "name", [:dynamic, "b"]]],
|
41
41
|
[:content]]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::HTML::AttributeSorter do
|
4
4
|
before do
|
@@ -7,13 +7,13 @@ describe Temple::HTML::AttributeSorter do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should sort html attributes by name by default, when :sort_attrs is true' do
|
10
|
-
@ordered.call([:html, :tag,
|
10
|
+
expect(@ordered.call([:html, :tag,
|
11
11
|
'meta',
|
12
12
|
[:html, :attrs, [:html, :attr, 'c', [:static, '1']],
|
13
13
|
[:html, :attr, 'd', [:static, '2']],
|
14
14
|
[:html, :attr, 'a', [:static, '3']],
|
15
15
|
[:html, :attr, 'b', [:static, '4']]]
|
16
|
-
]).
|
16
|
+
])).to eq [:html, :tag, 'meta',
|
17
17
|
[:html, :attrs,
|
18
18
|
[:html, :attr, 'a', [:static, '3']],
|
19
19
|
[:html, :attr, 'b', [:static, '4']],
|
@@ -22,13 +22,13 @@ describe Temple::HTML::AttributeSorter do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should preserve the order of html attributes when :sort_attrs is false' do
|
25
|
-
@unordered.call([:html, :tag,
|
25
|
+
expect(@unordered.call([:html, :tag,
|
26
26
|
'meta',
|
27
27
|
[:html, :attrs, [:html, :attr, 'c', [:static, '1']],
|
28
28
|
[:html, :attr, 'd', [:static, '2']],
|
29
29
|
[:html, :attr, 'a', [:static, '3']],
|
30
30
|
[:html, :attr, 'b', [:static, '4']]]
|
31
|
-
]).
|
31
|
+
])).to eq [:html, :tag, 'meta',
|
32
32
|
[:html, :attrs,
|
33
33
|
[:html, :attr, 'c', [:static, '1']],
|
34
34
|
[:html, :attr, 'd', [:static, '2']],
|
@@ -36,11 +36,11 @@ describe Temple::HTML::AttributeSorter do
|
|
36
36
|
[:html, :attr, 'b', [:static, '4']]]]
|
37
37
|
|
38
38
|
# Use case:
|
39
|
-
@unordered.call([:html, :tag,
|
39
|
+
expect(@unordered.call([:html, :tag,
|
40
40
|
'meta',
|
41
41
|
[:html, :attrs, [:html, :attr, 'http-equiv', [:static, 'Content-Type']],
|
42
42
|
[:html, :attr, 'content', [:static, '']]]
|
43
|
-
]).
|
43
|
+
])).to eq [:html, :tag, 'meta',
|
44
44
|
[:html, :attrs,
|
45
45
|
[:html, :attr, 'http-equiv', [:static, 'Content-Type']],
|
46
46
|
[:html, :attr, 'content', [:static, '']]]]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::HTML::Fast do
|
4
4
|
before do
|
@@ -6,37 +6,37 @@ describe Temple::HTML::Fast do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should compile html doctype' do
|
9
|
-
@html.call([:multi, [:html, :doctype, '5']]).
|
10
|
-
@html.call([:multi, [:html, :doctype, 'html']]).
|
11
|
-
@html.call([:multi, [:html, :doctype, '1.1']]).
|
9
|
+
expect(@html.call([:multi, [:html, :doctype, '5']])).to eq([:multi, [:static, '<!DOCTYPE html>']])
|
10
|
+
expect(@html.call([:multi, [:html, :doctype, 'html']])).to eq([:multi, [:static, '<!DOCTYPE html>']])
|
11
|
+
expect(@html.call([:multi, [:html, :doctype, '1.1']])).to eq [:multi,
|
12
12
|
[:static, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">']]
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should compile xml encoding' do
|
16
|
-
@html.call([:html, :doctype, 'xml latin1']).
|
16
|
+
expect(@html.call([:html, :doctype, 'xml latin1'])).to eq([:static, "<?xml version=\"1.0\" encoding=\"latin1\" ?>"])
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should compile html comment' do
|
20
|
-
@html.call([:html, :comment, [:static, 'test']]).
|
20
|
+
expect(@html.call([:html, :comment, [:static, 'test']])).to eq([:multi, [:static, "<!--"], [:static, "test"], [:static, "-->"]])
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should compile js wrapped in comments' do
|
24
|
-
Temple::HTML::Fast.new(js_wrapper: nil).call([:html, :js, [:static, 'test']]).
|
25
|
-
Temple::HTML::Fast.new(js_wrapper: :comment).call([:html, :js, [:static, 'test']]).
|
26
|
-
Temple::HTML::Fast.new(js_wrapper: :cdata).call([:html, :js, [:static, 'test']]).
|
27
|
-
Temple::HTML::Fast.new(js_wrapper: :both).call([:html, :js, [:static, 'test']]).
|
24
|
+
expect(Temple::HTML::Fast.new(js_wrapper: nil).call([:html, :js, [:static, 'test']])).to eq([:static, "test"])
|
25
|
+
expect(Temple::HTML::Fast.new(js_wrapper: :comment).call([:html, :js, [:static, 'test']])).to eq([:multi, [:static, "<!--\n"], [:static, "test"], [:static, "\n//-->"]])
|
26
|
+
expect(Temple::HTML::Fast.new(js_wrapper: :cdata).call([:html, :js, [:static, 'test']])).to eq([:multi, [:static, "\n//<![CDATA[\n"], [:static, "test"], [:static, "\n//]]>\n"]])
|
27
|
+
expect(Temple::HTML::Fast.new(js_wrapper: :both).call([:html, :js, [:static, 'test']])).to eq([:multi, [:static, "<!--\n//<![CDATA[\n"], [:static, "test"], [:static, "\n//]]>\n//-->"]])
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should guess default js comment' do
|
31
|
-
Temple::HTML::Fast.new(js_wrapper: :guess, format: :xhtml).call([:html, :js, [:static, 'test']]).
|
32
|
-
Temple::HTML::Fast.new(js_wrapper: :guess, format: :html).call([:html, :js, [:static, 'test']]).
|
31
|
+
expect(Temple::HTML::Fast.new(js_wrapper: :guess, format: :xhtml).call([:html, :js, [:static, 'test']])).to eq([:multi, [:static, "\n//<![CDATA[\n"], [:static, "test"], [:static, "\n//]]>\n"]])
|
32
|
+
expect(Temple::HTML::Fast.new(js_wrapper: :guess, format: :html).call([:html, :js, [:static, 'test']])).to eq([:multi, [:static, "<!--\n"], [:static, "test"], [:static, "\n//-->"]])
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'should compile autoclosed html tag' do
|
36
|
-
@html.call([:html, :tag,
|
36
|
+
expect(@html.call([:html, :tag,
|
37
37
|
'img', [:attrs],
|
38
38
|
[:multi, [:newline]]
|
39
|
-
]).
|
39
|
+
])).to eq [:multi,
|
40
40
|
[:static, "<img"],
|
41
41
|
[:attrs],
|
42
42
|
[:static, " />"],
|
@@ -44,18 +44,18 @@ describe Temple::HTML::Fast do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'should compile explicitly closed html tag' do
|
47
|
-
@html.call([:html, :tag,
|
47
|
+
expect(@html.call([:html, :tag,
|
48
48
|
'closed', [:attrs]
|
49
|
-
]).
|
49
|
+
])).to eq [:multi,
|
50
50
|
[:static, "<closed"],
|
51
51
|
[:attrs],
|
52
52
|
[:static, " />"]]
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should compile html with content' do
|
56
|
-
@html.call([:html, :tag,
|
56
|
+
expect(@html.call([:html, :tag,
|
57
57
|
'div', [:attrs], [:content]
|
58
|
-
]).
|
58
|
+
])).to eq [:multi,
|
59
59
|
[:static, "<div"],
|
60
60
|
[:attrs],
|
61
61
|
[:static, ">"],
|
@@ -64,13 +64,13 @@ describe Temple::HTML::Fast do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'should compile html with attrs' do
|
67
|
-
@html.call([:html, :tag,
|
67
|
+
expect(@html.call([:html, :tag,
|
68
68
|
'div',
|
69
69
|
[:html, :attrs,
|
70
70
|
[:html, :attr, 'id', [:static, 'test']],
|
71
71
|
[:html, :attr, 'class', [:dynamic, 'block']]],
|
72
72
|
[:content]
|
73
|
-
]).
|
73
|
+
])).to eq [:multi,
|
74
74
|
[:static, "<div"],
|
75
75
|
[:multi,
|
76
76
|
[:multi, [:static, " id=\""], [:static, "test"], [:static, '"']],
|
@@ -82,16 +82,16 @@ describe Temple::HTML::Fast do
|
|
82
82
|
|
83
83
|
it 'should keep codes intact' do
|
84
84
|
exp = [:multi, [:code, 'foo']]
|
85
|
-
@html.call(exp).
|
85
|
+
expect(@html.call(exp)).to eq(exp)
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'should keep statics intact' do
|
89
89
|
exp = [:multi, [:static, '<']]
|
90
|
-
@html.call(exp).
|
90
|
+
expect(@html.call(exp)).to eq(exp)
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'should keep dynamic intact' do
|
94
94
|
exp = [:multi, [:dynamic, 'foo']]
|
95
|
-
@html.call(exp).
|
95
|
+
expect(@html.call(exp)).to eq(exp)
|
96
96
|
end
|
97
97
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::HTML::Pretty do
|
4
4
|
before do
|
@@ -6,9 +6,9 @@ describe Temple::HTML::Pretty do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'should indent nested tags' do
|
9
|
-
@html.call([:html, :tag, 'div', [:multi],
|
9
|
+
expect(@html.call([:html, :tag, 'div', [:multi],
|
10
10
|
[:html, :tag, 'p', [:multi], [:multi, [:static, 'text'], [:dynamic, 'code']]]
|
11
|
-
]).
|
11
|
+
])).to eq [:multi,
|
12
12
|
[:code, "_temple_html_pretty1 = /<code|<pre|<textarea/"],
|
13
13
|
[:multi,
|
14
14
|
[:static, "<div"],
|
@@ -26,9 +26,9 @@ describe Temple::HTML::Pretty do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should not indent preformatted tags' do
|
29
|
-
@html.call([:html, :tag, 'pre', [:multi],
|
29
|
+
expect(@html.call([:html, :tag, 'pre', [:multi],
|
30
30
|
[:html, :tag, 'p', [:multi], [:static, 'text']]
|
31
|
-
]).
|
31
|
+
])).to eq [:multi,
|
32
32
|
[:code, "_temple_html_pretty1 = /<code|<pre|<textarea/"],
|
33
33
|
[:multi,
|
34
34
|
[:static, "<pre"],
|
@@ -45,9 +45,9 @@ describe Temple::HTML::Pretty do
|
|
45
45
|
|
46
46
|
it 'should not escape html_safe strings' do
|
47
47
|
with_html_safe do
|
48
|
-
@html.call(
|
48
|
+
expect(@html.call(
|
49
49
|
[:dynamic, '"text<".html_safe']
|
50
|
-
).
|
50
|
+
)).to eq [:multi,
|
51
51
|
[:code, "_temple_html_pretty1 = /<code|<pre|<textarea/"],
|
52
52
|
[:dynamic, "::Temple::Utils.indent_dynamic((\"text<\".html_safe), nil, \"\\n\", _temple_html_pretty1)"]]
|
53
53
|
end
|
data/spec/map_spec.rb
ADDED
@@ -0,0 +1,39 @@
|
|
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,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
class FilterWithDispatcherMixin
|
4
4
|
include Temple::Mixins::Dispatcher
|
@@ -40,31 +40,31 @@ describe Temple::Mixins::Dispatcher do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'should return unhandled expressions' do
|
43
|
-
@filter.call([:unhandled]).
|
43
|
+
expect(@filter.call([:unhandled])).to eq([:unhandled])
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'should dispatch first level' do
|
47
|
-
@filter.call([:test, 42]).
|
47
|
+
expect(@filter.call([:test, 42])).to eq([:on_test, 42])
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'should dispatch second level' do
|
51
|
-
@filter.call([:second, :test, 42]).
|
51
|
+
expect(@filter.call([:second, :test, 42])).to eq([:on_second_test, 42])
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'should dispatch second level if prefixed' do
|
55
|
-
@filter.call([:test, :check, 42]).
|
55
|
+
expect(@filter.call([:test, :check, 42])).to eq([:on_check, 42])
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'should dispatch parent level' do
|
59
|
-
@filter.call([:a, 42]).
|
60
|
-
@filter.call([:a, :b, 42]).
|
61
|
-
@filter.call([:a, :b, :test, 42]).
|
62
|
-
@filter.call([:a, :b, :c, 42]).
|
63
|
-
@filter.call([:a, :b, :c, :d, 42]).
|
64
|
-
@filter.call([:a, :b, :c, :d, :test, 42]).
|
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
65
|
end
|
66
66
|
|
67
67
|
it 'should dispatch zero level' do
|
68
|
-
FilterWithDispatcherMixinAndOn.new.call([:foo,42]).
|
68
|
+
expect(FilterWithDispatcherMixinAndOn.new.call([:foo,42])).to eq [:on_zero, :foo, 42]
|
69
69
|
end
|
70
70
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module BasicGrammar
|
4
4
|
extend Temple::Mixins::GrammarDSL
|
@@ -28,42 +28,42 @@ end
|
|
28
28
|
|
29
29
|
describe Temple::Mixins::GrammarDSL do
|
30
30
|
it 'should support class types' do
|
31
|
-
BasicGrammar.
|
32
|
-
BasicGrammar.
|
33
|
-
BasicGrammar.
|
34
|
-
BasicGrammar.
|
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
35
|
end
|
36
36
|
|
37
37
|
it 'should support value types' do
|
38
|
-
BasicGrammar.
|
39
|
-
BasicGrammar.
|
38
|
+
expect(BasicGrammar).to be_match(42)
|
39
|
+
expect(BasicGrammar).not_to be_match(43)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'should support nesting' do
|
43
|
-
BasicGrammar.
|
43
|
+
expect(BasicGrammar).to be_match([:zero_or_more, [:zero_or_more]])
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'should support *' do
|
47
|
-
BasicGrammar.
|
48
|
-
BasicGrammar.
|
47
|
+
expect(BasicGrammar).to be_match([:zero_or_more])
|
48
|
+
expect(BasicGrammar).to be_match([:zero_or_more, nil, 42])
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should support +' do
|
52
|
-
BasicGrammar.
|
53
|
-
BasicGrammar.
|
54
|
-
BasicGrammar.
|
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
55
|
end
|
56
56
|
|
57
57
|
it 'should support ?' do
|
58
|
-
BasicGrammar.
|
59
|
-
BasicGrammar.
|
60
|
-
BasicGrammar.
|
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
61
|
end
|
62
62
|
|
63
63
|
it 'should support extended grammars' do
|
64
|
-
ExtendedGrammar.
|
65
|
-
BasicGrammar.
|
66
|
-
BasicGrammar.
|
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
67
|
end
|
68
68
|
|
69
69
|
it 'should have validate!' do
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'bacon'
|
2
1
|
require 'temple'
|
3
2
|
|
4
3
|
module TestHelper
|
@@ -13,7 +12,7 @@ module TestHelper
|
|
13
12
|
end
|
14
13
|
|
15
14
|
def grammar_validate(grammar, exp, message)
|
16
|
-
|
15
|
+
expect { grammar.validate!(exp) }.to raise_error(Temple::InvalidExpression, message)
|
17
16
|
end
|
18
17
|
|
19
18
|
def erb(src, options = {})
|
@@ -25,6 +24,6 @@ module TestHelper
|
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
|
-
|
29
|
-
include TestHelper
|
27
|
+
RSpec.configure do |config|
|
28
|
+
config.include TestHelper
|
30
29
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Temple::StaticAnalyzer do
|
4
4
|
describe '.available?' do
|
5
5
|
it 'should return true if its dependency is available' do
|
6
|
-
Temple::StaticAnalyzer.available
|
6
|
+
expect(Temple::StaticAnalyzer.available?).to eq(defined?(Ripper) && Ripper.respond_to?(:lex))
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -11,13 +11,13 @@ describe Temple::StaticAnalyzer do
|
|
11
11
|
describe '.static?' do
|
12
12
|
it 'should return true if given Ruby expression is static' do
|
13
13
|
['true', 'false', '"hello world"', "[1, { 2 => 3 }]", "[\n1,\n]"].each do |exp|
|
14
|
-
Temple::StaticAnalyzer.static?(exp).
|
14
|
+
expect(Temple::StaticAnalyzer.static?(exp)).to eq(true)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should return false if given Ruby expression is dynamic' do
|
19
19
|
['1 + 2', 'variable', 'method_call(a)', 'CONSTANT'].each do |exp|
|
20
|
-
Temple::StaticAnalyzer.static?(exp).
|
20
|
+
expect(Temple::StaticAnalyzer.static?(exp)).to eq(false)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -25,13 +25,13 @@ describe Temple::StaticAnalyzer do
|
|
25
25
|
describe '.syntax_error?' do
|
26
26
|
it 'should return false if given Ruby expression is valid' do
|
27
27
|
['Foo.bar.baz { |c| c.d! }', '{ foo: bar }'].each do |exp|
|
28
|
-
Temple::StaticAnalyzer.syntax_error?(exp).
|
28
|
+
expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(false)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should return true if given Ruby expression is invalid' do
|
33
33
|
['Foo.bar.baz { |c| c.d! ', ' foo: bar '].each do |exp|
|
34
|
-
Temple::StaticAnalyzer.syntax_error?(exp).
|
34
|
+
expect(Temple::StaticAnalyzer.syntax_error?(exp)).to eq(true)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/spec/utils_spec.rb
ADDED
@@ -0,0 +1,39 @@
|
|
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
|
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
|
|
@@ -23,7 +22,7 @@ Gem::Specification.new do |s|
|
|
23
22
|
# Tilt is only development dependency because most parts of Temple
|
24
23
|
# can be used without it.
|
25
24
|
s.add_development_dependency('tilt')
|
26
|
-
s.add_development_dependency('
|
25
|
+
s.add_development_dependency('rspec')
|
27
26
|
s.add_development_dependency('rake')
|
28
27
|
s.add_development_dependency('erubi')
|
29
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnus Holm
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-01-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tilt
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
@@ -133,32 +133,32 @@ files:
|
|
133
133
|
- lib/temple/templates/tilt.rb
|
134
134
|
- lib/temple/utils.rb
|
135
135
|
- 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
|
136
161
|
- temple.gemspec
|
137
|
-
- test/filters/test_code_merger.rb
|
138
|
-
- test/filters/test_control_flow.rb
|
139
|
-
- test/filters/test_dynamic_inliner.rb
|
140
|
-
- test/filters/test_eraser.rb
|
141
|
-
- test/filters/test_escapable.rb
|
142
|
-
- test/filters/test_multi_flattener.rb
|
143
|
-
- test/filters/test_static_analyzer.rb
|
144
|
-
- test/filters/test_static_merger.rb
|
145
|
-
- test/filters/test_string_splitter.rb
|
146
|
-
- test/helper.rb
|
147
|
-
- test/html/test_attribute_merger.rb
|
148
|
-
- test/html/test_attribute_remover.rb
|
149
|
-
- test/html/test_attribute_sorter.rb
|
150
|
-
- test/html/test_fast.rb
|
151
|
-
- test/html/test_pretty.rb
|
152
|
-
- test/mixins/test_dispatcher.rb
|
153
|
-
- test/mixins/test_grammar_dsl.rb
|
154
|
-
- test/test_engine.rb
|
155
|
-
- test/test_erb.rb
|
156
|
-
- test/test_filter.rb
|
157
|
-
- test/test_generator.rb
|
158
|
-
- test/test_grammar.rb
|
159
|
-
- test/test_map.rb
|
160
|
-
- test/test_static_analyzer.rb
|
161
|
-
- test/test_utils.rb
|
162
162
|
homepage: https://github.com/judofyr/temple
|
163
163
|
licenses:
|
164
164
|
- MIT
|
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
178
|
- !ruby/object:Gem::Version
|
179
179
|
version: '0'
|
180
180
|
requirements: []
|
181
|
-
rubygems_version: 3.
|
181
|
+
rubygems_version: 3.2.5
|
182
182
|
signing_key:
|
183
183
|
specification_version: 4
|
184
184
|
summary: Template compilation framework in Ruby
|