erbse 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: deb5a744396c2f7901a545c6c2ae480eb6e7893e
4
- data.tar.gz: 3738953bcabb49eb00ccd3db0a1feb99e39d63ac
3
+ metadata.gz: 77e9086b4307a32040e9853a10a23bef166a0a70
4
+ data.tar.gz: 584fb610b0bc9ada7d9a585be6c884b1556ba905
5
5
  SHA512:
6
- metadata.gz: bdf4146a9703c7b3d1254fa3ad865bb3391a3a97b083c1a7424462c02fa470d469a743053b50ce43eccdd51525403ad5e539c0a0dbcb5bdb41486c3893a4ef5a
7
- data.tar.gz: a4842875cae85c733a006931a84a55e5b7363a53ca62aade95c35c470c2eb07bf1356dcb3b4dd035c8b4a124cf1ee7272b0e7749cbce2b6b9d7c4beb5f0d7728
6
+ metadata.gz: 7da9ee8cc19f748691923be30243eaed954fa701be099e95d8c70648c4d94b810cbebde572f32fb5520d125529711342b6efc62afda130d5bbbea7bf0d27194a
7
+ data.tar.gz: c40f64e244d4236e4c221ef5748a714d9096c5e8e3953fced3e434ed3c0a55065b025d1f025fd839d8e93e6d49791bc617f287324424db8def34a707dac400b3
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.1.2
2
+
3
+ * Postfix conditionals are now parsed properly: code such as `<% puts if true %>` now works, thanks to @aiomaster's work.
4
+ * `<%@ code %>` now requires an explicit whitespace after the `@` for backward-compatibility.
5
+
1
6
  # 0.1.1
2
7
 
3
8
  * Introduce the `<%@ %>` tag. This is a built-in capture mechanism. It will assign all block content to a local variable but *not* output it.
@@ -1,9 +1,10 @@
1
1
  module Erbse
2
2
  class Parser
3
3
  # ERB_EXPR = /<%(=|\#)?(.*?)%>(\n)*/m # this is the desired pattern.
4
- ERB_EXPR = /<%(=+|-|\#|@|%)?(.*?)[-=]?%>(\n)*/m # this is for backward-compatibility.
4
+ ERB_EXPR = /<%(=+|-|\#|@\s|%)?(.*?)[-=]?%>(\n)*/m # this is for backward-compatibility.
5
5
  # BLOCK_EXPR = /\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
6
- BLOCK_EXPR = /\b(if|unless)\b|\sdo\s*$|\sdo\s+\|/
6
+ BLOCK_EXPR = /\sdo\s*\z|\sdo\s+\|[^|]*\|\s*\z/
7
+ BLOCK_EXEC = /\A\s*(if|unless)\b|#{BLOCK_EXPR}/
7
8
 
8
9
  # Parsing patterns
9
10
  #
@@ -48,7 +49,7 @@ module Erbse
48
49
  buffers.last << [:capture, :block, code, block = [:multi]] # picked up by our own BlockFilter. # TODO: merge with %= ?
49
50
  buffers << block
50
51
  else # <% %>
51
- if code =~ BLOCK_EXPR
52
+ if code =~ BLOCK_EXEC
52
53
  buffers.last << [:block, code, block = [:multi]] # picked up by Temple's ControlFlow filter.
53
54
  buffers << block
54
55
  else
@@ -1,3 +1,3 @@
1
1
  module Erbse
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -125,6 +125,37 @@ blubb</b>} }
125
125
  it { eval(Erbse::Engine.new.(str)).must_equal "1" }
126
126
  end
127
127
 
128
+ describe "postfix conditional in expression tag" do
129
+ let (:str) { %{<p><%= 'test' if true %></p>} }
130
+ it { eval(Erbse::Engine.new.(str)).must_equal "<p>test</p>" }
131
+ end
132
+
133
+ describe "postfix conditional in execution tag" do
134
+ let (:str) { %{<p><% foo = 'test' if true %><%= foo %></p>} }
135
+ it { eval(Erbse::Engine.new.(str)).must_equal "<p>test</p>" }
136
+ end
137
+
138
+ describe "condition in multiline expression tag" do
139
+ let (:str) { %{<p><%= if true
140
+ 'test'
141
+ end %></p>} }
142
+ it { eval(Erbse::Engine.new.(str)).must_equal "<p>test</p>" }
143
+ end
144
+
145
+ describe "multiline do-end-block in expression tag" do
146
+ let (:str) { %{<%= [1,2].map do |i|
147
+ i+1
148
+ end.join %>} }
149
+ it { eval(Erbse::Engine.new.(str)).must_equal "23" }
150
+ end
151
+
152
+ describe "multiline {}-block in expression tag" do
153
+ let (:str) { %(<%= [3,1].map { |i|
154
+ i+1
155
+ }.join %>) }
156
+ it { eval(Erbse::Engine.new.(str)).must_equal "42" }
157
+ end
158
+
128
159
  describe "<% \"string with do\" %>" do
129
160
  it { Erbse::Parser.new.(%{<% var = "do 1" %><%= var %>}).must_equal [:multi, [:code, " var = \"do 1\" "], [:dynamic, " var "]] }
130
161
  it { Erbse::Parser.new.(%{<% var = " do 1" %><%= var %>}).must_equal [:multi, [:code, " var = \" do 1\" "], [:dynamic, " var "]] }
@@ -135,7 +166,7 @@ blubb</b>} }
135
166
  it { Erbse::Parser.new.(%{<% form do |i| %>1<% end %>}).must_equal [:multi, [:block, " form do |i| ", [:multi, [:static, "1"]]]] }
136
167
  end
137
168
 
138
- describe "capture" do
169
+ describe "<%@ %>" do
139
170
  let (:str) { %{<%@ content = capture do %>
140
171
  Yo!
141
172
  <%= 1 %>
@@ -143,8 +174,12 @@ blubb</b>} }
143
174
 
144
175
  it do
145
176
  ruby = Erbse::Engine.new.(str).gsub("\n", "@").gsub('\n', "@@")
146
- code = %{_buf = []; content = capture do ; _erbse_blockfilter1 = ''; @; _erbse_blockfilter1 << (\" Yo!@@ \".freeze); _erbse_blockfilter1 << (( 1 ).to_s); @; _erbse_blockfilter1; end; _buf = _buf.join(\"\".freeze)}
177
+ code = %{_buf = []; content = capture do ; _erbse_blockfilter1 = ''; @; _erbse_blockfilter1 << (\" Yo!@@ \".freeze); _erbse_blockfilter1 << (( 1 ).to_s); @; _erbse_blockfilter1; end; _buf = _buf.join(\"\".freeze)}
147
178
  ruby.must_equal code
148
179
  end
180
+
181
+ it do
182
+ Erbse::Parser.new.(%{<%@content = capture do %><% end %>}).must_equal [:multi, [:block, "@content = capture do ", [:multi]]]
183
+ end
149
184
  end
150
185
  end
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.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-07 00:00:00.000000000 Z
11
+ date: 2017-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: temple
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  version: '0'
99
99
  requirements: []
100
100
  rubyforge_project:
101
- rubygems_version: 2.5.1
101
+ rubygems_version: 2.6.8
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Updated Erubis.