erbse 0.1.3 → 0.1.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 +4 -4
- data/CHANGES.md +4 -0
- data/lib/erbse/parser.rb +8 -7
- data/lib/erbse/version.rb +1 -1
- data/test/erbse_test.rb +63 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40d1d10b1c63ad9100e2112b150ef69e0d3a08f44767a34ee47b5ffe5483b940
|
4
|
+
data.tar.gz: e06b5f57fa13d926932949213076c01f576f5aebafb6e99b10ad9a56b97c7237
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec08209d87ebb3235f2f8fdc87d1299037af405454c62ce1165d0d2d132191247d32d82259f1c288a26105390db2f54099f7c1f7462782600d0f30850e0761c1
|
7
|
+
data.tar.gz: 55307e0004e6f6de876394840e0c23f07b077911e388789f0d1d433a63ce129b4b103e0663efaaf7cf979f9bdca3d1869788d3b1df2af98673e9517eff0ccb93
|
data/CHANGES.md
CHANGED
data/lib/erbse/parser.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Erbse
|
2
2
|
class Parser
|
3
|
-
# ERB_EXPR =
|
4
|
-
ERB_EXPR =
|
3
|
+
# ERB_EXPR = /(\n)|<%(=|\#)?(.*?)%>(\n)*/m # this is the desired pattern.
|
4
|
+
ERB_EXPR = /(\n)|<=|<%(=+|-|\#|@\s|%)?(.*?)[-=]?%>/m # this is for backward-compatibility.
|
5
5
|
# BLOCK_EXPR = /\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
6
6
|
BLOCK_EXPR = /\sdo\s*\z|\sdo\s+\|[^|]*\|\s*\z/
|
7
7
|
BLOCK_EXEC = /\A\s*(if|unless)\b|#{BLOCK_EXPR}/
|
@@ -21,7 +21,7 @@ module Erbse
|
|
21
21
|
buffers << result
|
22
22
|
match = nil
|
23
23
|
|
24
|
-
str.scan(ERB_EXPR) do |indicator, code
|
24
|
+
str.scan(ERB_EXPR) do |newline, indicator, code|
|
25
25
|
match = Regexp.last_match
|
26
26
|
len = match.begin(0) - pos
|
27
27
|
|
@@ -29,6 +29,11 @@ module Erbse
|
|
29
29
|
pos = match.end(0)
|
30
30
|
ch = indicator ? indicator[0] : nil
|
31
31
|
|
32
|
+
if newline
|
33
|
+
buffers.last << [:static, "#{text}\n"] << [:newline]
|
34
|
+
next
|
35
|
+
end
|
36
|
+
|
32
37
|
if text and !text.empty? # text
|
33
38
|
buffers.last << [:static, text]
|
34
39
|
end
|
@@ -56,10 +61,6 @@ module Erbse
|
|
56
61
|
buffers.last << [:code, code]
|
57
62
|
end
|
58
63
|
end
|
59
|
-
|
60
|
-
# FIXME: only adds one newline.
|
61
|
-
# TODO: does that influence speed?
|
62
|
-
buffers.last << [:newline] if newlines
|
63
64
|
end
|
64
65
|
|
65
66
|
# add text after last/none ERB tag.
|
data/lib/erbse/version.rb
CHANGED
data/test/erbse_test.rb
CHANGED
@@ -16,22 +16,28 @@ Text
|
|
16
16
|
|
17
17
|
it "what" do
|
18
18
|
Erbse::Parser.new.(str).must_equal [:multi,
|
19
|
-
[:static, "\n"],
|
20
|
-
[:dynamic, " true "],
|
21
|
-
[:static, "
|
19
|
+
[:static, "\n"], [:newline],
|
20
|
+
[:dynamic, " true "],
|
21
|
+
[:static, "\n"], [:newline],
|
22
|
+
[:static, "Text\n"], [:newline],
|
22
23
|
[:erb, :block, " form_for do ", [:multi,
|
23
24
|
[:dynamic, " 1 "],
|
24
|
-
[:code, " 2 "],
|
25
|
+
[:code, " 2 "],
|
26
|
+
[:static, "\n"], [:newline],
|
25
27
|
[:static, " "],
|
26
|
-
[:erb, :block, " nested do ", [:multi,
|
28
|
+
[:erb, :block, " nested do ", [:multi,
|
29
|
+
[:static, "\n"], [:newline],
|
27
30
|
[:static, " "],
|
28
|
-
[:dynamic, " this "],
|
29
|
-
[:static, "
|
30
|
-
]
|
31
|
+
[:dynamic, " this "],
|
32
|
+
[:static, "\n"], [:newline],
|
33
|
+
[:static, " <a/>\n"], [:newline],
|
34
|
+
[:static, " "],
|
35
|
+
]],
|
36
|
+
[:static, "\n"], [:newline]]]]
|
31
37
|
end
|
32
38
|
|
33
39
|
it "generates ruby" do
|
34
|
-
code = %{_buf = []; _buf << ("
|
40
|
+
code = %{_buf = []; _buf << (\"@@\".freeze); @; _buf << ( true ); _buf << (\"@@\".freeze); @; _buf << (\"Text@@\".freeze); @; _erbse_blockfilter1 = form_for do ; _erbse_blockfilter2 = ''; _erbse_blockfilter2 << (( 1 ).to_s); 2 ; _erbse_blockfilter2 << (\"@@\".freeze); @; _erbse_blockfilter2 << (\" \".freeze); _erbse_blockfilter3 = nested do ; _erbse_blockfilter4 = ''; _erbse_blockfilter4 << (\"@@\".freeze); @; _erbse_blockfilter4 << (\" \".freeze); _erbse_blockfilter4 << (( this ).to_s); _erbse_blockfilter4 << (\"@@\".freeze); @; _erbse_blockfilter4 << (\" <a/>@@\".freeze); @; _erbse_blockfilter4 << (\" \".freeze); _erbse_blockfilter4; end; _erbse_blockfilter2 << ((_erbse_blockfilter3).to_s); _erbse_blockfilter2 << (\"@@\".freeze); @; _erbse_blockfilter2; end; _buf << (_erbse_blockfilter1); _buf = _buf.join(\"\".freeze)}
|
35
41
|
ruby = Erbse::Engine.new.(str).gsub("\n", "@").gsub('\n', "@@")
|
36
42
|
# puts ruby
|
37
43
|
ruby.must_equal code
|
@@ -51,26 +57,33 @@ Text
|
|
51
57
|
}
|
52
58
|
it "what" do
|
53
59
|
Erbse::Parser.new.(str).must_equal [:multi,
|
54
|
-
[:static, "\n"],
|
60
|
+
[:static, "\n"], [:newline],
|
55
61
|
[:block, " 2.times do |i| ", [:multi,
|
56
|
-
[:newline],
|
62
|
+
[:static, "\n"], [:newline],
|
57
63
|
[:static, " "],
|
58
|
-
[:dynamic, " i+1 "],
|
59
|
-
[:
|
60
|
-
|
61
|
-
[:static, "
|
64
|
+
[:dynamic, " i+1 "],
|
65
|
+
[:static, "\n"], [:newline], [:static, " "],
|
66
|
+
[:code, " puts "],
|
67
|
+
[:static, "\n"], [:newline]
|
68
|
+
]],
|
69
|
+
[:static, "\n"], [:newline],
|
70
|
+
[:static, "\n"], [:newline],
|
71
|
+
[:block, " if 1 == 1 ", [:multi,
|
72
|
+
[:static, "\n"], [:newline],
|
73
|
+
[:static, " Hello\n"], [:newline]]],
|
74
|
+
[:static, "\n"], [:newline]]
|
62
75
|
end
|
63
76
|
|
64
77
|
it do
|
65
78
|
ruby = Erbse::Engine.new.(str)
|
66
79
|
ruby = ruby.gsub("\n", "@")
|
67
80
|
# ruby.must_equal %{_buf = []; self ; 2.times do |i| ; _buf << ( i+1 ); puts ; end; _buf = _buf.join(\"\".freeze)}
|
68
|
-
ruby.must_equal '_buf = []; _buf << ("\n".freeze); 2.times do |i| ; @; _buf << (" ".freeze); _buf << ( i+1 ); @; _buf << (" ".freeze); puts ; @; end; @; if 1 == 1 ; @; _buf << (" Hello\n".freeze); end; @; _buf = _buf.join("".freeze)'
|
81
|
+
ruby.must_equal '_buf = []; _buf << ("\n".freeze); @; 2.times do |i| ; _buf << ("\n".freeze); @; _buf << (" ".freeze); _buf << ( i+1 ); _buf << ("\n".freeze); @; _buf << (" ".freeze); puts ; _buf << ("\n".freeze); @; end; _buf << ("\n".freeze); @; _buf << ("\n".freeze); @; if 1 == 1 ; _buf << ("\n".freeze); @; _buf << (" Hello\n".freeze); @; end; _buf << ("\n".freeze); @; _buf = _buf.join("".freeze)'
|
69
82
|
end
|
70
83
|
|
71
84
|
it do
|
72
85
|
ruby = Erbse::Engine.new.(str)
|
73
|
-
eval(ruby).must_equal "\n 1
|
86
|
+
eval(ruby).must_equal "\n\n 1\n \n\n 2\n \n\n\n\n Hello\n\n"
|
74
87
|
end
|
75
88
|
end
|
76
89
|
|
@@ -78,7 +91,7 @@ Text
|
|
78
91
|
let (:str) { %{Holla
|
79
92
|
Hi}
|
80
93
|
}
|
81
|
-
it { Erbse::Parser.new.(str).must_equal [:multi, [:static, "Holla\
|
94
|
+
it { Erbse::Parser.new.(str).must_equal [:multi, [:static, "Holla\n"], [:newline], [:static, "Hi"]] }
|
82
95
|
end
|
83
96
|
|
84
97
|
# comments
|
@@ -93,12 +106,12 @@ Hi
|
|
93
106
|
} }
|
94
107
|
|
95
108
|
it do
|
96
|
-
Erbse::Parser.new.(str).must_equal [:multi, [:static, "Hello\n"], [:newline], [:static, "Hola\n"], [:newline], [:newline], [:static, "Hi\n"], [:code, " # this "], [:newline]]
|
109
|
+
Erbse::Parser.new.(str).must_equal [:multi, [:static, "Hello\n"], [:newline], [:static, "\n"], [:newline], [:static, "Hola\n"], [:newline], [:newline], [:static, "\n"], [:newline], [:static, "Hi\n"], [:newline], [:code, " # this "], [:static, "\n"], [:newline]]
|
97
110
|
end
|
98
111
|
|
99
112
|
it do
|
100
113
|
ruby = Erbse::Engine.new.(str).gsub("\n", "@").gsub('\n', "@@")
|
101
|
-
code = %{_buf = []; _buf << ("Hello
|
114
|
+
code = %{_buf = []; _buf << (\"Hello@@\".freeze); @; _buf << (\"@@\".freeze); @; _buf << (\"Hola@@\".freeze); @; @; _buf << (\"@@\".freeze); @; _buf << (\"Hi@@\".freeze); @; # this ; _buf << (\"@@\".freeze); @; _buf = _buf.join(\"\".freeze)}
|
102
115
|
ruby.must_equal code
|
103
116
|
end
|
104
117
|
|
@@ -106,14 +119,14 @@ Hi
|
|
106
119
|
it { Erbse::Parser.new.(%{Yo
|
107
120
|
<%# bla do %>
|
108
121
|
<%# end %>
|
109
|
-
1}).must_equal [:multi, [:static, "Yo\n"], [:newline], [:newline], [:static, "1"]] }
|
122
|
+
1}).must_equal [:multi, [:static, "Yo\n"], [:newline], [:static, "\n"], [:newline], [:static, "\n"], [:newline], [:static, "1"]] }
|
110
123
|
end
|
111
124
|
|
112
125
|
describe "content after last ERB tag" do
|
113
126
|
let (:str) { %{<b><%= 1 %>bla
|
114
127
|
blubb</b>} }
|
115
128
|
|
116
|
-
it { Erbse::Parser.new.(str).must_equal [:multi, [:static, "<b>"], [:dynamic, " 1 "], [:static, "bla\
|
129
|
+
it { Erbse::Parser.new.(str).must_equal [:multi, [:static, "<b>"], [:dynamic, " 1 "], [:static, "bla\n"], [:newline], [:static, "blubb</b>"]] }
|
117
130
|
end
|
118
131
|
|
119
132
|
describe "<%* %>" do
|
@@ -177,16 +190,42 @@ blubb</b>} }
|
|
177
190
|
|
178
191
|
it "parses quoted conditionals correctly" do
|
179
192
|
Erbse::Parser.new.(str2).must_equal [:multi,
|
180
|
-
[:static, "\n
|
193
|
+
[:static, "\n"],
|
194
|
+
[:newline],
|
195
|
+
[:static, " "],
|
181
196
|
[:erb, :block, " form_for do ", [:multi,
|
197
|
+
[:static, "\n"],
|
182
198
|
[:newline],
|
183
199
|
[:static, " "],
|
184
200
|
[:dynamic, " link_to \"string\", path, \"v-if\" => \"trigger\" "],
|
201
|
+
[:static, "\n"],
|
185
202
|
[:newline],
|
186
203
|
[:static, " "]
|
187
204
|
]]]
|
188
205
|
end
|
189
206
|
end
|
207
|
+
|
208
|
+
describe "newlines" do
|
209
|
+
let (:str2) { %{
|
210
|
+
abc
|
211
|
+
<%= 'foo' %>
|
212
|
+
def}
|
213
|
+
}
|
214
|
+
|
215
|
+
it "puts newlines after code" do
|
216
|
+
Erbse::Parser.new.(str2).must_equal [:multi,
|
217
|
+
[:static, "\n"],
|
218
|
+
[:newline],
|
219
|
+
[:static, " abc\n"],
|
220
|
+
[:newline],
|
221
|
+
[:static, " "],
|
222
|
+
[:dynamic, " 'foo' "],
|
223
|
+
[:static, "\n"],
|
224
|
+
[:newline],
|
225
|
+
[:static, ' def'],
|
226
|
+
]
|
227
|
+
end
|
228
|
+
end
|
190
229
|
|
191
230
|
describe "<%@ %>" do
|
192
231
|
let (:str) { %{<%@ content = capture do %>
|
@@ -196,7 +235,7 @@ blubb</b>} }
|
|
196
235
|
|
197
236
|
it do
|
198
237
|
ruby = Erbse::Engine.new.(str).gsub("\n", "@").gsub('\n', "@@")
|
199
|
-
code = %{_buf = []; content = capture do ; _erbse_blockfilter1 = ''; @; _erbse_blockfilter1 << (\" Yo
|
238
|
+
code = %{_buf = []; content = capture do ; _erbse_blockfilter1 = ''; _erbse_blockfilter1 << (\"@@\".freeze); @; _erbse_blockfilter1 << (\" Yo!@@\".freeze); @; _erbse_blockfilter1 << (\" \".freeze); _erbse_blockfilter1 << (( 1 ).to_s); _erbse_blockfilter1 << (\"@@\".freeze); @; _erbse_blockfilter1; end; _buf = _buf.join(\"\".freeze)}
|
200
239
|
ruby.must_equal code
|
201
240
|
end
|
202
241
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erbse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: temple
|