faml 0.2.16 → 0.3.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/CHANGELOG.md +5 -0
- data/README.md +3 -3
- data/faml.gemspec +1 -0
- data/incompatibilities/README.md +4 -5
- data/incompatibilities/spec/render/attribute_spec.md +13 -219
- data/incompatibilities/spec/render/comment_spec.md +0 -23
- data/incompatibilities/spec/render/element_spec.md +1 -1
- data/incompatibilities/spec/render/newline_spec.md +0 -17
- data/lib/faml/cli.rb +1 -7
- data/lib/faml/compiler.rb +21 -23
- data/lib/faml/engine.rb +2 -2
- data/lib/faml/text_compiler.rb +2 -2
- data/lib/faml/version.rb +1 -1
- data/spec/rails/spec/requests/faml_spec.rb +2 -2
- data/spec/render/attribute_spec.rb +0 -114
- data/spec/render/comment_spec.rb +0 -11
- data/spec/render/doctype_spec.rb +0 -7
- data/spec/render/element_spec.rb +0 -57
- data/spec/render/filters_spec.rb +0 -4
- data/spec/render/plain_spec.rb +0 -7
- data/spec/render/sanitize_spec.rb +0 -7
- data/spec/render/script_spec.rb +0 -23
- data/spec/render/unescape_spec.rb +0 -7
- metadata +17 -15
- data/lib/faml/ast.rb +0 -116
- data/lib/faml/element_parser.rb +0 -235
- data/lib/faml/filter_parser.rb +0 -56
- data/lib/faml/indent_tracker.rb +0 -116
- data/lib/faml/line_parser.rb +0 -67
- data/lib/faml/parser.rb +0 -240
- data/lib/faml/parser_utils.rb +0 -17
- data/lib/faml/ruby_multiline.rb +0 -23
- data/lib/faml/script_parser.rb +0 -106
- data/lib/faml/syntax_error.rb +0 -6
- data/spec/render/indent_spec.rb +0 -47
data/lib/faml/compiler.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'parser/current'
|
|
2
2
|
require 'temple'
|
|
3
|
-
require '
|
|
3
|
+
require 'haml_parser/ast'
|
|
4
4
|
require 'faml/error'
|
|
5
5
|
require 'faml/filter_compilers'
|
|
6
6
|
require 'faml/helpers'
|
|
@@ -55,25 +55,25 @@ module Faml
|
|
|
55
55
|
|
|
56
56
|
def compile(ast)
|
|
57
57
|
case ast
|
|
58
|
-
when Ast::Root
|
|
58
|
+
when HamlParser::Ast::Root
|
|
59
59
|
compile_root(ast)
|
|
60
|
-
when Ast::Doctype
|
|
60
|
+
when HamlParser::Ast::Doctype
|
|
61
61
|
compile_doctype(ast)
|
|
62
|
-
when Ast::HtmlComment
|
|
62
|
+
when HamlParser::Ast::HtmlComment
|
|
63
63
|
compile_html_comment(ast)
|
|
64
|
-
when Ast::HamlComment
|
|
64
|
+
when HamlParser::Ast::HamlComment
|
|
65
65
|
compile_haml_comment(ast)
|
|
66
|
-
when Ast::Empty
|
|
66
|
+
when HamlParser::Ast::Empty
|
|
67
67
|
[:multi]
|
|
68
|
-
when Ast::Element
|
|
68
|
+
when HamlParser::Ast::Element
|
|
69
69
|
compile_element(ast)
|
|
70
|
-
when Ast::Script
|
|
70
|
+
when HamlParser::Ast::Script
|
|
71
71
|
compile_script(ast)
|
|
72
|
-
when Ast::SilentScript
|
|
72
|
+
when HamlParser::Ast::SilentScript
|
|
73
73
|
compile_silent_script(ast)
|
|
74
|
-
when Ast::Text
|
|
74
|
+
when HamlParser::Ast::Text
|
|
75
75
|
compile_text(ast)
|
|
76
|
-
when Ast::Filter
|
|
76
|
+
when HamlParser::Ast::Filter
|
|
77
77
|
compile_filter(ast)
|
|
78
78
|
else
|
|
79
79
|
raise "InternalError: Unknown AST node #{ast.class}: #{ast.inspect}"
|
|
@@ -108,13 +108,13 @@ module Faml
|
|
|
108
108
|
|
|
109
109
|
def need_newline?(child)
|
|
110
110
|
case child
|
|
111
|
-
when Ast::Script
|
|
111
|
+
when HamlParser::Ast::Script
|
|
112
112
|
child.children.empty?
|
|
113
|
-
when Ast::SilentScript, Ast::HamlComment, Ast::Empty
|
|
113
|
+
when HamlParser::Ast::SilentScript, HamlParser::Ast::HamlComment, HamlParser::Ast::Empty
|
|
114
114
|
false
|
|
115
|
-
when Ast::Element
|
|
115
|
+
when HamlParser::Ast::Element
|
|
116
116
|
!child.nuke_outer_whitespace
|
|
117
|
-
when Ast::Filter
|
|
117
|
+
when HamlParser::Ast::Filter
|
|
118
118
|
FilterCompilers.find(child.name).need_newline?
|
|
119
119
|
else
|
|
120
120
|
true
|
|
@@ -122,11 +122,11 @@ module Faml
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
def suppress_code_newline?(ast)
|
|
125
|
-
ast.is_a?(Ast::Script) ||
|
|
126
|
-
ast.is_a?(Ast::SilentScript) ||
|
|
127
|
-
(ast.is_a?(Ast::Element) && suppress_code_newline?(ast.oneline_child)) ||
|
|
128
|
-
(ast.is_a?(Ast::Element) && !ast.children.empty?) ||
|
|
129
|
-
(ast.is_a?(Ast::HtmlComment) && !ast.conditional.empty?)
|
|
125
|
+
ast.is_a?(HamlParser::Ast::Script) ||
|
|
126
|
+
ast.is_a?(HamlParser::Ast::SilentScript) ||
|
|
127
|
+
(ast.is_a?(HamlParser::Ast::Element) && suppress_code_newline?(ast.oneline_child)) ||
|
|
128
|
+
(ast.is_a?(HamlParser::Ast::Element) && !ast.children.empty?) ||
|
|
129
|
+
(ast.is_a?(HamlParser::Ast::HtmlComment) && !ast.conditional.empty?)
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
def compile_text(ast)
|
|
@@ -373,9 +373,7 @@ module Faml
|
|
|
373
373
|
else
|
|
374
374
|
temple << [:code, "#{sym} = #{ast.script}"] << [:newline]
|
|
375
375
|
compile_children(ast, temple)
|
|
376
|
-
|
|
377
|
-
temple << [:code, 'end']
|
|
378
|
-
end
|
|
376
|
+
temple << [:code, 'end']
|
|
379
377
|
end
|
|
380
378
|
if !ast.escape_html && ast.preserve
|
|
381
379
|
temple << [:haml, :preserve, sym]
|
data/lib/faml/engine.rb
CHANGED
|
@@ -2,7 +2,7 @@ require 'temple'
|
|
|
2
2
|
require 'faml/compiler'
|
|
3
3
|
require 'faml/html'
|
|
4
4
|
require 'faml/newline'
|
|
5
|
-
require '
|
|
5
|
+
require 'haml_parser/parser'
|
|
6
6
|
|
|
7
7
|
module Faml
|
|
8
8
|
class Engine < Temple::Engine
|
|
@@ -11,7 +11,7 @@ module Faml
|
|
|
11
11
|
filename: nil,
|
|
12
12
|
)
|
|
13
13
|
|
|
14
|
-
use Parser
|
|
14
|
+
use HamlParser::Parser
|
|
15
15
|
use Compiler
|
|
16
16
|
use Html
|
|
17
17
|
filter :Escapable
|
data/lib/faml/text_compiler.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'strscan'
|
|
2
2
|
require 'faml/error'
|
|
3
|
-
require '
|
|
3
|
+
require 'haml_parser/utils'
|
|
4
4
|
|
|
5
5
|
module Faml
|
|
6
6
|
class TextCompiler
|
|
@@ -59,7 +59,7 @@ module Faml
|
|
|
59
59
|
|
|
60
60
|
def find_close_brace(scanner, lineno)
|
|
61
61
|
pos = scanner.pos
|
|
62
|
-
depth =
|
|
62
|
+
depth = HamlParser::Utils.balance(scanner, '{', '}')
|
|
63
63
|
if depth != 0
|
|
64
64
|
raise InvalidInterpolation.new(scanner.string, lineno)
|
|
65
65
|
else
|
data/lib/faml/version.rb
CHANGED
|
@@ -54,7 +54,7 @@ RSpec.describe 'Faml with Rails', type: :request do
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
describe 'compile time errors' do
|
|
57
|
-
describe
|
|
57
|
+
describe HamlParser::Error do
|
|
58
58
|
it 'has proper backtrace' do
|
|
59
59
|
expect { get '/books/syntax_error' }.to raise_error { |e|
|
|
60
60
|
expect(e.backtrace[0]).to end_with('app/views/books/syntax_error.html.haml:2')
|
|
@@ -62,7 +62,7 @@ RSpec.describe 'Faml with Rails', type: :request do
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
describe
|
|
65
|
+
describe HamlParser::IndentTracker::IndentMismatch do
|
|
66
66
|
it 'has proper backtrace' do
|
|
67
67
|
expect { get '/books/indent_error' }.to raise_error { |e|
|
|
68
68
|
expect(e.backtrace[0]).to end_with('app/views/books/indent_error.html.haml:3')
|
|
@@ -9,10 +9,6 @@ RSpec.describe 'Attributes rendering', type: :render do
|
|
|
9
9
|
expect(render_string('%span{class: "x", "old" => 2} hello')).to eq(%Q{<span class='x' old='2'>hello</span>\n})
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
it 'is not element with id attribute' do
|
|
13
|
-
expect(render_string('#{1 + 2}')).to eq("3\n")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
12
|
it 'renders attributes with symbol literal' do
|
|
17
13
|
expect(render_string("%span{foo: 'baz'}")).to eq("<span foo='baz'></span>\n")
|
|
18
14
|
expect(render_string("%span{:foo => 'baz'}")).to eq("<span foo='baz'></span>\n")
|
|
@@ -76,10 +72,6 @@ HAML
|
|
|
76
72
|
expect(render_string(%q|%span{class: "x\"y'z"} hello|)).to eq(%Q{<span class='x"y'z'>hello</span>\n})
|
|
77
73
|
end
|
|
78
74
|
|
|
79
|
-
it "doesn't parse extra brace" do
|
|
80
|
-
expect(render_string('%span{foo: 1}{bar: 2}')).to eq("<span foo='1'>{bar: 2}</span>\n")
|
|
81
|
-
end
|
|
82
|
-
|
|
83
75
|
it 'renders only name if value is true' do
|
|
84
76
|
expect(render_string(%q|%span{foo: true, bar: 1} hello|)).to eq(%Q{<span bar='1' foo>hello</span>\n})
|
|
85
77
|
end
|
|
@@ -142,26 +134,6 @@ HAML
|
|
|
142
134
|
expect(render_string("- h = {foo_bar: 'baz'}\n%span{data: h}")).to eq("<span data-foo-bar='baz'></span>\n")
|
|
143
135
|
end
|
|
144
136
|
|
|
145
|
-
context 'with unmatched brace' do
|
|
146
|
-
it 'raises error' do
|
|
147
|
-
expect { render_string('%span{foo hello') }.to raise_error(Faml::SyntaxError)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it 'tries to parse next lines' do
|
|
151
|
-
expect(render_string(<<HAML)).to eq("<span bar='2' foo='1'>hello</span>\n")
|
|
152
|
-
%span{foo: 1,
|
|
153
|
-
bar: 2} hello
|
|
154
|
-
HAML
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "doesn't try to parse next lines without trailing comma" do
|
|
158
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError)
|
|
159
|
-
%span{foo: 1
|
|
160
|
-
, bar: 2} hello
|
|
161
|
-
HAML
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
137
|
context 'with data attributes' do
|
|
166
138
|
it 'renders nested attributes' do
|
|
167
139
|
expect(render_string(%q|%span{data: {foo: 1, bar: 'baz', :hoge => :fuga, k1: { k2: 'v3' }}} hello|)).to eq(%Q{<span data-bar='baz' data-foo='1' data-hoge='fuga' data-k1-k2='v3'>hello</span>\n})
|
|
@@ -189,90 +161,4 @@ HAML
|
|
|
189
161
|
a: __LINE__}
|
|
190
162
|
HAML
|
|
191
163
|
end
|
|
192
|
-
|
|
193
|
-
describe 'with HTML-style attributes' do
|
|
194
|
-
it 'parses simple values' do
|
|
195
|
-
expect(render_string('%span(foo=1 bar=3) hello')).to eq("<span bar='3' foo='1'>hello</span>\n")
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
it 'parses variables' do
|
|
199
|
-
expect(render_string(<<HAML)).to eq("<span bar='3' foo='xxx'>hello</span>\n")
|
|
200
|
-
- foo = 'xxx'
|
|
201
|
-
%span(foo=foo bar=3) hello
|
|
202
|
-
HAML
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it 'parses attributes with old syntax' do
|
|
206
|
-
expect(render_string(<<HAML)).to eq("<span bar='3' foo='foo'>hello</span>\n")
|
|
207
|
-
- foo = 'foo'
|
|
208
|
-
%span(foo=foo){bar: 3} hello
|
|
209
|
-
HAML
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it 'parses multiline attribute list' do
|
|
213
|
-
expect(render_string(<<HAML)).to eq("<span data-bar='2' data-foo='1'>\n<span>hello</span>\n</span>\n")
|
|
214
|
-
%span{data: {foo: 1,
|
|
215
|
-
bar: 2}}
|
|
216
|
-
%span hello
|
|
217
|
-
HAML
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it 'parses HTML-style multiline attribute list' do
|
|
221
|
-
expect(render_string(<<HAML)).to eq("<span bar='3' foo='1'>hello</span>\n")
|
|
222
|
-
%span(foo=1
|
|
223
|
-
|
|
224
|
-
bar=3) hello
|
|
225
|
-
HAML
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "doesn't parse extra parens" do
|
|
229
|
-
expect(render_string('%span(foo=1)(bar=3) hello')).to eq("<span foo='1'>(bar=3) hello</span>\n")
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it 'parses quoted value' do
|
|
233
|
-
expect(render_string('%span(foo=1 bar="baz") hello')).to eq("<span bar='baz' foo='1'>hello</span>\n")
|
|
234
|
-
expect(render_string("%span(foo=1 bar='baz') hello")).to eq("<span bar='baz' foo='1'>hello</span>\n")
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
it 'parses key-only attribute' do
|
|
238
|
-
expect(render_string('%span(foo bar=1) hello')).to eq("<span bar='1' foo>hello</span>\n")
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it 'renders string interpolation' do
|
|
242
|
-
expect(render_string(%q|%span(foo=1 bar="baz#{1 + 2}") hello|)).to eq("<span bar='baz3' foo='1'>hello</span>\n")
|
|
243
|
-
expect(render_string(%q|%span(foo=1 bar='baz#{1 + 2}') hello|)).to eq("<span bar='baz3' foo='1'>hello</span>\n")
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it 'parses escapes' do
|
|
247
|
-
expect(render_string(%q|%span(foo=1 bar="ba\"z") hello|)).to eq("<span bar='ba"z' foo='1'>hello</span>\n")
|
|
248
|
-
expect(render_string(%q|%span(foo=1 bar='ba\'z') hello|)).to eq("<span bar='ba'z' foo='1'>hello</span>\n")
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it 'raises error when attributes list is unterminated' do
|
|
252
|
-
expect { render_string('%span(foo=1 bar=2') }.to raise_error(Faml::SyntaxError)
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
it 'raises error when key is not alnum' do
|
|
256
|
-
expect { render_string('%span(foo=1 3.14=3) hello') }.to raise_error(Faml::SyntaxError)
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
it 'raises error when value is missing' do
|
|
260
|
-
expect { render_string('%span(foo=1 bar=) hello') }.to raise_error(Faml::SyntaxError)
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
it 'raises error when quote is unterminated' do
|
|
264
|
-
expect { render_string('%span(foo=1 bar="baz) hello') }.to raise_error(Faml::SyntaxError)
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
it 'raises error when string interpolation is unterminated' do
|
|
268
|
-
expect { render_string('%span(foo=1 bar="ba#{1") hello') }.to raise_error(Faml::SyntaxError)
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
it 'renders __LINE__ correctly' do
|
|
272
|
-
expect(render_string(<<HAML)).to eq("<span a='2' b='1'></span>\n")
|
|
273
|
-
%span(b=__LINE__
|
|
274
|
-
a=__LINE__)
|
|
275
|
-
HAML
|
|
276
|
-
end
|
|
277
|
-
end
|
|
278
164
|
end
|
data/spec/render/comment_spec.rb
CHANGED
|
@@ -45,17 +45,6 @@ HAML
|
|
|
45
45
|
/[[if IE]]
|
|
46
46
|
%span hello
|
|
47
47
|
world
|
|
48
|
-
HAML
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it 'raises error if conditional comment bracket is unbalanced' do
|
|
52
|
-
expect { render_string('/[[if IE]') }.to raise_error(Faml::SyntaxError)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it 'raises error if both comment text and children are given' do
|
|
56
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError)
|
|
57
|
-
/ hehehe
|
|
58
|
-
%span hello
|
|
59
48
|
HAML
|
|
60
49
|
end
|
|
61
50
|
end
|
data/spec/render/doctype_spec.rb
CHANGED
|
@@ -54,11 +54,4 @@ RSpec.describe 'Doctype rendering', type: :render do
|
|
|
54
54
|
expect(render_string('!!! 5', format: :xhtml)).to eq(%Q|<!DOCTYPE html>\n|)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
|
|
58
|
-
it 'raises error when doctype has children' do
|
|
59
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError, /nesting within a header command/)
|
|
60
|
-
!!!
|
|
61
|
-
hello
|
|
62
|
-
HAML
|
|
63
|
-
end
|
|
64
57
|
end
|
data/spec/render/element_spec.rb
CHANGED
|
@@ -22,15 +22,6 @@ HAML
|
|
|
22
22
|
HAML
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
it 'parses multi-line texts' do
|
|
26
|
-
expect(render_string(<<HAML)).to eq("<span>\n<b>\nhello\nworld\n</b>\n</span>\n")
|
|
27
|
-
%span
|
|
28
|
-
%b
|
|
29
|
-
hello
|
|
30
|
-
world
|
|
31
|
-
HAML
|
|
32
|
-
end
|
|
33
|
-
|
|
34
25
|
it 'skips empty lines' do
|
|
35
26
|
expect(render_string(<<HAML)).to eq("<span>\n<b>\nhello\n</b>\n</span>\n")
|
|
36
27
|
%span
|
|
@@ -54,31 +45,6 @@ HAML
|
|
|
54
45
|
expect(render_string('%span.foo#foo-bar.bar hello')).to eq(%Q{<span class='foo bar' id='foo-bar'>hello</span>\n})
|
|
55
46
|
end
|
|
56
47
|
|
|
57
|
-
it "doesn't skip spaces before attribute list" do
|
|
58
|
-
expect(render_string('%span {hello}')).to eq("<span>{hello}</span>\n")
|
|
59
|
-
expect(render_string('%span (hello)')).to eq("<span>(hello)</span>\n")
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
context 'with invalid tag name' do
|
|
63
|
-
it 'raises error' do
|
|
64
|
-
expect { render_string('%.foo') }.to raise_error(Faml::SyntaxError)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
context 'with invalid classes' do
|
|
69
|
-
it 'raises error' do
|
|
70
|
-
expect { render_string('%span. hello') }.to raise_error(Faml::SyntaxError)
|
|
71
|
-
expect { render_string('%span.{foo: "bar"} hello') }.to raise_error(Faml::SyntaxError)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
context 'with invalid ids' do
|
|
76
|
-
it 'raises error' do
|
|
77
|
-
expect { render_string('%span# hello') }.to raise_error(Faml::SyntaxError)
|
|
78
|
-
expect { render_string('%span#{foo: "bar"} hello') }.to raise_error(Faml::SyntaxError)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
48
|
it 'parses #' do
|
|
83
49
|
expect(render_string('#main')).to eq(%Q{<div id='main'></div>\n})
|
|
84
50
|
end
|
|
@@ -87,14 +53,6 @@ HAML
|
|
|
87
53
|
expect(render_string('.wrapper.main')).to eq(%Q{<div class='wrapper main'></div>\n})
|
|
88
54
|
end
|
|
89
55
|
|
|
90
|
-
it 'parses Ruby multiline' do
|
|
91
|
-
expect(render_string(<<HAML)).to eq("<div>\n<span>2+3i</span>\n</div>\n")
|
|
92
|
-
%div
|
|
93
|
-
%span= Complex(2,
|
|
94
|
-
3)
|
|
95
|
-
HAML
|
|
96
|
-
end
|
|
97
|
-
|
|
98
56
|
it 'parses string interpolation' do
|
|
99
57
|
expect(render_string(%q|%span hello <span> #{'</span>'} </span>|)).to eq("<span>hello <span> </span> </span></span>\n")
|
|
100
58
|
expect(render_string(<<'HAML')).to eq("<span>\nhello <span> </span> </span>\n</span>\n")
|
|
@@ -123,19 +81,4 @@ HAML
|
|
|
123
81
|
it 'renders some attributes as self-closing by default' do
|
|
124
82
|
expect(render_string('%meta{"http-equiv" => "Content-Type", :content => "text/html"}')).to eq("<meta content='text/html' http-equiv='Content-Type'>\n")
|
|
125
83
|
end
|
|
126
|
-
|
|
127
|
-
it 'parses == syntax' do
|
|
128
|
-
expect(render_string('%p== =#{1+2}hello')).to eq("<p>=3hello</p>\n")
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it 'raises error if self-closing tag have text' do
|
|
132
|
-
expect { render_string('%p/ hello') }.to raise_error(Faml::SyntaxError)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it 'raises error if self-closing tag have children' do
|
|
136
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError)
|
|
137
|
-
%p/
|
|
138
|
-
hello
|
|
139
|
-
HAML
|
|
140
|
-
end
|
|
141
84
|
end
|
data/spec/render/filters_spec.rb
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.describe 'filter rendering', type: :render do
|
|
4
|
-
it 'raises error if invalid filter name is given' do
|
|
5
|
-
expect { render_string(':filter with spaces') }.to raise_error(Faml::SyntaxError)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
4
|
it 'raises error if unregistered filter name is given' do
|
|
9
5
|
expect { render_string(':eagletmt') }.to raise_error(Faml::FilterCompilers::NotFound)
|
|
10
6
|
end
|
data/spec/render/plain_spec.rb
CHANGED
|
@@ -17,11 +17,4 @@ HAML
|
|
|
17
17
|
it 'raises error when interpolation is unterminated' do
|
|
18
18
|
expect { render_string('%span foo#{1 + 2') }.to raise_error(Faml::TextCompiler::InvalidInterpolation)
|
|
19
19
|
end
|
|
20
|
-
|
|
21
|
-
it 'raises error when text has children' do
|
|
22
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError, /nesting within plain text/)
|
|
23
|
-
hello
|
|
24
|
-
world
|
|
25
|
-
HAML
|
|
26
|
-
end
|
|
27
20
|
end
|
|
@@ -26,11 +26,4 @@ HAML
|
|
|
26
26
|
expect(render_string('%span&~ "<p>hello</p>"')).to eq("<span><p>hello</p></span>\n")
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
|
|
30
|
-
context 'without Ruby code' do
|
|
31
|
-
it 'raises error' do
|
|
32
|
-
expect { render_string('%span&=') }.to raise_error(Faml::SyntaxError)
|
|
33
|
-
expect { render_string('&=') }.to raise_error(Faml::SyntaxError)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
29
|
end
|
data/spec/render/script_spec.rb
CHANGED
|
@@ -55,27 +55,4 @@ HAML
|
|
|
55
55
|
%p= title
|
|
56
56
|
HAML
|
|
57
57
|
end
|
|
58
|
-
|
|
59
|
-
it 'parses Ruby multiline' do
|
|
60
|
-
expect(render_string(<<HAML)).to eq("<div>\n<span>\n2+3i\n</span>\n</div>\n")
|
|
61
|
-
%div
|
|
62
|
-
%span
|
|
63
|
-
= Complex(2,
|
|
64
|
-
3)
|
|
65
|
-
HAML
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it 'parses == syntax' do
|
|
69
|
-
expect(render_string('== =#{1+2}hello')).to eq("=3hello\n")
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
context 'without Ruby code' do
|
|
73
|
-
it 'raises error' do
|
|
74
|
-
expect { render_string('%span=') }.to raise_error(Faml::SyntaxError)
|
|
75
|
-
expect { render_string(<<HAML) }.to raise_error(Faml::SyntaxError)
|
|
76
|
-
%span
|
|
77
|
-
=
|
|
78
|
-
HAML
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
58
|
end
|